[Reversing] Inline Code Patch [Reversing] Inline Code Patch ② 원하는 코드를 직접 수정하기 어려운 경우 코드 케이브라고 하는 패치 코드를 삽입한 후 실행해 프로그램을 패치시키는 기법을 인라인 코드(Inline Code Patch)라고 합니다.또 하나의 개념은 코드 게이브(Code Cave) 입니다. 흐름을 변경하여 삽입된 코드 영역을 거쳐서 수행되도록 하는 기법을 말합니다. 위 파일을 통해 실습을 할 것입니다.[프로그램 실행시 팝업창] - 살펴보니, 텍스트 박스에 unpack me와 같은 문자가 보입니다.- x64 dbg를 통해 살펴보겠습니다. 1. x64 dbg & 흐름분석- EntryPoint로 이동을 하겠습니다.401000 PUSHAD- PUSHAD를..
[Reversing] Printf()함수 스택프레임(Stack Frame) [Reversing] 스택프레임(Stack Frame)이전 게시물의 예제 중 printf("%d\n", x); 부분에 대해 간략하게 설명을 하겠습니다. printf() 함수 호출4010BB PUSH PROJECT1.41C798- 해당 41C798 주소에는 "%d\n" 문자가 있는걸 알수있습니다.[printf() 함수 호출 전 PUSH 부분] - printf() 함수의 스택 프레임을 생성합니다. 다음을 보시게 되면 순서데로 작성해보겠습니다. PUSH EBP- 스택에 현재의 EBP를 저장합니다. MOV EBP, ESP- printf()의 ESP 값을 EBP에 옮겨주었습니다. PUSH ESI- 스택에 ESI를 저장합니다.- ESI는 데..
[Reversing] 스택프레임(Stack Frame) 스택프레임- 새로운 함수가 호출 될 때 호출 후 원래의 위치로 돌아갈 정보를 담고 있습니다.- ESP, EBP 레지스터를 사용해서 변수나 원복주소에 접근하는 방식입니다.- 즉, 함수가 호출 될때 그 함수가 가지는 공간 구조입니다.함수를 호출할 때 그 함수가 가지고 있는 공간으로 스택 프레임 구조는 함수 프롤로그 - 함수 원형 - 함수 에필로그로 구분할 수 있다. 스택 프레임 예제#include int main(){int x;printf("정수입력 : ");scanf_s("%d", &x);printf("%d\n", x);return 0;}[소스코드] 스택 프레임의 구조[예제 스택프레임 구조] [main() 함수의 스택 프레임] x64 dbg- 우선 m..
[Reversing] PE 파일 만들기④ 마지막으로 어셈코드를 제작할 것입니다.[Reversing] PE 파일 만들기①[Reversing] PE 파일 만들기②[Reversing] PE 파일 만들기③ 1. x64 dbg- 지금까지 만들어진 파일을 올려보겠습니다.- 해당 VA 주소는 코드섹션(.text Section)입니다.- 현재는 0으로 채워져 있으니 코드섹션에 어셈코드를 추가할 것입니다. [0x401000 x64 dbg] [.text Section PE] 2. .text Section- 이전 게시물에 있는 파일을 열어보시면 위와 같이 .text Section 부분이 0으로 채워져있습니다.- 이전에 말했듯이 해당(30h)부분에 어셈코드를 제작할 것입니다.- 200h 부터 추가할 것입니다. [어셈코드 추가..
[Reversing] PE 파일 만들기③ Dos Header ~ .text 섹션을 생성하고 내용을 채워 제작했습니다.[Reversing] PE 파일 만들기①[Reversing] PE 파일 만들기② 1. IMPORT Directory Table[Step1]- 먼저 IMAGE_DATA_DIRECTORY에서 IMPORT Table의 RVA값을 작성할 것입니다.- 저는 IMPORT Table의 RVA를 0x40으로 제작할 것입니다.- 이전 게시물에 MS-DOS Stub Program 0으로 채운 부분에 IDT를 작성한다고 했습니다.(참고) [IDT 지정 HxD] [Step2]- IMPORT Directory Table의 필드를 다시 보겠습니다.- Import Name Table RVA, Time Date Sta..
[Reversing] PE 파일 만들기② 현재까지 Dos Header ~ PE Header 부분까지 제작해 왔습니다.[Reversing] PE 파일 만들기①물론 추가적으로 수정해야 되는 부분도 있습니다.(IMAGE_DATA_DIRECTORY 크기만 잡아두고 왔죠)다음으로는 PE 파일의 마지막 구조체인 Section Header 제작할 것입니다. 1. IMAGE_SECTION_HEADER .text- IMAGE_SECTION_HEADER Size는 40 bytes 입니다.- .text Section의 속성 값에 대한 정보를 가지고 있습니다. - .text, .idata, .data과 같은 Sections이 Section Table(IMAGE_SECTION_HEADER의 배열) 입니다.- PE 파일은 cod..
[Reversing] PE 파일 만들기 ① 제작 과정은 간략한 설명으로 건너뛰고 넘어가는 부분이 많습니다.이전 게시물을 참조 및 PE Format 참조 직접 제작해 보는 것을 추전을 받아 작성합니다.직접 제작하다 보면 자신이 잘 몰랐거나 잘 못 이해하던 부분을 정확히 파악하고 제대로 공부할 수 있다고 생각합니다.CLI 기반, printf문 사용, 'Hello World !' 출력을 목적으로 제작할 것입니다. 1. IMAGE_DOS_HEADER- MZ는 IMAGE_DOS_HEADER의 Signature입니다.(4D5A = ASCII 값 "MZ")- 해당 구조체의 크기는 40h으로(64byte) 고정이며, 여러개의 필드로 구성되어있습니다.- IMAGE_DOS_HEADER의 구조체 중 e_lfanew가 PE ..
[Reversing] 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE) 가능한 가장 작은 PE 실행 파일 만들기(Tiny PE) ① 이전 IMAGE_DOS_Header와 MS-DOS_Stub 수정 후 크기는 변하지 않았습니다. 다음으로는 SECTION.data을 확인해보겠습니다. 그런데 PE구조를 다시 보니 리소스 부분을 먼저 삭제를 해야 될꺼같습니다. 1. SECTION.rsrc 삭제하기 peview를 통해 해당 SECTION.rsrc 영역을 확인 후 Hxd에서 리소스 부분을 삭제를 했습니다. 삭제 후 확인 해보면 SECTION.rsrc 영역이 삭제 된걸 확인 할 수 있습니다. 파일을 실행 하게 되면 실행이 되지 않습니다. 실행이 되도록 만들어야 되겠지요. 이제 리소스를 참조한 부분을 찾아 수정..
- Total
- Today