어셈블리어/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가 출력되는 소스이다.
이 프로그램을 리버싱 하여 다른 문자가 출력되게 해 보자!!!!
우선 printf나 hello 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
https://it-life-on.tistory.com/32
https://it-life-on.tistory.com/33
https://it-life-on.tistory.com/34
'→ My Meta+IT > 리버싱' 카테고리의 다른 글
어셈블리어/Assembly_4_Break Point(브레이크 포인트) (0) | 2022.01.14 |
---|---|
어셈블리어/Assembly_3_엔디언 (0) | 2022.01.14 |
어셈블리어/Assembly_2 (0) | 2022.01.14 |
어셈블리어/Assembly_1 (0) | 2022.01.14 |
댓글