프로그래밍 강의/리버싱 (3)
이번에는 IF 문을 이용하여 이런 식으로 코드를 짰다고 가정해봅시다. 보통 이런 경우는 문자열이 메모리상에 저장되기 때문에 쉽게 이메일 주소를 얻을 수가 있습니다만, 우리는 어떤 값을 입력해도 이메일 주소가 나오게 수정을 하고자 합니다. 올리디버거로 열어보면 이런 식의 간단한 어셈블리어로 되어있습니다. 이중 JE ~ 쪽을 눌러봅시다. 빨간 게 꼭 누르고 싶지 않나요? 그런데 옆에 화살표가 00401B5F 즉 알맞은 값을 가리키고 있네요? 여러분은 이제 이것이 IF문과 비슷한 역할을 한다고 생각을 해보아도 될 것 같습니다. 아마 조건이 되면 저 주소로 점프하는 거 같지 않나요? 그래요. 위에 JE 위에 CMP 라고 먼저 조건을 가정하고 점프를 하는 것입니다. 명령어에 관한 내용은 http://shakii...
다음과 같은 프로그램을 짰다고 했을 때, 제작자는 이 프로그램을 수정하지 못할 것으로 생각할 것입니다. 그러나 우리는 리버싱을 통해 간단히 저 10 이라는 숫자를 변경할 수 있습니다. 일단 이렇게 컴파일된 이름없음1.exe 를 틀어봅시다. 그리고 막 스크롤을 돌리다 보면 printf. 이렇게 익숙한 함수의 이름이 보일 것입니다. 그리고 아까 C++ 로 제작한 소스의 내용이 보입니다. (system 함수 등) 주소를 찾았습니다. 여기서 잠깐. 리버싱에서 사용되는 언어인 mov, call 등을 어셈블리어라고 부르는데, 여기서는 함수호출방식이 역순입니다. 즉. printf("int number : %d\n", var_int); 이런 식으로 소스를 짰을 때에, var_int "int number : %d\n" ..