zoukankan      html  css  js  c++  java
  • 我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)

    上一篇,多开方法,适用于一年前的版本

    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开的图吧。

  • 相关阅读:
    Mysql:read-only 配置
    Mysql:我自己总也记不住的【选项语法规则】: Command-Line-Options、Configure-Options、System-Variables、Status-Variables
    Mysql:Delayed Replication:延迟复制
    Mysql:Semi-Synchronous Replication:大名鼎鼎的 【半同步】复制
    Mysql:Replication
    Mysql:Group Replication:实战:注意事项
    Mysql:Group Replication
    端口映射工具En化版:PortMap_Gold_Edition_Premium_3.4:可以绑定特定的网卡NIC
    Mysql:SQL Modes:最令我烦的sql-modes:一个标准它不香么?!
    Mysql:Alternative Storage Engines:可替换存储引擎:mysqld的核心特性
  • 原文地址:https://www.cnblogs.com/suanguade/p/7256212.html
Copyright © 2011-2022 走看看