听鬼哥说故事之U3D游戏破解分析
平时里,我们休息的时候喜欢玩点休闲小游戏,不过对于游戏发烧友来说,玩点好玩的稍微大型的游戏则是最好的乐趣,好,今天我们对一款Unity 3D引擎开发的跑酷游戏进行破解分析,主要修改方式为dll文件的相关处理。
游戏名称:死亡航线 Dead Route
开发商:GLU
主要分析对象:dll文件的简单追踪函数和修改
分析步骤1:寻找关键点
打开游戏查看购买过程:
点击商店,点击购买东西,会弹出如下提示:
按照我们以前的方法和思路,那么就是寻找这个字符串吧:
You have not enough cash
不过效果并不理想噢,在所有xml以及smali文件中都没有发现它,怎么办。。
分析步骤2:想想弹框方式
到这里我们就应该想一想在android开发的中是如何控制弹框的,一般来说主要是在代码中使用Dialog,AlertDialg形式,可以用so文件来调用它的显示,当然,这个字符串也可能是存在于so的文件中了。通过搜索,在几个so文件中也并没有搜到相关内容。
就这样放弃,那肯定以后这类游戏就没得搞了,我们继续观察反编译后的文件夹结构
看到红框标注的,这个也只能是通过经验了,了解到这个游戏是Unity 3D引擎开发的游戏,因为这类游戏的assets文件夹下文件格式基本都是这个样子,很固定的。
Unity 3D引擎的相关资料,同学们可以自己搜索下自己了解了解,它采用c#的引擎进行开发的,核心代码都在dll文件中,跟win的dll文件基本一致。
所以游戏开发中会编写相关c#代码作为控制游戏的基本流程代码。于是猜测,弹框是不是就在dll文件中呢,我们打开
assets/bin/Data/Managed文件夹下Assembly-CSharp.dll
因为分析过几个此类游戏,核心代码都在这个名称的文件中,那么我们直接操作这个。
分析步骤3:通过弹框寻找购买的上下控制流程
反编译dll文件有多种方式,经常破解win平台下的软件的朋友会很了解,我在win下的破解很少,所以对于dll的相关操作都是现学的,主要包括反编译,读IL代码,修改。
这里,我们使用的工具为:(相关使用方法,自己搜搜学学即可)
Reflector.exe 反编译工具
Reflexil 分析插件
相关东西百度都可以找到,这里就不再叙述。
使用Reflector打开Assembly-CSharp.dll,使用F3进行搜索:
第一行红框,这里分为三种,我们选择最后一个,搜索字符串和内容。我们发现下面有两个地方调用它,好,这样就达到了我们的预期效果了。
双击一个进入:
C#代码,简单上来说会java基本能看懂点。这里按照c#的方式来讲,这个方法的效果通过名称可以猜到是创建金币不足的对话框,方法里面是创建对话框的内容。
这里就需要分析它的调用了,看是被谁调用,就是在商店购买那里产生的。于是,右击Analyze:
然后发现:
选择第一个,右击,goto Member打开对一个的类,发现:
到了这里,我们就明白了,这里是判断道具的金币数量与我们自己的金币数量做比较,如果道具的价钱大于我们的价钱,那么肯定要弹出我们的金币不足。在这里,我们就知道App.account.money.coins就是我们的金币数量,刚好游戏中氛围金币和银币,这里两个数据正好省的我们继续分析另一个的银币位置的时间了。
一步一步追踪看看coins是在哪里定义:
到App.account.money看到money这里了,发现:
打开A(),我们会发现:
好了,貌似形式非常明朗了。。。
我们找Money这个model,看看它里面是什么东西,这里来看,肯定是coins,cash的对象,也就是金币银币的。
我们这时候需要简单分析这个里面的每一个方法了
到第三个共有方法Money(int cash,int coins),,我们发现如下代码:
这里的a()跟Money里面的pirvate a()是同一个,打开它:
嗯,Eu和Ev的数值,我们刚才通过查看Money类的整体代码,大致明白一个代码coins一个代表cash,所以,我们这里修改
this.Eu=99999999 ,this.EV=9999999
这样,Money(int coins,int cash),在被调用的时候,肯定会将金币修改掉了。
这样修改以后,怎么才能调用呢?
这里跟0比较,那么我们就直接到商店里面的升级upgrade选项,升级东西,一升级肯定得先扣钱,同时有上面的分析过程得知,这里是会调用的。
所以,我们可以先修改一下试试看效果:
开始修改:
首先打开我们安装好的Reflexil插件:
修改过程如下:
第1行:从栈顶取实例指针,并入栈
第2行:ldc.i4.0是载入0
第3行:bge.s是bge的短指令格式<value1>大于等于<value2>跳(注释::一般代码中,都是反着写,因为有自己的逻辑跳到下面的)
第4行:ldarg.0,载入第0个参数并入栈
第5行:这个是咱们修改的,常数9999999
第6行:从栈中取出待存储数据和实例指针,存到Money.Eu里面
好了,这些代码大致就是这些意思,不懂的同学,请搜索:
[微软.NET程序的加密与解密].pdf,看雪的这本书籍。
一定要好好读读。。。
好了,修改完毕后,我们就要开始保存:
到这里以后,我们查看左边的文件结构,我们现在操作的已经是drcore.dll这个文件了。反编译工具会自动识别相关文件夹下的其他dll的,所以我们按照如下图方式操作保存,重命名,替换掉:
开始测试:
替换掉对应的dll文件以后,我们直接回编译,安装。
跳过tips,然后进入shop,选择枪,Upgrade升级
用金币升级看看:
再用银币升级看看:
好了,达到我们的预期效果。。。
那就暂时告一段落。。。
相关文件在百度网盘了。。。
破解完游戏发到了:
http://www.muzhiwan.com/com.glu.deadroute.html
建议大家读一读刚才推荐的书籍:
[微软.NET程序的加密与解密].pdf
听鬼哥说故事,天天都精彩.....
爱破解,爱鬼哥 群号:377724636 ,安卓游戏破解交流...
听鬼哥说故事
听鬼哥说故事之U3D游戏破解分析相关推荐
- 听鬼哥说TL大厦的相关分析
最近一直没有发分析游戏破解类的游戏,刚刚看到一个好玩的游戏更新了,那么我们来分析下新版本的破解. 游戏的破解,主要靠的是积累经验,没有千篇一律的游戏,所以只是照着教程修改是次要的,重要的是破解思路的分 ...
- PSP游戏破解分析 – opnssmp.binmesg_led_0X.prx
序言 距离上一次写PSP破解方面的东西已经过了3年了,这是何等的跨度啊~~~好了,前面两篇算是基础的基础,可以说不管你是想开发自己的程序在自制固件上运行,还是打算走开发自制固件的路,那些都是必备的东西 ...
- 按照鬼哥学so变化,四,第一章的例子
跟随鬼哥伦比亚科学so变化,四.第一章的例子 图纸/文化 听鬼哥说故事 ---------------------------------------------切割线--------------- ...
- 跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复!
跟着鬼哥学爬虫-10-python微信-5-加上了人工智能回复! 其实人工智能回复,现在网上有很多开源的机器学习,AI学习的框架,但是最重要的一点就是没有语料,也就是没有相互回答的数据内容. 所以这个 ...
- 跟着鬼哥学so改动,二,进行篇
图/文 听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够 ...
- 跟着鬼哥学so改动,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...
- 跟着鬼哥学so修改,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的修改,重要性大家都知道,这里从头编写so文件,分析so文件,修改so文件,打算做一个系列的教程,当然,主要是看时间允许. android的sdk配置以及ndk环境 ...
- 跟着鬼哥学爬虫-3-美女图片!!!
这一节课,是群里很多娃在等待的课程. 通过前面两篇文章的学习,我们对BeautifulSoup4的简单使用有了了解. 了解了使用这个爬虫的核心是熟悉分析清楚html标签,一些css的简单知识,找准了标 ...
- 吉哥系列故事——完美队形II(hdu4513+Manacher)
吉哥系列故事--完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) T ...
最新文章
- c语言实现椭圆曲线算法,椭圆曲线加密算法的C语言设计和实现
- Linux运维工程师必备技能
- boost::contract模块实现throw on failure的测试程序
- springBoot整合Ehcache——工具类调用
- Utils.toDip()的用法
- 【Python】部分基础+Flask/JSON/....+零碎笔记
- undertow 怎么创建线程_为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow
- 【数据湖加速篇】 —— 如何利用缓存加速服务来提升数据湖上机器学习训练速度
- java 集合工具类_Java集合中Collections工具类总结
- HTML5 Canvas 车架号第十位是L,汽车生产日期字母对照
- c语言社交网络,图论在社交网络中的应用研究
- Chorme 模拟分辨率设置
- Python 用均匀分布验证中心极限定理
- CarSim仿真快速入门(七)—车辆参数化建模
- VSAN磁盘组更换硬盘
- IDEA中修改Maven的项目名称
- 10大耗油,10大省油。
- Web前端 学习笔记6(浮动)
- 计算机键盘重复,win7系统电脑键盘打字时总是出现重复字符的解决方法
- Component series.line not exists. Load it first.
热门文章
- mysql y m d h_php时间问题?mysql数据库的时间格式(Y-M-D H:I:S) 在PHP页面想这样显示(Y-M-D) ('.$rows['ndate'].')...
- Zcash的“十月围城”
- bsdiff算法c语言实现,iOS 使用bsdiff进行资源文件增量更新(bsdiff / bspatch)
- SVG 从入门到后悔,怎么不早点学起来(图解版)
- 数据库导入导出方法以及注意事项
- Netscreen + Squid (Transparent) + c-icap + ClamAV
- linux系统如何关闭触控板,在Deepin Linux 15.7系统中开启或关闭触摸板的方法
- GUVC-T10GD-L185 臭氧灯监控172nm和185nm紫外线灯监测高可靠性光电二极管杀菌灯监控
- Qt下简单WebSocket网络聊天服务器
- A + B Proble