上一篇,多开方法,适用于一年前的版本
http://www.cnblogs.com/suanguade/p/5646776.html
前言:
一转眼一年过去了,日子越来越无聊了,于是,准备再玩一玩梦幻手游,
有了去年的经验,那就直接来试试看呗,安装了梦幻手游单机版之后,更新了之后,用去年的工具运行一下。
竟然给我搞挂掉了,看样子这玩艺是又有什么新的动作阿,
准备开工,开始分析。
正文:
其实有了前一个文章,这块也没什么难度,
直入主题,
直接找到这里,看看情况
代码还是那块代码,但是样式突然有了变化,加了乱七八糟一堆参数,
站在我个人的角度上来说,其实我是没有兴趣一个一个扒它参数的,
但是实际上有几个东西也是可以看出来个大概的,
中间4个变量是窗口信息,然后还有DUI信息等等,还是乱七八糟的,
然后参数2的值也变了,变成了 0x1003D0,和我没什么关系,
不考虑这里了,
原因1:抓参数信息很费事,
原因2:即便抓住参数信息,参数里面如果哪些有变化了,怎么办,还要分析,费事,
原因3:就算这些信息抓全了,如果DLL和Shell之间有交互,或者Shell有使用DLL的内存或者DLL有使用Shell的内存,这就又要想更多的办法来解决
最后很可能为了解决一个小问题,慢慢地变成解决一堆大问题。
所以,我决定从前面入手,看看是否有办法解决,
去年的帖子里面说了,这个游戏判断多进程,
实际上就是创建了个Mutex,然后判断,
然后枚举进程,还是那么老的套路,
不过,其实这玩艺不怪它,它本身也没什么高级的模块在里面,
而且一个非安全软件公司,常规方法也就可以了,
好吧,再次进入主题,
入口点直接进来,VS编译出来的,一眼就能看出来这是入口点
里面是一堆环境判断、资源判断等等,都是有明文字符串的,真体贴。
资源完整性校验。
现在都允许双开了,而且是个格式化字符串,那就是说以后是不是可能允许三开四开。
看这字符串名字,估计是数字签名校验,
再往后就是加载资源,创建窗口了,也就是说,到这块的时候该校验的就都差不多了,
突然有了一种回到了十年前的感觉,一点新意都没有,还是那老三样,
到这里就有眉目了,老一套的办法,一个jmp解决全部问题,
但是这个jmp怎么加呢,在哪加,
当然是在关键跳的地方,哪是关键跳呢,
最简单的办法就是看这里,
判断了多开之后,立刻就走了,走哪去了,LABEL_83,肯定就是要退出的地方呗,
让我们的代码,不要跳到那边,不就好了?
由于前面都没有异常极端分支,所以,可以清楚地看到,到了上图中,输出客户端个数之后,
立刻就跳走了,那就是说,只要不让它进入这个if,多开问题就解决了,对不?
当然是对的,因为其他判断多开的地方,都在输出之前阿,哈哈哈哈。
具体怎么不让它进入if,那就只能让条件不满足了,
直接说结果吧,没啥技术含量,
关键还在,
这个函数里面,
进去之后观察,这函数,不是返回1,就是返回0,很符合要求,那怎么办呢,
N个办法,
1:让它永远返回1
2:外面越过这个函数调用
3:………………
其实这些多少都有点局限性,比如
1在这里出现的问题,实际上是,如果永远都让它返回1,我这里测试的时候,没有起到效果,很可能是我测试的方法比较SB,但是确实没有起到应有的效果
2如果外面越过这个函数调用,需要修改的字节太多了,我不想那么玩,万一我什么时候想改回去,岂不是又要费事,况且扣ShellCode也麻烦
最后我想的办法是
修改这条汇编代码,
因为首先可以确定的是上一个函数的返回值只有0和1,两种,
那么为了让jnz满足,我只要操作一下寄存器,让zf = 0,比如 inc eax,0+1=1,1+1=?,不就满足了,甚至后面都不用改,
而这里只有2字节,改内存保护属性阿什么的,改机器码,都方便,一个 InterlockedXXXXXXX 还很安全,
这里改了之后,就要想想其他地方了,往前看两句,就会发现
亲,前面还有个不稳定的跳转,可能会导致不会走到我们的那个位置,
我这人就喜欢给工作打上双保险,所以,直接把这里的jge 给干掉,变成两个 0x90,OK,不管什么情况,都会走到我们的inc 和jnz,
两处补丁结束之后,为了更加保险,我还打了第三处补丁,
其实第三处补丁实际上就是个兜底操作,我在
这个位置,只改2字节,让这句话如果出了问题,直接跳到下面去,
下面的 byte_4ADD82 判断,会返回到程序开头的地方,重新来跑一圈,
如果万里有一失败了,我也不用再重新打开程序玩一次,直接点一下MessageBox就行了,(纯粹是我懒)。
到此为止,三个点全部都patch了之后,就可以支持多开了,
但是这时出现了一个问题,我到底怎么patch呢,
最简单的办法是直接冷patch,但是这样的话,其实后面还有签名校验呢,即便后面的签名校验过了,万一哪个DLL里面再来个二次校验呢,
甚至对等校验,三次校验,反正这种事情我们是干得出来的,
所以冷patch肯定是不靠谱的,那怎么办呢,
当然就是热patch了,
热patch有几种下法,
1
2
3
4
好了,本次分析结束。。。
总结:
其实吧,和去年相比这游戏的保护手段是高了一些,但是怎么说呢,
毕竟也就这个程度吧,
整套分析流程,我没有上调试,就看汇编,写代码验证,
大概一共就用了不到1小时。
强度挺低的。
最后来个6开的图吧。