본문 바로가기

Wargame/▷ Reversing.kr

[Reversing.kr] Twist1

하.. 꽤나 오래 잡고있었던 문제가 드디어 풀렸다.
해당문제는 안티디버깅 문제로 여러 안티디버깅 기법을 씀과 동시에 debug 하면서 복호화가 진행하기 때문에 
한줄한줄 분석했다. 


[ReadMe]
Twist1.exe is run in x86 windows.


32bit 창에서만 실행된다고 친절하게 알려준다.

그래서 따로 32bit windows xp 환경을 vmware로 구축하여 ollydbg 로 문제를 해결했다.
(괜히 Windows 10 64bit 환경에서 분석하려다가 잘 안되서 포기하고 xp설치했다)


일단 첫번째로 여기서 복호화? 한다.



이렇게 짠하고 코드가 복호화되는데 저 두 함수에서 안티디버깅을 체크한다. 
간단히 우회해주고 넘어가면된다.

저기서 가끔 opcode 랑 DB data만 뜨고 어셈블리 코드는 안나오는 경우가 있는데
ollydbg의 Analyse code 기능을 이용하면 코드보인다.


패킹이 정상적으로 풀리고 OEP가 나왔다. 
여기서 dump 파일 하나 뜨고 진행하면 훨씬 수월하다.
하지만 패킹이 풀려도 안티디버깅 기법이 존재한다..



계속 트레이싱 하다보면 저렇게 ZwQueryInformationProcess 함수가 반겨준다.
안티디버깅을 체크하는 함수인데 디버거가 프로세스에 붙어있을 때 0xffffffff 를 반환하므로 0으로 우회해주면 된다.
다음에 GetThreadContext 함수로 하드웨어 브레이크 포인트가 있는지 없는지 확인한다.
 
이제 대망의 비교루틴이 등장하는데 여기서 문자 비교할때 함정 하나 있다..
비교연산은 주로 ror, xor, rol 등으로 연산한 후에 CMP로 맞는지 확인하는데 이제까지 다른문제들 풀어봤으면
별탈없이 key값을 구할 수 있다. 


문제 풀면서 느낀점은 IDA에 너무 기대지 말자는 것.. 어셈 분석 능력이 부족하다는 걸 뼈저리게 느꼈다. 


'Wargame > ▷ Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Multiplicative  (0) 2018.01.12
[Reversing.kr] WindowsKernel  (0) 2018.01.12
[Reversing.kr] Flash Encrypt  (0) 2018.01.08
[Reversing.kr] HateIntel  (0) 2017.12.30
[Reversing.kr] Position  (2) 2017.05.17