vc2010中开始执行不调试灰的_反编译动态调试smali全过程

a642a72f5989012b1790c877b983ce42.png

点击上方蓝字关注我,每天进步一点点

9cd1c57d0883fce047a856f69967222d.png

大家都知道我们在逆向分析的时候,很多时候主要在分析逻辑。网络抓包、数据来源流向分析、页面逻辑跳转分析、动态调试等。由于很多代码都会混淆,很多时候我们直接通过代码可能看不出逻辑走向,所以我们就会选择断点来进行调试。

C层一般会使用IDA进行调试分析,Java层常常就会需要对Smali代码进行调试分析。

工具准备

我这边是使用的Android studio + smaliidea(as插件) 配合调试

smaliidea最新下载地址;smaliidea 网上有很多提供的下载的文件都比较小,不是真正的smaliidea插件,所以在as安装的时候会失败。

开始实践

工具准备好了,接下来就开始怎么调试呢。首先反编译一个apk,把AndroidManifest.xml在application节点添加一句android:debugable="true" 表示apk 可以调试。改好之后,用apktool 回编译好。反编译参考我的另一片文章-反编译-替换APP的首页

e9e102648f9ed8d6aa371162a57ad13b.png

安装插件

apk准备好之后就该配置as了。先安装smaliidea插件

6436bb7110aa1aff8b6e99075a10dcdb.png

5864dc891e509f6ae54c02dba123ba8e.png

安装完后重启as

把smali文件作为source目录。

b395167500d6f7adee8cedf5362a4b27.png

配置as

创建Remote调试器

737db9a8a70c25929a59f74b72cf6ac1.png

我看好多通过monitor 查看要调试应用的进程。我这边捣鼓半天monitor也不好用,一直白屏,果断放弃,

不就是看要调试应用的pid吗,用命令行也可以

adb shell ps | grep com.zzx.demo
u0_a359      22189   626 4460076  36324 0

上面22189就是我要调试应用的pid

然后执行调试adb 命令

adb shell am start -D -n com.zzx.demo/.MainActivityStarting: Intent { cmp=com.zzx.demo/.MainActivity }

进行端口映射

adb forward tcp:port_A jdwp:pid    //其中,port_A 为添加 remote 调试时指定的端口号,pid 即为第二步中获得对应调试进程的 pid

比如我的就需要执行:

adb forward tcp:5005 jdwp:22189

5005就是我上面remote 配置的端口号,22189是我要调试应用的pid

接下来在as中选中调试的应用,就可以进入调试状态
使用 run -> attach debugger to Android Process 选项,根据提示选择待调试进程即可。正确操作时,移动设备上的 waiting for debugger 对话框会消失。

3005125e-ca4c-eb11-8da9-e4434bdf6706.png

成功截图:ae7039e5ec6430fba8c39b05aa5ba783.png

 通过上述方法启动调试之后,即可进行正常的调试过程。常见的方案是在经过分析所得的可能执行路径上事先设置断点,之后在移动设备上进行对应的 app 操作,若分析正确,则 app 会执行对应的流程,从而触发断点,从而可以进行进一步的分析。 

总结:

好多东西看别人写的文章挺简单,轮到自己试的时候,各种坑,只有经历过才知道,所以能动手走一趟尽量动手,会遇到你想不到的坑,哈哈哈

0d83ab4c75ad72eda0508a54c2ecbcce.png

e7c588808ac2cc0ad9fb445a829b7bed.png

点个在看你最好看

a23f4430240b4bf8984e503aec052ee9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值