【手游逆向】初探Unity3d+il2cpp.so网游修改新手教程篇[内附所有相关工具下载地址和说明介绍】
此文由于先发布到了吾爱破解,所以图片带有水印,点我看原文
这里找的是一款Himi喜欢的韩国游戏厂商Fincon公司使用Unity3d制作的3DMMORPG 《HelloHeroEpicBattle》(apk并附带obb,附件过大,这里附上下载链接:点我下载 ,google play地址:点我查看 )
【第一步】:对安装apk进行取出必要的两个文件(通过解压工具解压、或者直接在双击apk,直接找到两个文件拖拽出来):
1. apk/assets/bin/Data/Managed/Metadata/global-metadata.dat
2. apk/lib/armeabi-v7a/ libil2cpp.so (arm64-v8a下的libil2cpp.so 不用理会)
【注】:如果u3d游戏没有使用il2cpp的话:
我们可以直接到 apk/assets/bin/Data/Managed/ 目录下 将 Assembly-CSharp.dll 取出,使用 dnSpy 工具打开并在想要修改的位置右键进行编辑IL指令,修改值即可,相对简单这里不赘述。
如果使用il2cpp 我们继续下面的流程:
【第二步】:利用工具 Il2CppDumper 将so里的所有函数名进行提取
工具所有版本地址: Il2CppDumper ,直接下载最新版本 : https://github.com/Perfare/Il2CppDumper/releases/
(顺便说下哈,最新版本提取出来的是.h 和 .cs 两个文件,早一些的版本才是论坛教程里常见的.py 和 .cs,不论是.h 或 .py 都是给 IDA 工具来对应so中地址所对应函数名的文件)
打开 Il2CppDumper.exe 然后按照提示选择我们刚在apk里拿出来的两个文件:(打开Il2CppDumper可能需要你电脑环境安装了.netframework 4.x+ 百度即可)
(新版本不需要你手动输入游戏对应的unity3d版本号,旧版本需要,至于如何游戏用的什么版本,论坛有大神都给出了教程,这里也不赘述)
最终产生我们所需的 .cs 文件( .py 或 .h 不是必须要用的文件,只是ida 所需)如下图 :
[注]:最新版 Dump 出来的是 .cs 和 .h
【第三步】:利用工具UltraEdit 点我去下载 或者其他工具来打开 .cs 函数名集合文件
(这里使用010editor 原因是 后面我们要打开il2cpp.so文件必须也要用此工具,所以就懒得下载其他工具了)
我们在此函数文件中找到想要的修改的地方,如果是单机大家肯定想修改的是 Gold/Money/Level/Skill/Hp/Attack/等,搜索感兴趣关键词即可,本文我们只修改显示的等级和技能等级:
思路:找到获取等级或者技能等级的函数名,然后直接将其函数改成直接返回指定的值即可。
因此我们优先搜索相关的类,然后定位 等级和技能等级位置,确认其内存地址,如下图:
通过上图看到下面这行代码是获取角色等级的函数,其函数对应内存地址是:0x56E938
public int get_p_level(); // RVA: 0x56E938 Offset: 0x56E938
通过上图看到下面这行代码是获取角色技能等级的函数,其函数对应内存地址是:0x56FD5C
public int GetSkillLevel(int index); // RVA: 0x56FD5C Offset: 0x56FD5C
【第四步】:利用工具UltraEdit 打开.so文件进行修改
(其实这一步之前我们省略了使用IDA工具对il2cpp.so文件分析汇编源码/伪代码的过程,直接暴力返回 10000 )
1. 由于.so文件内都是汇编指令对应arm机器码,所以我们要首先要编写一段汇编代码
Mov R0,0x2710
BX LR
以上汇编指令表示:把0x2710 这个值给结果R0,然后直接返回。
那么0x2710 这个值是什么? 汇编指令中使用的都是十六进制的值,而我们可以经常看到的数字都是十进制,所以我们找个十进制转十六进制的网站或者科学计算器转换一下即可,如下图:
2. 我们将汇编代码要改成.so一致的机器码,这里推荐一个转换网站: ArmConverter
得到机器码:100702E3 1EFF2FE1
3. 打开游戏的 il2cpp.so文件,control + g ,跳转到要修改的两个地址
a) 首先定位到 获取角色等级的函数,获取角色技能等级的函数,其函数对应内存地址是:0x56FD5C ,将其机器码修改成 100702E3 1EFF2FE1,如下图:
b) 按照上述方法把 定位到 获取角色等级的函数,其函数对应内存地址是:0x56E938 将其机器码修改成 100702E3 1EFF2FE1
c) control + s 保存,最新的修改覆盖掉之前的il2cpp.so文件
【第五步】:将修改好的.so文件,直接拖入我们的游戏apk对应的文件夹中进行覆盖
到此,整个修改就完成了,我们看下修改前和修改后的前后对比图:
修改前卡片等级6,技能等级都是1, 修改后都是10000
【总结】:
1. 整体破解思路就是拿到dump出来的cs函数文件,进行搜索关键(关心的)函数,拿到其地址
2. 然后使用IDA打开.so文件,也是 g 定位到你关心的函数地址上,然后对函数进行修改成你想要的逻辑汇编代码
(此步骤,需要你对汇编和代码逻辑有一定的理解和熟悉,如果不太懂就可以仿照本文的暴力修改直接返回)
3.将你修改的汇编代码对应的地址记录好,然后到so中进行定位修改。
【注】
你在.cs中拿到的函数地址,其实只是这个函数开始的地址,真正执行的代码地址可以使用IDA进行查看,例如:
上图中是IDA中展示的某一个函数地址为0x003D4864,而假设你修改了正方形圈选的这一行,那么你.so对应修改的内存地址:
不应该是 0x003D4864,而是箭头指向对应的修改的那一行的地址:0x003D4898
【手游逆向】初探Unity3d+il2cpp.so网游修改新手教程篇[内附所有相关工具下载地址和说明介绍】相关推荐
- 【Android 逆向】Frida 框架 ( Frida 2 种运行模式 | Frida 12.7.5 版本相关工具下载地址 | 在 Android 模拟器上运行 Frida 远程服务程序 )
文章目录 一.Frida 2 种运行模式 二.Frida 12.7.5 版本相关工具下载地址 三.在 Android 模拟器上运行 Frida 远程服务程序 1.启动雷电模拟器 2.上传 frida- ...
- 【JS 逆向百例】37网游登录接口参数逆向
文章目录 声明 逆向目标 逆向过程 抓包分析 参数逆向 完整代码 37_encrypt.js 37_login.py 声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切 ...
- vscode中安装webpack_leaflet-webpack 入门开发系列一初探篇(附源码下载)
前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载 webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址w ...
- arcgis开发 多版本之间如何兼容_arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)...
你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...
- Frp内网穿透保姆级教程 windows内网穿透
Frp内网穿透保姆级教程 windows内网穿透 准备工作 一台具有公网ip的云服务器(我的是ubuntu) frp程序 流程 将frps放到具有公网ip的服务器上 将frpc放到需要内网穿透机器上, ...
- 如何完成网课公号号搭建——小白教程!内附网课题库接口
如何完成网课公号号搭建--小白教程!内附网课题库接口 本平台优点:免费查题接口搭建 多题库查题.独立后台.响应速度快.全网平台可查.功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题 ...
- Unity3D与AvosCloud网游开发实践 - 单线程U3D中的异步通讯处理
Unity3D被设计为单线程的结构,即在主线程之外绝大多数API都是无法使用的,而AvosCloud所有数据通讯都是异步的,这样就产生了一些问题. 举例来说,角色获得了足够的升级经验,于是向服务器发送 ...
- Unity3D暗黑战神 网游ARPG实战案例(第二季)
前面开发了几个单机小游戏,该是时候挑战一下网络游戏方面的开发了! 3D网游ARPG实战案例(第二季),使用Unity2017.3版本制作 内容包括 服务端部分 1.网络通信编码,协议及传输 2.数据驱 ...
- 页游arpg服务端java_ARPG手机网游java服务端主程初哥遇到的一些坑总结
游戏类型:ARPG横板格斗过关手机网游,类似王者之剑,DNF. 客户端unity,碰撞判定在客户端,AI和伤害运算在服务端.峰值单服在线2800. netty,protobuf,mysql. 指令设计 ...
- 端游与页游之战:微端网游突出重围
客户端.微端.页游乱战 谁夺先机? 2012年并非预言家口中的"末世之年",但2012年的中国游戏业,却伴随着波澜壮阔的深度变革,巨头陷入新旧模式"天人交战"之 ...
最新文章
- 3-3-完全二叉树结点数
- Lightingcolorfilter 滤镜
- json 序列化 java_Java JSON序列化杂谈
- WinForm加载外部类库项目的集成开发模式
- iNeuOS 工业互联网操作系统,在核工业测控领域的成功应用
- 迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0
- 判断二叉树是否是完全二叉树c语言_完全二叉树的节点数,你真的会算吗?
- 1s完成 大文件分割方案
- 大气自适应会员中心帝国cms模板
- 在Android上将ONNX神经网络模型与TensorFlow Lite结合使用
- 基于Java的酒店管理系统论文
- OpenModelica结果文件(.mat格式)说明
- 昂达ONDA B460SD4 UEFI模式刷BIOS教程
- 被伽卡他卡禁用任务管理器如何解决
- 关于JavaScript中 “Uncaught TypeError: date.getDay is not a function“的问题
- 支付宝支付开发—当面付条码支付和扫码支付
- 接口测试用例设计的一点总结
- ComicTheme 隐私条款
- Matlab 如何使用hold on与hold off
- jaspersoft studio实践 --实现网页版打印小票(模板一)
热门文章
- 【全套完结】高频电子线路实验手册——全套实验报告册
- linux视频补帧,SVP(电脑视频补帧软件) V4.3.180 Linux版
- WiFi mac地址详解
- JSP入门必须了解的知识详解
- 回弹强度记录表填写_混凝土抗压强度回弹法测试原始记录表.doc-_装配图网
- 嵩天python_跟着北京理工大学嵩天老师学习Python
- 《统计学》第八版贾俊平第十二章多元线性回归知识点总结及课后习题答案
- 试验设计——均匀试验设计·好格子点法
- axure插件chrome浏览器和360浏览器安装指南
- Chrome浏览器安装Axure插件教程