腾讯Unity3D手游 dll加密分析

article/2025/10/1 19:31:15

此文章的技术内容已过时,仅当做技术存档参考。腾讯的Unity游戏已不再mono.so中加密dll了,而是通过libtprt.so来hook了加载Assembly-CSharp.dll的地方进行解密,解密算法有点复杂,建议用ida动态dump


腾讯有很多用Unity做的手游,比如《XX飞车》《我叫XX2》《XX战神》《XX与勇士》等等,都对dll进行了加密,而且这些游戏对dll的加密方式是一样的

关于Assembly-CSharp.dll和Assembly-CSharp-firstpass.dll的加密原理参考Unity3D 游戏加密解密那些事

 

以Assembly-CSharp.dll为例,来分析一下TXUnity游戏解密dll的算法

0x00 把libmono.so文件拖入IDA中,在函数窗口中搜索mono_image_open_from_data_with_name这个方法

 

这时我们看到除了mono_image_open_from_data_with_name还有mono_image_open_from_data_with_name_0这个方法,mono_image_open_from_data_with_name是Mono本身就有的方法,而mono_image_open_from_data_with_name_0肯定是TX后加的,可以分别打开这2个方法看看

 

按Tab或F5 看看mono_image_open_from_data_with_name方法的伪代码,里面直接调用了mono_image_open_from_data_with_name_0这个方法

 

在看看mono_image_open_from_data_with_name_0方法的伪代码

能看到3个方法: sub_3D21CC,sub_3D20c8,sub_3D20B0,第一个是解密的方法,第二个忽略,第三个是mono_image_open_from_data_with_name原方法的逻辑

 

0x01 进入sub_3D21CC这个方法看看解密算法是怎样的

红框中的内容就是解密dll的核心算法,在看看汇编代码

 

0x02 经过上面的分析,我写了一个C#版的解密小工具,这里只贴出解密算法

//TX Assembly-CSharp.dll解密算法
private byte[] mono_image_encrypt(byte[] bytes)
{if (bytes[0] == 0x4D && bytes[1] != 0x5A){for (int i = 0; i < bytes.Length - 1; i++){bytes[i + 1] = (byte)((bytes[i + 1] + 0x77) ^ 0x8D);bytes[i + 1] = (byte)(((bytes[i + 1] ^ bytes[i]) + 0x3A) ^ 0x93);}}return bytes;
}

 

解密后用对比工具看下,现在能看到了Dos头部信息

 

0x03 用.Net Reflector 打开解密后的dll

这里报了个错误,元数据头签名无效(关于.Net 文件格式和元数据等知识这里就不讲解了,感兴趣的话网上有很多资料)


关于元数据头中Signature的修复 腾讯是在mono_image_open_full中去检测这个值,可在IDA中搜索字符串“BSJB”来定位具体的位置

这里直接用CFF Explorer修复一下就好(快捷方便偷笑),找到.Net 元数据头,在Signature的Value值中填入424A5342,修改后保存

在用对比工具比较一下,左边就是刚才修改后的,已经清晰的看到‘BSJB’签名了

 

这时在.Net Reflector 中就能看到dll的代码了

 

 资源提取源码

链接:http://pan.baidu.com/s/1kVudWSB 密码:i58w


http://chatgpt.dhexx.cn/article/Tp5xtprm.shtml

相关文章

Unity3d DLL脚本通用解密方法

网上已经有很多文章讲解过Unity3d脚本DLL 解密&#xff0c;基本方法原理都差不多&#xff0c;就是通过HOOK或者调试下断mono_image_open_from_data_with_name这个函数拿到解密后的DLL。这些方法都需要比较专业的知识(Hook或者过反调试)&#xff0c;另外对于使用了强度比较高的第…

Unity3D官方教程爬坑

全是在学官教时遇到的坑&#xff0c;然后数小时后爬出来.同时会添加到处学来的的Unity技巧 ---------------------------------------------------------- 代码&#xff1a; 1.使游戏对象运动的N种方式 更全面的移动方式参考 1、rigidbody.addforce(Vector3 * speed) (见rol…

【Unity3D】自学之路2.0

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 Note: 因上一期 《Unity3D自学之路》 系列教程资源比较旧&#xff08;2018.7.9&#xff09; 很多资源图片资源失效 故更新 《Unity3D自学之路2.0》2020.3.11 船新版本 在新的一年&#xff0c;大家一起加…

[转]【Unity3D入门教程】Unity3D简介、安装和程序发布

《Unity3D入门教程》会带领零基础的初学者&#xff0c;一步步学会使用Unity3D来开发简单的应用程序&#xff0c;走近游戏开发的世界。本系列教程虽然不会面面俱到地深入到全部的知识点&#xff0c;但是会涉及到所有入门阶段所需要掌握的必备技能。通过本教程的学习&#xff0c;…

Unity2019(或2020)个人版如何激活使用(不是破解,正规激活流程)

文章目录 一、下载Unity二、登录账号&#xff08;可用微信号登录&#xff09;三、激活新许可证&#xff08;推荐&#xff09;1、点击激活新许可证2、许可协议3、完成激活 四、手动激活&#xff08;步骤较多&#xff09;1、点击手动激活2、保存许可证申请&#xff08;.alf&#…

【Unity游戏破解】外挂原理分析

文章目录 认识unity打包目录结构 游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包 建议方案锁血飞天无限金币攻击力翻倍 以上统称内存挂透视自瞄压枪瞬移内购破解 Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆 实战查看目录结构用il2cpp dump…

AssetStudio/UnityStudio UABE等 破解Unity游戏

使用AssetStudio/UnityStudio UABE等 破解Unity游戏 前言工具准备前期处理替换图片资源替换配置表/TextAsset替换界面文字/界面UI描述从签名/打包安装/测试 前言 用于研究&#xff0c;学习 工具准备 UABE: 地址&#xff1a;github地址AssetStudio/UnityStudio 地址&#xff…

unity3d手游破解(一)

重点知识&#xff1a; 1. \assets\bin\Data\Managed\Assembly-CSharp.dll扔进Reflectorreflexil环境 2.libs\libmono.so的mono_image_open_from_data_with_name函数 MonoImage *mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, Mon…

【Unity3D】初学加密技巧(反破解)

参考文章&#xff1a; Unity3D研究院之Android加密DLL与破解DLL .SO&#xff08;八十一&#xff09; | 雨松MOMO程序研究院 Unity3D研究院之Android二次加密.so二次加密DLL&#xff08;八十二&#xff09; | 雨松MOMO程序研究院 Unity 2019.4.0 Mono 编译以及加密 windows版…

2021Unity教程:Unity官方中文版免费下载方法(黑皮肤可选)无需破解!

首先科普两个知识点&#xff1a; 1. Unity官方支持个人免费版&#xff0c;新的学习者和初创公司员工&#xff08;公司财务规模低于10万美元一年&#xff09;均可以使用。黑皮肤免费&#xff08;Unity2019.3以上的版本&#xff09;&#xff0c;基本功能齐全&#xff0c;无需破解…

Unity官方支持中文版啦!!!附教程——无需破解!

Chinar blog &#xff1a;www.chinar.xin Unity安装官方中文版教程 本文提供全流程&#xff0c;中文翻译。 Chinar 坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; Chinar —…

Unity游戏逆向及破解方法介绍

背景介绍 随着手游的发展&#xff0c;Unity3D引擎逐渐成为主流的游戏开发解决方案&#xff0c;传统cocos的2D游戏逐渐被取代&#xff0c;一些公司在Unity3D游戏方面的产出也越来越多&#xff0c;如天天飞车&#xff0c;天天来战&#xff0c;全民破坏神&#xff0c;全民偶像&am…

java之成员变量(实例成员变量和静态成员变量)

类的成员 类的成员可以包含以下&#xff1a;字段、方法、代码块、内部类和接口等。此处我们重点介绍字段. 1.1字段/属性/成员变量 在类中, 但是方法外部定义的变量. 这样的变量我们称为 "字段" 或 "属性" 或 "成员变量"(三种称呼都可以, 一般…

java成员变量的调用_java中对象调用成员变量与成员的方法介绍

java中对象调用成员变量与成员的方法介绍 发布时间&#xff1a;2020-05-06 10:03:53 来源&#xff1a;亿速云 阅读&#xff1a;838 作者&#xff1a;小新 今天小编给大家分享的是java中对象调用成员变量与成员的方法介绍&#xff0c;相信很多人都不太了解&#xff0c;为了让大家…

局部变量和成员变量

局部变量和成员变量的区别&#xff1a; 定义的位置不一样【重点】 局部变量&#xff1a;在方法的内部 成员变量&#xff1a;在方法的外部&#xff0c;直接写在类当中作用范围不一样【重点】 局部变量&#xff1a;只有在方法当中才可以使用&#xff0c;出了方法就不能再用了 成…

C++之静态成员变量

一、静态成员变量 1&#xff09;static修饰的静态成员 静态成员变量、静态成员函数 静态成员变量&#xff1a; 1、static声明为静态的&#xff0c;称为静态成员&#xff0c;不管这个类创建了多少对象&#xff0c;静态成员只有一个拷贝&#xff0c;但是类的其他所有成员共享…

静态成员-静态成员变量

静态成员 静态成员都是用static修饰&#xff0c;它的特点是不论创建多少个对象&#xff0c;程序都只创建一个静态成员。 最主要的特点&#xff1a;共享 什么是共享呢&#xff1f; 例如&#xff1a;统计超市中所有商品数量的总和&#xff0c;商品数量的总和是随着每一个数量…

成员变量和成员方法

成员变量 1、成员变量的分类 实例变量&#xff1a;没有static修饰&#xff0c;也叫对象属性&#xff08;实例变量&#xff09;&#xff0c;属于某个对象的&#xff0c;通过对象来使用 类变量&#xff1a;有static修饰&#xff0c;也叫类变量&#xff0c;属于整个类的&#x…

Python——成员变量和类变量

类中的变量分为两种类型:一种是成员变量(实例属性),另一种是类变量(类属性)。 成员变量是在构造方法__init__()中定义的,通过 self 参数引用; 类变量是在类中方法之外定义的变量。 在类的外部,成员变量属于对象,只能通过对象名访问; 类变量属于类,既可以通过类名访问,又可以…

成员变量[详解]

我是认为"成员变量包含实例变量和静态变量(静态变量也是类变量)",但学习过程中遇到说"成员变量仅仅指实例变量",所以下面具体研究一下成员变量的定义、包含关系 1、认同"成员变量包含实例变量和静态变量"的说法汇总 说法一 java中,成员变量是指…