首页 > 编程语言 >归龙潮程序逆向笔记 (不定期更新)

归龙潮程序逆向笔记 (不定期更新)

时间:2024-11-05 20:32:37浏览次数:2  
标签:归龙潮 逆向 addr function 不定期 so func var new

Unity游戏啊,先分析一下文件,Unity2021.3,AB包没加密,Lua看着像异或加密,还有HybridCLR的dll应该是AES之类的

看到了libNetHTProtect.solibmsaoaidsec.so两位老朋友,上frida一把梭!

果不其然一开frida就闪退,看闪退的时机大概率在il2cpp前就已经检测了…

搜一下msaoaidsec,果然在java层有一个initDeviceFinger,干掉后就能愉快的上frida了~

直接dump内存得到解密后的il2cpp和global-metadata,还原符号,但是导出表怎么没了.jpg 反正不影响分析,可以用特征再找出来

这Lua是自己手搓了一个包?不像AssetBundle的样子...opcode好像不对,得看看xlua是不是也有加密

先贴一段尝试dump Lua的代码:

// 2024.11.03 归龙潮Lua dump

var basePath = '/sdcard/Android/data/com.tong.lcgame/Lua/' //files/Patch/Lua/'
var is_load=false;
//var sleep = new NativeFunction(Module.findExportByName('libc.so', 'sleep'), 'int', ['int']);

var WriteFile = function(fileName, data){
    // 使用frida的自带api
    // 输入文件地址和Array
    var file = new File(fileName, 'w');
    file.write(data);
    file.close();
}

function buf2hex(arrayBuffer) {
    return Array.prototype.map.call(new Uint8Array(arrayBuffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}

var readSystemByteArray = function (systemByteArrayPtr) {
    // 读取max_length字段
    var maxLengthPtr = systemByteArrayPtr.add(0x18); // 偏移量为0x18
    var maxLength = maxLengthPtr.readU64();
    console.log("Array Length: " + maxLength);
    // 读取m_Items字段, 即可拿到数据
    var itemsPtr = systemByteArrayPtr.add(0x20); // 偏移量为0x20
    var data = itemsPtr.readByteArray(maxLength);
    return data;

};

var hook = function() {
    // System_Byte_array *__fastcall ***ArchiveSingleFile***(this, strFileName, method)
    // 
    // 手,手搓Archive?!
    var str_name_so = "libil2cpp.so"; //要hook的so名
    let n_addr_func_offset = false; //要hook的函数在函数里面的偏移
    //加载到内存后 函数地址 = so地址 + 函数偏移
    let n_addr_so = Module.findBaseAddress(str_name_so);
    let n_addr_func = parseInt(n_addr_so, 16) + n_addr_func_offset;
    var ptr_func = new NativePointer(n_addr_func);
    console.log('Base: ', ptr_func);
    var add_method = new NativeFunction(ptr_func, 'pointer', ['pointer', 'pointer']);
    if (ptr_func.toString() == '0x0') {
    var exit_func = new NativeFunction(Module.findExportByName("libc.so", "exit"), 'int', ['int']);
    // 没hook住, 重启程序
    exit_func(0);
    }
    // il2cpp_string_new
    // 没导出 自己找 找一个2021的il2cpp查交叉引用
    var n_addr_func_offset_2 = false; 
    var n_addr_func_2 = parseInt(n_addr_so, 16) + n_addr_func_offset_2;
    var il2cpp_new_string = new NativeFunction(new NativePointer(n_addr_func_2), 'pointer', ['pointer']);
    var StringChars = function(arg) {
        return Memory.readUtf16String(arg.add(20));
    };
    var new_string = function(arg) {
        let cString = Memory.allocUtf8String(arg);
        return il2cpp_new_string(cString);
    };

    var do_write = function(msg, retval) {
        var data = readSystemByteArray(retval);
        WriteFile(basePath+msg.replaceAll('/','+')+'.txt', data);
        console.log(msg+' OK!')

    }

    Interceptor.attach(ptr_func, {
        onEnter: function(args) {
            console.log("hook on enter");
            is_load = StringChars(args[1]);
        },

        onLeave: function(retval) {
             if (is_load != false) {
                var msg=is_load;
                is_load = false;
                do_write(msg, retval);
             }
            //console.log("hook on Leave");
        }
    });
}

setTimeout(hook, 1000); // waiting for load

(未完待续)

标签:归龙潮,逆向,addr,function,不定期,so,func,var,new
From: https://www.cnblogs.com/tianpanyu/p/18528750

相关文章

  • 快手协议/逆向开发ks协议
    在计算机网络中,协议是一组规则和标准,用于定义通信双方之间的数据传输方式。快手协议是指快手短视频平台使用的通信协议,它规定了快手客户端和服务器之间数据传输的格式、加密方式、校验规则等内容。快手协议采用了多种加密技术来保护用户数据的传输和存储。其中,最基本的加密......
  • 2024 强网杯逆向 Writeups
    最心有余而力不足的一集,做完vm颈椎病犯了,第二天根本打。最后,加上学弟学妹打的,最后剩一个Android逆向没AK,要是没有颈椎病这一说肯定AK了。感觉快退役了...mips编译一个qemu-6.2.0mips-linux-userbindiff一下恢复符号,怀疑修改了ELFloader或者syscall,最后发现是后者......
  • 猿人学web端爬虫攻防大赛赛题第16题——js逆向 - window蜜罐
    题目网址:https://match.yuanrenxue.cn/match/16解题步骤看触发数据包。明显m是经过特殊处理的,需要知道它的加密逻辑。看Initiator模块的window.request。m和t的赋值就在上面,打断点。先分析t。r.t=p_s=Date[e(496)](newDate)[e(517)]()将其中跟e相关的进行还原后,r.......
  • C++ 逆向之 move 函数
    众所周知,在C++11后,增加了右值引用类型,那么函数参数传递一共有三种方式,分别是非引用类型传递(值传递)、左值引用传递和右值引用传递,其中值传递会对实参进行一份拷贝传递给函数,左值引用和右值引用则直接引用实参传递给函数,这就是它们最大的区别。为什么要区分值传递和引用传递呢?对......
  • 新手逆向实战三部曲之三——通过进入关键call追码注册软件(进阶)
    教程开始:通过前两次的学习,是不是感觉逆向也蛮有意思的呢,感兴趣的同学可以先看看前二次的内容再继续向下学习新手逆向实战三部曲之一新手逆向实战三部曲之二有了上次爆破的基础,这次便省力了许多,这次从载入开始,虽前头的几个步骤与之前相同,温故而知新嘛(也可直接往后看)用OD......
  • 海外逆向代购:新机遇下的跨境赚钱之道
    所谓逆向代购,即利用海外客源,将中国的优质商品反向代购至海外市场,实现跨境赚钱的同时,也让更多中国商品走向世界。近年来,随着中国经济的飞速发展和消费水平的不断提升,中国商品在全球市场上的认可度越来越高。从服装、鞋帽到电子产品、家居用品,中国商品以其性价比高、款式新颖等......
  • JAVA对于图片的花式操作(不定期更新)
    JAVA对于图片的花式操作(不定期更新)MultipartFile转Base64字符串图片url转Base64字符串图片url转MultipartFile图片url转File流base64图片压缩引入依赖代码编写抠图MultipartFile转Base64字符串/***MultipartFile文件转bash64字符串**@parammult......
  • 逆向分析Office VBS宏类型文档
    该题目贴合实际,在实战中经常遇到此类宏病毒。将Office文档中嵌入以VBA(VisualBasicforApplications)编写的宏代码脚本,当运行Office文档时,便可以执行各种命令。VBA脚本文件重定向能够将脚本默认文件vbaProject.bin进行替换,在打开文本时加载其他文件,增加分析者的分析复杂程度。......