본문 바로가기
OLD 2018 ~ 2021/BASIC → Hacking

180113_REVERSING(2)_pick_me

by pogn 2018. 1. 14.

Concept
Windows MFC Reversing

sub_401000이 WinMain이고 , sub_401110이 WndProc임을 알 수 있다. (노란 형광펜 부분 딱 들어가면 된다.)

일반적으로 WndProc은 두번째 인자를 메시지 번호로 받고, 
그 메시지 번호에 따라서 분기한 후, 메시지 번호에 맞는 함수를 호출하거나 
WndProc이 호출하는 함수목록과 비교하여 일치하는 경우 해당 함수로 이동할 수 있도록 되어있다. 



문제를 풀면서 느낀점

아이다의 수도코드로 어느정도 분석이 끝나고 나면, 
패치나 상세 어셈블리 분석은 olly를 같이 키고 주소 비교해가면서 하는게 빠른것 같다. 올리가 특정 주소의 메모리 보기에 더 편한 듯.




Hands-on Practice

pick_me 라는 게임은3x3개의 칸 중에,  랜덤으로 움직이는 이모티콘  을 클릭해서 
정확히 클릭한 횟수만큼 점수가 올라가는 게임이다. 빈 칸을 누를경우 점수가 0으로 돌아온다.

WndProc(sub_401110)에서 분기문에 모두 브레이크 포인트를 걸고, 이벤트를 발생시키면서 동적 분석을 하다보니
이모티콘을 클릭하여 점수를 발생시키는 메시지 번호가 0x111이라는 것을 알게 되었고, 
아래의 dword_~~ (지역변수)인 count가 해당 점수를 저장하는 변수라는 것을 알게 되었다.

(그림 1) 

(그림 1)의 line 38부분에서 어셈 코드를 보고, cmp 부분에서 esi 레지스터를 300으로 조작하여 
sub_4014A0( )으로 들어가 보았다. 

( 그림 2 ) 

해당 함수가 실행되면 아래와 같이 키가 출력된다.

( 그림 3) 


KEY : 13ar0n_Nach0r


Reference 
NONE










'OLD 2018 ~ 2021 > BASIC → Hacking' 카테고리의 다른 글

180127_REVERSING(5)_key  (0) 2018.01.28
180121_REVERSING(4)_winme  (0) 2018.01.23
180118_[REVERSING]_닷지게임_안죽게_패치하기  (0) 2018.01.19
170119_REVERSING(3)_snake  (0) 2018.01.18
170111_REVERSING(1)_whereami  (0) 2018.01.14

댓글