总体流程:
- 拿到需要破解的apk包,解压获取dex文件
- 使用dex2jar工具获取jar文件
- 使用jd-gui打开jar文件
- Android studio 安装可以将java转换成smali的插件:java2smali
- 编写InjectLog.class文件,将该文件转为smali文件备用(生成好的smali文件参见tip2)
- 使用apktool工具“解压”apk文件,获取smali文件
- 修改manifest文件,application下添加 andriod:debuggable=true;
- 将InjectLog.smali根据包名(“com/hook/testsmali/InjectLog”)放入指定位置
- 使用python文件(参见tip1)给smali文件注入日志,修改walker=os.walk(“/Users/kb_jay/Documents/injectLog4/msc/smali/com”)中的参数可以指定那些smali文件需要注入日志
- 使用apktool生成签名文件
- 使用apktool将注入完日志的smali文件重新打包签名生成apk文件; jarsigner -verbose -keystore mykeystore -signedjar android_signed.apk(目标名字) TestSMSDemo.apk(要签名的apk) linlin
- 安装运行apk,触发关注的事件,根据Tag(InjectLog)获取方法调用栈的日志
- 将日志保存备用
- Android Studio安装smalidea插件
- 将smali文件夹导入到Android Studio中
- 将smali文件夹设置为source root
- 设置project的jdk
- 在as中创建remote调试,记住设置的端口号
- 在as终端输入adb shell am start -D -n com.xxx.xxx/com.xxx.xxx.xxx 以debug方式打开apk
- 查看该apk所有进程的Pid:adb shell ps | grep com.xxx.xxx
- 连接debug的remote端口(电脑)跟apk的进程(手机):adb forward tcp:remote调试的端口号 jdwp:查找到的pid eg:adb forward tcp:5005 jdwp:12000
- 根据保存好的日志文件在smali文件中加入断点
- run->debug (done)
参考:
https://my.oschina.net/zhibuji/blog/410993
https://www.cnblogs.com/gordon0918/p/5570811.html
http://www.cnblogs.com/goodhacker/p/5592313.html
tip
- 注入日志的python文件
1 |
|
- 注入日志的smali文件,注意包名
1 | .class public Lcom/hook/testsmali/InjectLog; |
- 关于smali语法
参考:https://www.jianshu.com/p/ba9b374346dd
- 打开apk自带的log:找到对应的logging类,修改smali文件,重新打包签名运行即可。