티스토리 뷰
[IDA] Decompilation failure: xx: positive sp value has been found
hackability 2014. 2. 25. 10:37최종 수정: 2014-02-25
안녕하세요. Hackability 입니다.
오늘 포스팅 할 내용은 IDA에서 디컴파일시 발생하는 "positive sp value has been found" 에러에 대한 내용입니다.
IDA에서 F5를 통해 디컴파일시 다음과 같은 에러 메시지가 발생할 수 있습니다.
위 내용은 스택 포인터가 양수 값을 갖는다는 에러 인데요. 스택 메모리 구조 상 지정된 주소는 초기 스택 포인터 보다 낮은 주소에 있어야합니다. (보통 변수를 선언하면 sub esp, 10h 등과 같이 말이죠)
그러므로, 이 에러 메시지가 뜨는 이유는 지정된 주소가 초기 스택 포인터보다 큰 주소에 있기 때문에 발생하는 에러 메시지 입니다.
먼저 예제를 확인해보도록 하겠습니다. 제가 디컴파일 에러가 발생한 위치는 다음과 같습니다.
그런데 이렇게 보면 스택 포인터의 위치를 찾기 어렵기 때문에 [Option] -> [General] 으로 들어 간 뒤, Display disassembly line parts 에서 Stack pointer를 체크해줍니다.
그러면 다음과 같이 화면 왼쪽에 스택 포인터 변위에 대해 확인할 수 있습니다.
위에서 보시면 text:0040116F위치에서 -58 값을 확인하실 수 있습니다. 이 부분에서 에러가 발생하는데요. 이 위치의 명령은 sub esp, 80h 입니다. 이 명령의 윗 부분인 add esp, 80h로 올라가서 [Alt + k] 를 누르면 다음과 같은 창이 나타납니다.
여기서 우리가 해야 할 것은 -58 의 값을 최소 0 이상으로 맞춰야 합니다. 정확하게 스택 포인터를 맞추려면 전후 사정을 모두 파악해야 하지만 그렇기 힘들기 때문에 추후에 코드 변경이 생길 수 있습니다. 저의 목적은 저 코드를 디컴파일 하는 것이기 때문에 일단 스택의 변위를 맞춰보도록 하겠습니다.
Current SP value가 -0x28 로 나와 있기 때문에 입력 값을 0x28 로 입력하고 ok 를 누르면 다음과 같이 sub esp, 80h의 위치의 스택 포인터가 00 으로 변경됨을 알 수 있습니다.
그리고 F5를 누르시면 소스 코드가 정상적으로 나오는 것을 확인하실 수 있습니다.
'FAQ' 카테고리의 다른 글
[IDA] Decompilation failure: FFFFFFFF: wrong basic type sizes in compiler settings (0) | 2014.02.04 |
---|---|
프로퍼티 리스트파일(plist) 시그니처와 관련 툴 (0) | 2014.01.27 |
WS2_32.dll, wsock32.dll Ordinal 이름에 대한 실제 함수 이름 (0) | 2014.01.22 |
CIL (Common Intermediate Language) 명령어 집합 (0) | 2014.01.20 |
- Total
- Today
- Yesterday
- 윈도우즈 익스플로잇 개발
- heap spraying
- IE 11 UAF
- WinDbg
- IE 11 exploit development
- IE 10 리버싱
- 쉘 코드 작성
- IE 10 God Mode
- 힙 스프레잉
- School CTF Writeup
- TenDollar
- 쉘 코드
- shellcode writing
- UAF
- expdev 번역
- Mona 2
- data mining
- 2014 SU CTF Write UP
- 데이터 마이닝
- IE 10 익스플로잇
- School CTF Write up
- TenDollar CTF
- IE 11 exploit
- 2015 School CTF
- CTF Write up
- IE 10 Exploit Development
- shellcode
- IE UAF
- Use after free
- Windows Exploit Development
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |