[주의] 해당 글에는 풀이 및 정답이 적혀있습니다.
스스로 해결하고 싶으신 분들은 문제를 해결한 후, 이 페이지를 참고하셨으면 합니다 : )
Easy_UnpackMe.exe 파일과 함께 준 ReadMe.txt를 읽어보면, OEP를 찾으라고 합니다. 디버거로 열면 Entry Point를 찾을 수 없다는 경고 메세지를 띄어줍니다.
일반적인 프로그램의 모양새는 아닌 거 같습니다. 문제 이름에서 유추할 수 있듯이 패킹된 프로그램 같습니다. 문제 자체만 해결하면 크게 어렵지 않지만, 조금의 분석을 하면서 프로그램을 디버깅해봅시다.
첫 번째 반복문입니다. DS:[ECX]와 10,20,30,40,50을 XOR 연산하고 ECX를 1 증가시키고 ECX와 EDX를 비교해서 같을 때까지 반복하고 같다면 0x0040A0C3으로 점프합니다. ECX의 초기값은 0x409000이였고, EDX값은 0x4094EE입니다. 브레이크 포인트를 이용해서 넘어갔습니다.
이후에도 계속 반복문을 돌면서 어떤 작업을 수행하는데, 자세히 분석하지 않았고 넘어갔습니다.
위의 그림은 전에 설명했던 반복문과 유사합니다. ECX가 가리키는 값과 10, 20, 30, 40, 50을 XOR 연산합니다. 이때 0x4010??에서부터 0x4011?? 부분을 연산하는데 이 반복문이 끝나고 마지막에 JMP 0x401150으로 점프합니다. 해당 부분에서 OEP를 언패킹하는 작업을 수행합니다.
그리고 점프하면 이렇게 OEP를 찾을 수 있습니다. 처음에는 디버거에서 제대로 분석이 안되서 디스어셈블러가 정확하지 않게 나오는데 [Analysis] - [Analyse code] 기능을 통해 위의 크림처럼 분석할 수 있습니다.
'Security' 카테고리의 다른 글
[Reversing.kr] ImagePrc (0) | 2021.04.06 |
---|---|
[Reversing.kr] Replace (0) | 2021.04.01 |
[Dice CTF 2021] flippidy (0) | 2021.03.01 |
[Dice CTF 2021] babyrop (0) | 2021.02.23 |
[pwnable.kr] ascii_easy (0) | 2021.02.21 |