와 이번꺼 진짜 어렵다 ...
숙제 : HxD로 값 수정하는 부분까지 진행해서 가져오기!!!
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로 변경한다.
(3) PEView 프로그램을 이용해서 TextView.exe 프로그램의 내용을 확인한 후 (IMAGE_NT_HEADERS 부분 주의깊게 보기),
HxD 프로그램을 이용해서 myhack3.dll을 TextView_Patch.exe에 인젝션 한다. ( 설명 중요하니까 잘 보기!! )
모든 저장 자체가 File Alignment 단위로 이루어짐 : 어떤 파일의 크기가 2 File Alignment만큼이다 = 2칸 차지
(전체 파일을 File Alignment 단위로 자름)
File Alignment < Section Alignment : File에 저장되는 것보다 메모리에 더 많이 저장된다는 의미
Size of Image, Size of Headers : 해당 값 만큼 실제 크기로 인식
Number of Data Directories : 테이블 형태로 인식함(lowData가 아닌), EXPORT Table, IMPORT Table(중요), ... etc
정확한 정보는 SECTION.rdata에 존재함 (r은 read)
Image Import Descriptor (IID) : IID구조체의 형식대로 IMPORT Directory Table에 들어가게 된다.
Import table = IMPORT Directory Table의 시작 주소
Import Name Table RVA , INT : Import Name의 시작 주소를 나타냄
Import Address Table RVA, IAT : 주소값을 나타냄
Import명과 Import할 것의 주소를 알고 있어야 함 (이름과 주소가 중요)
-> INT와 IAT는 처음엔 같은 값을 가지는데, PE Loader가 PE파일을 로드 시,
IAT의 Data = API 함수의 실제 주소로 reset 됨
IMPORT Name Table에는 IMPORT Directory Table에서 Import한 dll파일의 함수들이 존재함 !
IMPORT Address Table과 IMPORT Name Table의 정보가 (거의) 동일함 : 이름들에 대한 주소 정보를 갖고 있는 개념이라서 ㅇㅇ.
API들의 실제 이름을 확인할 수 있는 곳은 IMPORT Hints/Names & DLL Names에 저장됨
= 실제 주소에 대한 정보(IMPORTS Hints/Names ~)를 Address Table과 Name Table에 저장함
요약 )
1. IMPORT Directory table : dll이 제공하는 API 함수 정보에 대한 시작 주소를 가지고 있음 -> 출발점, 이 시작 주소를 따라가면서 API 함수들을 가져옴
2. IAT, INT : 시작 주소를 따라가면 IAT와 INT로 감. API 함수들의 이름에 대한 주소정보를 제공함 (초기에는 IAT, INT)
3. Hints/Names ~ table : API 함수 이름 Data
4. PE Loader가 IAT에 API 함수 실제 주소를 Load함
하나의 구조체 사이즈는 4바이트씩 5개, 총 20바이트임
삽입하려면? Hint table 부터 만들고, IAT, INT 고치고, Directory table값 고치는 순서대로 진행하면 됨 :
dummy 함수를 통해 인젝션 실행 (실제 해커들은 dll 안의 함수들 전체를 import시키지만 우리는 글케하면 번거로우니까 dummy 함수 만 넣으면 됨)
Hint table안에만 들어가면 되기 때문에 위치상관없이 빈 공간(NULL Padding)에 넣으면 됨
SECTION.rdata 클릭 -> 스크롤 내리다 보면 빈 공간들이 보임. 이 부분들이 NULL Padding에 해당함
저장까지 해주면 일단 Hints table은 수정 완료 (1단계 끝남)
11.09 추가내용
Dummy 뒤에 한바이트 뛰고(널 삽입) ascii값 삽입
Directory Table의 끝 주소(0000 1F2C)로 이동
IMPORT Name Table의 End of Imports 0000 93BC(RVA 주소로는 1C5BC) 부분의 FF FF FF FF 00 확인
프로그래머용 계신기로 93D3 - 93BC = 24(10진수 14)
엥,,,먼말이지?
암튼 1C58C+18(10진수 24) = 1C5D4가 나옴 : myhack3.dll이 시작되는 부분.
9134 주소에 있는 FF ~ 에다가 D4 C5 01 00 넣어줌(리틀엔디안이라 1C5D4의 반대로 넣어야됨)
아까 했던 myhack3.dll넣었던 부분에 시작 주소 넣기
이후 PE View의 SECTION.rdata를 확인해보면 수정된 dummy를 확인 가능함
(2단계 : Name Table에서 IAT, INT 수정하기)
End of Imports를 기준으로 import가 구분되기 때문에 유의하기.
이 뒤에 정보들을 넣어주면 됨
연속적으로 되어있기 때문에 주소에 유의.
Name Table의 제일 마지막 값과 Hints테이블의 시작 값 차이를 보면 4byte가 차이남
= Table은 순차적으로 연결되어 있다는 것을 확인 가능.
우리는 NULL Padding 공간을 사용하여 중간에 공간을 만들어야 함
(IID) 20byte의 공간이 필요하므로 그만큼의 공간 확보 필요함.
+ Import Directory Table(Name, Address) 각각 4바이트씩 8바이트
+ Address Table(Hint/Name, End of Imports) 각각 4바이트씩 8바이트 = 총 36 바이트 필요
(TextView를 Debug 모드로 다시 생성 - 머가 안되나봄 ㅎ..)
PE View로 .idata 들어가서 보면 Address Table과 Directory Table 사이에 약간의 공간이 있는 것을 확인 가능
HxD에서 import address table의 가장 마지막 주소로 따라가기
Padding 공간을 확인 가능
현재 커서 위치에서의 00 00 00 00은 식별자이므로 그 뒤부터 편집하기 시작
일단은 FF FF FF FF로 채워놓고 저장 ( IAT, INT 수정할때 위치 보려고)
Hints 테이블의 마지막 주소 확인하고 HxD로 이동해서 dummy 입력 후 저장
HxD에서 Name Table의 시작주소(000C4F00)기억
.idata의 처음부터 dummy 다음까지 선택하고 복사함
한.. 20바이트 정도 띄우고 복사한 내용 붙여넣기 한 다음 앞 공간 NULL byte로 채우기
필요한 공간만큼 앞뒤로 표시 (FF FF FF FF로.)
엥?? 망했는디..~ ㅋ
이거 보면서 하자,,ㅎㅎ https://maple19out.tistory.com/40
이거 실습해두고 다음주에 파일 갖고와서 그걸로 보기..!!!
MyHack3.dll의 ASCII = 6D 79 68 61 63 6B 33 2D 64 6C 6C
(4) Windows PowerShell상에서 TextView_Patch.exe 프로그램을 실행하여 index.html 파일이 다운로드 되는지 확인한다.
(5) Process Explorer 프로그램을 통해서 myhack3.dll 파일이 TextView_Patch.exe 프로그램이 로딩 되었는지 확인한다.
Lab 3
공격자가 PE 파일에 악성 DLL 파일을 패치하는 방식으로 악성 DLL을 실행한다고 가정하면,
악성 DLL이 실행되기 전에 탐지하기 위한 방법은 무엇인가?
-> 무결성?
PE파일 자체에 대한 분석 진행 -> 새롭게 인젝션 된 DLL이 있다면 실행 전에 탐지 가능함
= 실행 전, 파일에 DLL 변경 내용이 있는지 확인한다. (현실적으로 어렵긴함 : DLL 다 알고잇어야됨)
-> 자동화된 정적 분석을 통해 DLL 변경 내용을 탐지한다
'2023 공부 로그🐰' 카테고리의 다른 글
[ 시보운 ] Buffer Overflow 연습문제 1, 2 (0) | 2023.11.02 |
---|---|
[ 악성코드 ] 코드 리뷰 (0) | 2023.10.19 |
악성코드 - PreLab2, Lab2 (DLL 인젝션, DLL 이젝션) (0) | 2023.10.05 |
악성코드 - PreLab1, Lab1 (0) | 2023.10.05 |
FWSnort 설치와 활용 (0) | 2023.06.07 |