马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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,
复制代码 |