Mac 下 Android Studio动态调试smali代码

这里简单介绍下大概流程,首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。dex2jar和jd-gui配套使用,用于逆向代码部分,APKTool用于逆向res文件夹下的图片布局等部分。

反编译代码的工具下载:

  dex2jar: 把dex文件转成jar文件下载地址:https://sourceforge.net/projects/dex2jar/files/
  jd-gui: 这个工具用于将jar文件转换成java代码下载地址:http://jd.benow.ca/
  APKTool: 本文重要工具,APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/

步骤:

     1. 首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。解压后如下:

这里写图片描述

    2. 需要用到的是dex2jar包里面的三个文件(Mac环境用对应的.sh文件,在windows环境下是.bat文件):

3. Windows cmd到这个文件夹下 输入:d2j-dex2jar.bat classes.dex


Mac 到这个文件夹下 输入:sh d2j-dex2jar.sh classes.dex
如此之后在这个目录里会生成一个classes-dex2jar.jar文件。这个时候就轮到JD-GUI工具出手了,运行jd-gui.exe File–OpenFile–classes-dex2jar.jar 打开刚才生成的jar文件。就能很清晰的看到我们想要的代码了。

4. 使用apktool 获取资源。这个app-release文件夹下会得到若干文件。

我的Mac下: apktool.sh d app-release.apk   此处app-release为apk名称

window: apktool d app-release.apk 此处app-release为apk名称

5. 动态调试smali代码

一 配置插件

 下载smalidea插件,然后打卡Android Studio,点击File->Setting->Plugins->Install plugin from disk,选择下载的smalidea.zip文件,安装成功后显示重启Android Studio生效。

//插件下载

https://bitbucket.org/JesusFreke/smali/downloads/

二 反编译apk

把第一节编写的激活码程序apk拖入Android Killer中

  1 记录apk的包名(com.jhm)和入口Activity(com.jhm.MainActivity)

  2 设置该apk的调试属性,改成可调试:AndroidManifest.xml中application标签中设置android:debuggable="true"  (不改是不能调试apk的) 


三 手机准备

//反编译

apktool d app-release.apk   此处app-release为apk名称

//从新打包

apktool b [文件夹] -o test2.apk

//把未签名的apk 变成签名的apk

jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存放路径] [未签名的文件路径] [您的证书的别名]

如:jarsigner -verbose -keystore nixiang -signedjar test3.apk test2.apk  key0

//把新生成的test2.apk安装到手机上。

// 终端 启动 调试

adb shell am start -D -n com.imyfone.testdemo/.MainActivity

//获取进程 该应用的进程号

adb shell ps | grep testdemo(APP名字)

//设置端口转发 是在本地8600端口与手机28881进程之间建立一条通道

adb forward tcp:8800 jdwp:28881

//8700端口被占用了  cannot bind listener: Address already in use

window 命令行输入netstat -ano | findstr "8700"

Mac 查看被占用的端口 :lsof -i:8700

                                        kill 1011(kill + 应用pid)

//重新启用

adb forward tcp:8800 jdwp:28881

6.配置远程调试Smali文件。

导入smali工程

  1 AndroidKiller反编译完成后,点击工程管理器标签页->右击smali目录->打开方式->打开文件路径,在E盘新建Jhm文件夹,把smali文件夹拷贝到Jhm文件夹下,并且重命名smali文件夹为src。

  2 Android Studio中点击File->New->Import Project,找到E:\Jhm路径,选中Jhm文件,点击Next一路到Finish。

  3 在AndroidStudio打开的新工程里选择浏览模式为Project格式,右击src->Make Directory As->Sources Root设置为根目录。

       4 在Android Studio中点击Run->Edit Configurations。点击左上角绿色加号->Remote,Name设置为DebugSmali吧,端口Port设置为8600,点击OK。

       5 配置JDK。Android Studio中点击File->Project Structure,选中对应java版本,点击ok。

7. 启动 Android studio debug 模式

输入激活码,点击验证,程序断在我们的断点处,F8单步步过,F7单步步入,F9往下执行。OK可以动态调试了。

猜你喜欢

转载自blog.csdn.net/qq_24143647/article/details/89553645