本人新手,前几天我在破解一个腾讯手游,它的代码是加密的,真实代码我已经用gg修改器找到了。但是我需要重新打包,于是我从原来的libil2cpp.so里找解密程序。
我找到了它的init_proc,里面有这一段代码:
我顺着IDA里面的提示,看到了85d8b58这个地址。跳转之后,发现这是一个比较长的程序,里面还有libil2cpp.so等字符串和很多运算,所以我基本确定这就是解密代码。可是,代码太长,我就有点看不懂了。在ida里f5 85d8b58这段程序,得到伪C:
[C] 纯文本查看 复制代码 int __fastcall sub_85D8B58(int a1)
{
int v2; // r0
void (__fastcall **v3)(int *); // r6
_BYTE *v4; // r0
int v5; // r2
int v6; // r4
int v7; // r0
int v9; // [sp+Ch] [bp-44h]
_BYTE *v10; // [sp+10h] [bp-40h]
int v11; // [sp+14h] [bp-3Ch] BYREF
char *v12; // [sp+18h] [bp-38h]
int v13; // [sp+1Ch] [bp-34h]
void *v14; // [sp+20h] [bp-30h]
int v15; // [sp+24h] [bp-2Ch]
void *v16; // [sp+28h] [bp-28h]
int v17; // [sp+2Ch] [bp-24h]
void *v18; // [sp+30h] [bp-20h]
int v19; // [sp+34h] [bp-1Ch]
sub_85D91B8();
byte_85DC60C = 99;
v2 = sub_85DA168(1);
if ( byte_85DC614 )
sub_85D8AE0(v2);
byte_85DC60D = 104;
byte_85DC614 = 1;
byte_85DC60E = 107;
v3 = (void (__fastcall **)(int *))off_85DBF90;
if ( (dword_85DC21C & 2) != 0
&& !(*((int (__fastcall **)(void *, int, int))off_85DBF90 + 1))(&unk_85DC114, a1, dword_85DC218) )
{
sub_85D8AE0(0);
}
byte_85DC611 = 110;
byte_85DC60F = 95;
byte_85DC610 = 105;
byte_85DC612 = 105;
byte_85DC613 = 116;
if ( sub_85D8B10("libil2cpp.so") )
{
sub_85D9098(dword_85DC234);
if ( sub_85D8B10(&unk_85DC278) )
{
v12 = (char *)&unk_85DC298;
v11 = a1;
v13 = dword_85DC2B8;
v14 = &unk_85DC2BC;
v15 = dword_85DC2DC;
v16 = &unk_85DC2E0;
v19 = dword_85DC324;
v17 = dword_85DC300;
v18 = &unk_85DC304;
v3[24](&v11);
}
}
sub_85DA168(1);
v4 = v12;
v5 = v11 - v9;
if ( (int)v12 < (int)v10 )
{
--v5;
v4 = v12 + 1000000000;
}
v6 = 1000 * v5;
v7 = sub_85D91E4(v4 - v10, &stru_F4240);
return ((int (*)(const char *, ...))v3[25])("[%s] time:%ld ms", "libil2cpp.so", v6 + v7);
}
求各位大佬,有谁能告诉我,它的真实解密算法是什么?它的加密数据在哪?
附上libil2cpp原文件网盘地址。
https://wws.lanzouj.com/iffnrl551vi
密码:52pj
最后,有谁有什么技巧,区分有用信息的无用信息吗? |