App信息
包名:com.tencent.tencent2016a
Java层分析
MainActivity
校验name和code的函数在c类里
c
NativeCheckRegister是校验name和code的
NativeCheckRegister
发现NativeCheckRegister是一个native函数,进入so进行分析。
SO分析
定位NativeCheckRegister函数位置
NativeCheckRegister
类型修复及函数重命名之后的NativeCheckRegister函数如下
check
类型修复及函数重命名后的check函数
bool __fastcall check(const char *name, char *code)
{
signed int namelength; // r5
_BOOL4 result; // r0
int i; // r4
_DWORD *nametempaddr; // r7
int nametempresult; // r3
int j; // r4
int codetemp; // r1
_DWORD nameresultarray[5]; // [sp+18h] [bp-458h] BYREF
_DWORD coderesultarray[5]; // [sp+2Ch] [bp-444h] BYREF
_BYTE namemix[20]; // [sp+40h] [bp-430h] BYREF
_BYTE codeResult[1052]; // [sp+54h] [bp-41Ch] BYREF
namelength = j_strlen(name);
if ( (namelength - 6) > 0xE ) // 校验name长度范围[6:20]
return 0;
j_memset(namemix, 0, sizeof(namemix));
for ( i = 0; i != 16; ++i ) // 基于name生成一个混淆数据
{
nametempaddr = &namemix[i];
nametempresult = name[i % namelength] * (i + 20160126) * namelength;// 基于 name 的字符生成一个与 name 相关的混淆数据,存入namemix
*nametempaddr += nametempresult;
}
j_memset(codeResult, 0, 0x400u);
if ( codeEnc1(code) > 1024 || codeEnc2(codeResult, code) != 20 )
return 0;
j_memset(nameresultarray, 0, sizeof(nameresultarray)