본문 바로가기
→ My Meta+IT/리버싱

어셈블리어/Assembly_5_실습

by DigitalJobs 2022. 1. 14.

어셈블리어/Assembly_5_실습

5. (실습) hello실습 world 문자열 패치

<리버싱에 필요한 언어>
C언어 API(win32, Linux API)
C++ API(MFC)
VB
자바, 파이썬, 펄 같은 언어들은 디컴파일러가 이미 있다.
상기 언어는 별도의 엔진이 필요한데, 악성코드 배포자의 입장에서는 범용적이지 않으면 쓸모가 없다.

 

<리버싱에 필요한 지식>

OS 지식(실행 파일 구조)
CPU 아키텍처
어셈블리어
프로세스 메모리 레이아웃 구조(code, data, heap, stack)
프로그래밍 언어(C - Win32, C++ - MFC, VB)
Packer / Protector
Anti-디버깅
코드 가상화


<어셈블리어의 종류>

윈도우는 MASM
리눅스는 GAS

리버싱은 플랫폼마다 그 방식이 다 다른데 플랫폼이 다양하기 때문에 어려운 것이다.

메모리는 하드디스크에 비해서는 속도가 매우 빠르지만 cpu 입장에서는 메모리도 느리기는 마찬가지이다.

레지스터의 역할 중에 하나는 데이터 백업

 

1. 범용 레지스터 -> 원하는 용도대로 마음대로 쓰는 것
EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP


EAX = 12345678

5678 = AX
56 = AH
78 = AL

E = 에코

읽을 줄만 알면 된다.

 

<EIP>
instruction pointer

프로그램 카운터 : cpu가 다음에 실행할 기계어 코드의 위치를 가리키는 곳

cpu는 절차적으로 수행하기 때문에 특정한 인카운터가 없으면 바로 다음 주소를 실행한다.

 

<E FLAGS>

Z - 연산의 결과가 0이면 1
S - 연산의 결과가 음이 되면 1

 

--------------------------- 실 습 ---------------------------

 

hello world가 출력되는 소스이다.

이 프로그램을 리버싱 하여 다른 문자가 출력되게 해 보자!!!!

우선 printfhello world 문자열을 찾으면 된다.

 

어디서??

“odbg110” 프로그램 설치 후 인터페이스를 확인부터하자.

hello wolrd가 담겨있는 404000을 찾아보자

주소와 아스키코드가 보이는Dump Window에 가서 ctrl + G를 하여 404000 주소를 입력한다.

 아스키코드를 바꿔서 hello man을 만들어보자.

이렇게 바꿔주면,

 hello man으로 바뀐 것을 볼 수 있다.

 

Dump window창에서 바꾼 문자열을 드래그하고Copy to executable file을 누르고 save file을 하면 패치가 된다.

 
 
앞의 선행될 내용을 참고하시려면 아래의 링크를 공부하신 후 이해해주시길 바랍니다.

https://it-life-on.tistory.com/31

 

어셈블리어/Assembly_1

1. 레지스터란? CPU 내부에 존재하는 작은 고속의 메모리이다. 레지스터의 종류 > 위 레지스터들은 범용레지스터, 인덱스레지스터, 포인터레지스터라고 한다. > 32비트 환경에서는 첫 글자가 E(Exten

it-life-on.tistory.com

https://it-life-on.tistory.com/32

 

어셈블리어/Assembly_2

2. 어셈블리어(Assembly language)란? - 기계어와 1대1 대응되는 컴퓨터 프로그램의 저급 언어. 어셈블러(Assember)란? - 어셈블리어로 작성된 소스 코드를 기계어로 변환하는 프로그램. 어셈블리어 구조 C

it-life-on.tistory.com

https://it-life-on.tistory.com/33

 

어셈블리어/Assembly_3_엔디언

3. 엔디언(Endianness)이란? 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법이다. 빅 엔디언(Big-endian)과 리틀 엔디언(Little-endian)으로 나눠진다. 빅 엔디언(Big-endian) 최

it-life-on.tistory.com

https://it-life-on.tistory.com/34

 

어셈블리어/Assembly_4_Break Point(브레이크 포인트)

4. Break Point(브레이크 포인트)란? 프로그램을 실행하는 도중에 유저가 필요한 시점에서 프로그램을 일시정지 시키는 역할. 디버깅 기법 중 하나. 명령을 실행하는 CPU를 일시 중지, 한 바이트 명령

it-life-on.tistory.com

 

댓글