From:https://www.bilibili.com/video/BV1UE411A7rW?p=36
如果仅仅用 Smali 来分析代码,效果其实不如用 dex2jar 和 jd-gui 更直观,毕竟看反编译的 java 代码要更容易一些。
但 Smali 强大之处就是可以随心所欲的进行插桩操作。何为插桩,引用一下 wiki 的解释:
- 程序插桩,最早是由 J.C. Huang 教授提出的,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为“探测仪”),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。
插桩时注意:不要影响程序上下文,即插入的代码中,不能影响下面代码中使用的寄存器或者变量。
安卓从开发到逆向(四),smali 插桩:https://blog.csdn.net/wy450120127/article/details/101280797
以 " 好搜小说大全.apk " 为例:
下载地址:https://download.csdn.net/download/freeking101/12380255
打开 好搜小说大全.apk
定位当前界面:cmd ---> adb shell dumpsys activity top
可以看到当前界面是 MainActivity ,
下面开始分析过程。。。
首先使用 "查壳工具" 检测下 app 有没有加壳,如图:
可以看到 好搜小说大全.apk 没有加壳, 没加壳好办,直接使用 AK 打开 "好搜小说大全.apk",找到 对应 smali 代码(如果加壳,需要先脱壳,然后再反编译分析,这里不涉及脱壳。)
通过上面找到的 MainActivity ,进入对应的目录( smali ---> com ---> reader ---> activity ---> MainActivity )
在 activity 目录中找到 MainActivity :
插入 log 代码:
中文 转 Unicode 编码:
替换完成后,一定要保存,然后编译,生成 修改后的 apk
安装 apk
打开 DDMS 或者 monitor,然后根据包名进行 log 过滤,
使用 DDMS 过滤 log,运行程序即可看到 log 输出。
使用 monitor 查看效果一样:
插入 弹窗 道理一样。
保存,编译,运行
也可以自己写 smali 代码,引入自定义的 smali 包,强制弹出窗口等操作。。。
更多看视频教程。。。