反编译之利用AndroidStudio动态调试smali源码1

简介: 反编译之利用AndroidStudio动态调试smali源码

前言:我们可以利用apktool得到smali源码,可以利用dex2jarclasses.dex文件编译成.jar文件,然后通过jd-gui工具来查看Java代码,对比着Java代码,基本就可以看懂smali源码了。但有时一个变量的值很难确定,这时候就需要我们通过动态调试来确定不同的条件下这个变量具体的值了。

让apk可调式

想要调试apk的首要条件就是让这个apk具备可以调试的条件,让apk具备可以调试的方法有两种:

  1. 反编译apk,修改AndroidManifest.xml的debug属性并在程序的入口处添加waitForDebugger代码进行调试等待。
  2. 打开系统调试总开关,使用am命令,以调试模式启动应用。

下面我将详细介绍这两种方法,到底使用哪一种方法,就取决于你们自己了。

通过反编译修改AndroidManifest.xml的debug属性

1.这一种方法需要对要调试的apk进行反编译,反编译之后找到“AndroidManifest.xml”文件,然后修改debug属性,具体操作如下182dac7abcc8926c24f8d7f78940d5b.png

如果没有设个属性的话,我们自己增加android:debuggable="true"这句代码即可.

2.要找到启动apk的启动界面,然后在启动界面的onCreate方法的第一行添加invoke-static {}, Landroid/os/Debug;->waitForDebugger()V这句代码。那么问题来了,我们怎么知道程序的启动界面呢?其实可以通过以下几种方式:

1.观察“AndroidManifest.xml”文件中的代码,看下图

03bfa4de1da8341b3202348c9be8bb6.png

2.如果图中“1”处的代码,那么程序启动界面的smail文件就是“2”处的名称。如上图启动界面的smali文件就是“MainActivity.smali”。然后在“MainActivity.smali”文件中的onCreate方法中添加等待调试的代码即可。

通过adb命令来发现apk的启动界面,命令如下

adb shell dumpsys activity top

运行命令后会出现以下界面

83b4a4c8af4bdafc65edec1a13a0adb.png

图中用红框标记的就是启动界面的smali文件名。注:这种方式找到的启动界面可能不准确,因为有的app会有欢迎页,因此推荐用第一种方法来找app的启动界面。

3.回编译apk并签名安装到手机,如果启动app出现以下界面,则说明以启动模式运行app成功。

7d93022f96b1e6d56a8ab3addea683c.png

打开系统调试总开关

  这种方法不用修改“AndroidManifest.xml”,而且当你打开这个开关后手机中的所有App都是可以调试的了。但是这种方法操作起来比较复杂,而且手机必须是已经root过的,下面会详细描述怎么打开系统调试的总开关。

  这里会介绍两种方法,第一种方法是大家普遍采用的,但是我使用采用第一种方法没有成功,于是查找资料找到了第二种方法,如果你使用第一种方法不成功,那么可以试下第二种方法。

第一种方法

1.点击这里下载“mprop”文件。

2.依次运行一下命令设置“ro.debuggable”

adb push “下载mprop文件所在的位置”\mprop /data/local/tmp/
adb shell su
chmod 755 /data/local/tmp/mprop
data/local/tmp/mprop
setprop ro.debuggable 1
/data/local/tmp/mprop -r

3.运行getprop ro.debuggable命令可以查看debuggable的状态,显示为1,表示更改成功。

注:这种方法在开机后设置的“debuggable”将会失效,需要重新设置

第二种方法

  这种方法其实说复杂也不复杂,说不复杂呢!还是有一点复杂的。具体操作方法如下:

1.需要手机刷入“Magisk”,刷入方法就想卡刷手机系统一样,可以到这里下载zip包

Magisk是什么:简单的说就是集成了root的框架,它强大的是root权限还可以设置对其他软件隐藏。Magisk的强大远不止这点,想了解Magisk具有哪些功能可以自行搜索。

2.通过Magisk安装“MagiskHide Props Config”模块,安装的方法可以看下面的动图。

46bc046d466003b2d8d5e1ffe1f5284.png

3.安装完成之后需要重启,才能生效。

4.打开终端,输入以下命令

adb shell
props

会出现这个界面

5db7a0c77ff324827efaaa60df475b0.png

然后,输入3,回车,会出现这个界面

9ddefc98155a88a5566b2b31cbd16c2.png

然后,输入1,回车,出现这个界面

7be1dd2a929fea1423ce60463eb7280.png

可以看到图中显示当前的“ro.debuggable”的值为0,如果要修改为1的话输入“y”,车即可修改完成。

5.接着终端会弹出是否重启,这时继续输入“y”重启,重启后修改的“ro.debuggable”才会生效。

经过以上5步,就可以打开系统调试的总开关,这时我们打开“Monitor”工具就可以看见当前运行的所有的所有进程了。

a303bbda483d0c9e0ec0c49ac24899c.png

注:通过这种方式修改的“ro.debuggable”值,重启手机后不会还原,就是设置过后,手机重启后不需要再次设置。

打开系统调试的总开关后,这时通过am命令以调试模式启动应用,即可让目标应用处于可调式状态。

adb shell am start -D -n xxx

这里的“xxx”为我们要调试应用的启动界面,如我们要调试应用的启动界面为com.wizardev.testjar/.MainActivity则输入以下命令

adb shell am start -D -n com.wizardev.testjar/.MainActivity

这是目标应用就会以调试模式运行,处于等待调试的状态。

将目标应用的smali源码导入AndroidStudio

  将smali源码导入AndroidStudio挺简单的,只需要将反编译出来的smali文件夹放在工程项目中的模块的src目录下即可。简单的说一下操作方法吧。

  1. 新建一个Android项目,不新建项目也行,但需要新建一个module。
  2. 将项目切换到project视图,将新建的项目下app中src目录下的代码删除或将新建的module下src目录下的代码删除。
  3. 将我们反编译的smali文件夹放入src目录下。

这样,就讲反编译的smali文件导入到AndroidStudio项目中了。操作后的目录界面大致如下。

1b88dbffcb3400d8d75cac70314cca0.png


相关文章
|
14天前
|
编译器 Linux 开发者
.so文件反编译
【6月更文挑战第22天】.so文件反编译
162 56
|
10天前
|
机器学习/深度学习 安全 Java
程序员必知:【转】Apk脱壳圣战之
程序员必知:【转】Apk脱壳圣战之
12 0
|
2月前
|
编译器 Linux 开发者
.so文件如何反编译
【5月更文挑战第17天】.so文件如何反编译
54 2
|
2月前
|
Ubuntu Java Shell
反编译apk文件,得到其源代码的方法!!
反编译apk文件,得到其源代码的方法!!
40 1
|
2月前
|
Java Android开发 C++
2023安卓逆向 -- JNI学习(从开发到反编译)
2023安卓逆向 -- JNI学习(从开发到反编译)
38 0
|
11月前
|
安全 Android开发
反编译之利用AndroidStudio动态调试smali源码2
反编译之利用AndroidStudio动态调试smali源码
|
Java
反编译Apk之使用apktool、apktoolKit、jadx-gui
反编译Apk之使用apktool、apktoolKit、jadx-gui
654 0
反编译Apk之使用apktool、apktoolKit、jadx-gui
|
Java Android开发
apk 反编译
apk 反编译
1619 0
|
XML 算法 Java
反编译工具apktool使用问题
1 工具篇 反编译和回编用到的一些工具: apktool是解包APK 文件最常用的工具 keytool是一个Java数据证书的管理工具 jarsigner是JDK提供的针对jar包签名的通用工具 apksigner是Google官方提供的针对Andro...
3596 0