Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

code engn basic 10 본문

Reversing

code engn basic 10

kaka09 2017. 8. 1. 16:52

[사진]1-1


OEP를 언급하는것을 보아 해당 문제또한 패킹이 되어 있는 문제인것 같다. 이전 문제들과 똑같이 upx.exe를 이용하여 언팩을 시도하였으나..



[사진]1-2


upx로 패킹된 프로그램이 아니라고 한다.. 그래서 PEID 라는 툴을 사용하여 해당 문제가 어떠한 알고리즘으로 패킹 되었는지 확인하였다.



[사진]1-3


PEID로 확인결과 ASPack 이라는 알고리즘으로 패킹이 된 것을 확인할 수 있다. 나중에 따로 upx나 ASPack의 차이점 그리고 패킹 과정에 대해서도 포스팅을 다뤄야 겠다. 지금은 문제풀이에 집중 하자.. 



[사진]1-4



직접 올리 디버거로 디버깅 해본 결과 UPX 알고리즘 처럼 ASPack도 PUSHAD->POPAD으로 거치는 과정은 비슷했다.  다만 해당 해당 문제에서는 JMP문 대신 RETN이 존재하고 RETN 이전에 특정한 값을 스택에 PUSH 하는것을 알 수 있다. 이는 RETN이 스택에 PUSH한 00445834로 JMP 하는 의미를 갖는다. 즉 OEP=00445834 라고 할 수 있는 부분이다.



[사진]1-5


OEP로 점프 한 결과 OEP로 접근 못한건지 아니면 OEP 자체의 문제인지 한참을 헤매다 구글링을 통해 Olly dump+LordPE 를 이용해서 프로그램을 리빌드 시켜야 한다는것을 알았다. 그래서 OEP로 진입 후 Olly dump를 이용하여 다음과 같이 덤프를 시도하였다.





[사진]1-6


OEP로 진입 후  마우스 우클릭-> Dump debugged process 클릭후 [사진]1-6 처럼 덤프를 진행하여 덤프 파일을 생성한다.


0.zip



[사진]1-7



위에 첨부한 압축파일을 다운 받아 LordPE.exe 실행->RebuildPE 클릭-> 프로그램 선택 하고 OK를 누르면 올리 디버거로 덤프된 프로그램이 리빌드가 완료된다. 그럼 이제부터 리빌드가 완료된 프로그램을 올리 디버거로 분석 해보자




[사진]1-8


리빌드 시킨 프로그램을 올리 디버거로 확인 해보니 정상적으로 로드 됬음을 확인 할 수 있었다. 이제부터 분석을 시도해 보자 문제에서는 "등록성공" 으로 분기하는 OPCODE를 찾으라고 했다. 그렇다면 "등록성공"과 관련된 문자열이 프로그램 어딘가에 존재 할 것이다. 따라서 올리 디버거의 문자열 찾는 기능을 이용하여 "등록성공"과 관련된 문자열을 찾아 보았다.





[사진]1-9


탐색 결과 "Registered .... well done!" 이라는 문자열이 보였다. 아마 딱 봐도 해당 문자열이 "등록성공" 키워드임을 알 수가 있다. 고로 해당 문자열을 사용하는 영역으로 이동 해보았다.




[사진]1-10



004450C 영역에서 해당 문자열을 인자로 사용하는것을 알 수 있다. 그리고 위로 좀만 올라가면 JNZ SHORT A 004452B 영역으로 분가히는 코드를 살펴볼 수 있는데 여기서 ZERO 플래그가 1 OR 0 이냐에 따라서 등록이 되는지 안되는지의 여부가 갈린다고 볼 수 있다.





'Reversing' 카테고리의 다른 글

code engn basic 12  (0) 2017.08.02
code engn basic 11  (0) 2017.08.01
code engn basic 9  (0) 2017.08.01
code engn basic 8  (0) 2017.08.01
code engn basic 7  (0) 2017.07.31