吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

123
返回列表 发新帖
楼主: DavidLiu

Dll初始化的时候可以被劫持和修改么?

[复制链接]
 楼主| DavidLiu 发表于 2024-6-30 13:39 | 显示全部楼层

lies 发表于 2024-6-30 01:45
其实可以 Hook ntdll.LdrpCallInitRoutine ,这时 DLL 已经载入,但尚未执行 DLLMain
只是 ntdll.LdrpCallI ...

感谢老师的指点,我查阅一下相关知识,HOOK这个函数来试一试
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2024-6-30 13:39 | 显示全部楼层

E少 发表于 2024-6-30 10:30
https://share.weiyun.com/WBnpi5Tq 拿去吧 直接用植物大战僵尸游戏来演示的注入DLL如何HOOK并修改 HOOK源 ...

感谢E少大哥,先顶后看,我试一试
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
居然要中文 发表于 2024-6-30 13:49 | 显示全部楼层

学到了新知识,感谢大佬
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
lies 发表于 2024-6-30 22:34 | 显示全部楼层

DavidLiu 发表于 2024-6-30 13:39
感谢老师的指点,我查阅一下相关知识,HOOK这个函数来试一试

Visual Leak Detector 源码里面有现成的 LdrpCallInitRoutine Hook 代码可以参考,详见:
https://www.cnblogs.com/young520/p/17389224.html
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
boot 发表于 2024-7-2 01:18 | 显示全部楼层

DavidLiu 发表于 2024-6-30 13:37
Boot老师中午好,您的办法我试了,先说结论,不太行。

我是按您说的HOOK了NTdll---zwcreatefile(),程 ...


如果常规Hook的难度是一颗星,那么Hook未导出函数的难度评两颗星。

不过也能实现:
下载:https://versteckt.lanzn.com/i76Oy239uv1c
密码:是你的企,鹅,开头前4位

这种方法等效于Hook DllMain:
1. 仅适用于无壳状态下的“无限金币.dll”。
2. 若“无限金币.dll”带有vmp 3.84的壳:虽Hook有效,但此时dll处于已加载,目标地址尚未解码的状态,内存领空均为00,常规写内存会被壳解码后还原/覆盖,意味着破解失败。这种情况仍可以通过veh解决。

我编译的dll已解决第1种情况,过几天有空把第2种情况的解决方案完善......






吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2024-7-2 12:23 | 显示全部楼层

boot 发表于 2024-7-2 01:18
如果常规Hook的难度是一颗星,那么Hook未导出函数的难度评两颗星。

不过也能实现:

再次感谢Boot老师的指点,这两天在加班了,我去查查关键词veh把代码写出来
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| DavidLiu 发表于 2024-7-2 12:30 | 显示全部楼层

E少 发表于 2024-6-30 10:30
https://share.weiyun.com/WBnpi5Tq 拿去吧 直接用植物大战僵尸游戏来演示的注入DLL如何HOOK并修改 HOOK源 ...

感谢E少大佬的教程,我大概能看明白您的思路,是在LoadLibraryA之后找到合适的API,在此期间写入我们的HOOK代码。

但是这里可能有一个线程安全问题,就是DllMain此时也是处于初始化的过程中,感觉就是比“快”————是我们HOOK的快,还是DllMain运行的快

忙完我都会根据不同思路来写代码,看看哪种方式更加实用。再此感谢E少老师
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
boot 发表于 2024-7-2 12:48 | 显示全部楼层

DavidLiu 发表于 2024-7-2 12:23
再次感谢Boot老师的指点,这两天在加班了,我去查查关键词veh把代码写出来 ...

我编译的winspool.drv,对LdrpCallInitRoutine进行了Hook。由于LdrpCallInitRoutine是未导出函数,所以无法用GetProcAddress和LoadLibrary获取函数头地址。要判断一个函数是否已导出,很简单。x32Dbg中ctrl+g输入该函数名,例如LdrpCallInitRoutine,如果存在,则已导出。如果搜不到,则有可能是未导出的。
解决方法是通过特征码匹配到LdrpCallInitRoutine地址,由于每台电脑上匹配到的地址均不同,具体patch处需要用内核工具扫描查看,并计算patch的字节大小,之后在函数中段做内联Hook,这种方法也可以Hook64位的LdrpCallInitRoutine。


参考了@lies 提供的思路。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

21层
22层
23层
24层
25层
26层
27层
28层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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