DavidLiu 发表于 2024-6-24 23:33

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

本帖最后由 DavidLiu 于 2024-6-25 13:16 编辑


-------------------2024年06/25/13:11--------------------------
-------------------帖子修改--------------------------------------

先前为了防止求破违规没有放链接,这次帖子修改,把我写的源码和模拟程序贴进去

如下图,程序(植物大战僵尸.exe)启动的时候,会加载DLL (无限金币.dll)

DLL在初始化的过程中弹窗(用来模拟游戏的作弊补丁)





然后进入游戏界面





我写的EXE程序和DLL源码链接如下:
链接:https://wwl.lanzouq.com/iBNTB22o33wh
密码:6sbu


希望能够在DLL加载的时候,把它的DllMain初始化函数给修改了。

比如把弹窗内容给它改成:“Crack Done!!!”

实际分析的时候,这个“无限金币.dll"的加载基址始终是0x1000 0000(易语言的毛病)

所以实战的时候,不能把这个基址作为已知的基址直接使用,因为DLL加载很多时候它的基址都不是固定的,要么hook Loadlibrary获取,要么遍历程序模块获取


--------------原始帖子的内容如下--------------------------------


如上图所示,某游戏(就称它为:“植物大战僵尸”好了)在启动的时候,让它加载我们的dll

这个dll呢是大佬开发的作弊补丁(无限金币,要收费的)

我们知道dll在加载的时候,就会执行DllMain进行初始化,而它的验证呢,干脆就放在dll初始化的过程中

验证通过就可以无限金币,否则就没有。

想请教一下,有没有什么办法可以在DllMain执行之前就把代码修改掉呢?

(我尝试APIHOOKLoadlibrary 虽然可以得到dll的加载基址,但是人家dll加载后就会立刻初始化,找不到合适的时机改代码)

lies 发表于 2024-6-25 00:03

一个思路,仅供参考:
1、用工具将dll初始化代码开始改成CC
2、APIHOOK之后先设置自己的异常处理
3、Loadlibrary执行到初始化部分会触发异常,转到自己的异常处理里改代码,同时恢复用CC覆盖的代码
4、异常处理之后转回到dll初始代码执行,现在就是执行你修改的代码了

boot 发表于 2024-6-25 00:08

lies 发表于 2024-6-25 00:03
一个思路,仅供参考:
1、用工具将dll初始化代码开始改成CC
2、APIHOOK之后先设置自己的异常处理


这个问题很有价值,明确地说,可以,有好几种稳定的方法。如果能解决这个问题,也就解决了我出的下面这道题。

听说se只需1分钟就能patch?
https://www.52hb.com/thread-60773-1-1.html
(出处: 吾爱汇编)

DavidLiu 发表于 2024-6-25 00:20

lies 发表于 2024-6-25 00:03
一个思路,仅供参考:
1、用工具将dll初始化代码开始改成CC
2、APIHOOK之后先设置自己的异常处理


感谢老师的回复,我能大概理解您说的思路

(通过异常中断程序的执行,然后我们就趁机改代码,改完后在恢复程序往下执行)

但是拦在我面前的大山就是,要怎么来让它异常中断呢?中断后又怎么才能接管呢?{:5_191:}

DavidLiu 发表于 2024-6-25 00:22

boot 发表于 2024-6-25 00:08
这个问题很有价值,明确地说,可以,有好几种稳定的方法。如果能解决这个问题,也就解决了我出的下面这道 ...

给讲讲吧{:5_191:}

E少 发表于 2024-6-25 00:36

建议把游戏跟文件放网盘提供链接 要不然说再多都是白扯

lies 发表于 2024-6-25 08:16

DavidLiu 发表于 2024-6-25 00:20
感谢老师的回复,我能大概理解您说的思路

(通过异常中断程序的执行,然后我们就趁机改代码,改完后在恢 ...

直接16进制修改硬盘文件写入CC,不管怎样都会发生异常
至于接管,你都能Hook了就不能写自己的VEH?

弃天帝520 发表于 2024-6-25 08:47

E少大佬都发话了,你还不把游戏和dll放网盘

我的爱是你 发表于 2024-6-25 10:24

异常处理需要对编程进行深刻理解,因为此类开源代码或教程太少了。
我还是推荐简单的HOOK,如软件1.exe 会调用2.dll 遂dllmain进行初始化 会调用验证函数func1() 进行验证。
那么我们对func1()进行hook,这里就要考验hook功底了,太早2.dll没加载 太晚2.dll已经初始化调用func1()了。
我们要在检测到2.dll被加载时,即时注入Hook代码并执行Hook操作。

boot 发表于 2024-6-26 18:16

lies 发表于 2024-6-25 08:16
直接16进制修改硬盘文件写入CC,不管怎样都会发生异常
至于接管,你都能Hook了就不能写自己的VEH? ...

> 直接16进制修改硬盘文件写入CC

如果是加了壳之后的文件,是不能直接修改的,一般保护壳都有校验。因此,需要Hook判断解码时机并修改。
页: [1] 2 3
查看完整版本: Dll初始化的时候可以被劫持和修改么?