리버싱 Lenas Reversing for Newbies 10

사용 버전; x32dbg Mar 10 2019


10번 문제를 풀어보겠습니다.

문제는 여기서 다운로드할 수 있습니다.
https://tuts4you.com/download/category/17//

'Tut.RevereseMe1.exe'를 실행해 봅시다.
참고로 실행을 위해선 msvbvm50.dll 파일이 필요합니다.
구글에서 다운로드하시면 될 거예요.





Nag Screen이 나옵니다.











'잔소리를 없애고, 올바른 등록키를 찾아라'가 리버싱 목표인가 봅니다.

'확인'을 누릅니다.











해당 창이 나옵니다.




'Register me!'를 누르면, 아래의 창이 나옵니다.







'Nag?'를 누르면, Nag Screen이 나옵니다.













자, 리버싱을 시작해봅시다.





'모든 모듈' - '모듈간 호출'을 눌러줍니다.







필터에 'box'를 적어서, MessageBox 관련 함수를 모두 찾습니다.

'F2'로 Break Point를 설정합니다.









Entry Point를 찾습니다.







Entry Point의 위의 구조는 VB 언어로 만들어진 프로그램입니다.

'F9'를 눌러 프로그램을 실행합니다.



































'740AEE13' 주소에서 Break Point가 걸립니다.
'F8'로 실행하면, 메시지 박스가 나옵니다.





잘 찾은 것 같습니다.



















'740AEE13' 주소의 'CALL DWORD PTR [<&MessageBoxIndirectA>]가 끝난 다음에 EAX가 1로 설정된 것이 보입니다.
EAX 값 1은 'Nag Screen'에서 확인을 눌렀을 때의 값입니다.(취소는 2)



EAX 값이 변해야지 MessageBox의 함수 콜이 처리가 완료됩니다.
'Ctrl + F9'와 'F8'로 EAX 값이 변할 때까지 계속 진행합니다.


'740AEC81' 주소도 아닙니다.







'740AEFAF' 주소도 아닙니다.







'740A6394' 주소도 아닙니다.




'740D414D' 주소도 아닙니다.






'402D03' 주소도 아닙니다.








'7401E5A9' 주소에서 EAX는 0이 됩니다.








찾았습니다.

즉, '7401E5A7'주소의 'CALL EAX'가 실제적인 MessageBox 호출 부분인 것으로 보입니다.

'7401E5A7'과 '7401E5A9' 주소에 Break Point를 걸어주고, 재시작을 합니다.(Ctrl + F2)







'7401E5A7' 주소 시작하기 전 스택은 '0018FAD0'입니다.









'7401E5A7' 주소를 실행한 뒤의 스택은 다음과 같습니다.

'0018FAD4'







'?'를 눌러 계산기를 꺼냅니다.







ESP의 값이 4 만큼 증가한 것이 보입니다.
즉, 4 바이트를 정리했습니다.
함수 호출 규약이 stdcall이므로, Call에 사용된 변수가 정리가 된 것으로 보입니다.


'Ctrl + F2'로 재실행합니다.
'7401E5A7' 주소 'CALL EAX' 내부로 들어갑니다.

들어가다 보면, '00402C17' 주소가 나옵니다.














여기서 바로 스택 정리와 반환을 합니다.

'Spacebar'를 누르고 'RET 0x4'로 수정합니다.







이제, 메시지 박스는 제거되었습니다.


Regcode 값을 찾아야 합니다.
다음을 찾기 - 모든 모듈 - 문자열 참조를 누릅니다.

'Sorry ! Wrong registration code !'를 찾습니다.









Regcode에 'Jaehwa'를 입력합니다.











그리고 적당한 분기점에 Break Point를 걸어주고, 실행하면, 입력한 글자와 이상한 글자가 보입니다.


입력한 'Jaehwa'와 이상한 글자'I'mlena151'이 PUSH된 후, vbaStrCmp란 함수를 호출합니다.
아무래도 'I'mlena151'이 Regcode인 듯합니다.


'Ctrl + P'로 패치를 해줍니다.











'.exe'형식으로 저장한 뒤 실행합니다.

Regcode를 입력합니다.



Lenas 10 번 리버싱을 마칩니다.



끝.




카테고리: Reversing

댓글

이 블로그의 인기 게시물

Python urllib.parse.quote()

Python OpenCV 빈 화면 만들기

tensorflow tf.random.uniform()

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)

Android Minimum touch target size

Python bs4.SoupStrainer()

KiCad 시작하기 4 (기존 회로도 수정 및 추가)

음악 총보(Score), 파트보(Part)

tensorflow tf.expand_dims()