프로그래밍 강의/리버싱

리버싱 무작정 따라 하기 [2. 올리디버거와 친해지기]

wnsrn3436 2011. 12. 8. 22:24

 

다음과 같은 프로그램을 짰다고 했을 때, 제작자는 이 프로그램을 수정하지 못할 것으로 생각할 것입니다.

그러나 우리는 리버싱을 통해 간단히 저 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 로 변경된 것을 확인할 수 있습니다.

 

이름없음1.cpp

이름없음1.exe

Comments