반응형

 

Write-up 쓴 날짜 : 2022-10-05 15:12

 

fjprodsetup.exe
1.05MB
patched_fjprodsetup.exe
0.27MB

 

주제 - Intermediate patching using Olly's "pane window"

 


분석 1

 

 

이번 프로그램은 C++로 작성된 프로그램이다.

 

프로그램을 설치하고 실행하면 위와 같이 뜬다.

 

 

위 상단 메뉴 중 Desk -> Select 메뉴를 누르면 위와 같이 "For registered users only" 문자열이 뜬다.

 

 

프로그램에 있는 Register 버튼을 누르면 위와 같이 뜬다.

 

 

그리고  OK 버튼을 누르면 "Invalid Password" 문자열이 뜬다.

 

 


분석 2

 

 

x32dbg에 프로그램을 열고, registered 문자열을 검색하면 위와 같이 나온다.

 

404700 주소와 408B9C 주소에서 "registered" 문자열이 포함된 문자열을 참조한다.

 

먼저 "For registered users only" 문자열을 참조하는 부분인 408B9C 주소로 간다.

 

 

408B73 주소에서 어떤 함수를 호출한 후 반환값이 0인지 검사하여 0이면 408B8F 주소로 점프한다.

 

그렇다면 408B73 주소에서 호출하는 함수의 반환값이 1이 되어야 한다.

 

408B73 주소와 408B7D 주소에 BP를 걸고 실행한다.

 

 

F9를 눌러 실행하다 예외를 만나서 실행이 안된다면 설정 -> 예외 -> Ignore last -> 저장 -> Ctrl + F2로 재실행하여 실행한다.

 

 

408B73 주소에서 호출하는 함수를 실행하고 나면 eax 레지스터의 al에는 00이 담긴다.

 

 

al에 0이 담긴 상태에서 test 명령이 실행되면 명령의 결과가 0이므로 ZF 플래그의 값이 1로 설정되고, 408B7D 주소의 je 명령이 실행되어 408B8F 주소로 점프하게 된다.

 

그러면 "For registered users only" 문자열이 뜬다.

 


 

esp+4 주소에 있는 1byte 데이터를 al에 담고, 해당 값이 0인지 검사하여 0이면 4046FA 주소로 점프하여 "Flash Jigsaw Producer (unregistered)" 문자열을 출력하고, 0이 아니면 "Flash Jigsaw Producer" 문자열을 출력한다.

 

 

4046E0 주소를 한 번 클릭하고, 하단을 보면 위와 같이 esp+4 = 19FF78 = 0 이라고 되어 있다.

 

스택을 보면 19FF78 주소에서 1byte는 00이다. 

 

즉, 4046E0 주소에서 실행이 멈추면 이미 0으로 채워져 있는 것이다.

 

그렇다면 위의 두 번째 사진을 보면 Call from 404710+C3, 4047E0+A0 라고 되어 있다.

 

이는 404710+C3 주소에서부터 호출이 시작되었다는 것이다.

 

 

4047D3 주소(404710 + C3)로 가서 BP를 건다.

 

 

404880 주소(4047E0+A0)로 가면 위와 같다.

 

404880 주소에 BP를 걸고 Ctrl + F2를 눌러 재실행한다.

 

그러면 4047D3 주소에서 멈추게 된다.

 

위의 부분은 프로그램 시작 시 Unregistered 문자열을 세팅하는 곳이다.

 

 

4047CD 주소에서 404640 주소의 함수를 호출한다.

 

404640 주소 내부로 들어가면 위와 같다.

 

이 함수가 Registration key를 확인하는 함수이다.

 


풀이

 

 

404640 주소의 함수에서 40465E 주소 부분을 보면 al을 0으로 만들고 함수가 끝난다.

 

그러면 al에는 0이 들어간 상태로 eax 레지스터를 스택에 넣고 4047D3 주소에서 4046E0 주소의 함수를 호출하는데 ESP+4 주소에 있는 값은 이전에 스택에 넣은 eax 레지스터의 값이므로 1byte 데이터를 가져오면 00을 가져온다.

 

결국 el의 값은 0이 되니 Unregister 문자열이 나오는 것이다.

 

 

404640 주소의 함수에서 40465E의 xor al, al 명령어를 위와 같이 mov al, 1로 바꾼 뒤 패치된 파일을 저장 후 실행한다.

 

반응형

 

그럼 위와 같이 프로그램 실행 후 Desk -> Select...를 눌렀을 때 잘 실행된다.

 

 

반응형

'전쟁 > lena tuts4you' 카테고리의 다른 글

[Lenatuts4you] 13. XoftSpy  (0) 2022.11.02
[Lenatuts4you] 12. Teksched  (0) 2022.11.02
[Lenatuts4you] 10-3. CConvert  (0) 2022.11.02
[Lenatuts4you] 10-2. ReverseMe2  (0) 2022.11.02
[Lenatuts4you] 10-1. Tut.ReverseMe1  (0) 2022.11.02

+ Recent posts