《逆向工程核心原理》<03-25> 通过修改PE加载DLL
来源:互联网 发布:新笔记本win10如何优化 编辑:程序博客网 时间:2024/06/11 20:58
原理
PART1. Ready to fix
PEView-> IMAGE_OPTIONAL_HEADER-> IDT(value of IMPORT_Table)
IDT is the array of structs, the struct is IMAGE_IMPORT_DESCRIPTOR(IID)
IDT end by a IID which padding with 0x00IMAGE_IMPORT_DESCRIPTOR(IID)
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics;
DWORD OrignalFirstThunk; // RVA to Import Name Table(INT)
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name; // RVA to DLL Name String
DWORD FirstThunk; // RVA to Import Address Table(IAT)
} IMAGE_IMPORT_DESCRIPTOR;PEView-> SECTION. rdata(IDT)-> File Offset
Find the raw of IDTHexTools-> jump to the raw of IDT
Try to find if here has some free place to write our Dll
Unfortunetly, place after the RVA [76CC]~ RVA [772F] is not free,so i should remove the IDT
There has three method to remove the IDT
1. Find the free place in the same section(eg. rdata)
2. Increase the size of the last section
3. Add a new section at the end-of-file
Here, choose the first method
4. PEview-> SECTION .rdata
Check the end of rdata, i need a adequate place with “Null-Padding”
PEView-> IMAGE_SECTION_HEADER .rdata
Here, pay attention, Only define place in SECTION_HEADER can image to VA
Null-Padding place means the place which not only padding with 0x00 but also it can be imagedEg.
Size of Raw Data 2E00
Virtual size 2C56 //So, 2E00- 2C56 == 1AA, i can only use 1AA size to write IDT, but size:1AA is enoughAt last, we choose RVA: 8C80 (RAW: 7E80) to create the new IDT
PART2. Try to fix (u need to copy another one to fix)
Modify the RVA of IMPORT Table
PEView-> IMPORT Table
RVA: 84CC modify to 8C80
Size: 64h modify to 78h(0x64+ 0x14)Delete the BOUND IMPORT Table
PEView-> BOUND IMPORT Table
RVA: modify to 0x00
Size: modify to 0x00Create the new IDT
HexTools-> Copy the original IDT to new place(RVA: 8C80 (RAW: 7E80))
HexTools-> Add the IID which corresponding .Dll at end of IDT
IMAGE_IMPORT_DESCRIPTOR(IID)
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics;
DWORD OrignalFirstThunk; // 00008D00 => RVA to INT
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name; // 00008D10 => RVA to DLL Name
DWORD FirstThunk; // 00008D20 => RVA to IAT
} IMAGE_IMPORT_DESCRIPTOR;Set INT, DLL Name, IAT
HexTools-> Set these
INT(8D00)-> RVA[8D00]-> value of address modify: 00008D30 //INT is a RVA array, each array element is a RVA address, the value of this address has 2 parts: Ordinal(2 Bytes) + Func Name String, INT end by NULL
RVA[8D30]-> 0000(Ordinal) + “dummy”(Func Name String)DLL Name(8D10)-> RVA[8D10]-> "myhack3.dll"IAT(8D20)-> RVA[8D20]-> same value as INT(RVA[8D00])
Modify the propertiy of IAT
IAT need the WRITE propertiy
HexTools-> SECTION .rdata
Characteristics(40000040) bit OR the WRITE propertiy (80000000)
PART3. Check the fix
- PEView-> check IDT
- PEView-> check INT
- Try to new
- 《逆向工程核心原理》<03-25> 通过修改PE加载DLL
- 《逆向工程核心原理》<04-33> 通过DLL注入修改API代码实现API钩取的技术
- 《逆向工程核心原理》<02-13> PE文件格式 部分笔记
- 《逆向工程核心原理》<04-32> 通过DLL注入实现IAT钩取的技术
- 《逆向工程核心原理》<04-30> 通过Debug修改代码实现API钩取的技术
- 《逆向工程核心原理》
- 《逆向工程核心原理》
- 逆向工程核心原理
- 修改PE加载dll
- 《逆向工程核心原理》<03> DLL注入的3种姿势
- 《逆向工程核心原理》<03-27> 代码注入
- 《逆向工程核心原理》相关说明
- 逆向工程核心原理读书笔记-代码注入
- 逆向工程核心原理读书笔记-代码注入
- 逆向工程核心原理学习笔记1-通过IAT手工定位notepad.exe中的导入函数
- 逆向工程核心原理学习笔记(五):实战“打补丁方法”修改字符串
- 逆向工程核心原理学习笔记(五):实战“打补丁方法”修改字符串
- 《逆向工程核心原理》》<06> 高级逆向分析技术
- 欢迎使用CSDN-markdown编辑器
- 复习笔记-java中的++、--与char面试题
- JZOJ 1331——超级教主【dp】
- java中Cookie的使用
- GAN|生成对抗网络的前沿进展(论文、框架&资源)全面总结
- 《逆向工程核心原理》<03-25> 通过修改PE加载DLL
- 孩子们的游戏
- uC/OS-II源码解析(os_core.c)
- 欢迎使用CSDN-markdown编辑器
- vscode安装教程(windows)
- TX1刷机以及配置caffe全备忘(Jetpack2.3+)
- c++作业5——数组1
- SAP BO的路还有多长
- postgresql定位分析消耗CPU高的SQL语句