一款使用了加密JavaScript文件的Android软件逆向分析

声明:案例分析仅供学习交流使用,勿用于任何非法用途。如学习者进一步逆向并对版权方造成损失,请自行承担法律后果,本人概不负责。

简介

本次逆向的apk拥有较为简单的加固和JavaScript源码加密,分析起来并不困难,旨在分享心得——当逆向分析遇到“死胡同”的时候,换个思路也许能拨云见日。
 

目标

获取apk中有关“91kds播放逻辑”的信息。
 

逆向流程

首先用jadx分析apk文件,发现其拥有360加固。
一款使用了加密JavaScript文件的Android软件逆向分析
尝试使用drizzleDumper获取内存中真正的dex,成功。
一款使用了加密JavaScript文件的Android软件逆向分析
再次用jadx分析真正的dex,没有找到与字符串“91kds”相关的有用信息,陷入僵局。
一款使用了加密JavaScript文件的Android软件逆向分析
 

突破口——JavaScript文件

无意间翻看其官网,发现这个应用同时拥有Android版和IOS网页版,以此推测其安卓版有可能使用了JavaScript做混合开发。
一款使用了加密JavaScript文件的Android软件逆向分析
于是猛然回想起之前分析apk data目录文件时看到的一堆*.js,当时不以为然,现在想起来它们兴许就是突破口,立马导出。
一款使用了加密JavaScript文件的Android软件逆向分析
jquery-2.1.1.min.js库不多赘述,native_layer.js提供了大量工具方法,并由方法名中的片段yk(优酷),bst(百事通)等推测这是播放逻辑需要用到的方法。
一款使用了加密JavaScript文件的Android软件逆向分析
但是当打开其他js文件时,发现被加密了。如encrypt_root.js。
一款使用了加密JavaScript文件的Android软件逆向分析
回到dex中找线索,发现在apk初始化数据时,会解压下载的js.zip。
一款使用了加密JavaScript文件的Android软件逆向分析
 

找到解密函数

顺藤摸瓜即可找到其读取js并解密的入口。
一款使用了加密JavaScript文件的Android软件逆向分析
解密逻辑大致如下。
一款使用了加密JavaScript文件的Android软件逆向分析
读取文件用的是java.util.Scanner的方法,不用担心是继承、重载做过手脚的类,也就不用再深入分析。
一款使用了加密JavaScript文件的Android软件逆向分析
小插曲:将代码复制到java项目中运行,报错。
一款使用了加密JavaScript文件的Android软件逆向分析
猜测为AES加密方法的平台兼容性导致,经过多次修改仍旧报错。
一款使用了加密JavaScript文件的Android软件逆向分析
再次换个思路,将代码放入Android项目运行,正常获得解密js文件。encrypt_root.js即为url处理入口。
一款使用了加密JavaScript文件的Android软件逆向分析
在encrypt_other_live.js中可以找到最关键的sign字段生成方式,至此就完成了对91kds播放逻辑的逆向分析。
一款使用了加密JavaScript文件的Android软件逆向分析