学习luckin coffee 过程

一、抓包

        手机安装证书,开启VPN抓包,电脑上打开花瓶,在同一个局域网内抓包,这些老一套没什么可说的。

看看我们的抓包结果是不是很美丽,请求内容加密,返回内容也加密,猜测加密方式aes,加密参数sign是37位的,猜测MD5加密。

二、脱壳

        上jadx打开,很快加载完了,猜测是加壳。

看见了关键信息。下面我们就开始脱壳吧。

这是我们脱的每个DEX,我不喜欢合并,就一个个看吧。

三、java层分析
直接在DEX搜索     

很遗憾,通过搜索(加密参数和请求关键字)没有找到有用信息,说明加固的很严重。

通过搜索加载SO找到关键函数。      

自吐算法看调用栈

自吐算法没有再日志中找到有用的信息。

看看安装路径下的可疑SO

app安装路径下有2个SO文件比较可疑。通过验证,确实找到了加密SO。

jnitrace找可疑可以SO文件。

或者frida-trace找到可以SO文件,可以观察一下频繁调用的方法和SO文件就能发现惊喜。

四、native层分析

        直接搜索没有找到“Java_”,肯定是动态注册了,我们可以hook register native也可以直接分析“JNI_OnLoad”,后者在字符串窗口搜索"md5",我们就能定位到关键代码。

uint32_t __fastcall doMD5sign(const uint8_t *initial_msg, size_t initial_len, int8_t **digest)
{
  signed int v4; // r0
  int v5; // r2
  signed int v6; // r0
  int v7; // r2
  signed int v8; // r2
  signed int v9; // r0
  int v10; // r2
  size_t v11; // r4
  int8_t *v12; // r0
  uint8_t v14[16]; // [sp+0h] [bp-A8h] BYREF
  char s[64]; // [sp+10h] [bp-98h] BYREF
  char v16[20]; // [sp+50h] [bp-58h] BYREF
  char v17[20]; // [sp+64h] [bp-44h] BYREF
  char v18[20]; // [sp+78h] [bp-30h] BYREF

  md5(initial_msg, initial_len, v14);
  v4 = bytesToInt(v14, 0);
  v5 = v4;
  if ( v4 < 0 )
    v5 = -v4;
  sprintf(s, &byte_E0021, v5);
  v6 = bytesToInt(v14, 4u);
  v7 = v6;
  if ( v6 < 0 )
    v7 = -v6;
  sprintf(v18, &byte_E0021, v7);
  v8 = bytesToInt(v14, 8u);
  if ( v8 <= -1 )
    v8 = -v8;
  sprintf(v17, &byte_E0021, v8);
  v9 = bytesToInt(v14, 0xCu);
  v10 = v9;
  if ( v9 < 0 )
    v10 = -v9;
  sprintf(v16, &byte_E0021, v10);
  strcat(s, v18);
  strcat(s, v17);
  strcat(s, v16);
  v11 = strlen(s);
  v12 = (int8_t *)malloc(v11);
  *digest = v12;
  qmemcpy(v12, s, v11);
  return v11;
}

hook入参和结果,很友好,没有魔改,我们就把sign的算法找到了。

另外数据的加密和解密,aes算法也是在这个SO里面实现的。

通过分析我们找到了算法是AES,加密模式是ECB,我们直接HOOK验证找到KEY就好了。

五、算法还原

        sign还原:

q参数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v(z_xiansheng88)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值