目标:fulao 加解密库的 native部分分析一下。在前面分析请求和响应中的加解密流程时,仅发现了一处用到native调用。在CipherClient类中各个参数请求时调用的CipherCore.get方法里,实际调用的就是libcipher-lib.so中的getString native方法。
用ida打开libcipher-lib.so文件,定位了下导出函数。虽然调用的函数名字长度很吓人,但是只看一些关键名称的话也可以大概知道是干什么的。
这里可以去java层的代码中看到这个key对应的是哪个值:
最后再用另一个字符串作为与这个key配对的value值存入map,应该就是这个apiEncryptParamsKey对应的值(或者加密后的值)。
外层比较直接,就是通过传入的值作为key去map中取出对应的value。然后用这个value传入Encryptor类的decrypt方法进行解密,解密后的值就是返回值,所以关键是确定decrypt中的解密逻辑。
Decrypt的实现需要确定Encryptor类的具体实现类,不过单静态分析不太好看出来。看到这里还是有用到JNI函数,于是尝试用jnitrace脚本跑一下。
定位到了实际解密方法decrypt以及所属的类net/idik/lib/cipher/so/encrypt/AESEncryptor。去Java层定位一下具体实现:
根据trace到的函数签名,确定实际调用的重载。
Key的生成是固定的,是对”fu2no1”进行MD5。
待解密密文为对传入的密文作base64解密后的内容。解密算法为AES,模式为:
看雪ID:Avacci
https://bbs.pediy.com/user-home-879855.htm
*本文由看雪论坛 Avacci 原创,转载请注明来自看雪社区