吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8785|回复: 62
收起左侧

[Android 原创] 一款某小手游的逆向修改

  [复制链接]
aaaaf 发表于 2021-12-14 22:06
小说xxxx2 version 1.5.10T
新手刚入门android手游,就想找个帖子复现一下,在52上找了个不错的帖子https://www.52pojie.cn/thread-1419648-1-1.html,但是版本太老了,新版改了很多,于是决定自己试试(毕竟就是个小厂的游戏)il2cppdumper使用,报错失败了,估计是global-metadata.dat加密了打开libil2cpp.so ida_no_recover.PNG 看到这函数名和 这么多数据没反编译,第一反应 混淆加壳了,于是去看看init_array init_array.PNG 里面还有好多xor,各种加减 忙猜应该是smc 加壳混淆了 而且搜索字符长“global-metadata.dat” ,根本没有,估计是字符串混淆了,但是这个字符串是一定要的,否则不可能MetadataCache::Initialize加载资源阿,所以肯定解密,既然如此,那我就去内存里dump不久好了,frIDA启动(居然没有反调试)(由于权限问题, 我属实懒得搞,就这么应付一下)
[Asm] 纯文本查看 复制代码
adb shell
su
cd /data/local/tmp
touch 1.so
chmod 777 1.so
之后使用frida
[JavaScript] 纯文本查看 复制代码
var exports = Module.enumerateExportsSync("libil2cpp.so");
var libxx = Process.getModuleByName("libil2cpp.so");
console.log("*****************************************************");
console.log("name: " +libxx.name);
console.log("base: " +libxx.base);
console.log("size: " +ptr(libxx.size));

var exports = Module.enumerateExportsSync("libil2cpp.so");
for(var i = 0; i < exports.length; i++) {
        console.log(exports[i].name + ": " + (exports[i].address - libxx.base));
}
// dump so
var file_path = "/data/local/tmp/" +  "1.so";
var file_handle = new File(file_path, "wb");
if (file_handle && file_handle != null) {
    Memory.protect(ptr(libxx.base), libxx.size, 'rwx');
    var libso_buffer = ptr(libxx.base).readByteArray(libxx.size);
    file_handle.write(libso_buffer);
    file_handle.flush();
    file_handle.close();
    console.log("[dump]:", file_path);
}
再adb pull一下,就得到了解密好的so不过对于MetadataCache::Initialize函数,我也没仔细看,它对global-metadata.dat加了什么密,之后可以看看,拿到解密好的so,关键我就是想搜一下unity的版本 unity_version.PNG 之后使用Riru-Il2CppDumper改一下包名和版本 magisk再装一下
[C] 纯文本查看 复制代码
#define GamePackageName "cs.xsjmn2.com"
#define UnityVersion 2018.3.8f1
得到dump.cs之后找到get_money 和get_light函数 frida改一下就行了
[JavaScript] 纯文本查看 复制代码
setImmediate(function(){
    Interceptor.attach(Module.load("libil2cpp.so").base.add(0x993338),{
    onEnter:function(args){
      //  for(var i = 0 ; i < )
     
    },
    onLeave:function(retval){
        //retval.replace(0xffff)
        retval.replace(0xffff)
        console.log("get light :" + retval)
    }
})
})
最终实现的功能 IMG_3401(20211214-215347).JPG

免费评分

参与人数 19威望 +1 吾爱币 +38 热心值 +19 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
柯小南 + 1 + 1 谢谢@Thanks!
Da2001 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
xuancang + 1 谢谢@Thanks!
Bobbybbb + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
54sb + 1 我很赞同!
maixiaofeng1214 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
丶凹凸俊 + 1 + 1 我很赞同!
luoye2010 + 1 + 1 热心回复!
LogyJ + 1 + 1 我很赞同!
Reer + 1 + 1 热心回复!
xiaogenban123 + 1 我很赞同!
正己 + 4 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
3303232005 + 1 + 1 热心回复!
wdq1813506091 + 1 + 1 我很赞同!
xiazaiy + 1 + 1 我很赞同!
aa530416 + 1 + 1 热心回复!
Galax + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| aaaaf 发表于 2021-12-15 14:38
mscsky 发表于 2021-12-15 10:28
得到dump.cs之后找到get_money 和get_light函数 frida改一下就行了
是什么操作啊

得到cs后,就知道那两个函数的地址了,于是可以用frida hook,修改这两个函数的返回值
mscsky 发表于 2021-12-15 16:13
aaaaf 发表于 2021-12-15 14:38
得到cs后,就知道那两个函数的地址了,于是可以用frida hook,修改这两个函数的返回值

这样实际没有修改so文件吧
489621 发表于 2021-12-15 09:04
Check1998 发表于 2021-12-15 09:39
没玩过的游戏,不错
chaifengbox 发表于 2021-12-15 09:55
好像是什么 小说什么的游戏. 我之前玩过.
oranges 发表于 2021-12-15 10:14
值得学习1!
mscsky 发表于 2021-12-15 10:28
得到dump.cs之后找到get_money 和get_light函数 frida改一下就行了
是什么操作啊
xcoogg 发表于 2021-12-15 11:42
值得学习,不一样的思路
ws610001969 发表于 2021-12-15 12:16
谢谢分享,收藏了
wantwill 发表于 2021-12-15 12:49

值得学习1!
xyz1234 发表于 2021-12-15 13:04
谢谢分享,收藏了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表