[Reversing.kr] Replace

숫자만 입력 가능한 것 처럼 보이고 막 입력하고 Check를 누르니 프로그램이 죽습니다.
Ollydbg로 헤집고 다니니 401000에 진입해서 비로소 창이 뜬다는 것을 알 수 있었고, 그 밑에 있는 GetDlgItemInt 함수에 breakpoint를 걸고 각 레지스터의 값을 살펴보니

eax에 내가 입력한 수가 들어가고, 그 값을 4084D0번지에 씁니다. 코드영역인 것 같네요. 이후에 40466F번지의 함수로 이동합니다. 따라가봅시다.(F7)

중간에 뜬금없이 DB 81도 껴있고 코드가 개떡같네요. 일단 천천히 흐름을 따라가보면
4084D0번지에 쓴 값을 2 더해주고(정확히는 INC를 2번 함)

갑자기 40467E번지의 코드가 이렇게 됩니다. 참으로 이해가 안가는 현상이지만 일단 순응하고 코드를 계속 따라가보겠습니다.
쭉 따라가 다시 404684번지에 도달하므로 4084D0번지의 값이 또 2 더해집니다. 그러고나면 40106C번지로 돌아오는데, 그 곳에서는 404690번지로 점프합니다. 점프해서 가보면 4084D0 번지의 값이 괴상하게 변해있습니다.

?????? 하.. 이게 뭔가요.. 거친거라고는 40467E~404683번지의 저 이해할 수 없는 명령밖에 없는데 4084D0번 주소의 값이 이상하게 변해있습니다. 아무리 생각해도 원인은 단 하나, 40 00 EB 60 90 .. 저 기계어와 대응되는 어셈블리 코드를 Ollydbg가 이상하게 알려줬다고밖에 생각할 수가 없습니다. 어쩔 수 없이 404684번지의 값이 2 더해진 이후의 여러 값들을 확인했습니다.


네, 아무런 도움이 되지 않네요.

이것저것 찾아본 결과, 601605C7가 더해진다고는 하는데 도저히 이해가 안갑니다. 나중에 다시 확인을 해봐야할 것 같습니다. 아무튼 계속 진행하겠습니다.

내가 입력한 값 + 2 + 601605C7 + 2 한 주소의 값을 90으로 만듭니다. 그러면 이제 구조 파악은 됐는데, 그래서 문제에서 바라는게 뭔가요..? 라고 생각해본다면 

여기서 ascii "H4`@',0 이라고 된 부분이 사실은 PUSH "00406034"입니다. 406034번지에는 Correct!가 있습니다. 여기서도 Ollydbg가 이상하게 동작하네요. 그러면 Correct! 를 Dialog창에 보이기게끔 해야할텐데, 그러기 위해서는 401071번지의 JMP가 NOP이 되면 되겠습니다.

401071 = INPUT + 601605CB
INPUT = FFFFFFFFA02A0AA6 (=unsigned int 2687109798)

뭐 어찌저찌 맞긴 했다만 이해가 안가는 부분 투성이네요.




'워게임 > Reversing.kr' 카테고리의 다른 글

[Reversing.kr] Direct3D FPS  (0) 2017.12.30
[Reversing.kr] Position  (0) 2017.12.30
[Reversing.kr] ImagePrc  (0) 2017.12.29
[Reversing.kr] Music Player  (0) 2017.12.29
[Reversing.kr] Easy Unpack  (0) 2017.12.29
[Reversing.kr] Easy Keygen  (0) 2017.12.29
  Comments