** Release 모드로 재생성 후 진행할 것 **
myhack3.dll을 TextView.exe 프로그램에 인젝션 하기
(1) Windows 10 가상머신에 접속한 후, Visual Studio를 구동하여 TextView.cpp에 대응되는 TextView.exe 파일을 myhack3.cpp에 대응되는 myhack3.dll 파일을 생성한다. (빈 프로젝트, 유니코드 문자집합, Release 모드에서 생성함)
TextView.exe 파일과 myhack3.dll 파일은 같은 폴더에 있어야 한다.
(2) TextView.exe 파일을 복사한 후, 복사한 파일의 이름을 TextView_Patch.exe로 변경한다.
(동시에 HxD와 PEView로 보기 위해)
(3) PEView 프로그램을 이용해서 TextView.exe 프로그램의 내용을 확인한 후,
HxD 프로그램을 이용해서 myhack3.dll을 TextView_Patch.exe에 인젝션 한다.
-> 원래 하려던 방식과는 좀 다름, SECTION.rdata의 IMPORT Name Table에 이어서 인젝션하는 방식(주소가 연속되어있음, 원래 하려던 것)

IMAGE_NT_HEADER밑의 IMAGE_OPTIONAL_HEADER 부분 확인, IMPORT Table부터 시작(실은 IMPORT Directory Table의 시작 주소임)

이후 section .data의 imoprt directory Table에 가보면 RVA값이 위와 동일함을 확인 가능

SECTION. rdata로 올라가서 쭉 내리다 보면 NULL Padding으로 가득 찬 부분을 확인 가능함
(이 곳에 Import Directory Table 정보를 삽입하면 myhack3.dll을 불러올 수 있을 것)

.rdata의 SECTION_HEADER로 이동하여 size를 확인함.
Virtual Size는 보통 Size of Raw Data(물리 데이터)보다 크기가 작음
*( NULL Padding 영역 크기(IDT : Import Directory Table) = Size of Raw Data - Virtual Size )*

IDT의 크기 = 1A2 (Hex)
IMPORT Table의 기존 size = DC + myhack3.dll 관련 정보를 담고 있는 크기 = 14 (20 to Decimal)
-> 최종적으로 필요한 IDT의 Size = F0 (F0이 IA2보다 작으므로 인젝션 삽입 가능함)

대충.. 00004070 영역부터 DLL 인젝션 삽입해보려고 함

HxD에서 해당 주소(IMPORT Table, 0000017C)로 이동함.

해당 영역 우클릭 - 선택영역 채우기로 다음 사진처럼 값을 변경해 줌

(첫번째 작업은 마무리 됨)

저장 한 뒤, PEView의 주소를 pFile형태로 바꾸고, 젤 첫번째 있는 KERNEL32.dll의 주소를 가지고 HxD로 이동해 봄
(여기가 시작 주소)

마지막 주소는 Null Padding이 처음 나오는 주소에서 -1 하면 됨
(여기가 마지막 주소)

해당 부분 복사한 뒤, PEView에서 봐줬던 Null Padding부분에 붙여넣기 쓰기 진행 (not 삽입)

C4 30 00 00 이후에 "myhack3.dll과 하나의 DLL 마다 포함되어 있는 정보들을 넣어줘야됨

이런식으로 ..~
실제적으로 우리가 넣어줄 건 INT RVA, Name RVA, IAT RVA넣어주면 됨
( 이거 GPT한테 함 물어보기 .. )
Name RVA | "myhack3.dll" |
Import Name Table RVA | API에 대한 RVA = myhack3.dll의 함수 "dummy"의 이름 |
Import Address Table RVA | API에 대한 RVA = "dummy"함수에 대한 이름의 주소(초기) 프로그램 실행 이후 dummy 함수의 주소로 바뀌게 됨 |
일단은 INT와 IAT는 똑같은 걸 가리키고 있음
왜냐면 dummy의 주소는 PE file이 만들어 질 땐 지정이 안 됨(=주소를 미리 알 수 없음)
나중에 프로그램이 실행되면 IAT RVA는 실제 dummy함수의 주소로 바뀌게 됨

import table들은 모두 이어져있으므로 NameRVA, IMPORT NAME RVA, IMPORT ADDRESS Table RVA의 주소를 지정해줌

다음의 내용들 삽입
(각각 Name RVA, INT RVA, IAT RVA의 내용들임)


마지막으로 .rdata 섹션 헤더에서의 특성값(Characteristics)에 write 권한을 추가해주면 됨


여기까지 왔으면 패칭 작업은 마침

앟 ㅋ
패치 완료된 .exe파일
(4) Windows PowerShell상에서 TextView_Patch.exe 프로그램을 실행하여 index.html 파일이 다운로드 되는지 확인한다.
(5) Process Explore 프로그램을 통해서 myhack3.dll 파일이 TextView_Patch.exe 프로그램이 로딩 되었는지 확인한다.
'2023 공부 로그🐰' 카테고리의 다른 글
[ 악성코드 ] PreLab 6, Lab 6 (스텔스 프로세스) -2 (0) | 2023.11.16 |
---|---|
[ 악성코드 ] PreLab 6, Lab 6 (스텔스 프로세스) -1 (0) | 2023.11.16 |
[ 시보운 ] 쉘코드 연습문제 (0) | 2023.11.14 |
[ 악성코드 ] - PreLab3 (PE 패치를 이용한 DLL 로딩 - 코드 설명) (0) | 2023.11.09 |
[ 악성코드 ] PreLab 4, Lab 4 (0) | 2023.11.02 |