我要多开梦幻手游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开的图吧。
我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)(二)的更多相关文章
- 山西大同大学教务处学生端--送给学弟,学妹的礼物,可在PC端,手机端操作
解决问题:大同大学教务处官网学生端口一进去就卡住了,点上面一行的菜单无响应 转眼已是四年,想想自己大学即将结束,不由得让人感慨啊.这才刚开学几天,我就听到有同学在因为补考,选课的事情发愁.学校官方的教 ...
- 判断是pc端还是手机端,并跳转到相应页面
<!-- 判断浏览器是否为手机端 --> <script> // class ! function(navigator) { var user ...
- 判断浏览器是pc端还是手机端
1. 判断浏览器是pc端还是手机端 <script type="text/javascript"> var browser = { versions: function ...
- js 判断pc端或手机端
<script> (function () { var navUA = navigator.userAgent; var defIncludeStr = "iPhone|Andr ...
- 关于PC端与手机端随着手指移动图片位置放生变化的拖拽事件
当按下鼠标时,图片随鼠标移动松开时图片回到原位 drag("div_id") function drag(node_id){ var node = document.getElem ...
- 山西大同大学教务处教师端——可在PC端,手机端操作
解决问题:大同大学教务处官网教师端口一进去就卡住了,点上面一行的菜单无响应 下载方法(学生端 / 教师端 / 验证脚本): 链接:https://pan.baidu.com/s/1MWrJXoPzE ...
- 支持pc和移动端的手写签批功能
由于之前的业务需要,要求在pc端(用鼠标写字).移动端(手写)实现会签功能,然后百度下载了个签字插件,经过一些修改和功能添加,实现了现有的功能插件,效果如图: 代码下载地址:https://githu ...
- 【工具】PC端调试手机端 Html 页面的工具
一.概述 有一个项目需要在手机端显示一个 web 页面,而每次把应用 launch 后,从手机端看比较麻烦,因此搜罗了几种在 PC 端调试手机端页面的工具. 二.工具 http://fonkie.it ...
- 自动判断PC端、手机端跳往不同的域名JS实现代码
输入相同域名,在pc端和移动端会出现不同的页面效果,一种是用栅格系统实现自适应, 更多的是设计两套不同的模板和两个二级域名或者一个主域名和一个二级域名(就是有区别就可以了); js代码判断浏览器的用户 ...
随机推荐
- Safari的CSS HACK方法
以前的文章里提到过IE6/IE7/IE8/IE9/.Firefox的CSS HACK方法,那么Safari的CSS HACK是什么呢? 请看以下CSS代码: .box { color: black ...
- ReactOS 代码更新后的编译安装
其实四月份就已经更新过了,最新版应该是0.4.11+,具体去GITHUB上去看. 至于编译,其实在最早的0.2版本时代,ReactOS就曾经给出过一套完整的编译方式, 并且给出过一个完整的编译环境,版 ...
- 【外】001-python3之zip函数
zip函数语法格式zip(可迭代对象1, 可迭代对象2, ... ,可迭代对象n) 函数接收任意个可迭代对象作为参数, 将所有对象中对应位置上的元素分别打包在一起组成一个tuple, 并将所有的tup ...
- react中替换关键字并且高亮显示的方法
在react项目中,将关键字高亮显示 : 首先封装一个方法,只需要传入('要检索的内容','检索的关键字','给内容中的关键字加上的有特殊标记的标签名')这三个参数即可高亮显示关键字.详见:https ...
- ubuntu18.4 搭建lamp环境
一.Apache2 web服务器的安装: 可以先更新一下服务器(可选) 1.sudo apt update # 获取最新资源包 2.sudo apt upgrade ...
- redis-布隆过滤器使用
占用空间测试地址 https://krisives.github.io/bloom-calculator/
- 使用truelicense实现用于JAVA工程license机制(包括license生成和验证)
开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直 ...
- weex初始化启动webpack.common.conf.js中的...报语法错误
使用Babel转码 // 最新转码规则 $ npm install --save-dev-g babel-preset-env // react转码规则 $ npm install --save-de ...
- 解决springdatajpa插入大量数据速度慢的问题
通过看控制台日志可以知道,jpa执行插入的时候每次都会先查询是否存在,然后再一条一条的执行插入,速度相当慢,所以可以jpa和mybatis一起用,用mybatis写原生的sql语句,用过foreach ...
- RabbitMQ:从零开始
目录 一.介绍 二.安装 三.基本配置 四.Java Demo 五.基础API使用 六.ACK机制 七.消息的持久化 八.消息的公平分发 九.消息的优先级 十.消息的路由分发 十一.Spring集成 ...