.lib反编译出源码-Unity游戏逆向工程及破解方法介绍

背景介绍

随着手机游戏的发展,Unity3D引擎逐渐成为主流的游戏开发解决方案,传统的Cocos 2D游戏正在逐渐被取代。 一些公司也在制作越来越多的Unity3D游戏,比如《天天飞车》、《天天格斗》,还有《破坏神》、《全民偶像》、《全民突击》等全民游戏。 随着Unity3D游戏的不断制作,游戏的安全性要求也越来越高。 这里我们总结一下逆向工程中用到的一些技巧和思路以及一些辅助工具来科普一些知识。

识别 Unity 游戏

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

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

破解想法

下面列出了一些破解版的想法。 如果可以直接在函数头处设置断点并更改寄存器,则可以直接更改寄存器测试。 如果遇到无法直接更改的内容,请使用第二种方法来更改更改后的Assembly-CSharp.dll。 将其注入到游戏中并让游戏执行我们更改的代码。 另外,两者的补码实现也可以动态和静态地改变。

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

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

(2)尽量不要改变汇编代码中的显存或操作码。 如果可以更改寄存器,则直接更改寄存器。

.lib反编译出源码-Unity游戏逆向工程及破解方法介绍

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

(1)改变函数返回值

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

(3) 当对应的函数改变时,对变量进行处理

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

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

(1)通过分析Unity反编译源码,找到对应的汇编指令,并断点更改寄存器

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

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

.lib反编译出源码-Unity游戏逆向工程及破解方法介绍

(1) 挂钩 mono_image_open_from_data_full 函数并转储 dll。 您还可以使用 IDA 和 jdb 挂起过程来转储函数位置处的断点。 源代码具体变更计划同“2”和“3”

常用工具

1.IDA工具

它是一个可以进行动态调试和静态分析的工具。 它可以在适当的位置设置断点,更改指定寄存器并编译IDC脚本以配合分析。 我就不详细介绍了。

2.ILSpy

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

3..NETReflector+Reflexil

反编译和分析dll代码填补了ILSpy的一些功能缺陷。 它可以分析不正确的CLR文件头和一些无法在ILSpy中显示的dll文件。 如果只是因为dll面被改了,最好放到.NET Reflector中。 可以分析。 Reflexil 是 .NETReflector 的插件,可以反编译和反向编译 IL 代码,以实现方便、实用的可视化。

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

.lib反编译出源码-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,后面跟着四个字节

案件

案例一:函数头下断点(国家反恐攻击造成任意破坏)

.lib反编译出源码-Unity游戏逆向工程及破解方法介绍

借助ILSpy反编译的unity游戏源代码,我们发现了一个影响伤害的函数。 我们发现上面传递的第一个参数是伤害值,所以我们使用断点工具在 FPlayerPawn::TakeDamage 函数头下下断点,然后只需更改 r1 寄存器并继续运行即可。

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

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

案例3:Reflector+Reflexil修改源码返回值然后注入(国民偶像可以满分通过任何街舞)

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

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

.lib反编译出源码-Unity游戏逆向工程及破解方法介绍

修改后反编译结果如下:

案例四:Reflector+Reflexil删除函数体再注入(全民攻击不限时间)

使用Reflector反编译unity游戏源码,找到TaskGameTimeReached::OnUpdate函数,使用Reflexil插件删除该函数体,使其如下图所示,注入到游戏中。

案例五:反射镜+反射召唤功能(破坏神技能无CD)

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

概括

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

收藏 (0) 打赏

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

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

悟空资源网 源码编译 .lib反编译出源码-Unity游戏逆向工程及破解方法介绍 https://www.wkzy.net/game/200577.html

常见问题

相关文章

官方客服团队

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