一. 开始调试
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. Ajax入门(一)

    最近开始学习Ajax了0.0,虽然其他的还没巩固,但既然学了就先写下来吧... Ajax的定义呢,百度吧= =...就觉得最实用的地方就是页面无刷新,但网页实现了与后台的同步更新.   1, 首先创建 ...

  2. list,tuple,dict,set常用方法

    Python中list,tuple,dict,set常用方法 collections模块提供的其它有用扩展类型 from collections import Counter from collect ...

  3. 信鸽推送 10004,os文件配置出错,解决办法

    信鸽推送注册失败 返回码 10004 是 os  配置出现问题 经过询问客服,得到以下解决办法 将SDK中的so文件复制下来 新建文件夹jniLibs,并将 so 配置文件粘贴进去 便可完成注册

  4. ES6深入学习记录(二)promise对象相关

    1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promis ...

  5. iTestSharp的简单应用

    前言 最近公司某项目要针对一些信息基础表绘画成表格的形式然后生成pdf文件,在网上寻找到iTestSharp发现此类库很强大,虽然园子里已经有很多大牛写了关于此插件的使用方法,但是自己也想写一写,把自 ...

  6. IOS-Hybrid(混合开发)

    http://www.cnblogs.com/oc-bowen/p/5423902.html 1.1.     APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等 ...

  7. JavaScript的Dom操作

    两个练习: 1.两个表单里面的数据相互移动: <style type="text/css"> select { width: 100px; position: rela ...

  8. 【04-10】java中的路径

    java中的路径 System.getProperty("user.dir")  获取工程的绝对路径 Class.class.getClass().getResource(&quo ...

  9. JS提交对象数组到服务端的方法总结(C#实例)

    *转载请注明出处: 作者:willingtolove: 本文链接:http://www.cnblogs.com/willingtolove/p/4741549.html 正文: 1. 方法一:利用aj ...

  10. 如何改变span元素的宽度与高度

    内联元素:也称为行内元素,当多个行内元素连续排列时,他们会显示在一行里面. 内联元素的特性:本身是无法设置宽度和高度属性的,但是可以通过CSS样式来控制,达到我们想要的宽度和高度. span举例1: ...