[Reversing.kr] Easy Crack

eigenkyeong·2022년 2월 24일
0

리버싱

목록 보기
6/7

실행파일을 실행해보니

패스워드를 입력해야하는 창이 떴다.



올리디버거로 열어보았다.



함수들을 살펴보았다.

MessageBoxA를 두 개 발견했고




MessageBoxA가 호출된 곳으로 이동해보니

성공한 경우와 실패한 경우에 대한 코드가 있었다.



패스워드가 틀렸을 경우 출력되는 MessageBox로 JMP하도록 하는 분기문을 찾아보았다.

00401135 주소를 확인해보면 총 4개의 분기문에서 패스워드를 검사한다는 것을 알 수 있다.
-> 004010B5, 004010CD, 0040110B, 00401112



004010B5부터 보면

ESP+5와 61을 비교한다.


004010B0에 breakpoint를 걸고 실행한 다음


abcd를 넣어보았다.


ESP+5가 62('b')인 것을 알 수 있고 내가 입력한 패스워드의 두 번째 자리를 의미한다는 것을 확인할 수 있다.

ESP+5와 61을 비교하기 때문에 패스워드의 두 번째 자리가 'a'여야 한다는 것을 알 수 있다. (0x61=97이고 아스키코드 97은 'a')



두 번째 자리에 a를 넣고 다시 실행해보았다.

xabcd를 넣어주었다.




한 줄씩 코드를 실행해보면

인자로 "5y"와 ECX를 넣고 호출하는 함수를 하나 발견할 수 있다.
ECX 값을 살펴보면

내가 넣었던 패스워드 'xabcd'중 'bcd'라는 것을 확인할 수 있다.

대충 bcd자리에 5y가 들어가야 될 것 같다고 유추해볼 수 있지만
함수안으로 들어가보았다.

이런 함수였다.


'b'와 '5'를 비교하는 것을 볼 수 있다.


다시 실행하여 이번에는

xa5yqwerty를 넣어주었다.


두 번째 분기문까지 통과할 수 있었다.

세 번째 분기문에서는 "R3versing"과 내가 입력한 패스워드에서 "5y" 뒷부분인 "qwerty"를 비교한다.

따라서 _a5yR3versing을 패스워드로 넣어야한다.



첫 글자에는 x를 넣어 패스워드로 입력해보았다.



세 번째 분기문까지 통과했다.

마지막 분기문에서 ESP+4와 45를 비교하는데 ESP+4가 x인 것을 보아 내가 입력한 패스워드의 첫 글자임을 알 수 있었다.
0x45 = 69이고 아스키코드 69는 'E'이므로 첫 글자로 E가 들어가야한다.



따라서 패스워드는


0개의 댓글