点击上方蓝字关注我们
现在只对常读和星标的公众号才展示大图推送,建议大家能把星落安全团队“设为星标”,否则可能就看不到了啦!
背景介绍
常见的用户态函数拦截方法包括内联代码挂钩、IAT 挂钩和硬件断点挂钩。这些方法很有效,但它们需要修改 .text 部分、使用 NtProtectVirtualMemory 更改内存保护或自定义异常处理程序,所有这些都可能是“干扰性的”。本文描述了一种在不修改内存保护的情况下悄悄地钩住函数的方法。通过覆盖嵌套在目标函数中的全局指针或虚拟表条目,可以挂接该函数而不会引起怀疑,因为其中许多内存区域已经启用了写入权限。这是我使用多年的方法,效果很好。完整程序代码:文末获取!
StealthHook - x86matthewwww.x86matthew.comSearching for hooking points...Instruction 0x777B3440 referenced at KERNELBASE.dll!0x7785FA7C (sect: .data, virt_addr: 0x1DFA7C, stack delta: 0x30)Instruction 0x77783AB0 referenced at KERNELBASE.dll!0x7785F650 (sect: .data, virt_addr: 0x1DF650, stack delta: 0x100)Found 2 potential hooking points, testing...Overwriting reference: 0x7785FA7C...Calling target function...Hook caught successfully!Overwriting reference: 0x7785F650...Calling target function...Hook caught successfully!Finished - found 2 successful hooking points
DWORD dwGlobal_OrigCreateFileReturnAddr = 0;DWORD dwGlobal_OrigReferenceAddr = 0;void __declspec(naked) ModifyReturnValue(){// the original return address for the CreateFile call redirects to here_asm{// CreateFile complete - overwrite return valuemov eax, 0x12345678// continue original execution flow (ecx is safe to overwrite at this point)mov ecx, dwGlobal_OrigCreateFileReturnAddrjmp ecx}}void __declspec(naked) HookStub(){// the hooked global pointer nested within CreateFile redirects to here_asm{// store original CreateFile return addressmov eax, dword ptr [esp + 0x100]mov dwGlobal_OrigCreateFileReturnAddr, eax// overwrite the CreateFile return addresslea eax, ModifyReturnValuemov dword ptr [esp + 0x100], eax// continue original execution flowmov eax, dwGlobal_OrigReferenceAddrjmp eax}}DWORD InstallHook(){BYTE *pModuleBase = NULL;BYTE *pHookAddr = NULL;// get base address of kernelbase.dllpModuleBase = (BYTE*)GetModuleHandle("kernelbase.dll");if(pModuleBase == NULL){return 1;}// get ptr to function referencepHookAddr = pModuleBase + 0x1DF650;// store original valuedwGlobal_OrigReferenceAddr = *(DWORD*)pHookAddr;// overwrite ptr to call HookStub*(DWORD*)pHookAddr = (DWORD)HookStub;return 0;}int main(){HANDLE hFile = NULL;// create temporary file (without hook)printf("Creating file #1...n");hFile = CreateFile("temp_file_1.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);printf("hFile: 0x%Xnn", hFile);// install hookprintf("Installing hook...nn");if(InstallHook() != 0){return 1;}// create temporary file (with hook)printf("Creating file #2...n");hFile = CreateFile("temp_file_2.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);printf("hFile: 0x%Xnn", hFile);return 0;}
该测试程序的结果如下所示:
Creating file #1...hFile: 0xDCInstalling hook...Creating file #2...hFile: 0x12345678
输出显示第一个 CreateFileA 调用正常完成。第二次调用,在安装 hook 之后,返回我们的 hooked 值 0x12345678。
圈子介绍
博主介绍:
目前工作在某安全公司攻防实验室,一线攻击队选手。自2022-2024年总计参加过30+次省/市级攻防演练,擅长工具开发、免杀、代码审计、信息收集、内网渗透等安全技术。
目前已经更新的免杀内容:
一键击溃360+核晶
一键击溃windows defender
一键击溃火绒进程
CobaltStrike4.9.1二开
CobaltStrike免杀加载器
数据库直连工具免杀版
aspx文件自动上线cobaltbrike
jsp文件自动上线cobaltbrike
哥斯拉免杀工具 XlByPassGodzilla
冰蝎免杀工具 XlByPassBehinder
冰蝎星落专版 xlbehinder
正向代理工具 xleoreg
反向代理工具xlfrc
内网扫描工具 xlscan
CS免杀加载器 xlbpcs
Todesk/向日葵密码读取工具
导出lsass内存工具 xlrls
绕过WAF免杀工具 ByPassWAF
等等...
往期推荐
1.
3
4
5.
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...