해당 바이너리를 ida로 까서보면 안티 디스어셈블리가 적용되어 있어 헥스레이 및 어셈블리 정적분석을 하기가 까다로웠다.


적용되어있던 안티 디스어셈블리 방식은 아래와 같았다.



jz short near ptr loc_4009f3+2


위 명령어를 보면 4009f5 주소를 점프를 하는데 ida에서는 해당 주소부터 디스어셈블하여 명령어를 해석해 주지 않고 있었다.


이를 해결하기 위해 동적분석을 진행했고 jz short near ptr loc_4009f3+2 명령어 실행 후  4009f5 주소로 점프했을때 ida에서 data 값으로 인식된 바이트 코드를 code로 인식하도록 convert해서 정상적으로 디스어셈블 하도록 해줬다.


이런식으로 계속 안티 디스어셈블을 우회해서 동적분석 진행하다보면 시리얼 비교 루틴이 나오는데 비교 로직은 간단했다.


flag_front = "EZ9dmq4c"

flag_end = ""

for i in range(0,len(flag_front)):

    if i==4:

        flag_end += chr(0xb4-ord(flag_front[i]))

    elif i==5:

        flag_end += chr(0xaa - ord(flag_front[i]))

    else:

        flag_end += chr(0x9b-ord(flag_front[i]))


print "FLAG = " + flag_front + flag_end[::-1]


FLAG = EZ9dmq4c8g9G7bAV













'CTF > Writeup' 카테고리의 다른 글

0CTF 2016 Quals : boomshakalaka  (0) 2019.03.14
SSCTF 2016 : Re1  (0) 2019.03.13
35C3 CTF 2018 COREBOT  (0) 2019.02.26
Evlz CTF 2019 Smol-Big  (0) 2019.02.20
Codegate CTF 2019 KingMaker  (0) 2019.02.16
블로그 이미지

JeonYoungSin

메모 기록용 공간

,