腾讯游戏安全移动赛题Tencent2016A

[复制链接]
发表于 2025-10-20 07:18:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
App信息

包名:com.tencent.tencent2016a

Java层分析

MainActivity


校验name和code的函数在c类里
c


NativeCheckRegister是校验name和code的
NativeCheckRegister


发现NativeCheckRegister是一个native函数,进入so举行分析。
SO分析

定位NativeCheckRegister函数位置


NativeCheckRegister

范例修复及函数重定名之后的NativeCheckRegister函数如下

check

范例修复及函数重定名后的check函数
  1. bool __fastcall check(const char *name, char *code)
  2. {
  3.    
  4.    
  5.   signed int namelength; // r5
  6.   _BOOL4 result; // r0
  7.   int i; // r4
  8.   _DWORD *nametempaddr; // r7
  9.   int nametempresult; // r3
  10.   int j; // r4
  11.   int codetemp; // r1
  12.   _DWORD nameresultarray[5]; // [sp+18h] [bp-458h] BYREF
  13.   _DWORD coderesultarray[5]; // [sp+2Ch] [bp-444h] BYREF
  14.   _BYTE namemix[20]; // [sp+40h] [bp-430h] BYREF
  15.   _BYTE codeResult[1052]; // [sp+54h] [bp-41Ch] BYREF
  16.   namelength = j_strlen(name);
  17.   if ( (namelength - 6) > 0xE )                 // 校验name长度范围[6:20]
  18.     return 0;
  19.   j_memset(namemix, 0, sizeof(namemix));
  20.   for ( i = 0; i != 16; ++i )                   // 基于name生成一个混淆数据
  21.   {
  22.    
  23.    
  24.     nametempaddr = &namemix[i];
  25.     nametempresult = name[i % namelength] * (i + 20160126) * namelength;// 基于 name 的字符生成一个与 name 相关的混淆数据,存入namemix
  26.     *nametempaddr += nametempresult;
  27.   }
  28.   j_memset(codeResult, 0, 0x400u);
  29.   if ( codeEnc1(code) > 1024 || codeEnc2(codeResult, code) != 20 )
  30.     return 0;
  31.   j_memset(nameresultarray, 0,
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表