本帖最后由 如此美丽。 于 2015-10-9 20:21 编辑
{:soso_e103:} 潜水好久了 冒泡一下
小放个福利 让你做到 不学找基址 找到动态地址就能拦截数据
动态构建汇编代码 拦截8个寄存器的值 (eax, ecx, edx, ebx, esp, ebp, esi, edi)
比如: 二漠又来发帖子了!使用TC的消息路由功能实现了HOOK拦截技术。用一个游戏的血量数值拦截举例!
当然 我这个没有用PostMessageA 来发送值 因为一次只能发送2个 所以我就放弃了 ..
(VB6编写的标准DLL)
函数原型:
Function HookRegister(ByVal JmpAddr As Long, Optional ByVal JmpSize As Long = 5, Optional ByVal ProcessId As Long = -1) As Long
JmpAddr : hook地址
JmpSize : hook字节 (默认: 5个字节)
77D507EA > 8BFF mov edi,edi
77D507EC 55 push ebp
77D507ED 8BEC mov ebp,esp [红色加粗 比如这种 几个整行行加起来 是5个字节 就填5]
77D507EF 833D BC14D777 0>cmp dword ptr ds:[0x77D714BC],0x0 [紫色加粗 比如这种 一个整行行加起来 是6个字节 就填6]
反正是一整行计算就对了 要>=5个字节 因为E9 00000000 [Jmp 00000000]
ProcessId : 进程PID (默认: -1为自身进程)
返回 : 首寄存器的地址(eax的地址 以此类推 加4个字节为其他7个寄存器) 比如返回 #00160000 为eax的地址 #00160000+4 就为ecx的地址了
然后放个定时器 或者 开个线程一直读取 就能实现 一直拦截血、蓝、坐标等 你要拦截的值
要还原的话 你就在hook前先读取该地址的 5个字节 然后 重新写入 JmpAddr 就完成了还原 {:soso_e103:} (我没写还原是 我怕多次hook后 不好还原其中一个 主要还是我懒得写) ..
一点基础的小白都没有的 请无视 {:soso_e137:}
.. 最后抽个疯 你猜我疯没疯 有疑问请跟帖 但是我不会回 !~ {:soso_e103:}
附一个 我用VB写的 小例子 (test.exe 关闭的时候 不会直接关闭(VB标准dll的缺陷) 请在进程中强制结束 TC好像的退出就是强制退出 所以不存在这种现象)
现在使用会直接退出 请把本机时间 设置低于 2015-05-01 即可使用 .. 该DLL 也只有一个UPX壳子 也可以自行脱壳 PJ .. 任性 :)
新插件 : http://bbs.tyuyan.com/thread-52806-1-1.html
|