关于安卓的调试方法(一)
smali语法简单介绍
- invoke-statio 执行函数
- move-result-object v1 执行结果放在v1
- invoke-virtual 执行一些函数存在返回值
- const-string v0 .. 定义变量v0=什么
简单记录下问题当突然adb找不到设备的时候可以执行adb kill-server and start-server一般就能够解决
关于smali的调试
first
apktools d .apk
(反编译出安卓smail包,因为很多教程是用安卓killer但是我是mac系统所以也就用了apktools。
second
- 把其中的smail包改名为src然后放到别的文件中
- 打开android studio(这里我用的版本是3.3目前最新的,已经移除了android devices monitor,之前因为这个问题搞了好久)。把文件导入到其中。
这里一路点下去就行,选择create project选项即可。然后点开如下图即可。
- 然后打开android设备,这里我用的是网易mumu浏览器。利用adb命令输入
adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity
会开启调试模式
- 按照之前我看见的大佬的套路这部基本就是打开Android Devices monitor进行查看Oline值。但是我相信很多小白都遇到过找不到monitor(安装最新版后),我就是其中之一所以我选择利用命令行操作。==提示这里所谓的online值其实程序的PID值==(这里我用的是
netstat -p
因为我不太熟悉他的名字,如果读者熟悉名字可用ps | grep 名字)
接着执行命令进行一个端口的转发(tcp为之后我们remote的端口,jdwp在monitor里脚online值这里就是pid,端口可以任意转变)
adb forward tcp:8700 jdwp:1599
(其中可能会有些端口占用问题换一个就可以了)
- 接下来继续在AS中设置先设置端口,然后设置名字,接着改端口既可以ok了。
- 接着设置
File->project structs
,接着设置sdk即可。
- 下断点然后运行调试,接下来就完成了设置和调试了。
在smali文件中插入log
简单记录一下利用apktools的整个过程。
apktool b 反编译后的文件夹 -o 生成apk名称.apk
jarsigner -verbose -keystore 签名名称 -signedjar 签名后Apk.apk 需要签名Apk.apk 签名别名
简单演示
打印字符串
反编译出smali文件。利用log打印来获取我们所想要的信息。
- 这里我写了一个switch语句,读者可以自己也写一个试试,然后利用log打印一些信息。
- 反编译成smali查看,这里就不多说其中的语法细节了,可以看见存在一个log信息打印的段,接下来我们复制这个段并且更改其中的数据。
- 这个时候编译回去并且进行签名安装,这个时候利用adb指令
adb logcat | grep "Hello"
就可以查看我们改过的程序的log信息。
可以发现我们已经成功打印了!
打印寄存器信息
这里是比较有用的操作了。
- 首先写一个Demo来测试
- 还是一样的套路查看一下smail文件来进行打印
- 接下来我加入几句话来进行一个fun2 和fun3参数的打印
- 接下来一波编译签名安装看看我们修改成功了没。就大功告成了。
#### 总结
入门安卓分享记录下自己的学习心得,大佬勿喷。
参考链接:
https://www.52pojie.cn/thread-658865-1-1.html
1 条评论
可输入 255 字