通过线程回调实现更安全的HOOK技术

[复制链接]
21 |0
发表于 3 天前 | 显示全部楼层 |阅读模式


此方案来自于:TianYi_老师

首先获取必要的函数地址
修改内存属性,可读可写

利用API函数获取地址非常稳定

注意:在做一个商单的时候,T模块里边的汇编,特别是 HOOK.暂停() 里边的写内存函数
会导致程序崩溃,废了好大的力气才找到原因(不兼容一个命令 rep movsb 程序会直接崩 )
而且里边的asm_汇编读取字节和加法,有时候也会让程序崩溃
可以用alps模块或者其他模块来替代,这里主要是学习思路,也列上一些可能遇到的问题
之前因为这些问题折磨的头疼。



对于APIhook,最好指定一个HOOK位置,而不是在头部。
因为有时候头部hook会被VMP等壳程序检测到,+2的偏移正好是push ebp

系统API代码如下:
  1. 769B1640 | 8BFF                 | mov edi,edi                                 | GetComputerNameW
  2. 769B1642 | 55                   | push ebp                                    | -----偏移0x2 这里才是我们要hook的真正位置
  3. 769B1643 | 8BEC                 | mov ebp,esp                                 |
  4. 769B1645 | 83E4 F8              | and esp,FFFFFFF8                            |
  5. 769B1648 | 83EC 34              | sub esp,34                                  |
  6. 769B164B | 53                   | push ebx                                    |
  7. 769B164C | 8B5D 08              | mov ebx,dword ptr ss:[ebp+8]                |
复制代码

通个汇编把子程序的地址传入全局变量
这种写法就很高级,简单的汇编就拿到了函数地址,从而可以给T模块的hook使用
为后面的HOOK安装做准备


注意:亲测不能直接使用
到整数(&子程序指针)这种写法


这里的头部:_naked是一个关键字,代表裸函数
编译器编译的时候,是没有头部的,比如
push ebp
mov ebp,esp
sub esp,xxxx

而是直接写什么就编译什么
sub esp 0x200
xxxxx
xxxxx
add esp,0x200

====================================================

HOOK安装后,到API时
就会跳转到我们的函数里边



这个函数是采用asm汇编写的:
可没有固定函数头:(关键字_naked 必须存在)
push ebp
mov ebp,esp
sub esp,xxxx
汇编写什么就是什么
sub esp 0x200
就是保护了0x200的堆栈数据
至于平栈两个CALL内部会自己平




里边的PatchVMP其实是一个创建线程时候的回调函数

反而利用了这一点,执行我们的破解代码

当破解代码执行完毕 除了写入RSA系统以外

还修补了之前APIhook时候的jmp位置
修改成正常的代码

程序得以继续往下跑,而此时我们的补丁数据
已经成功写入了



创建线程里的回调函数
就是我们的核心破解函数


这个函数高明在,内存_写字节集_ex()

它并不是改指针里的数据,比如rsadata 和 rsakey_data

而是改写他们的指针,相当于只改4字节地址, 使其转向到了我们指定的数据

它内部是利用了一个不常见的API函数,好像还是NTdll里边未导出函数

我们实战的时候可以考虑用内存写字节集。




说一下这种HOOK的应用场景
1)首先只能HOOK一次,因为是线程回调嘛,如果这个API被调用了多次,第一次RSA数据并没有出现,也就是EBP+C还没有写入,就无法HOOK成功,而且程序还会崩盘。
解决方式就是使用T模块HOOK的0模式,执行源代码,那这样还不如统一使用alps模块呢




2)没有写一些判断,比如遇到了0指针怎么办? 程序直接就崩溃了。 简单来说就是HOOK的时机,我们也可以用Alps模块的回调函数设置线程函数来执行修改
所以上面这种写法我们多学习思路,实战的时候还要根据具体软件来做好安全判断







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表