Hook计算器以显示中文数字
计算器显示中文数字HookLet
注入DLL.dll到计算器程序
找到导入表描述,在FirstThunk中把user32.dll文件中导出函数地址改为自己的DLL.dll导出函数的地址
计算器点击数字调用的函数为SetWindowText
注入方式有两种,CreateRemoteThread远程线程,SetWindowHookEx全局钩子
提权,开启UAC 管理员身份运行
可以在项目右键属性,链接器,清单文件,打开UAC运行级别即可
这里使用远程线程注入,填写动态库的完整路径申请内存,在对方进程中开启新的线程,得到LoadLibrary地址,执行LoadLibrary加载自己的动态库
得到自己动态库的完整路径
得到PID
申请虚拟内存
将路径写入虚拟内存
启动线程
从目标进程中的user32模块导出表中获取SetWindowText函数地址
获得进程中第一个模块Taskmgr.exe地址
定位到导入表描述
该模块是加载状态的,因此定位到FirstThunk,里面已经变为真正的函数地址,判断是否为空
定位到模块名
比较得到与我们要感染的模块相同,此时ImageImportDescriptor指针指向的FirstThunk即为对应模块
获取user32导出表中SetWindowText函数地址
定位FirstThunk指向的IMAGE_THUNK_DATA,此处就是函数的地址
遍历这部分IAT表,ImageThunkData->u1.Function与获取到的地址进行比较
IAT表不可写,修改内存属性
API函数入口地址改成我们构造的函数的地址。函数的实际地址是函数指针名加jmp指令E9后的数字再加5
导入表卸载
修改内存包含属性
将修改过的地址改为原本的地址
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.