숫자를 넣을수있는 칸이 나오고 Wrong이라고 되어있다.
뭐 알맞은 값을 뜨면 통과하는 프로그램인것 같다.
디버거에 넣고 F8로 하나씩 가보면은
CALL 401000을 만나 본함수로 들어가진다.
DialogBoxParamA함수가 보이는데 실제로 저 함수 뒤에 박스창이 뜨는걸 보면은 저함수가 박스창을 띄우는 용도인것 같다.
밑에 GetDlgItemInt랑 SetDlgItemTextA도 보이는데 GetDlgItemInt는 int형 정수를 받는 입력함수인것 같고 SetDlgItemTextA는 뭘 셋팅하는것 같은데 아마 정답으로 바꿔주는 함수인걸로 유추해볼 수 있다.
일단 그냥 실행시켜서 숫자 아무거나 (123 넣어봄) 쳐보고 하면은
저 40466F란 곳에 멈춰서 오류가 나게 된다. 40466F는 EAX 주소값에 90을 넣으라는 얘기인데 지금 EAX 값을 보면은 60160646으로 없는 주소값이 나온다. 그래서 EAX값을 유심히 보면서 다시 디버깅해보겠다.
그냥 디버깅하면 DialogBoxParamA를 불러오고 바로 40466F로 가지니 GetDlgItemInt부분에 BP를 설정하고 하나씩 가보겠다.
일단 EAX값에 우리가 입력한 값이 들어가고 4084D0주소값에 EAX 값을 넣는것을 알 수 있다.
그러고 F7로 천천히가보면은 404689부분에서 4084D0값에 1을 더해주는 작업을 두번 해준다.
그다음 404674에서 넘어갈 때 4084D0주소의 값이 60160644로 바뀌는데 다른 값으로 몇번 더 돌려보면 알겠지만
+0x601605C7 해서 나온 값이다.
그다음 또 404689에서 두번 더해져서 이 값이 EAX로 가게 된다.
최종적으로 종합해보면
EAX 값 = (입력한 int값) + 2 + 0x601605C7 + 2
이렇게 되는 걸 알 수 있다.
그러면 일단 존재해야하는 주소를 입력해야하니 비어있는 주소 408000을 목표로 하겠다. 계산해보면은 0xa02a7a35
10진수로 2687138357이고 실행하면은
eax에 90을 두번 채워넣는다.
그리고 jmp코드로 00401071로 오는데 00401071는 jmp00401084로 인해 set함수를 뛰어넘어버린다.
그렇다면 00401071코드를 바꾸거나 다른 주소로 가게 해야하는데 위의 0x90은 기계어로 번역하면 NOP이 된다고 한다.
그래서 eax에 401071가 들어가게 해주면 된다.
다시 위 식으로 계산하면은 2687109798을 넣어주면 되고 이 값을 넣으면 Correct 되면서 풀리게 된다.
'Reversing > Reversing.kr' 카테고리의 다른 글
Reversing.kr Music Player 풀이 (0) | 2024.01.19 |
---|---|
Reversing.kr Easy unpack 풀이 (0) | 2024.01.14 |
Reversing.kr Easy Keygen 풀이 (0) | 2023.12.30 |