首页
社区
课程
招聘
[讨论] 求助一个dll如何自动更新的问题..
发表于: 2012-7-3 03:46 6856

[讨论] 求助一个dll如何自动更新的问题..

2012-7-3 03:46
6856

如题所示,
游戏的客户端通常会有一启动端.exe 然后 启动端.exe 运行时检测服务器端版本号,然后对比一般是这样的原理实现更新,
但是这光秃秃的dll,该如何实现自动更新呢??
求个好点儿的思路,因为这程序在被打开的时候应该是无法覆盖的吧.. 既无法覆盖,dll又必须有宿主进程,那么这该如何实现自动更新呢??

目前有个不成熟的思路,就是在dll中添加一个.exe 资源,dll被宿主进程运行的时候检测,假如检测到了服务器上的dll版本号高比本地的,则释放那个exe资源并运行,
问服务器下载出来那个高版本的dll,然后在自己删除掉自身,这个好像也可行哈,但好像有点容易被杀毒察觉到..

不知道各位仁者仁者智者见智... 说说各位的主意呢..

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
自已专门做一个更新程序,只用来下载程序的所有更新,更新完后,自动调用winexe()来启动主程序。
2012-7-3 08:44
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
下载的话,可以参考URLDownLoad()函数。
2012-7-3 08:45
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
在DLL里面创建一个模态窗口!
2012-7-3 09:43
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
5
rundll32.exe
2012-7-3 13:12
0
雪    币: 7
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这宿主进程被关闭了,dll中的模态窗口按说也没理由还会继续存活的??
能不能稍微详细一点点哦,谢谢了哦。。
2012-7-3 14:42
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
游戏一般都用这手段
2012-7-3 20:34
0
雪    币: 7
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
O(∩_∩)O哈哈~,游戏是手段还不错还不错,这木马也这样搞,还没等更新呢,估计就被查杀了。。

不过估计也只有这样的思路了。

dll被加载的时候检测一下服务器上的配置文件,如果版本高于当前版本,先用别的名称下载到本地,
在游戏快关闭的时候截获到关闭游戏dll  释放升级程序.exe把下载出来的版本给更改了。
就是好像太繁琐了这样。
2012-7-3 20:45
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
9
其实可以这样。
首先dll检查是否有更新,如果有的话则下载新文件,新文件的文件名必须和原文件不同或者放在其它路径下。然后申请一块内存把更新函数的代码考进去执行。
代码不用太复杂,只要传递两个参数就行,一个是当前模块的基址,另一个是新文件的路径。首先调用freelibrary释放当前模块,然后把新文件覆盖进来即可。当然考虑到一些因素,你也可以把这部分专门做成一个dll来调用。
不过如果你的dll注入过度,或者是其他代码的运行依赖的话,也许你还需要考虑一些其它的问题
2012-7-3 23:40
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
把你的更新opcode在客户端里面申请一段内存,然后覆盖进去,然后要更新的时候调用你的DLL直接CALL这段代码,CALL完后你查下MSDN有个API可以把DLL当前线程给关闭后卸载,非freelibrary,有时间给你写个例子吧!
2012-7-4 17:37
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
汗,这个当然只下载 新版本的 部分,
2012-7-4 22:54
0
雪    币: 6400
活跃值: (4160)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
12
一个流程:
一个DLL导出一个函数用于检测是否有更新然后更新->将这个DLL放在另一个DLL的资源中->加载后面的DLL先解出前面的DLL用rundll32.exe xxxxx命令运行一下前面DLL的导出函数,然后做相应的处理.
2012-7-4 23:50
0
游客
登录 | 注册 方可回帖
返回
//