티스토리 뷰
[Reversing] Inline Code Patch
[Reversing] Inline Code Patch ①
이제 Code Cave를 먼저 거치고 OEP로 가게 될 것입니다. 우선 "리버싱 핵심 원리"를 보시면 총 3가지 방법을 알려줍니다.
①파일의 빈 영역 <= "리버싱 핵심 원리"
②마지막 섹션을 확장
③새로운 섹션을 추가
위와 같이 3가지를 알려주었습니다. "리버싱 핵심 원리"에서는 첫번째 방법을 사용했습니다.
저는 세번째 새로운 섹션을 만들어 해당 섹션에 Patch Code를 작성하여 만들어 보겠습니다.
1. 새로운 섹션 추가
- 새로운 섹션을 추가하도록 하겠습니다.
- 우선 Nember of Section 기존 4에서 5로 늘려주겠습니다.
[Nember of Sections 수정]
- 새로운 섹션이 추가 되었습니다.
- 이전 게시물을 보시면서 값을 변경하시면 되시겠습니다.
Section Alignment : Virtual Size, RVA, Size of Image
File Alignment : Size of Raw Data, Pointer to Raw Data
- 저는 .ABC라 이름을 주었으며, 아래와 같이 제작했습니다.
[섹션 추가 완료]
2. Patch Code 제작
- "리버싱 핵심 원리"책을 참고하여 만들었습니다.
405000 MOV ECX, C
405005 MOV, ESI, UNPACKME#1.AC.40502D
- 40502D 주소에는 팝업창에 새롭게 작성할 문자를 추가했습니다.
- 저는 "JEONGZZANG!" 문자를 작성했습니다.
40500A MOV EDI, UNPACKME#1.AC.401123
- 401123 주소에는 "You must patch this NAG !!!" 라는 문자가 있습니다.
- 실행 했을때 나온 문자입니다.
40500F REP MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
- 우선 REP는 ECX 레지스터 만큼 반복이라고만 알고 넘어가면 될꺼같습니다.
- 뒤 MOVS BYTE는 1byte씩 EDI에 ESI의 문자를 복사하라는 것입니다.
- 그렇게 되면 401123에 있는 "You must patch this NAG !!!" 내용에 "JEONGZZANG!"을 덮어씌우는 것입니다.
- 이와 같이 Code Cave에 있는 Patch Code를 실행했습니다.
[Patch Code 실행 완료]
3. 마무리 정리 및 실행
401083 JMP UNPACKME#1.AC_원본.40121E
- 원본 파일을 보게되면 이와 같이 OEP 주소로 바로 가게 되어있습니다.
- 하지만 Code Cave를 거쳐 Patch Code 실행 후 OEP 주소로 가야되기 때문에 해당 부분을 수정을 해주었습니다.
401083 JMP UNPACKME#1.AC.405000
- 해당 부분을 수정에 있어 디버깅을 해보시면 해당 부분은 XOR을 거쳐서 복호화가 된 상태라는 걸 알 수 있습니다.
[JMP 변경]
- XOR 연산 이전에는 EE 91 06 00 00 입니다.
- XOR 연산 이후에는 E9 96 01 00 00 입니다.
- 차이점을 보시게 되면 3byte만 변경이 된걸 알 수 있습니다. 즉, 3byte만 암호화 되었습니다.
- EE, E9는 JMP 명령어를 가르키는 걸 알 수 있습니다.
- 복호화 전 EE, 복호화 후 E9 인걸 확인했습니다.
[복호화 전, 후]
[XOR 연산 계산기]
- 복호화 후 E9 78 3F 00 00 JMP 405000 입니다.
- 해당 부분을 XOR 7을 통해 EE 7F 38 00 00 로 수정해 줍니다.
- EE 7F 38 XOR 7을 통해 복호화가 되면 E9 78 3F 00 00 JMP 405000 을 가르키는 명령어가 될 것입니다.
- 실행을 해보게 되면 아래와 같은 결과가 나옵니다.
[결과]
'Reversing > Reversing Tech' 카테고리의 다른 글
[Reversing] Malwarebytes CrackMe: a step-by-step tutorial (0) | 2019.11.19 |
---|---|
[Reversing] Process Hollowing 기법 (0) | 2019.07.25 |
[Reversing] Inline Code Patch ① (0) | 2019.07.17 |
[Reversing] PE 파일 만들기④ (0) | 2019.06.25 |
[Reversing] PE 파일 만들기③ (0) | 2019.06.25 |
- Total
- Today