zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )

Android游戏定位打包应用 分析 修改 动态
2023-06-13 09:17:59 时间

文章目录

一、应用结构分析


分析上一篇博客 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 ) 解包后的文件 ;

在 lib 目录下 , 有 armeabi-v7a 和 x86 两个 CPU 架构的动态库 ;

一般情况下 , 逆向都在模拟器中进行 , 模拟器中可以拿到 root 权限 , 并且权限管理没有真机那么严格 , 这里推荐删除 armeabi-v7a 架构的动态库 ;

此外 , 该应用检测出了 Unity3D 引擎 , 那么该应用的核心逻辑都在 Unity3D 中 , 如果要修改应用 , 需要修改 U3D 对应的动态库文件 ;

二、定位动态库位置


Unity3D 引擎对应的资源都在 apk\unpack\Game\assets\bin\Data 目录下 ,

动态库资源都在 apk\unpack\Game\assets\bin\Data\Managed 目录中 , 如果要修改程序的逻辑 , 都在 C# 代码编译的 dll 动态库中 ; 本应用的相关逻辑是在 Assembly-CSharp.dll 中 ;

三、定位动态库中的修改点


使用 32 位的 IDA 打开上述 Assembly-CSharp.dll 文件 , 将下面红色矩形框中的 sub 减法运算 , 修改为 add 加法运算 ;

选中这个 sub 指令 ,

点击 Hex View-1 面板 , 发现 sub 对应的二进制数据是 59 ;

将其修改为 add , 就需要知道 add 对应的二进制数据是多少 , IDA View-A 中选中 add , 然后查看 Hex View-1 中的二进制数据 :

add 操作对应二进制数据 58 ;

这里修改时 , 将 0x354A6 字节的 59 修改为 58 ;

四、修改动态库


使用二进制查看工具 , Ctrl + G 快捷键 , 跳转到 0x354A6 位置 , 发现值为 59 ;

直接选中后 , 编辑该值即可 ;

五、重打包


将修改后的动态库放回原来的位置 ;

删除 sing 和 repack 目录 ;

继续执行程序 , 会在检查当前 " 解包 -> 分析 -> 重打包 -> 签名 " 流程 , 执行了哪些部分 , 发现 解包 , 分析 完成 , 重打包 和 签名没有完成 , 执行程序后 , 会自动进行后续 重打包 和 签名操作 ;

执行完毕后的 apk/sign/Game.apk 就是重打包后签名的文件 , 可以执行该 APK 文件 , 验证修改是否生效 ;