开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3947|回复: 8
收起左侧

[Android逆向] 手游算法及渗透测试

[复制链接]
结帖率:79% (26/33)
发表于 2023-2-24 20:32:20 | 显示全部楼层 |阅读模式   贵州省贵阳市
一.前言

    最近在学习渗透,web方面太卷了,想弄弄tcp这块百度了一下发现国内外基本一点资料都没,问了一些专门做渗透的大牛。说tcp都没啥人测试方式比较少  洞一定多的爆,顿时让我来了兴趣。原理也很简单就是将tcp解密构造参数然后加密回去提交,于是就找了一款传奇试试刚好是客户的需求。

二.准备工作

  2.1信息收集


拿到游戏首先看so库il2cpp.so很明显了   拖到ida中查看发现加固了

接着看看global-metadata.dat 发现头文件符合没加密的特征是正常的(这里坑了我一下午过分信任文件头的特征让我吃了大亏)


2.1提取游戏源码

   既然是li2cpp类型的游戏就需要Il2CppDumper这款工具,Il2CppDumper是一款非常优秀且功能强劲实用的Il2Cpp提取工具,Il2CppDumper最新版支持从il2cpp中获取types, methods, fields等等数据,除了支持switch的NSO格式外,最主要的还是完整处理了下MetadataUsage,现在在IDA执行script.py后,F5能看到所调用的实例类,静态类的具体名称了,分析算法和搞些花式修改也更容易。下载链接:https://github.com/Perfare/Il2CppDumper

    接着去利用frida dump出内存中的il2cpp.so

[JavaScript] 纯文本查看 复制代码
function dump_so(so_name) {
    Java.perform(function () {
        var currentApplication = Java.use("android.app.ActivityThread").currentApplication();
        var dir = currentApplication.getApplicationContext().getFilesDir().getPath();
        var libso = Process.getModuleByName(so_name);
        console.log("[name]:", libso.name);
        console.log("[base]:", libso.base);
        console.log("[size]:", ptr(libso.size));
        console.log("[path]:", libso.path);
        var file_path = dir + "/" + libso.name + "_" + libso.base + "_" + ptr(libso.size) + ".so";
        var file_handle = new File(file_path, "wb");
        if (file_handle && file_handle != null) {
            Memory.protect(ptr(libso.base), libso.size, 'rwx');
            var libso_buffer = ptr(libso.base).readByteArray(libso.size);
            file_handle.write(libso_buffer);
            file_handle.flush();
            file_handle.close();
            console.log("[dump]:", file_path);
        }
    });
}


得到了未修复的so


SoFixer-Windows-64.exe  -s libil2cpp.so -o libil2cpp1.so -m 0x0 -d  修复


接着利用Il2CppDumper进行cs以及dll的抽取   发现要我手动找codeRegistration和metadataRegistration


然后借助https://www.jianshu.com/p/3edea788742e这篇帖子的操作找了  填写进去发现会报序列不包括任何匹配元素


在我反复思考看是不是我地址偏移找错的时候  回头看了看global-metadata.dat发现虽然文件头信息虽然一样但是其他文件字节是错误的


再借助大佬的代码dump一下

[JavaScript] 纯文本查看 复制代码
/*
获取解密后的global-metadata.dat
github:https://github.com/350030173/global-metadata_dump
 
用法:
frida -U -l global-metadata_dump.js packagename
 
导出的文件在/data/data/yourPackageName/global-metadata.dat
 
*/
 
 
 
//
//get_self_process_name()获取当前运行进程包名
//参考:https://github.com/lasting-yang/frida_dump/blob/master/dump_dex_class.js
function get_self_process_name()
{
var openPtr = Module.getExportByName('libc.so', 'open');
var open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);
 
var readPtr = Module.getExportByName("libc.so", "read");
var read = new NativeFunction(readPtr, "int", ["int", "pointer", "int"]);
 
var closePtr = Module.getExportByName('libc.so', 'close');
var close = new NativeFunction(closePtr, 'int', ['int']);
 
var path = Memory.allocUtf8String("/proc/self/cmdline");
var fd = open(path, 0);
if (fd != -1)
{
    var buffer = Memory.alloc(0x1000);
 
    var result = read(fd, buffer, 0x1000);
    close(fd);
    result = ptr(buffer).readCString();
    return result;
}
 
return "-1";
}
 
function frida_Memory(pattern)
{
Java.perform(function ()
{
    console.log("头部标识:" + pattern);
    var addrArray = Process.enumerateRanges("r--");
    for (var i = 0; i < addrArray.length; i++)
    {
        var addr = addrArray;
        Memory.scan(addr.base, addr.size, pattern,
        {
            onMatch: function (address, size)
            {
                console.log('搜索到 ' + pattern + " 地址是:" + address.toString());
                console.log(hexdump(address,
                    {
                        offset: 0,
                        length: 64,
                        header: true,
                        ansi: true
                    }
                    ));
                //0x108,0x10C如果不行,换0x100,0x104
                var DefinitionsOffset = parseInt(address, 16) + 0x108;
                var DefinitionsOffset_size = Memory.readInt(ptr(DefinitionsOffset));
 
                var DefinitionsCount = parseInt(address, 16) + 0x10C;
                var DefinitionsCount_size = Memory.readInt(ptr(DefinitionsCount));
 
                //根据两个偏移得出global-metadata大小
                var global_metadata_size = DefinitionsOffset_size + DefinitionsCount_size
                    console.log("大小:", global_metadata_size);
                var file = new File("/data/data/" + get_self_process_name() + "/global-metadata.dat", "wb");
                file.write(Memory.readByteArray(address, global_metadata_size));
                file.flush();
                file.close();
                console.log('导出完毕...');
            },
            onComplete: function ()
            {
                //console.log("搜索完毕")
            }
        }
        );
    }
}
);
}
 
setImmediate(frida_Memory("AF 1B B1 FA 18")); //global-metadata.dat头部特征

成功!



三.算法分析

得到了dump.cs以及dll


定位到游戏发包函数  接着利用ida插件辅助分析il2cpp.so

alt+f7 根据你的python版本选中  Il2CppDumper中的  ida_py3.py script.json li2cpp.h文件  ida则会自动识别将sub开头的函数识别对应dll中的函数名称   效果如下


经过经过一顿hook定位来到了带有zlib字样的压缩算法



紧接着抓包看看数据包是否带有zlib算法的特征


这里为789c很明显  拿去再进行zlib解密看看是否能够得到明文信息


ok

按照他人给我的思路测试思路则是得到这种json数据则可以开始愉快的渗透测试了

四.测试

也不知道一些这种payload是否有效我咋感觉跟16.7年的wpe类似勒  如果这种渗透测试无效或者存在其他机制联系滴滴  不然显得我特别呆























本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1好评 +1 精币 +1 收起 理由
夕木柠昔 + 1 + 1 快进到入狱

查看全部评分

发表于 2023-6-2 16:55:17 | 显示全部楼层   四川省成都市
怎么联系
回复 支持 反对

使用道具 举报

结帖率:100% (112/112)

签到天数: 10 天

发表于 2023-4-13 02:55:40 | 显示全部楼层   广东省深圳市
感谢分享 ,学习了
回复 支持 反对

使用道具 举报

结帖率:79% (26/33)

签到天数: 2 天

 楼主| 发表于 2023-4-7 15:56:04 | 显示全部楼层   贵州省贵阳市
wchj2 发表于 2023-3-4 13:10
DUMP so内存只能使用kali去dump吗?

都行的  有frida环境就行
回复 支持 反对

使用道具 举报

发表于 2023-3-5 11:53:23 | 显示全部楼层   湖北省武汉市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:25% (2/8)

签到天数: 7 天

发表于 2023-3-4 13:10:08 | 显示全部楼层   广西壮族自治区贵港市
DUMP so内存只能使用kali去dump吗?
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 2 天

发表于 2023-2-25 08:21:32 | 显示全部楼层   福建省福州市
厉害啊
回复 支持 反对

使用道具 举报

结帖率:100% (16/16)

签到天数: 7 天

发表于 2023-2-24 23:47:24 | 显示全部楼层   河南省郑州市
我擦   乌云还活着呢?
回复 支持 反对

使用道具 举报

结帖率:92% (12/13)

签到天数: 13 天

发表于 2023-2-24 22:57:47 | 显示全部楼层   湖北省咸宁市
感觉分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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