查看原文
其他

Frida分析违法应用Native层算法

Avacci 看雪学苑 2022-07-01
看雪论坛作者ID:Avacci

目标:fulao 加解密库的 native部分分析一下。
 
在前面分析请求和响应中的加解密流程时,仅发现了一处用到native调用。
 
在CipherClient类中各个参数请求时调用的CipherCore.get方法里,实际调用的就是libcipher-lib.so中的getString native方法。

用ida打开libcipher-lib.so文件,定位了下导出函数。

先看init:
虽然调用的函数名字长度很吓人,但是只看一些关键名称的话也可以大概知道是干什么的。
 
每次先调用sub_EB68初始化一个字符串:
然后把这个字符串作为key存入一个map中:
 
这里可以去java层的代码中看到这个key对应的是哪个值:

最后再用另一个字符串作为与这个key配对的value值存入map,应该就是这个apiEncryptParamsKey对应的值(或者加密后的值)。

 
再看getString方法:

外层比较直接,就是通过传入的值作为key去map中取出对应的value。然后用这个value传入Encryptor类的decrypt方法进行解密,解密后的值就是返回值,所以关键是确定decrypt中的解密逻辑。

Decrypt的实现需要确定Encryptor类的具体实现类,不过单静态分析不太好看出来。看到这里还是有用到JNI函数,于是尝试用jnitrace脚本跑一下。
Trace上之后,主动调用了下:
跑出来的JNI流程并不多,从结果字符串往前追溯:

定位到了实际解密方法decrypt以及所属的类net/idik/lib/cipher/so/encrypt/AESEncryptor。

去Java层定位一下具体实现:

根据trace到的函数签名,确定实际调用的重载。

剩下的就是分析各个参数。
Key的生成是固定的,是对”fu2no1”进行MD5。

Iv为16个值为0的字节:
待解密密文为对传入的密文作base64解密后的内容。

解密算法为AES,模式为:


 


看雪ID:Avacci

https://bbs.pediy.com/user-home-879855.htm

  *本文由看雪论坛 Avacci 原创,转载请注明来自看雪社区



# 往期推荐





公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存