关于安卓的调试方法(一)

关于安卓的调试方法

smali语法简单介绍

  1. invoke-statio 执行函数
  2. move-result-object v1 执行结果放在v1
  3. invoke-virtual 执行一些函数存在返回值
  4. const-string v0 … 定义变量v0=什么

简单记录下问题当突然adb找不到设备的时候可以执行adb kill-server and start-server一般就能够解决

关于smali的调试

first

apktools d .apk(反编译出安卓smail包,因为很多教程是用安卓killer但是我是mac系统所以也就用了apktools。
关于安卓的调试方法(一)_第1张图片

second
  1. 把其中的smail包改名为src然后放到别的文件中
  2. 打开android studio(这里我用的版本是3.3目前最新的,已经移除了android devices monitor,之前因为这个问题搞了好久)。把文件导入到其中。

在这里插入图片描述
关于安卓的调试方法(一)_第2张图片
这里一路点下去就行,选择create project选项即可。然后点开如下图即可。
关于安卓的调试方法(一)_第3张图片
5. 然后打开android设备,这里我用的是网易mumu浏览器。利用adb命令输入adb shell am start -D -n hfdcxy.com.myapplication/hfdcxy.com.myapplication.MainActivity会开启调试模式
关于安卓的调试方法(一)_第4张图片
6. 按照之前我看见的大佬的套路这部基本就是打开Android Devices monitor进行查看Oline值。但是我相信很多小白都遇到过找不到monitor(安装最新版后),我就是其中之一所以我选择利用命令行操作。提示这里所谓的online值其实程序的PID值(这里我用的是netstat -p因为我不太熟悉他的名字,如果读者熟悉名字可用ps | grep 名字)
在这里插入图片描述
接着执行命令进行一个端口的转发(tcp为之后我们remote的端口,jdwp在monitor里脚online值这里就是pid,端口可以任意转变)
adb forward tcp:8700 jdwp:1599(其中可能会有些端口占用问题换一个就可以了)
7. 接下来继续在AS中设置先设置端口,然后设置名字,接着改端口既可以ok了。
关于安卓的调试方法(一)_第5张图片
关于安卓的调试方法(一)_第6张图片
关于安卓的调试方法(一)_第7张图片
8. 接着设置File->project structs,接着设置sdk即可。
在这里插入图片描述
关于安卓的调试方法(一)_第8张图片
9. 下断点然后运行调试,接下来就完成了设置和调试了。
关于安卓的调试方法(一)_第9张图片
关于安卓的调试方法(一)_第10张图片
关于安卓的调试方法(一)_第11张图片

在smali文件中插入log

简单记录一下利用apktools的整个过程。
apktool b 反编译后的文件夹 -o 生成apk名称.apk
jarsigner -verbose -keystore 签名名称 -signedjar 签名后Apk.apk 需要签名Apk.apk 签名别名

简单演示

######打印字符串
反编译出smali文件。利用log打印来获取我们所想要的信息。

  1. 这里我写了一个switch语句,读者可以自己也写一个试试,然后利用log打印一些信息。

关于安卓的调试方法(一)_第12张图片
在这里插入图片描述

  1. 反编译成smali查看,这里就不多说其中的语法细节了,可以看见存在一个log信息打印的段,接下来我们复制这个段并且更改其中的数据。
    关于安卓的调试方法(一)_第13张图片
    关于安卓的调试方法(一)_第14张图片

  2. 这个时候编译回去并且进行签名安装,这个时候利用adb指令adb logcat | grep "Hello"就可以查看我们改过的程序的log信息。

在这里插入图片描述

可以发现我们已经成功打印了!

打印寄存器信息

这里是比较有用的操作了。

  1. 首先写一个Demo来测试
    关于安卓的调试方法(一)_第15张图片
    在这里插入图片描述

  2. 还是一样的套路查看一下smail文件来进行打印

关于安卓的调试方法(一)_第16张图片

  1. 接下来我加入几句话来进行一个fun2 和fun3参数的打印

关于安卓的调试方法(一)_第17张图片

  1. 接下来一波编译签名安装看看我们修改成功了没。就大功告成了。

你可能感兴趣的:(逆向入门)