실행 파일을 실행 시키면 위와 같은 창이 나온다.
아이다에서 문제 파일을 열어보았는데 바로 correct 문자열이 보였다.
근데 이상한 점이 있다.
해당 함수로 이어지는 부분이 없었다.
단순히 생각해서 위 분기문에서 이 함수로 이어지게끔 해주면 되지 않을까? 싶었다.
우선 어셈블리어를 확인해보자.
나머지는 다 알겠는데 nop 개념이 좀 헷갈려서 넘어가려다가 많이 나와서 다시 정리했다.
NOP
- 아무런 동작을 하지 않는 코드이며 기계어로 "0X90"이다.
쉘코드 분석할 때 90909090 ... 값이 쉘코드의 시작을 의미한다고 했는데 이것도 그런건가?
아무튼 위에서 부터 정리 해보자.
GetDlgItemInt 함수를 호출하고 4084D0에 eax 값을 넣어준다.
40466F 함수를 호출하고 그 뒤로 404690 함수도 호출한다.
또 401071 함수를 호출하고 그 뒤로 401084를 호출한다.
correct!를 출력하려면 401071 함수를 해야하는데 딱히 호출하는 곳이 없다.
그래서 그냥 윈도우로 이동해서 실행해봤다.
이렇게 구성되어 있다.
아이다에서 확인한 것과 동일한 구조이다.
0000을 입력했더니 위에서 호출되었던 40466F에 90 이라는 값이 들어간다.
그런데 여기서 프로그램이 더 실행되지 않고 멈췄다.
90이라는 값이 들어간 이후로 어딘가 오류가 발생한 것 같다.
아이다에서 확인한 실행 구조를 다시 한 번 확인 하기 위해 메인? 부분을 다시 살펴 봤다.
캡쳐 내용에서는 잘렸지만, 프로그램 실행 입력 값이 eax에 저장된다.
저장된 eax 값을 4084D0 주소로 이동한다.
그리고 40466F 주소를 호출한다.
40466F를 타고 들어오면 위와 같은 내용을 확인할 수 있다.
1. [4084D0] = 0
2. [406016] = 619060EB -> 이건 값이 아니라 opcode임. 코드가 바뀌는 부분.
3. [4084D0] = 1
4. [4084D0] = 2
5. [4084D0] = 601605C9 (+601605C7로 인해)
6. [4084D0] = 601605CA (+1)
7. [4084D0] = 601605CB (+2)
이렇게 연산 된다.
즉, 입력한 값에 601605C7+4만큼 더해진다.
근데 마지막에 eax 값을 확인해보면, eax 값이 6017E80B 인 것을 알 수 있다.
- 입력값 + 0x601605c7 + 4 = 0x401071
이걸 계산해보면
입력값은 0xA02A0AA6 인 것을 알 수 있다.
0xA02A0AA6 = 2687109798(10)
와 풀었다.
'Reversing' 카테고리의 다른 글
[Reversing.kr] Ransomeware (0) | 2023.05.28 |
---|---|
[Reversing.kr] Easy ELF (0) | 2023.05.28 |
[Reversing.kr] Music player (0) | 2023.05.26 |
[Reversing.kr] ImagePrc (0) | 2023.05.26 |
패킹 | 언패킹 (0) | 2023.05.22 |