unity 反编译 源码-Unity游戏逆向和破解方法介绍

背景介绍

随着手机游戏的发展,Unity3d引擎逐渐成为主流的游戏开发解决方案。 传统的cocos 2D游戏正在逐渐被取代。 破坏神、全民偶像、全民突击等游戏。 随着Unity3D游戏的不断输出,游戏的安全性要求也越来越高。 这里介绍一些逆向工程中用到的技术和思路,以及一些辅助工具,以及一些知识科普。

识别 Unity 游戏

Android平台的apk包可以直接解压查看是否有./assets/bin/Data/Managed目录。 您还可以检查 lib 文件夹中包含的一些so。 如果有libmono、libunity等模块,基本可以确认是unity游戏。 。

Android平台上C#编译的主要逻辑模块代码经过静态编辑后存放在Assembly-CSharp.dll文件中。 由于unity的跨平台性,Android平台是unity编译的游戏,所以对应的IOS平台也是unity编译的。 如果想直接从IOS看是否是unity游戏,可以提取游戏中的主模块,看看是否有unity等功能。

破解思路

下面列出了破解版的一些想法。 如果可以直接在函数头中设置断点并更改寄存器,则可以直接更改寄存器测试。 如果遇到不能直接更改的地方,可以使用第二种方法,将更改后的Assembly-CSharp.dll复制到游戏中,让游戏执行我们更改的代码。 此外,还可以动态和静态地改变二补码的实现。

1.修改unity游戏逻辑代码,编译成汇编代码相关值

(1)改变传入的参数,即寄存器,通常是set等函数

(2)汇编代码中尽量不要改变显存或者操作码,可以改变寄存器,直接改变寄存器

unity 反编译 源码-Unity游戏逆向和破解方法介绍

2、反编译Assembly-CSharp.dll,直接更改unity的C#源码

(1)改变函数的返回值

(2)直接删除函数体,只留下ret指令

(3) 更改对应函数并对变量进行处理

(4)减少相应函数中的一些调用处理,主动调用

3.分析源码,直接改代码

(1)通过分析unity反编译源码找到对应汇编指令下的断点改变寄存器

(2)通过直接静态分析dll直接改变IL代码的二补码

4、在加载dll的函数位置转储原始dll代码,可以绕过dll加密,更改源代码

(1)hook mono_image_open_from_data_full函数,dump出dll,利用IDA配合jdb挂起进程,dump出函数位置的断点。 源代码的具体更改计划与“二”和“三”相同。

常用工具

1.IDA工具

一个可以进行动态调试和静态分析的工具。 可以在适当的位置设置断点、更改指定寄存器、编译IDC脚本配合分析。 不多介绍

2.ILSpy

反编译分析dll代码,交叉引用,将反编译后的代码保存在源代码中,并将代码提供给DirFind等字符串搜索定位工具定位代码位置

3..NET Reflector+Reflexil

反编译分析dll代码,填补ILSpy的一些功能缺陷,可以分析错误的CLR文件头,一些在ILSpy中无法显示的dll文件,如果只是因为dll面被改了,最好放到.NETReflector中可以被解剖。 Reflexil是.NETReflector的一个插件,可以反编译和重新编译IL代码,对于可视化来说方便实用。

4. 伊拉斯姆和伊尔达斯姆

unity 反编译 源码-Unity游戏逆向和破解方法介绍

Ildasm可以反编译dll并转储反编译的il代码,而Ilasm可以使用命令ilasm/dll*.il重新打包il代码。

常用IL代码二进制补码

(1) nop的二进制补码为0x00

(2)ldc.i4.0二进制补码为0x16

(3)ldc.i4.1二进制补码为0x17

(4)ret的补码为0x2A

(5)ldc.r4的二进制补码为0x22,后面跟着四个字节

案子

案例一:函数头下断点(国家反恐袭击造成的任何损坏)

unity 反编译 源码-Unity游戏逆向和破解方法介绍

借助ILSpy反编译的unity游戏源码unity 反编译 源码,找到了对其影响伤害的函数,发现上述参数的第一个参数就是伤害值,于是我们使用断点工具在FPlayerPawn::TakeDamage 函数的头部,然后只需更改 r1 寄存器并继续运行。

案例二:使用IDA在函数头设置断点(悟空降魔任意改变血值)

借助ILSpy反编译的unity游戏源码,找到一个影响血量设置的函数set_curHP,使用IDA工具调整下一个断点的地址,改变r1寄存器的值。

案例三:Reflector+Reflexil修改源码返回值然后注入(国民偶像任意街舞满分)

使用Reflector反编译unity游戏源码,找到CRhythmGamingCore::GetHitResult

函数,使用Reflexil插件编辑IL代码,将返回值改为1,相当于直接返回“amazing”。 然后将其另存为新的dll文件,并使用该工具将模块注入到游戏中。

unity 反编译 源码-Unity游戏逆向和破解方法介绍

修改后反编译结果如下:

案例4:Reflector+Reflexil删除函数体并注入(公开攻击不限)

使用Reflector反编译unity游戏源代码,找到TaskGameTimeReached::OnUpdate函数,使用Reflexil插件删除函数体,使其成为如下方法unity 反编译 源码,注入到游戏中。

案例五:Reflector+Reflexilcall功能(全民破坏神技能无CD)

借助Reflector反编译unity游戏源代码,借助Reflexil在函数中添加一句主动调用函数,即可清除所有技能CD。

概括

从目前的情况来看,Unity引擎的游戏相对于cocos游戏来说仍然不安全。 虽然很多Unity游戏都直接暴露了dll,但即使不暴露dll,也可以直接dump该dll进行反编译分析。 你可以直接看到它。 源代码。 Unity游戏可以从汇编层开始,也可以从源代码开始。 在汇编层,可以直接找到函数的编译地址,然后设置断点; 如果更改源代码,则需要将编译后的dll注入到mono中以加载dll之类的地方。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 unity 反编译 源码-Unity游戏逆向和破解方法介绍 https://www.wkzy.net/game/171142.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务