Leica FOTOS,徕卡公司推出的一款徕卡相机管理软件,其内置了多款LUT供高贵的SL3及Q3使用,让我等穷鬼十分眼馋。那么穷鬼如何迈入毒德大学呢?
方法一:HALD LUT,受限于HALD 色块图的分辨率,提取的LUT总让我等穷鬼觉得不够德味。
方法二:反编译Leica FOTOS,我们将会得到纯正的徕卡LUT,但是万恶的资本主义徕卡,在两年前就发现了这个BUG,为了阻止穷鬼不购买SL3就获得富哥们LUT,将软件中的LUT加密,文件也变为了.CUBE.enc后缀。
但是穷鬼们没有徕卡,有电脑哇↓
1、分析加密结构
将 Leica FOTOS 的 APK 解包,寻找资源文件夹,assets\looks\cube中可看到一批 .CUBE.enc 文件。直接查看其编码,开头 Base64 字符串 +] 分隔符 +密文,反编译寻找lut相关的类,基本确认采用AES加密,开头字符串为初始化向量。
2、寻找密钥
不管徕卡的程序员是不是外包的,让人遗憾的是他们都没有把Key明文存储。穷鬼们还是要继续努力,进一步发现Key通过JNI 放在底层 libnative-lib.so 动态库中,并通过一个名为 NativeKeyProvider 的类进行调用。
3、拦截getkey
安卓人一般用安卓机,碰巧安卓机还是ROOT的,因此穷鬼们可以使用 Frida 对程序进行动态 Hook,直接拦截 getKey() 方法。
成功 Hook 后,程序会返回实际使用的密钥:
bGVp■■■■■■■■■■■■■HRfa2V5
Base64 解码后内容为:
leica_camera_encrypt_key(好直白)
4、解密 LUT 文件
拿到 Key + IV 后,可使用 Python 的 cryptography 库,实现 AES-GCM 解密即可,将 .CUBE.enc 批量还原为标准 .cube 文件。
最终,我们迈进了毒德大学。
就是你这个徕卡LUT怎么还是个17x17x17的,嗯,感觉又不够德味了。

发表回复