目标
找到跟离线包相关的所有下载的文件
结果
- 下载的是个zip,解压之后是两个so。这个就是它下载的所有东西了。
- 下面是截取的下载地址:
http://183.91.33.82/download.voicecloud.cn/ygxt/20161025/c8f798bb-f87d-4860-a6b9-3f64275af70d.zip
1 | 07-03 19:12:56.533 17441-18271/com.iflytek.inputmethod.assist D/iFlyIME_Network: [970] alm.a: HTTP response for request=<[ ] http://download.voicecloud.cn/ygxt/20161025/c8f798bb-f87d-4860-a6b9-3f64275af70d.zip 0xade53710 NORMAL null> [lifetime=22703], [size=null], [rc=200], [retryCount=0] |
- 下载的zip文件会先放在sd的IflyIme下的download文件夹下面,之后才会放到之前找到的隐藏目录下。
1 | 7-03 19:12:56.533 17441-17441/com.iflytek.inputmethod.assist D/DownloadHandleManager: onFinish filename : /storage/emulated/0/iFlyIME/Download/c8f798bb-f87d-4860-a6b9-3f64275af70d.zip |
实验成功过程
- 修改smali文件(Logging.smali)
- 新建一个injectLog.smali文件添加到工程中,通过python脚本给downLoad下所有的smali文件的每个方法添加输出日志。可以看到方法调用的顺序。参考https://blog.csdn.net/charlessimonyi/article/details/52027563
- 重新打包
- 重新签名
- 安装
- 查看assist进程下的日志,可以看到下载进度,完成之后可以看到下载路径。且下载的zip包跟提示消耗的流量一致,进一步可以确认下载的只有这两个so文件。
反编译思路
- 利用dex2jar+jd-gui 获取class文件
- 利用apkTool获取smali文件跟资源文件
- 利用log注入给指定包名下的smali文件中的方法注入log:参考https://blog.csdn.net/charlessimonyi/article/details/52027563
- 触发关注的事件,观察log,找出相关的类,阅读java代码
- 在对应的smali文件中加断点调试代码 参考:https://kbjay.github.io/2018/06/29/Android-%E5%8F%8D%E7%BC%96%E8%AF%91%E8%B0%83%E8%AF%95smali%E6%96%87%E4%BB%B6/
ps
在查找关键词的过程中发现了Aitakl5.class,代码如下:
1 | public class Aitalk5 |