1.准备环境
win7
android-sdk_r24.0.2-windows.zip
jdk7
android studio1.5
eclipse
charles
温馨提示:后面三个工具都需要jre|jdk环境,请首先安装jdk.
2.抓包过程
通过在PC端安装charles软件,android端设置网络代理,抓取网络数据包。
2.1、PC端:在pc端创建wifi热点共享给外设->CMD命令行
netsh wlan set hostednetwork mode=allow ssid=abcd key=abcd1234
选择正在使用的网络连接,右键共享->勾选并选择刚刚创建的热点连接
netsh wlan start hostednetwork
charles:proxy setting 设置代理端口,若需https抓包请设置ssl选项,并且客户端安装charles证书
2.2、客户端:WLAN设置刚创建的“abcd”共享,并指定代理IP和端口号(自己ipconfig查看即可)
3.准备反编译工具
主要针对jvm的class文件和android虚拟机字节码smali,所需软件如下:
apktool_2.0.0rc4.zip ---- 可以得到apk里的资源和smali文件
dex2jar-2.0.zip ---- 获得class文件
jd-gui.exe ---- 反解class文件
signapk.rar ---- 修改smali或者资源文件,重新打包签名,***DEBUG***
4.开始吧
这里以反编译土豆 app为例:
得到res和smali
java -jar apktool.jar d -d ..\..\youku\tudou\tudoushipin_61.apk -o ..\..\youku\tudou\tudoushipin_61
得到class
dex2jar.bat tudoushipin_61.apk
对上面的class使用jd-gui反编译,并导入eclipse
5.上演调试 && android studio
将smali文件导入到android studio
5.1、找到刚才apktool反解的目录找到AndroidManifest.xml,LAUNCHER对应的Activity标签上加入可被debug的配置android:debuggable=“true”,并保存。
5.2、假设我们现在把断点加载app的启动入口:
找到APK的入口Activity类(搜索关键字LAUNCHER你懂得),也就是:com.tudou.ui.activity.WelcomeActivity。
到了关键性的一步,找到这个Activity对应的smali文件;
定位到入口方法:onCreate;
在下面加入DEBUG代码,app启动时加入断点会停在这个位置;
说明一下:这段代码是smali的语法更多了解可以自行Google,OK。
a=0;// invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
说明:根据你的需要可以把断点加到任意位置,前提是你要知道它在对应的smali文件的哪一行:方法是拿反编译后的Java文件和smali对应着去看,然后再找;后面的DEBUG也是这个思路(剧透)。
5.3、对修改后的apk重新打包
i.重新打包:
java -jar apktool.jar b -d ..\..\youku\tudou\tudoushipin_61 -o debug-tudou.apk
ii.重新签名:
java -jar signapk\signapk.jar signapk\testkey.x509.pem signapk\testkey.pk8 debug-tudou.apk debug-tudou.sign.apk
iii.一切可能都不是那么顺利)😦
5.4、开启android studio–>基于知名的IntelliJ IDEA开发
1.导入之前反编译得到的smali文件到android studio,并在‘前面加debug代码’的地方加入断点。
2.找一部android手机(模拟器就算了,又慢又总是不兼容),安装刚才的签名后的apk,通过USB数据线接入PC。
5.5、有一些必要的说明
1.默认安装完android studio,例如:C:\dev\android\sdk
2.对于android Dalvik虚拟机的调试监控,DDMS已经被废弃了,新的是tools下的monitor工具,将其启动
3.在monitor中会看到devices中会出现小手机图标,端口号一般是8600
6.开始远程调试
1.android studio中菜单栏->RUN->Edit Configuration -> Remote(这根在eclipse中差不多)
指定host:localhost,端口:8600,module:smali所在的位置
启动app–>运行debug即可 -> 顺利的话光标会定位到你刚才的断点处。
2.观察Android Monitor窗口
观察Debugger tag,可以查看对象和变量的值
@hell 分享