코드엔진 사이트에 들어가 basic6 문제를 다운로드 받고 압축을 푼다(비밀번호 : codeengn)
Unpack을 한 후에 시리얼 번호를 찾는 문제이다.
Exeinfo Pe 프로그램으로 파일을 분석해보면 UPX패킹이 되어있다고 뜬다.
05번 문제에서 UPX 프로그램을 이용해 언패킹 했으니 이번에는 ollydbg 와 ollydump 를 이용해서 언팩해보겠다.
처음에 PUSHAD에서 f8 키로 한번 진행시켜 레지스터 값을 스택에 저장한다.
tail 점프 명령어를 실행하기전 레지스터의 값을 저장한 스택에 접근할 것이므로
0x19FF54의 주소에 하드웨어 브레이크를 건다.
Dump Window -> [Ctrl + G = ESP] -> 마우스 오른쪽 클릭 -> Breakpoint
->Hardware, on access -> Byte
그리고 F9 를 눌러 진행시키면 OEP 로 가는 tail JMP 명령어가 나오기 전에 프로그램이 멈추게 된다.
F8 키를 사용해 JMP 문까지 가게 되면 아래와 같이 OEP로 가게 된다.
이 상태에서 Ctrl+A 키를 누르게 되면?!
위 사진처럼 원래의 코드들이 보이게 된다.
이제 이코드를 다시 덤프해서 언패킹된 바이너리로 만들어보자.
이 과정은 ollydbg에 ollydump 라는 플러그인을 통해서 쉽게 할수있다.
(ollydump 플러그인이 없다면 아래의 ollydump 파일을 다운받아 plugin 폴더에 넣으면 된다.)
준비가 됐다면
Plugin -> ollydump -> Dump debugged Process 를 눌러서 오른쪽의 Dump 버튼으로 덤프해주면 된다.
이렇게 덤프한 파일을 다시 Exeinfo PE에 넣어보면
이렇게 언팩 된것을 확인할 수 있다.
분석을 위해 프로그램을 실행하고 아무 값이나 넣어봤더니 Wrong serial!!! 이라는 에러가 떴다.
그럼 Olly의 text strings를 이용해 Wrong serial 이 어디 나와있는지 확인하고 그 분기문을 분석해 보려고 하니까
떡 하니 Good job! 이라는 분기문이 나와 이동해 보았다.
그리고 위에 친절하게 사용자의 입력값과 비교하는 진짜 serial number가 나와있었고,
그 값을 입력해보니 성공!
'[Riversing] > [코드엔진] BASIC' 카테고리의 다른 글
[코드엔진] basic8 (0) | 2020.03.31 |
---|---|
[코드엔진] basic7 (0) | 2020.03.31 |
[코드엔진] basic5 (0) | 2020.03.25 |
[코드엔진] basic4 (0) | 2020.03.24 |
[코드엔진] basic3 (0) | 2020.03.24 |