다음과 같은 프로그램을 짰다고 했을 때, 제작자는 이 프로그램을 수정하지 못할 것으로 생각할 것입니다.
그러나 우리는 리버싱을 통해 간단히 저 10 이라는 숫자를 변경할 수 있습니다.
일단 이렇게 컴파일된 이름없음1.exe 를 틀어봅시다.
그리고 막 스크롤을 돌리다 보면
printf. 이렇게 익숙한 함수의 이름이 보일 것입니다.
그리고 아까 C++ 로 제작한 소스의 내용이 보입니다. (system 함수 등)
주소를 찾았습니다.
여기서 잠깐.
리버싱에서 사용되는 언어인 mov, call 등을 어셈블리어라고 부르는데, 여기서는 함수호출방식이 역순입니다.
즉. printf("int number : %d\n", var_int); 이런 식으로 소스를 짰을 때에,
var_int "int number : %d\n" printf
이런 식으로 저장됩니다. |
그렇다면 저기 보이는 MOV DWORD PTR SS:[EBP-4],0A 가 바로 var_int 인 것을 확인할 수 있습니다.
0A는 16진수입니다. 10 진수로 하면 10 이죠. 이것을 2로 바꿔보겠습니다.
자. 이렇게 2 로 변경하고 (원하는 곳을 두 번 클릭하면 변경할 수 있습니다.)
응용 프로그램으로 저장해봅시다.
오른쪽 마우스로 클릭한 뒤,
Copy to executable -> All modifications 를 클릭합니다.
그리고 Copy all 을 선택.
그다음에 이상한 창이 뜨는데, 그걸 꺼보시면 이러한 메시지가 뜹니다.
예(Y) 를 선택합니다.
자. 그렇게 해서 만들어진 프로그램을 켜보면 숫자가 2 로 변경된 것을 확인할 수 있습니다.