一. 开始调试
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. ConcurrentHashMap内存泄漏问题

    问题背景 上周,同事写了一段ConcurrentHashMap的测试代码,说往map里放了32个元素就内存溢出了,我大致看了一下他的代码及运行的jvm参数,觉得很奇怪,于是就自己捣鼓了一下.首先上一段 ...

  2. Asp.net 设置GridView自适应列宽不变形

    动态绑定的GridView由于列数不固定,而列又太多,这样设置GridView固定宽度就不能满足需求了.为此整理了两种方法来达到GridView自适应列宽不变形的效果. //在GridView的行数据 ...

  3. C#计算代码执行时间

    System.Diagnostics.Stopwatch watch = new Stopwatch();watch.Start(); //要计算的操作 DoSomeThing(); watch.St ...

  4. 【Git】关于VSCode 内置Git问题

    VSCode的内置git是自动关联本机git的, 所以当提交代码时,VSCode提示[警告:请配置git用户名和账户]时, 只需要在git bash 端配置git config --gobal use ...

  5. GD库常用函数

    创建句柄 imagecreate($width, $height)                                                  //新建图像 imagecreat ...

  6. CephRGW 在多个RGW负载均衡场景下,RGW 大文件并发分片上传功能验证

    http://docs.ceph.com/docs/master/radosgw/s3/objectops/#initiate-multi-part-upload 根据分片上传的API描述,因为对同一 ...

  7. 两种适用于中小量数据的mysql数据备份

    近来项目的业务量开始大了,感觉如果数据不周期性地备份一下,很可能会出现问题,虽然我每天都有阿里云的自动快照,上网找了一下方法,找到两种相对简单而又适合中小项目或者中小公司的数据备份策略,以下都是数据库 ...

  8. the user operation is waiting

    eclipse在编辑完代码保存的时候,弹出一个进度框,等N长时间,标题是"user operation is waiting",里面显示的是building workspace的进 ...

  9. Linux系统编程:基本I/O系统调用

    文件描述符 进程每打开一个文件的时候,会获得该文件的文件描述符,而后续的读写操作都把文件描述符作为参数.在用户空间或者内核空间,都是通过文件描述符来唯一地索引一个打开的文件.文件描述符使用int类型表 ...

  10. js定位

    1.引入 百度地图js(1.3以后需要key) <script type="text/javascript" src="http://api.map.baidu.c ...