Unity单机手游逆向破解思路(仅供学习参考,禁止用于非法行为)

这篇具有很好参考价值的文章主要介绍了Unity单机手游逆向破解思路(仅供学习参考,禁止用于非法行为)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安卓逆向常用工具

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

针对安卓单机游戏逆向,尤其是逆向使用Unity引擎开发的安卓游戏,只需了解下面的工具即可。

(1)Android Killer

       Android Killer是安卓通用逆向工具,其可以对apk进行反向编译,得到smail代码,用户可以更改smail代码后,对apk重新打包,以实现破解的功能。其还可以将apk转换成等价的java语言,以便分析程序逻辑,来更好的找到对应的smail代码。

(2)ILSpy (针对Unity开发的手游)

       ILSpy的作用主要是将Unity封装在apk中的.dll库文件反编译成等价的CSharp代码,以便于观察游戏程序逻辑,从而决定修改位置。

(3)ILDasm (针对Unity开发的手游)

       ILDasm的作用主要是将Unity封装在apk中的.dll库文件反编译成等价的可编辑的IL类汇编指令。

(4)ILasm (针对Unity开发的手游)

       ILasm的作用是将IL类汇编指令重新编译成.dll文件。

二、逆向案例分析

1、Unity单机手游案例1

以Unity单机手游“模拟生活”为例,说明Unity类手游的破解思路。

(1)解压apk文件

使用解压软件直接将apk解压,解压完成后,进入到assets\bin\Data\Managed目录中(仅限Unity手游),并找到其中的Assembly-CSharp.dll文件(存放了游戏主逻辑),如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 文章来源地址https://www.toymoban.com/news/detail-805911.html

       随后以文本方式打开”Assembly-CSharp.dll”文件,查看是否被加密,如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

       一般情况下,能解析出如图所示的文本,说明.dll文件未被加密,可以直接进行逆向分析。

(2)使用ILSpy软件查看C#语言等价源码确定修改位置

       打开ILSpy软件,选择打开”Assembly-CSharp.dll”文件后,软件会自动进行反编译处理,将.dll文件反编译为C#语言,随后我们可以搜索游戏关键字,比如金钱(money)、等级(level)、血量(HP)和经验(Exp)等等,一般正规的游戏,变量命名都会很规范,如果实在找不到,只能硬啃代码进行分析了。

       这里以查找“模拟生活”游戏中的金钱为例,搜索money后出现了很多结果,如图所示

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

          在搜索结果(图中标2所示)中,依次查看最可能有修改金钱操作的代码,这里最后锁定了”EarnMoneyBonus”类,字面意思就是“赚钱奖励”,随后点进去,发现其中有Update()和FixedUpdate()函数,这两个函数,是Unity游戏中的重要函数,其分别表示随着游戏的进行,每一帧都会调用的函数(Update)和每隔固定时间会调用的函数(FixedUpdate)。

       先观察Update中的函数,从变量名分析,其中会对一个时间相关的变量进行操作,和金钱关系不大,因此跳转到观察FixedUpdate函数。FixedUpdate函数中,没有看到和money相关的字眼,但是有一个自定义的Finish函数,于是继续查看Finish函数,如图所示。

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 

       在里面终于看到和money有关的变量m_moneySum(金钱总数)了,继续观察,还有m_multiplier(倍率),这两个量通过一定的计算关系赋值给num:

num=m_moneySum*(m_multiplier-1),而后的代码(2中),以num作为参数进行了某些操作,再往后看代码3,其中调用了SetText(设置文本)函数,通常此类函数是直接影响显示界面的,也就是说,这个函数改变了某个地方显示的文本,再看里面的参数,还是和m_moneySum和m_multiplier有关,因此可以断定,改变这两个值中的一个,必定会使游戏某个地方的文本产生突变。为了使游戏保留可玩性,从字面意思理解改m_multiplier(倍率)可能会更好(也可以试着改其他变量)。

可以看到,之后m_multiplier被重新赋值为1,这里为了效果明显,将其改为1000000试试(不是直接改C#代码),这里相当于确定了修改的位置为”EarnMoneyBonus”类中”Finsh”函数中的”m_multiplier”变量

(3)通过ILDasm插件,确定IL汇编指令的修改位置

       在Visual Studio 2019及以上版本中,内置了ILDasm插件,先在之前解压的apk的Managed上右键,选择“使用Visual Studio打开(V)”,这个操作的目的是为了使工作目录直接切换到”Assembly-CSharp.dll”文件所在目录,省了很多操作,如图所示。

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 之后,可以在Visual Studio的“工具”,“命令行(L)”中选择“开发者命令提示(C)”,如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 随后输入如下命令将”Assembly-CSharp.dll”文件反汇编成IL指令文件:

ildasm Assembly-CSharp.dll

效果如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 此时自动弹出了ILDASM插件的GUI界面,并把.dll反汇编成了.il,之后要做的就是定位IL指令文件中需要修改的位置。

根据前面确定的修改位置,先找到”EarnMoneyBonus”类,再找到其中的”Finsh”函数,最后定位给”m_multiplier”变量赋值为1的地方。

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 

       最后我们确定了需要修改的地方为IL_00ce: ldc.r4 1,如果改成IL_00ce: ldc.r4 1000000,则意味着每次运行Finish函数后,m_multiplier都会被赋值为1000000,这里不能直接修改,需要等导出文本文件后再修改,因此先复制特征串”IL_00d3: stfld float32 EarnMoneyBonus::m_multiplier”以便于查找到需要修改的位置。

       如图,在“文件(F)”中,找到“转储(D)”,随后保存,命名为“Assembly-CSharp.il”,如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 

(4)修改“Assembly-CSharp.il”文件

       使用任意文本编辑器打开“Assembly-CSharp.il”文件后定位到(3)中确定的修改位置后(直接搜索前面复制的特征串),将其改为1000000,如图所示。

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 (5)编译“Assembly-CSharp.il”文件

       使用ILasm插件将“Assembly-CSharp.il”文件编译为“Assembly-CSharp.dll”文件。和前面步骤一样,在Visual Studio中打开命令提示符后,使用如下命令编译“Assembly-CSharp.il”文件:

ilasm Assembly-CSharp.il /output=Assembly-CSharp_crack.dll /dll

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

 

这里为了不覆盖原来的“Assembly-CSharp.dll”文件,将新编译的文件命名为“Assembly-CSharp_crack.dll”文件,该文件就是破解后的Unity游戏主逻辑文件,替换掉原Apk中的“Assembly-CSharp.dll”文件后,重新打包编译apk就能生成破解的游戏安装包了。

(6)使用Android Killer重新编译Apk

使用Android Killer打开“生活模拟器”apk,之后进入到Android Killer该安装包的工程目录projects\安装包名称\Project\assets\bin\Data\Managed中,用Assembly-CSharp_crack.dll替换掉原Assembly-CSharp.dll文件(替换后,将_crack后缀删除),如图所示

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

       随后点击Android Killer中的编译功能,编译生成破解的apk,如图所示:

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

        破解的apk输出的位置为projects\安装包名称\Bin\xxx.apk。

效果如图所示,每点击一次挣钱,获得的是999999金钱,和前面反编译出的C#源码中,num=m_moneySum*(m_multiplier-1)计算结果一致,其中m_multiplier为倍率,被我们修改为1000000了,而m_moneySum为1,因此每点击一次得到999999

unity手游逆向,安卓逆向,unity,游戏,c#,android,安全

三、附录

本文所用的Android Killer和ILSpy软件链接如下:

链接:https://pan.baidu.com/s/1oiecCQkJVFoucLmwSZfJIA 
提取码:long 

关于ILDasm和ILasm插件,可下载安装Visual Studio 2019及以上版本,其内置了这两个插件,VS官网下载地址如下(其中Community为免费版):

Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)

 

到了这里,关于Unity单机手游逆向破解思路(仅供学习参考,禁止用于非法行为)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 逆向破解思路和获取app的代码,脱壳操作(四)

    加壳 什么是加壳? 我们的ipa文件上传appstore,苹果会给我们做一个加密,其实我们运行在内存中的过程是一个加密的壳程序,当然在手机中我们会对他进行解密壳程序,来直接运行可执行的文件,当然苹果这样做的目的是为了保护我们的程序。 脱壳 脱壳的方式 1.硬脱壳:

    2024年02月15日
    浏览(35)
  • hive学习(仅供参考)

    将结构化的数据文件映射为数据库表 提供类sql的查询语言HQL(Hive Query Language) Hive让更多的人使用Hadoop 提供了一个简单的优化模型 HQL类SQL语法,简化MR开发 支持在不同的计算框架上运行 支持在HDFS和HBase上临时查询数据 支持用户自定义函数、格式 常用于ETL操作和BI 稳定可靠(

    2023年04月08日
    浏览(43)
  • Unity游戏逆向及破解方法介绍

    背景介绍 随着手游的发展,Unity3D引擎逐渐成为主流的游戏开发解决方案,传统cocos的2D游戏逐渐被取代,一些公司在Unity3D游戏方面的产出也越来越多,如天天飞车,天天来战,全民破坏神,全民偶像,全民突击等游戏。Unity3D游戏的不断产出,游戏的安全性要求也越来越高,

    2023年04月08日
    浏览(34)
  • Python爬取MidJourney历史图片【仅供参考学习使用】

    使用MidJourney时, 在https://www.midjourney.com/app/这里有接口https://www.midjourney.com/api/app/recent-jobs/?amount=35dedupe=truejobStatus=completedjobType=upscaleorderBy=newpage=3prompt=undefinedrefreshApi=0searchType=advancedservice=nulltoDate=2023-06-16+09%3A50%3A17.379092type=alluserId=b12e169c-f609-4fd6-b917-11c2deaa8cffuser_id_ranked_score=n

    2024年02月13日
    浏览(51)
  • 深度学习:从入门到精通课后习题解答本答案仅供参考

    第一章: 1、通过本章的学习,你认为深度学习崛起的原因有哪些? 答:(1) 计算能力的发展。深度学习的起源并不晚,但是在发展初期遭遇瓶颈的最主要原因是:当时的计算资源无法支持我们实现深度学习如此庞大复杂的计算。直到我们开始使用GPU进行计算后,深度学习才终

    2024年02月07日
    浏览(52)
  • OpenCV学习笔记之Overload报错的处理(仅供参考)

    今天在练习一个文档识别的小项目时,运行后一直提示报错,可是我还不知道问题出在哪里,源代码如下: 报错内容如下: 可是错误并不在报错所提示的那一行,而是上面的findContours()函数,新版本中这个函数要有两个返回值(以前好像是有三个),猛然反应过来以后,加上

    2024年02月12日
    浏览(35)
  • C/C++安卓手游内存逆向、手游call教程(类人猿学院)

    主要内容和方向: 从C语言基础知识讲起;x86/x64/arm汇编基础、逆向手游内部数据、内存读写和call调用、内部hook;注入call框架编写;辅助控制界面和通讯;内部封包逆向数据分析 。目前全网就我们能搞安卓手机、模拟器call分析和调用一套龙教程,学会基本是手游脚本辅助行

    2024年02月04日
    浏览(36)
  • 吾爱破解安卓逆向入门教程学习心得(1-4)

    b站视频链接:https://www.bilibili.com/video/BV1wT411N7sV/?vd_source=f767aeec67fd5d5cc2f6ff3e890917d0 源帖:https://www.52pojie.cn/thread-1695141-1-1.html 下载个雷电模拟器,MT管理器,NP管理器 将MT管理器,NP管理器拖到雷电 相关软件地址https://www.aliyundrive.com/s/TJoKMK6du6x 接着在雷电开启root然后重启 具体配置

    2024年02月10日
    浏览(39)
  • FPS手游逆向分析--------矩阵的精确定位

    2.1精确定位矩阵 通过上述步骤 我们找到了矩阵,但矩阵确会在每次打开游戏后由于内存的分配而重新加载,如何实现自动寻找矩阵便是我们要考虑的问题 2.1.1通过特征码定位矩阵 所谓特征码就是总出现在变动值附近的不变动的值 与上文的通用特征码不同 定位矩阵的特征码

    2024年02月12日
    浏览(43)
  • LCD1602操作指令(仅供参考)

    1.清屏指令( 0000 0001 ) 1.清除液晶显示器,即将DDRAM的内容全部清除。 2.光标回到液晶屏左上方。 3.地址计数器(AC)的值设置为0。 2.光标归位指令(0000 001x) 1.把光标返回到液晶屏左上方。 2.把地址计数器(AC)的值设置为0。 3.保持DDRAM的内容不变。 3.模式设置指令(0000

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包