C언어의 const 선언이 과연 리버싱에서 또한 값을 변경못하게끔 만들수 있는가? //정말 쓸모 없는 호기심에서 시작된 이번 게시글 |
즉, const int MAX=100; //MAX는 상수! 따라서 값의 변경 불가! 바로 여기서 나의 호기심을 자극하였다. 저 문장을 보는 순간 "그럼 값의 변경이 불가능하다는 것은 Olly로 들어가서 그 값을 바꾸는것이 안된다는 것인가? Visual Studio를 통한 컴파일 |
#include <stdio.h> #include <stdlib.h> main() { const int a=10; printf("%d\n", a);
if (a == 10) printf("Fail..It is ten...\n"); else printf("Good!! Not 10!!"); //a의 값이 변경 가능한지 확인하기. 10이 아니면 성공문으로 간다. system("pause"); } |
OllyDebugger로 열기 |
위에서 만든 파일을 올리디버거를 통해 열고, 그 후 성공과 실패를 나누는 지점인 CMP 비교지점을 찾기위해 F8로 접근..접근..접근....접근......안티디버깅으로 인한 실패..ㄴ이임ㄴ오니 IsDebugPresent 2개를 발견하고 TEST EAX,EAX >> XOR EAX,EAX로 변경시키므로 적용안되게끔 변경. 그후 다시 찾는다. 비교문은 EBP-8에 저장된 값과, 0A를 비교하여 성공문과 실패문의 갈림길. EBP-8에는 처음의 컴파일한 10(0A)의 값이 있었다. 덤프창으로 가서 Control+E를 통해 값을 변경 >> 0B >> ??되네 |
결론 |
IsDebugPresent 와 Entry Point Alert 등의 밑의 경고문등 방해요소가 있었지만 Module 'ConsoleA' has entry point outside the code (as specified in the PE header). Maybe this file is self-extracting or self-modifying. Please keep it in mind when setting breakpoint! 결국 나의 궁금증은 해결 >> 10(0A)를 11(0B)로 변경할수 있다. |
const 선언은 값을 변경하는 벙법에 제한을 두지만 결국 리버싱으로는 풀수 있는것 같다.
'Reversing > Theory' 카테고리의 다른 글
PE File Format 0x04 (0) | 2015.01.13 |
---|---|
IDA PRO 단축키 (0) | 2015.01.13 |
PE FILE Format 0x03 (0) | 2015.01.10 |
PE FILE Format 0x02 (0) | 2015.01.09 |
PE FILE Format 0x01 (0) | 2015.01.08 |