【逆向】鲁大师Android跑分结果还原
前提:测试机需root,能导出/data/data/com.ludashi.benchmark/shared_prefs/benchScore.xml
APP版本:com.ludashi.benchmark: 10.7.3
工具:jadx: 1.4.5
事因
最近用鲁大师对机器性能进行批量跑分测试,每次都需要将结果截图后对比,十分不方便。通过搜索发现,鲁大师APP将跑分结果加密后保存在/data/data/com.ludashi.benchmark/shared_prefs/benchScore.xml中,但进行了加密,不方便保存数据和批量分析。
1 |
|
看数据结构像是Base64加密,但用Base64解密后是乱码,估计是进行了位移操作,之前分析某地图SDK的log也用了类似的加密,加密和解密函数通常是同一个。
反编译
将APK拖进jadx中发现没加固,简单搜索关键字发现在com.ludashi.benchmark.c.f.c中读取了KEY
1 |
|
其中b函数就是解密函数,一切来的太简单了, 准备好的frida都没用上。
解密函数将总分作为密钥,所以总分是明文,加密是先位移再Base64,解密是先Base64再位移,用的都是同一个函数。用ChatGPT搜这个函数是这样解释的:
这段代码看起来是一个类似 LFSR(线性反馈移位寄存器)的加密算法。它通过一个特定的位运算来生成一个伪随机序列,然后用这个序列与原数组进行异或运算来加密原数组。`
1 |
|
解密
解密就比较简单了,将上面两段代码复制出来就行,解密结果:
1 |
|
完整代码在:https://gist.github.com/hqw700/27fac24e7a0a335435a1d3080fb436d3
【逆向】鲁大师Android跑分结果还原
https://hqw700.github.io/2023/01/11/ludashi-score-decrypt/