본문 바로가기

reversing/리버싱

나의 첫번째 디버깅 Hello world!

사실 리버싱은 할 맘이 없었는데..;; 왜하고 있는거지?-0-?
OllyDbg 사용법 보다가 리버싱 하는거 보길래 잼있길래 해봤는데... 코딩하는게 쉽다는걸 느끼는 하루다;;
Hello world 바꾸는데 5시간이 걸렸따.;;ㅋㅋㅋㅋㅋ 
일반적인 hello world! 를 프롬포트 창에서 찍어내는 프로그램. 
정말 오늘로써 C언어가 정말 쉽고 잘만들었단는걸 알게 해주는구나;;
리버싱하면서 난감한점은 그동안 우리가 익숙하게 썼던 printf가 어디에 속하느냐 이다.
물론 stdio.h에 있다고 하겠지만 결국 헤더파일도 지침서일뿐이다. 


이것이 프롬포트창에 단순히 문자를 찍는데 필요한 파일들이다. 지금은 각 dll 파일들의 PE구조일 뿐이고.

여기서 MSCVR90.dll이 printf 함수가 속에있는 파일이다. (맨위에 찍혀있다.)

뭐 피해가야할 함수들(너무 당연해서 뛰어넘어야할 함수들) 이 너무나 많타는 말;; (리버싱 하시는 분은 많이 보고 많이 익숙해 지라는데;; 그러기 싫어질정도로 많은거 같다;;)

간단하게 Hello world를 바꿔보도록 해보자~ 
exe파일은 윈도우 PE구조로 되어 있고 분명히 어딘가의 메모리에 Hello world를 올릴것이다. 그리고 그것을 위의 printf 함수로 찍어낼테고. 그러면 메모리에 올라간 Hello world문자열만 바꾸면 된다. 

먼저 Hello world가 어디서 불리는 지를 알기 위해서 오른쪽 마우스->serach for->All referenced text strings를 클릭하자


현재 쓰일 텍스트 들이 나오는데 맨 위에 보면은 찍힐 hello world가 보일것이다. 더블클릭!
텍스트가 있는 곳으로 이동하게 되는데 PUSH 메모리주소 로 되어 있고 다음이 printf문이 호출되는것을 볼수 있다. 여기가 바로 hello world 문장이 메모리로 올라가는 부분 ! 이제 printf문까지 진행을 시킨다음 (F2 키로 브레이크 포인트를 잡고 F8, F7 조합으로 이동하자.) 메모리를 건들이면 된다.


printf 문까지 진행을 시켜 보면은 스택 메모리에 텍스트가 올라온 것을 볼수 있다.
클릭을 해주고 오른쪽 마우스->Follow in Dump 를 클릭해주면 현재 hello world가 올라온 메모리로 이동한다.


드래그를 해서 영역을 지정해준다음 ctrl+E 키를 해주면 에디터 창이 뜬다.
여기서 원하는 글자를 써주고 ok를 눌러주면 된다.


난 hello hyun!! 으로 바꿨따.ㅎ 

이제 F9를 눌러 실행해보면 (return 이 나올때 까지 실행하는것으로 프로그램을 완전히 실행하는것)
기존의 찍혀야할 문자 hello world! 대신에
원하는 문자가 찍힌 걸 볼수 있다.


사실 이렇게 않하고 어셈블러를 바꿔서 문자열을 다른곳에서 불러올수 있으면 쉬울텐데;; 아직 어셈블러가 익숙치가 않다;ㅎㅎ 디버깅 사용법을 알려다가 하루를 이것에만 썼네;;ㅎㅎ 
잼있긴한데 정말 어둠의 속으로 들어갈뜻한 기분이다;; 
메세지박스로 뜨는것을 바꾸는것을 보고 콘솔은 엄청 쉽겠지 라고 생각하고 덤볐는데;;
모르고 하는 짓은 정말 ;; 노가다의 길인거 같다; 뭐~~ 잼있긴하네;;



'reversing > 리버싱' 카테고리의 다른 글

abex CrackMe3  (0) 2010.08.14
abex CrackME2  (0) 2010.08.13
CFF CrackMe 3 4 번 -0- 쉽네.  (0) 2010.08.12
CFF CrackMe2 시리얼 문제 해봅시다~  (0) 2010.08.10
패커, 패킹, 언패킹  (0) 2010.08.09