发表于 2022-9-16 22:24

申请会员ID:紫羽幻天【未报到,已注销】

申 请 I D:紫羽幻天
2、个人邮箱:894302300@qq.com
3、会点小程序逆向,libcocos2djsc和il2cpp的简单修改
问题:程序存档被加密,如何解密存档?
工具:ida7.0,ida7.7绿色版,frida12.8.4

https://imgse.com/i/xSloO1
分析过程:
文件显示很像base64加密,用base64直接解密显示乱码,所以猜测在base64之前有过别的运算。
打开ida,待加载完成后,加载ida_with_struct.py,选择script.json和il2cpp.h以使代码易读
搜索base64的相关函数
https://s1.ax1x.com/2022/09/16/xSlHw6.png
根据经验,像这种3个base64_xxx的就是base64函数,挨个点开看,发现第二个只有一个引用,是System_String_o *__cdecl EncryptDecipherTool__Encrypt_5036616,
https://s1.ax1x.com/2022/09/16/xS3lDI.png
在他的运算下有类System_Security_Cryptography_RijndaelManaged_o,由此判断,其为aes加密(经验,RijndaelManaged貌似是专用的加密库)
https://s1.ax1x.com/2022/09/16/xS3U2Q.png
接下来就是用frida hook下该地址,打印出它的key值

因为我们无法判断什么时候程序加载il2cpp,所有要提前hook dlopen,在加载了il2cpp后再执行脚本
function hook_dlopen(){
    var func=Module.findExportByName(null,"dlopen");
    var find = false;
    console.log('[+] dlopen '+ func.toString())
    Interceptor.attach(func, {
      onEnter: function (args) {
            find = false;
            this.so_path =Memory.readCString(args)
            if (this.so_path.indexOf("libil2cpp.so") >= 0){
                find = true;
                console.log(this.so_path)
            }
      },
      onLeave: function (retval) {
            if(find){//find为true时加载attach_matched脚本
                attach_matched(this.so_path)
            }
      }
    });
}

il2cpp加载后,执行脚本
function attach_gold(so_path){
    var func = get_func_by_offset("libil2cpp.so",0x4cda48)
    console.log('[+] hook '+func.toString())
    Interceptor.attach(func, {
      onEnter: function (args) {
            console.log('**********************')
            var hookx=0;
            if(hookx==0){
                console.log('arg0',args)
                console.log('arg1',args)
                console.log(print_dump(args,50))
                console.log(Memory.readUtf16String(args.add(0x0c)))
                //add(0x0c)是在地址的指针基础上添加0x0c的偏移,从数据结构里面看
                //readUtf16String是so层读取utf16字节的函数,读取utf8的是readUtf8String
                console.log(Memory.readUtf16String(args.add(0x0c)))
            }else{
                console.log("find",JSON.stringify(this.context))
                console.log(print_dump(this.context.r1,1000))
            }
      },
      onLeave: function (retval) {
            console.log(Memory.readUtf16String(retval))

      }
    });
}
hook后得到arg的值是‘xxxxxx857fe56dcb0a3004eed8a2715d’
因为入参里只有未加密字符串和key,猜测用的是aes的ecb模式,找个在线网站,正确解密

Hmily 发表于 2022-9-21 16:05

I D:紫羽幻天
邮箱:894302300@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

Hmily 发表于 2022-9-29 10:39

一直未报到,已注销。

发表于 2022-10-2 15:03

Hmily 发表于 2022-9-29 10:39
一直未报到,已注销。

你好,这个报道是在这个贴子下面回复吗。我登陆了,过了两天账户没了。可以恢复吗

Hmily 发表于 2022-10-3 21:20

游客 36.59.100.x 发表于 2022-10-2 15:03
你好,这个报道是在这个贴子下面回复吗。我登陆了,过了两天账户没了。可以恢复吗

你是登录了,并且我还发短消息通知你来报道,告诉你再不报道就要被注销了,你也没有来报道,自己等下次开放注册再来注册吧。

发表于 2022-10-5 21:57

你是发的站内信吗?还是邮箱。可能没看到吧。那我重新发个帖子申请可以不

Hmily 发表于 2022-10-8 11:14

游客 36.59.100.x 发表于 2022-10-5 21:57
你是发的站内信吗?还是邮箱。可能没看到吧。那我重新发个帖子申请可以不

发的站内信,不过不重要了,申请规则,和这个帖子我回复内容都明确写了,这个渠道只有一次申请机会,你等开放注册自己来注册吧。
页: [1]
查看完整版本: 申请会员ID:紫羽幻天【未报到,已注销】