某颜色app抖阴加密算法分析-过root检测和so层初探


app样本

  • 闲来无事搞一个app,不知道找啥目标搞。结果翻着翻着找到今天的主角那就搞它了。传说中的和抖音同名的抖阴app。常规操作下载app安装打开。介于这个app是有颜色的所以本次全部不打码直接搞。

过root检测

  • 打开app一看这个提示这我的暴脾气能忍么。检测到手机root。。说我使用的模拟器或者设备已经被root了。

    检测到手机root

  • 首先拖到jadx看看是否加壳。发现没有被加壳。但是app混淆了。握擦这防护的这么流弊么
  • 混淆截图

  • 首先开启我们的firda看看这货检测不检查frida什么的。发现不检查。这小子还算识相。这时候我们想到可以用objection 的disable root来干掉root检测。但是也有可能干不掉。如果app检测root手段比较全面呢。所以我们用自己写的firda root检测定位脚本来测试一下
  • 没有检测frida

  • 用自己写的root定位检测脚本来看看。这样hook 。然后点击确定。进程没有退出我们已经hook了。然后在打开app看操作
  • hook截图

  • 打开app看看是否触发了root检测脚本。
  • 检测点在

    at java.io.File.exists(Native Method)
       at com.blankj.utilcode.util.w.q(DeviceUtils.java:3)
       at com.niming.weipa.ui.splash.SplashActivity.A(SplashActivity.kt:1)
       at com.niming.weipa.ui.splash.SplashActivity.K(SplashActivity.kt:3)
       at com.niming.weipa.ui.splash.SplashActivity.initView(SplashActivity.kt:
  • 接下来分析一波这个函数。当然这里已经进去系统了已经过掉了root检测了。当然如果没有过掉那么你分析一下这个检测函数被谁调用一级一级推断最后找到总检测函数直接hook掉就行了
  • 检测点

抓包分析

  • 抓包发现三处加密
  • 请求加密的截图)

  • 分析请求头肯定是有hashmap 这种keyvalue的形式。和hook java bytes字节的方式。所以我们直接hook这种掏出我们的写的js脚本神器hook。直接拿捏定位。 com.niming.weipa.utils.b.b com.niming.weipa.utils.b.a 猜测是aes加密算法
  • hook定位1

    hook定位2

  • 根据定位反推一下上一层函数。发现和我们请求包的函数一样。
  • 上层函数位置

  • 看代码。重点分析一下。f5317d 应该就是秘钥了。当然你直接hook秘钥也行。我们看这个他代码的意思是如果是release debug key就取TestUtil.getSecret2(); 否则是 如果是"release", "staging 取这个TestUtil.getSecretPre() 否则就是取这个 TestUtil.getSecret();。最终是取了 TestUtil.getSecret();。这里需要java 基础和安卓的函数基础如果不知道的可以hook看看
  • 加密代码分析

  • 我们重点看TestUtil.getSecret(); 里面的这个函数。我们发现这个是native函数(一般这代码大部分在so文件里面)又发现采用静态加载方式System.loadLibrary("security"); 那在lib目录表现形式是libsecurity.so所以我们找这个so曾经就行
  • native函数

  • 分析一下这个libsecurity.so getSecret 函数一般在so文件表现形式是java全包名和函数名称以_连接。并且在导出表里面。具体看截图。我们看。32位的so文件用32位的ida打开。
  • 32位so曾经

    函数位置

  • 看函数的逻辑。我们看到返回一个字符串这就是key了 l8N2iooyp07M9IWa 填充方式加密模式 AES/ECB/PKCS7Padding,
  • so层函数

验证和总结

  • 验证是否正确解密一下看看。其他三处也是同样方式
  • 成功解密

  • 总结要想理解今天的文章。需要动java基础 和java函数在so文件中如何调用如果并且使用的。函数的注册方式静态注册和动态注册等主要system.load 这个函数的函数并不一定就在这个so文件里面可能是个假的 so。通过动态方式注册的。本文恰好就在。要想在so层逆向中牛逼必要的c++和汇编和ida这些知识要学习的。

文章作者: peiqiF4ck
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 peiqiF4ck !
  目录