728x90
728x90
728x90

파일 링크: https://tuts4you.com/e107_plugins/download/download.php?list.17

 

Downloads / Lenas Reversing for Newbies - Tuts 4 You

 

tuts4you.com

Tutorials Index: 04. Basic + aesthetic patching

사용도구: 올리디버거 2.01

 

Lena's Reversing for Newbie 04(이하 원본파일) 분석해보자.

 

[사진 1]

원본파일을 실행하면 위와 같이 계정을 만들 수 있다. 여기선 "kim"이라는 계정을 만들어 봤다.

 

 

[사진 2]

그리고 로그인 버튼으로 로그인하면 된다.

 

 

[사진 3]

그러면 위와 같이 무언가 기능이 많은 창이 뜬다. 먼저 확인할 수 있는 외형은 빨간 박스인데, "unregistered version" 문자열을 패치하면 된다.

 

 

[사진 4]

그 다음, Help - About Pixtopianbook... 기능을 클릭하면 위와 같이 새로운 창이 뜨고 "unregistered version" 문자열을 확인할 수 있다. 여기도 패치하면 된다.

 

 

[사진 5]

왼쪽 상단의 "Add" 버튼을 클릭해서 user를 등록할 수 있는데 4명까지밖에 안된다. 무제한으로 등록할 수 있게 패치하면 된다.

 

 

[사진 6]

가운데 "Add Group" 버튼으로 group을 추가할 수 있는데 3개까지밖에 안된다. 마찬가지로 무제한으로 추가할 수 있게 패치하면 된다.

 

먼저 문자열부터 패치해보자.

 

 

[사진 7]

code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열을 확인할 수 있다. 그런데 패치해야할 문자열 갯수는 3개인데, 1개밖에 검색되지 않는다.

올리디버거의 문자열 검색 기능은 code 섹션으로 제한되기 때문에 문자열이 data / resources 섹션에 존재하면 찾지 못할 수도 있다.

 

 

[사진 8]
[사진 9]

따라서 다른 기능이나 플러그인으로 문자여를 찾아야 하는데, 메모리 맵이라는 기능이 있다. 왼쪽 상단의 View - Memory map 버튼을 클릭하거나 (Alt+m) 단축키를 누르면 위와 같이 메모리 맵을 볼 수 있다.

 

 

[사진 10]

그 다음 우클릭 - Search... 기능이나 (Ctrl+b) 단축키를 누르면 위와 같이 문자열을 검색할 수 있는 창이 뜨는데 [사진 3], [사진 4]에서 확인했던 문자열을 대소문자 구분하여 입력하면 된다.

 

[사진 11]

그러면 위와 같이 문자열을 찾을 수 있다.

 

 

[사진 12]

그리고 문자열을 패치하면 된다.

 

 

[사진 13]
[사진 14]

위와 같이 문자열들이 바뀐 것을 알 수 있다.

 

 

[사진 15]

그 다음은 user, group 갯수를 제한하는 기능을 패치해야 하는데, [사진 5], [사진 6]에서 확인했듯이 메시지 박스 함수를 호출하므로 우클릭 - Search for - All intermodular calls 기능으로 사용되는 함수를 확인할 수 있다. 모든 메시지 박스 함수에 브레이크 포인트를 설정해주자.

 

 

[사진 16]

그 다음 user를 등록하기 위해 "Add" 버튼을 누르면 위와 같은 메시지 박스가 나타날 것이다.

 

 

[사진 17]

하지만 브레이크 포인트가 설정되어 있기 때문에 위와 같이 올리디버거에서 메시지 박스를 호출하기 전까지 실행된다.

 

 

[사진 18]

스택에 저장된 값들을 보면 user 갯수 제한을 알려주는 메시지 박스임을 확인할 수 있다.

 

 

[사진 19]

RETN 명령어까지 실행하여 메시지 박스를 호출하면 위와 같은 명령어들을 볼 수 있는데 CMP 명령어로 EAX 레지스터의 값과 0x4를 비교한 후 EAX 레지스터의 값이 작으면 0x00412DEF 주소로 점프한다. 이 곳을 패치하면 된다.

 

 

[사진 20]

위와 같이 EAX 레지스터의 값에 상관없이 무조건 0x00412DEF 주소로 점프하도록 JL명령어를 JMP 명령어로 패치했다.

 

 

[사진 21]

그러면 새로운 user를 등록할 수 있다.

 

 

[사진 22]

그 다음으로, group을 추가하기 위해 "Add Group" 버튼을 클릭하면 위와 같은 메시지 박스가 나타날 것이다.

 

 

[사진 23]

마찬가지로 브레이크 포인트가 설정되어 있기 때문에 위와 같이 올리디버거에서 메시지 박스를 호출하기 전까지 실행된다.

 

 

[사진 24]

스택에 저장된 값들을 보면 group 갯수 제한을 알려주는 메시지 박스임을 확인할 수 있다.

 

 

[사진 25]

RETN 명령어까지 실행하여 메시지 박스를 호출하면 위와 같은 명령어들을 볼 수 있는데 CMP 명령어로 EAX 레지스터의 값과 0x3를 비교한 후 EAX 레지스터의 값이 작으면 0x00408B34 주소로 점프한다. 이 곳을 패치하면 된다.

 

 

[사진 26]

위와 같이 EAX 레지스터의 값에 상관없이 무조건 0x00408B34 주소로 점프하도록 JL명령어를  JMP 명령어로 패치했다.

 

[사진 27]

이제 group도 갯수 제한없이 추가할 수 있다.

728x90
728x90

+ Recent posts