zoukankan      html  css  js  c++  java
  • 基本技能-调试(android)

    2017.12.23:写了一些基本的内容搭了一个壳子以及怎么使用apktool debug模式调试 apk

    2017.12.31:  完成了IDEA 调试smali ,添加了一些坑,希望有生之年能填完。

    一、 基本配置

    1. 启用调试APP的调试属性

           AndroidManifest.xml文件中的Application节点的属性中设置 android:debuggable=true (没有填写的情况下,允许调试)

           

     

    二、 DDMS

    我在安装完 IDEA后,已经有DDMS了。 Tools-> Android-> Android Device Monitor

     


     


    部分调试相关的设置,位于Windows -> preferences



    其他的一些功能,暂时并不了解。

     

    三、 调试

    1.   Apktool/Shakaapktool smalidebugging

    1.1 使用方法   

           1. APKdebug模式解包

    java -jar apktool.jar d -d -o source_dir file_Apk


           2. 开启debug属性后,重新打包回去

           Java -jar apktool.jar b -d -o new_apk source_dir


           3. 重新签名apk,否则无法安装

           Java – jar  signapk.jar publickey.x509[.pem] privatekey.pk8 input.jar output.jar


           4. java的相关IDE新建java项目,项目的根目录设置到debug模式下解包生成的目录下或者采用导入的方式导入。

           5. 运行DDMS, 配置IDEdebug configuration,选择remote,端口号为DDMS中挂载的端口号。之后就可以正常的进行调试。

          

    1.2 IDE

    只要按照java调试的方法进行调试就好。所以只要支持java的IDE都是支持的。

    1.2.1    IDEA

    打开IDEA,导入之前apktool debug模式下的解包生成的源代码。

    Import project


    Create project from existing source


    Next … Next .. Nect..

    选择java 作为项目的SDK


    Next… Finish.


    配置debug设置,  Run -> Edit Configuration


    点击 + ,添加remote, 配置相关内容后,应用



    之后在android中运行想要调试的程序,选择Run -> debug “添加的remote配置的名字”



    挂上断点就可以调试了,如下图:

     


    之后的调试操作与其他的没有什么不同。

     

    1.2.2   Ecplise

    IDEA中的操作基本一致,以后会补充更新。或者可以查看参考。

     

    1.3 说明

    目前为止并不清楚apktooldebug模式下的原理,可以看到的是解包生成的smali后缀的文件全部变成了.java的文件,smali的原来的内容被写到了注释中且每一行代码为a=0(默认)。大致上猜测应该是为了与底层的代码在行数上保持一致,方便调试器在相应位置打入中断指令。

    另外由于代码被转成了java来调试,所以在局部变量方面似乎没有办法进行跟踪,IDE中只有a=0的代码,那么调试中的类信息应当是来自于DDMS。目前并不清楚,DDMS会反馈哪些信息。

    由于不能显示局部变量,所以在调试上终究有点束手束脚。

    2. IDEA/Android Studio 调试smali代码

    2.1 使用方法

    1.  Apktool / shakaapktool 解包APK

     

    Java -jar apktool.jar d -o source_dir apk

    2. 开启debug属性后,重新打包回去(若已经开启debug属性则不需要)

           Java -jar apktool.jar b -o new_apk source_dict

     

    3. 重新签名apk,否则无法安装

          Java – jar  signapk.jar publickey.x509[.pem] privatekey.pk8 input.jar output.jar

     

    2.2 IDE

    好像只支持IDEAAndroid Studio,这两个处理android差不多。

    2.2.1   IDEA/Android Studio

    跟之前(smalidebugging中的IDEA的导入操作)一样导入项目,简单截图举例。


    Ok


    Next


    Next


    Next


    完成导入操作。这里调试的文件和之前采用smalidebugging中的不一样,不再是.JAVA,而直接是smali


    接下来配置远程调试信息




           android虚拟机中启动应用(下图有或没有都不影响)

           



    已经可以调试了,另外点击绿的小加号,可以查看/修改临时变量,在修改字符串的时候会比较蛋疼。



     

    2.3 说明

    现在应该大多采用这个方式进行调试了,能看到局部变量也能修改局部变量。最蛋疼的应该是修改字符串了,一位一位地改(估计原因可能和栈有关,大小有限制,为了保证程序执行不会出差所以在长度上要保持一致。这仅仅是一个猜测,我并不清楚。)。希望造轮子的人搞个插件出来,编辑字符串。

     

     

    3. Smali插入日志输出

    这种方法需要直接在smali中插入代码,我本人对于smali的语法比较陌生,看代码没什么问题,直接修改代码,也是照着别人的改还没去瞅瞅smali的语法。

    一般应用场景下,应该是通过之前所述的方法,调试完毕确定了流程,插入代码用于打印出重要的信息,避免之后每次都需要挂到IDEA上调试,直接根据log日志进行判断。

     

    四、 反调试

    先挖个坑,有生之年系列。

    五、 脱壳

    先挖个坑,有生之年系列。

    六、 参考

    HowTo: Debug Android APKs with Eclipse and DDMS

    http://blog.dornea.nu/2014/08/21/howto-debug-android-apks-with-eclipse-and-ddms/

    查询到的许多资料,暂未记录

    七、 遇到的坑

    1.     参考:http://blog.csdn.net/geeker_12/article/details/46564453

    2.     SmaliDebugging has been removed in 2.1.0 onward. Please see: https://github.com/

    iBotPeaches/Apktool/issues/1061

     

    高版本的apktools已经不支持文中所述的方式了,只能下个2.0.x的用。另外我在编译git上的源码时,bug不断,似乎是baksmali.jarsmali.jar的版本(在更新过程中部分类的命名风格也变了)没对,总是有找不到方法的编译错误,到目前为止还没有编译成功。

     

    3.     Apktools不支持中文路径

  • 相关阅读:
    江の島西浦写真館1-1
    花咲舞が黙っていない2-5
    花咲舞が黙っていない2-4
    花咲舞が黙っていない2-3
    花咲舞が黙っていない2-2
    花咲舞が黙っていない2-1
    花咲舞がだまってない1-5
    花咲舞がだまってない1-4
    花咲舞がだまってない1-3
    花咲舞が黙っていない1-2
  • 原文地址:https://www.cnblogs.com/alka1d/p/8094910.html
Copyright © 2011-2022 走看看