apktool + eclipse 动态调试无源码apk

本文介绍了如何通过apktool反编译无源码的apk,添加调试属性到AndroidManifest.xml,插入等待调试的代码,然后使用Eclipse进行远程Java应用调试,详细阐述了每个步骤,包括创建Java项目,设置源代码文件,添加断点,配置调试配置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简介

     调跳无源码apk,通过修改smali文件添加打印log, 很费劲,而且效率很低,现在通过apktool + eclipse 能够动态的调试smali 文件,能够进行单步,断点,查看寄存器操作。

2. 反编译apk

    
    apktool.bat d -d NewTest.apk
这里必须使用-d参数,这样反编译出来的代码后缀均是java,因为只有java文件才能被eclipse/netbeans识别调试

3.添加调试属性到AndroidManifest.xml

   打开AndroidManifest.xml,在application节点中设置属性android:debuggable="true"
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.newtest" platformBuildVersionCode="22" platformBuildVersionName="5.1.1-1819727">
    <application android:allowBackup="true" android:debuggable="true"  android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
        <activity android:label="@string/app_name" android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

4.在Activity 中添加等待调试代码

    当然了,你也可以在其他的地方添加等待调试代码,比如你可以在Application 类中加入,这样,你就可以设置断点在Application 类里面。
调试等待代码: invoke-static {}, Landroid/os/Debug;->waitForDebugger()V  要注意保持好前缀:a=0;//

a=0;// # virtual methods
a=0;// .method protected onCreate(Landroid/os/Bundle;)V
a=0;//     invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
a=0;//     .locals 1
a=0;//     .param p1, "savedInstanceState"    # Landroid/os/Bundle;
a=0;// 
a=0;//     .prologue
a=0;//     .line 12
a=0;//     invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

5.重新打包,签名,安装apk, 运行apk

  重新打包也要添加-d 参数

6.设置eclipse来进行调试

     启动eclipse,创建java项目

    1) File -> New -> Project -> Java Project -> Next

    2) Project Name随便起,Use default location选项去掉,Location选择out文件夹,然后Next

    3) 把smali文件夹设为Source Folder,然后Finish

    4)在eclipse中,打开第2步找到的主类,并找到onCreate方法,在waitForDebugger后面的第一个方法开始添加断点。如下图



    5)打开DDMS,在DDMS的设备列表中会显示可以调试的程序,记录下端口号

6) 关联代码与调试程序,配置远程调试

    1) 菜单Run -> Debug -> Debug Configurations

    2) 双击Remote Java Application,Project选择要关联的项目,Host处默认localhost就行,Port填上面得到的8602,然后Apply -> Debug。


然后eclipse自动切换至debug视图,并看到程序已经运行并中断在下一行可执行的代码了,相关的变量可以直接查看了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值