Jiyong's STUDY

[기초] Hello World 리버싱 문자열 패치 본문

보안/리버싱, 어셈블리

[기초] Hello World 리버싱 문자열 패치

Kingjiyong 2020. 7. 16. 17:37

리버싱할 프로그램의 코드

module has entry point outside the code와 같은 문제가 발생한다면

코드를 빌드할 때 debug로 하지 말고 release로 빌드하면 된다.

 

아무튼 빌드한 exe 프로그램을 ollydbg에 올리면

 

ollydbg에서 hello world 프로그램을 실행한 모습

이런 화면이 나오는데 여기서 Hello World!를 출력하는 부분을 찾아야 한다.

F7(함수 내로 들어감)이나 F8로 한 줄씩 실행하며 가다가 프로그램에서 Hello World!가 출력되는 부분을 찾으면

F2로 BP를 찍어두고 Ctrl+F2로 재실행하면 된다.

 

또는 Ctrl+G로 main 함수를 찾을 수도 있다.

 

아무튼 찾은 이후

 

친절하게 설명에 "Hello World!"라고 적혀 있다
"Hello World!"가 저장되어 있는 위치를 찾았다

아래 Dump Window에서 Ctrl+G로 주소를 검색하면

원하는 부분 드래그 후 스페이스바를 누르면 수정 가능

 

이제 메모리에 직접 접근하여 수정을 할 수 있다. 다만 여기서 직접 수정하는 경우엔 Hello World!의 글자 갯수, 12개에 더하여 Null 문자까지 14바이트까지만 수정을 할 수 있다.

더 길게 변조하고 싶다면 사용하지 않는 메모리를 찾아 적어 놓고 메모리를 변조하면 된다. 

 

덤프 윈도우에서 쭉 내리다 보면 00으로 가득 찬 부분이 있다. 그곳에 출력하고 싶은 문자열을 대충 적어본다.

 

아무거나 씀

이후 시작되는 메모리의 주소를 기억하고 코드 윈도우에서 PUSH 00000000의 형태로 되어있는 것에서

주소값을 변경하면 된다. 

변경된 모습

이제 코드를 실행해보면 더 확실하게 알 수 있다.

수정하기 전에는 즉, 원래는 Hello World!가 나왔어야 했다.

 

'보안 > 리버싱, 어셈블리' 카테고리의 다른 글

[기초] 스택프레임 구조  (0) 2020.07.17
[기초] 리틀 엔디언  (0) 2020.07.17
[기초] 스택 자료구조의 ADT  (0) 2020.07.16
[기초] 어셈블리어 기본 명령어  (0) 2020.07.16
[기초] 레지스터  (0) 2020.07.16