一. 开始调试
smali调试从最早的重打包用各种JAVA IDE进行调试, 到后来的可以不用重打包用xposed插件, 在到最后的修改系统源码刷机或者修改boot.img刷机一劳永逸
apk可调试可以为下面几个点满足一个几个, 
1. invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
2. AndroidManifest.xml中Application注明android:debuggable为true
3. 修改系统/system/build.prop或者default.prop让ro.debuggable=1即可调试所有进程,然而直接修改会出现问题
          linux系统下可以用getprop和setprop命令来读写, Android系统下只能读取, 
          Android下可以通过System.getProperty("ro.debuggable");来获取指定的属性
system/build.prop和default.prop,都是init进程来进行解析的, 这些ro开头的属性信息只能init进程进行修改
所以对于ro.debuggable属性我们可以
         ①. 修改系统源码, 编译android源码,然后刷入到设备中
         这个过程我已经做成功过了,参考之前的文章<<编译android源码绕过反调试>>

        ②. 直接导出手机里面boot.img, 然后修改里面的ro,debuggable, 然后刷机回去(对于第三方没有源码的手机这样做是有意义的)
        我没有做过, 看雪上有人做过了
        <<修改Nexus5的boot.img - 打开系统调试>>

         ③. 第三用一些别人写的第三方工具
         比如mprop, 这个的原理是注入到init进程进行修改
         当然需要root权限, 开启selinux之后, 可能需要忽略安全策略选项
         可能不兼容所有的android设备, 当然肯定是需要root权限的
         
         或者使用xposed的插件, tx应急安全响应中心有一个dbopener也可以实现类型的效果
         之前网上流行的smalidea无源码调试android程序估计也是类似的方法, XInstaller插件

总结一下就是: 
方法3不用重打包, 方法1, 2都需要重打包
我们熟悉了解调试的流程, 我们就可以在流程上做手脚, 来进行反调试, 当然如何进行反调试又是另外一个话题了

重打包的话, 可以看我之前写的一个脚本程序, 可以一键重打包, 当然脚本写的还不够完美
<<一键调试脚本的使用>>

启动并等待调试器
安装完apk之后, 我们可以通过adb shell命令调试的方式启动apk
adb shell am start -D -n 包名/主Activity

二. 映射原理
adb shell ps | grep antivirus                                                                                                    
u0_a36    5766  154   907116 29496 ffffffff b7544d11 S com.qihoo.antivirus
adb forward tcp:8700 jdwp:5766

这里说明下为什么要这样做, 该命令的格式如下:
adb forward [协议名]:[本地端口号] [协议名]:[远程端口号]
这样就完成了一个映射关系, 发到远程端口的数据都会映射到本地指定的端口上,实质上就是客户端和服务端的关系

8700端口号可以随便给, 比如你需要用Android Studio来链接调试器, 就在配置远程调试器界面加上
刚刚那里映射为8700 AndroidStudio里面就填多少

当然也可以使用DDMS, ddms会默认从8600开始映射列表起第一个app 
不过ddms和手动adb forward会有冲突, 开启ddms之后就会出问题

当然建议用第一种方法, 这样可以写成脚本完成自动化, 当然这样就需要注意使用logcat了

小贴士:
当我们adb forward了很多次之后, 我们可以使用如下命令来管理
adb forward --list  查看当前所有映射关系
adb forward --remove--all   移除所有映射管理
adb forword --remove tcp:8700 移除本地指定映射关系

之后就可以开始调试了







 
















smali调试总结的更多相关文章

  1. Netbeans 6.8 + apktool_2.0.0b9 动态调试smali文件

    前言 很早就知道用Netbeans能够单步调试smali,一直拖到现在才真正的自己实现了一次~ 下面是详细步骤! 0×1 环境及工具 a.apktool_2.0.0b9 下载地址:http://con ...

  2. JEB 无源码调试 以dvm smali字节码方式,Demo尝试

    关于调试器看不到进程,无法attach的问题,网上也有很多教程,基本是修改ro.debugable =1  ,ro.secure = 0 让adbd有root权限 attach到其他进程,涉及到要修改 ...

  3. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  4. Android studio动态调试

    Reference:  http://cstsinghua.github.io/2016/06/13/Android%20studio%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF ...

  5. android smali代码注入 实战一

    有同学在通服里面干活,最近一直忙着4g基站搭建的干活,测试设备(android)测量移动网络数据,没有自动保存记录的功能,只能手动记录各种测试参数,不知道测试软件供应商是怎样想的,竟然不提供的这样的功 ...

  6. apktool动态破解apk

    那么今天我们就用另外一种方式来破解apk:动态方式,关于动态方式其实很广义的,因为动态方式相对于静态方式来说,难度大一点,但是他比静态方式高效点,能够针对更过的破解范围.当然动态方式很多,所以这里就分 ...

  7. Android Stdio 调试Smali

    一 安装插件 1)Android stdio 安装插件 二 反编译smali 1)java -jar baksmali-2.1.2.jar app-debug.apk -o test/src2)and ...

  8. apk逆向 - smali动态调试

    author: Dlive date: 2016/10/6 0x00 前言 ​ 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...

  9. 安卓动态调试七种武器之长生剑 - Smali Instrumentation

    安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...

随机推荐

  1. 小谈Jquery框架

    现在Jquery框架对于开发人员基本上是无人不知,无人不晓了,用起来十分的方便,特别是选择器十分强大,提高了我们的开发速度.但是好多人也只是停留在了会用的基础上,我个人觉得会用一个框架不算什么,只能说 ...

  2. [板子]ISAP

    ISAP求最大流,敲了一发板子,无压行,教程略去.转载请随意. #include <cstdio> #include <cstring> #include <algori ...

  3. 国内git项目托管平台

    以前一直使用github托管项目,最近换了阿里云的vps,连接github出奇的慢,找了一下国内的代码托管平台. 有几个都不错,我刚好有csdn的账号,就试了一下csdn的托管平台,创建一个项目,发现 ...

  4. Android Hook技术

    原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...

  5. volatile修饰符

    Volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值.而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成 ...

  6. iOS 安装应用

    1.itool 安装 不是本文重点 2.fruitstrap安装 2.1 前往 https://github.com/ghughes/fruitstrap 下载源代码 (git clone 即可) 2 ...

  7. .net 过滤json等字符串里的特殊字符

    JSON现在是很常见的处理数据的方式了,但是在使用JSON的时候,有些特殊字符会让我们得到非预期的结果.JSon数据中常见的特殊字符有:引号,正斜杠,反斜杠,换行符号等.下面介绍JSON中的特殊字符该 ...

  8. Non-blocking read on a subprocess.PIPE in python

    import sys from subprocess import PIPE, Popen from threading import Thread try: from Queue import Qu ...

  9. Généralement c'est un mélange qui me devient personnellement

    Parmi mes plus grands problèmes personnels avec maisons de rue conventionnelles est en fait ils sont ...

  10. java spring mvc restful 上传文件

    spring mvc 配置文件 <bean class="com.baiyyy.yfz.core.RestfulHandlerMethodMapping" />     ...