본문 바로가기

[Riversing]/[코드엔진] BASIC

[코드엔진] basic6

코드엔진 사이트에 들어가 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 폴더에 넣으면 된다.)

 

OllyDump v3.00.110.rar
0.06MB

 

준비가 됐다면
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