APK反编译总结


  • 管理员


    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 分享


Log in to reply