基于对Windows TEB/PEB
的分析, 可以做一些免杀中的应用
动态获取API
通过对
Windows TEB/PEB
的分析, 可以获取到KERNEL32.dll的基址, 然后解析PE, 遍历导出表获取GetProcAddress
函数地址, 再使用GetProcAddress
函数获取其他函数地址
x32位动态获取API
32位下通过fs:[0]寄存器获取
TEB
, 然后偏移0x30
得到PEB;
解析TEB/PEB获取KERNEL32.dll基址
1 | // TEB结构体 |
解析PE, 获取GetProcAddress
获取到KERNEL32.dll基址, 通过解析PE遍历KERNEL32.dll的导出表获取到
GetProcAddress
函数地址;
1 | // 解析pe文件 |
定义相关函数字符串以及函数原型并调用
定义函数名称时不能使用常量字符串, 因为程序会将字符串放在常量区段, 所以要对字符串进行
打散
处理, 以这种方式定义会将字符串存放在堆栈区域;
1 | // 定义LoadLibraryW函数字符串 |
x64位动态获取API
64位下通过gs:[0]寄存器获取TEB, 然后偏移
0x60
得到PEB; 64位下和32位获取方式不同;
解析TEP/PEB获取KERNEL32.dll基址
需要包含
winternl.h
和intrin.h
两个头文件;
1 | // 通过PEB获取KERNEL32.dll基址 |
解析PE, 获取GetProcAddress
和32位一样, 解析PE遍历导出表获取
GetProcAddress
函数地址;
1 | // 解析PE |
定义相关函数字符串以及函数原型并调用
1 | // 定义LoadLibraryW字符串 |