ningkong 发表于 2023-1-5 15:45:52

火力全开,还原WeChat的wapkg二进制分析On 2023-01-05,6.9--7.10的10个版本C底部下载

本帖最后由 ningkong 于 2023-1-7 14:43 编辑





飞天梦 发表于 2023-1-5 20:57:25

谢谢楼主分享

ningkong 发表于 2023-1-7 11:08:35

本帖最后由 ningkong 于 2023-1-7 11:09 编辑

WAPackageInfoCacheLogic unpackPkgWithFilePath:unpackLib    函数的抽取

举例7.0.3 的 F5 函数
bool __cdecl -(WAPackageInfoCacheLogic *self, SEL a2, id a3, WXAPkg *a4)
{
WXAPkg *v4; // x24
__int64 v5; // x19
void *v6; // x0
void *v7; // x0
void *v8; // x22
__int64 v9; // x1
__int64 v10; // x21
void *v11; // x0
void *v12; // x0
__int64 v13; // x26
void *v14; // x26
void *v15; // x27
void *v16; // x0
bool v17; // w25
__int64 v18; // x24
void *v19; // x0
void *v20; // x0
char v22; //
__int64 v23; //

v4 = a4;
v5 = objc_retain(a3, a2);
v6 = +(&OBJC_CLASS___WCLogger, "externalIMP");
objc_msgSend(
    v6,
    "logWithLevel:module:errorCode:file:line:func:format:",
    2LL,
    "WeApp",
    0LL,
    "WAPackageInfoCacheLogic.mm",
    103LL,
    "-",
    CFSTR("unpack pkg, path=%@"),
    v5);
v23 = 0LL;
v7 = objc_msgSend(&OBJC_CLASS___NSData, "dataWithContentsOfFile:options:error:", v5, 3LL, &v23);
v8 = (void *)objc_retainAutoreleasedReturnValue(v7);
v10 = objc_retain(v23, v9);
if ( v10 )
{
    v11 = +(&OBJC_CLASS___WCLogger, "externalIMP");
    objc_msgSend(
      v11,
      "logWithLevel:module:errorCode:file:line:func:format:",
      3LL,
      "WeApp",
      0LL,
      "WAPackageInfoCacheLogic.mm",
      109LL,
      "-",
      CFSTR("unpackPkgWithFilePath(NSDataReadingMappedIfSafe | NSDataReadingUncached) error: %@"),
      v10);
}
else if ( objc_msgSend(v8, "length") )
{
    goto LABEL_5;
}
v12 = objc_msgSend(&OBJC_CLASS___NSData, "dataWithContentsOfFile:", v5);
v13 = objc_retainAutoreleasedReturnValue(v12);
objc_release(v8);
v8 = (void *)v13;
LABEL_5:
if ( objc_msgSend(v8, "length") )
{
    sub_10354B138(&v22);
    v14 = (void *)objc_retainAutorelease(v8);
    v15 = objc_msgSend(v14, "bytes");
    v16 = objc_msgSend(v14, "length");
    sub_10354B2A8(&v22, v15, v16);
    v17 = 1;
    v18 = sub_100735844(v4, &v22, 1LL);
    if ( (_DWORD)v18 )
    {
      v19 = +(&OBJC_CLASS___WCLogger, "externalIMP");
      objc_msgSend(
      v19,
      "logWithLevel:module:errorCode:file:line:func:format:",
      4LL,
      "WeAppError",
      0LL,
      "WAPackageInfoCacheLogic.mm",
      126LL,
      "-",
      CFSTR("unpack error:%d"),
      v18);
      v17 = 0;
    }
    sub_10354B1E8(&v22);
}
else
{
    v20 = +(&OBJC_CLASS___WCLogger, "externalIMP");
    objc_msgSend(
      v20,
      "logWithLevel:module:errorCode:file:line:func:format:",
      4LL,
      "WeAppError",
      0LL,
      "WAPackageInfoCacheLogic.mm",
      117LL,
      "-",
      CFSTR("pkgData is empty"));
    v17 = 0;
}
objc_release(v8);
objc_release(v10);
objc_release(v5);
return v17;
}




乐活 发表于 2023-1-7 15:11:45

来学习,多谢!
页: [1]
查看完整版本: 火力全开,还原WeChat的wapkg二进制分析On 2023-01-05,6.9--7.10的10个版本C底部下载