本帖最后由 ningkong 于 2023-1-7 15:41 编辑
鉴于得到坛主的肯定, 所以继续分析, 运用前面几章学到的知识,继续巩固分析
环境:
MacOS Ventura 13.1
WeChat 7.0.2
IDA Pro 7.0 for Mac
经过对比发现,
WeChat 6.7, 7.0, 7.1, 7.2, 和书中截图的代码绝对一致, 代码从 line 54--line 98 完全一致, 细微差别已经从后面注释进行了说明
WeChat 7.3, 7.4,7.5, 7.7, 7.8, 7,9 结构基本保持一致,个别行数有差异, 所以为了还原书中调用, 从结构的最后一个版本进行! Wechat 7.2 用来分析。
埋坑:
1, 可能的 官方的自定义的文件结构在 6.7 到 7.9 之间并没有做太大的改变。 需要证明。
Wechat 7.0.2 WAPackageInfoCacheLogic unpackPkgWithFilePath:unpackLib 的F5代码 Line54-- Line98
[C] 纯文本查看 复制代码 v10 = objc_msgSend(&OBJC_CLASS___NSData, "dataWithContentsOfFile:", v5); //读取文件, 书中的 v5位置出现的filePath 并没出现在当中! 可能是系统环境不同导致的
v11 = objc_retainAutoreleasedReturnValue(v10);
objc_release(v7);
v7 = (void *)v11;
LABEL_5:
if ( objc_msgSend(v7, "length") )
{
sub_1030E8470(&v18);
v12 = (void *)objc_retainAutorelease(v7);
v13 = objc_msgSend(v12, "bytes");
v14 = objc_msgSend(v12, "length");
sub_1030E85E0(&v18, v13, v14); // 就是这里不一样, AutoBuffer::Write(&a1, v13, (_int64)v14);
v15 = 1;
v16 = sub_1005A4DEC(v4, &v18, 1LL); //解压操作
if ( (_DWORD)v16 )
{
+[iConsole logWithLevel:module:errorCode:file:line:func:format:](
&OBJC_CLASS___iConsole,
"logWithLevel:module:errorCode:file:line:func:format:",
4LL,
"WeAppError",
0LL,
"WAPackageInfoCacheLogic.mm",
126LL,
"-[WAPackageInfoCacheLogic unpackPkgWithFilePath:unpackLib:]",
CFSTR("unpack error:%d"),
v16);
v15 = 0;
}
sub_1030E8520(&v18);
}
else
{ //
+[iConsole logWithLevel:module:errorCode:file:line:func:format:](
&OBJC_CLASS___iConsole,
"logWithLevel:module:errorCode:file:line:func:format:",
4LL,
"WeAppError",
0LL,
"WAPackageInfoCacheLogic.mm",
117LL,
"-[WAPackageInfoCacheLogic unpackPkgWithFilePath:unpackLib:]",
CFSTR("pkgData is empty"));
v15 = 0;
}
和书中Line 54 ---Line 98 的对比
|