CodeEngn Challenges : Basic 10 문제 풀이
반응형

안녕하세요~


테라트입니다



10번 문제 시작하겠습니다~


URL : https://www.codeengn.com/challenges/basic/10




OEP와 OPCODE를 합친 값을 찾으라고 하네요


OPCODE는 각 명령어에 부여된 고유한 숫자를 의미합니다


프로그램을 동적으로 실행시켜보겠습니다


별다른 입력도 안되고 그냥 실행만 되네요,,,



exeinfo를 통해 패킹여부를 확인해보았습니다


Aspack으로 패킹이 되어 있네요


UPX와 비슷한 구조로 되어 있는 패커입니다


MUP를 시도 해보겠습니다~


쉬우니까 잘 따라와주세요!


※ MUP 및 패킹 개념 잡기 : https://qufdln.tistory.com/65



PUSHAD 명령어를 F8을 통해 넘겨주고 CALL 문까지 진행해주고 ESP 값에서

'Follow in Dump' 를 눌러주세요




덤프 영역에서 Hardware Breakpoint 를 걸어줍니다



F9를 눌러 BreakPoint 까지 진행을 해주면 다음 분기문에 이르게 됩니다


RETN 부분까지 F8을 통해 계속 진행해주시면 다음과 같은 OEP에 도착하게 됩니다!


OPCODE 부분에 55 보이시죠?


PUSH ESP의 OPCODE가 55입니다! 그래서 OEP 임을 추측할 수 있죠



코드가 암호화 되있어서 그런데 


Ctrl + A를 눌러서 코드 복원을 시켜줍니다..



완벽 복원이 안되네요;;;


이 부분에서 덤프를 떠줍니다 그리고

Import REC 프로그램을 이용해 덤프를 뜨겠습니다


Import REC 프로그램 사용법 : https://qufdln.tistory.com/65


사진을 참고해서 따라오시면 되겠습니다!






Import REC 프로그램을 이용해 덤프를 성공적으로 뜨셨다면 다음과 같이 원래 프로그램과 똑같이 동작하게 될 겁니다!



하지만 패킹은 해제 된 것을 확인할 수 있고요



문자열을 확인해보겠습니다~



"등록 성공" 메시지를 갖는 부분을 찾아야 합니다


영어로 되어 있으니 눈치로 찾습니다



더블클릭해서 그 곳으로 가보겠습니다



바로 위에 있는 분기문의 OPCODE를 읽어주면 됩니다~


문제에서 제시한 값은 OEP+OP코드 = 004458347555


정답 확인해보겠습니다~



짠-



맞네요


수고하셨습니다~~~


반응형

댓글,

테라트

Since 2018.07.03 / IT 관련 정보, 일상의 공유를 위한 블로그