smali动态调试 - CSDN
精华内容
参与话题
  • smali调试所用插件: smalidea-0.03 下载地址:https://bitbucket.org/JesusFreke/smali/downloads/ 模拟器 : 夜游神模拟器 android工具: ApkToolBox.exe ApkToolkit.exe 准备工作: 安装 adnroid ...

    工具篇:

    软件 : adnroid studio

    smali调试所用插件: smalidea-0.03

    下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

    模拟器 : 夜游神模拟器

    android工具: ApkToolBox.exe

    ApkToolkit.exe

    准备工作:

    安装 adnroid studio 并安装插件 smali调试所用插件

    插件安装方法:

    打开 adnroid studio 依次点击 Flie->Settings ->Plugins->Install plugin from disk->选择插件smalidea-0.03 并安装

     

     

    安装夜游神模拟器

     

    调试前准备:

    进入夜游神模拟器安装路径,在当前路径下打开命令提示符(cmd)

    输入:

    nox_adb.exe connect 127.0.0.1:62001

    nox_adb.exe devices

    目的(打开夜游神模拟器端口,让adnroid studio 识别夜游神模拟器)

     

     

    开始调试:

    1、使用 ApkToolkit.exe 将需要调试的APK反编译

    2、使用 adnroid studio 新建一个空的项目(空白项目就好)

    3、将ApkToolkit翻译出来的smali代码复制到项目.......\app\src\main\java目录下,等待导入完成

    4、前面已经安装过smalidea插件,你现在已经可以尝试在smali代码下设置断点了。是不是很容易

    5、使用夜游神模拟器安装需要调试的apk应用

    6、开打一个新的命令提示符(cmd)

    输入:

    adb connect 127.0.0.1:62001

    adb devices

    本地连接上夜游神模拟器,方便使用命令行调用,调试夜游神模拟器

    7、使用ApkToolBox.exe 获取调试apk 的 debug启动app命令

     

    8、在命令提示服下输入命令(粘贴更快)

    这时候你会看到我们夜游神模拟器自动开始运行已经安装好调试的apk应用了,并且进入debug等待调试状态

    9、打开DDMS你会看到我们将要调试的app已经在等待调试状态了

    提示:

    如果没有显示列表请执行这个:

    如果还没有:

    重新启动下夜神模拟器吧

    10、开始,我们先创建个远程调试连接

     

     

    一切准备完成,开始调试吧。

     

     

    展开全文
  • smali文件1.下图为基本的smali结构一个smali文件对应一个class2.字段描述符‘Java中Void在smali中对应VVoid -> V其他具体描述符参考下面表格:下面粘贴两段例子代码对应看下: Android代码: package ...

    smali文件

    1.下图为基本的smali结构

    一个smali文件对应一个class

    2.字段描述符

    Java中Void在smali中对应V

    Void -> V

    其他具体描述符参考下面表格:

    下面粘贴两段例子代码对应看下:
    Android代码:

        package com.test.myapplication;
    
        import android.app.Activity;
        import android.os.Bundle;
        import android.widget.TextView;
    
        public class MainActivity extends Activity {
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                TextView tv = (TextView) findViewById(R.id.text);
                tv.setText("hello");
            }
        }
    

    smali代码:

        .class public Lcom/test/myapplication/MainActivity;
        .super Landroid/app/Activity;
        .source "MainActivity.java"
    
    
        # direct methods
        .method public constructor <init>()V
            .locals 0
    
            .prologue
            .line 7
            invoke-direct {p0}, Landroid/app/Activity;-><init>()V
    
            return-void
        .end method
    
    
        # virtual methods
        .method protected onCreate(Landroid/os/Bundle;)V
            .locals 2
            .param p1, "savedInstanceState"    # Landroid/os/Bundle;
    
            .prologue
            .line 11
            invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    
            .line 12
            const/high16 v1, 0x7f030000
    
            invoke-virtual {p0, v1}, Lcom/test/myapplication/MainActivity;->setContentView(I)V
    
            .line 13
            const v1, 0x7f070009
    
            invoke-virtual {p0, v1}, Lcom/test/myapplication/MainActivity;->findViewById(I)Landroid/view/View;
    
            move-result-object v0
    
            check-cast v0, Landroid/widget/TextView;
    
            .line 14
            .local v0, "tv":Landroid/widget/TextView;
            const-string v1, "hello"
    
            invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
    
            .line 15
            return-void
        .end method
    

    smali头部分析:

    .class public 对应 java class public

    Lcom/test/myapplication/MainActivity; 类描述符 L+包+名+; 可查看上面表中对应 Object —> Ljava/lang/Object;

    .super字段,表示从哪个类中扩展出来的, 此处对应 extends Activity

    .source字段,对应源文件.source “MainActivity.java”表示java文件就是MainActivity.java

    smali方法分析:

    固定格式

    .method 开始

    .end method 结尾

    .method protected onCreate(Landroid/os/Bundle;)V -> protected void onCreate(Bundle savedInstanceState)

    Landroid/os/Bundle; 传入的参数, 最后面的V 表示返回值类型Void

    invoke-virtual {p0, v1}, Lcom/test/myapplication/MainActivity;->findViewById(I)Landroid/view/View; -> TextView tv = (TextView) findViewById(R.id.text);

    invoke-virtual 调用方法

    move-result-object v0

    把结果放到v0

    const-string v1, “hello”

    invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

    调用setText方法,把v1传入

    动态调试:

    工具:apktool

    下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads/

    注意:此处介绍的动态调试方法是比较旧的方法,下载2.1.0版本以下的,因为新版本的apktool -d 选项已经移除

    反编译源码中添加调试:

    1)java -jar apktool.jar d -d 目标.apk -o 结果放置目录

    2)修改AndroidMainfest文件,在application节点添加 android:debuggable=”true”

    3)在入口类的onCreate方法中添加:

    invoke-static{},Landroid/os/Debug;->waitForDebugger()V
    

    添加后示例:

    a=0;// .method protected onCreate(Landroid/os/Bundle;)V
    a=0;//     .locals 2
    a=0;//     .param p1, "savedInstanceState"    # Landroid/os/Bundle;
    a=0;// 
    a=0;//     .prologue
    a=0;//     .line 11
    a=0;//     invoke-static{},Landroid/os/Debug;->waitForDebugger()V
    a=0;//     invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
    

    4)回编译修改过的apk文件

    java -jar apktool.jar b -d 代码目录 -o 目标apk名称
    

    问题:我在此处用android studio 编译了一个apk回编译失败,暂时没有解决,直接使用eclipse编译了一个demo.apk

    5)对生成的apk进行签名,签名方法可以参照之前的Android反编译和回编译文章

    使用android studio进行动态调试:

    1)导入已经反编译修改好的功能代码

    打开Android Studio ->File -> Open -> 选择刚才反编译的目录

    2)在相应位置设置断点

    3)设置远程调试选项

    Run -> Edit Configurations… -> 点击“+” -> Remote -> Host:localhost Port:8700

    4)切换到另外一个编写android代码的android studio窗口

    打开Android Device Monitor

    点击要调试的程序的进程

    5) 切换到smali工程窗口

    点击调试按钮,开始调试

    至此就可以像调试android代码一样调试smali 代码啦

    展开全文
  • androidstudio动态调试smali

    千次阅读 2017-08-01 11:01:32
    参考:... 一、配置插件 下载插件smalidea 地址: https://bitbucket.org/JesusFreke/smali/downloads 下载smalidea-0.03.zip 下载完成后,打开Android studio

    参考:http://blog.csdn.net/jiangwei0910410003/article/details/51456735

    总体思路:apktool反编译APK修改为可调试并加入断点,apktool回编译APK并signapk加签名,安装,以调试状态打开app,端口转发

    baksmali反编译APK得到源代码,用androidstudio打开并设置sourceroot和远程调试端口设置,打好断点就可以开始调试。

    一、配置插件

    下载插件smalidea

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

    下载smalidea-0.03.zip

    下载完成后,打开Android studio的Settings | Plugins,选择 Install plugin from disk

    这里写图片描述

    二、反编译apk,修改AndroidManifest.xml中的debug属性并在oncreate()打好断点

    java -jar apktool_2.0.0rc4.jar d -d AliCraceme_1.apk -o out
    • 1
    • 1

    修改AndroidManifest.xml中的android:debuggable=”true”

    这里写图片描述

    找到入口Activity之后,我们直接在他的onCreate方法的第一行加上waitForDebugger代码即可,找到对应的MainActivity的smali源码:

    然后添加一行代码:

    invoke-static {}, Landroid/os/Debug;->waitForDebugger()V

    这个是smali语法的,其实对应的Java代码就是:android.os.Debug.waitForDebugger();


    修改完成之后,回编译apk并且进行签名安装

    java -jar apktool_2.0.0rc4.jar b -d out -o debug.apk
    • 1
    • 1

    然后对APK重新进行签名

    java -jar .\sign\signapk.jar .\sign\testkey.x509.pem .\sign\testkey.pk8 debug.apk debug.sig.apk

    签名之后就可以进行安装了

    安装上面重新签名得到的apk应用

    apk install AliCrackme_1.apk

    创建目录Smali/src,并且使用baksmali反编译输出到该目录下

    创建目录SmaliDebug/src

    java -jar baksmali-2.0.8.jar AliCrackme_1.apk -o SmaliDebug/src

    3、使用Android Studio导入该目录SmaliDebug

    这里写图片描述

    4、选择Create project from existing sources,之后一直选择next

    这里写图片描述

    5、成功导入工程后右键点击 src 目录,设定Mark Directory As->Sources Root

    这里写图片描述

    6、配置远程调试的选项,选择Run–>Edit Configurations:

    这里写图片描述

    这里写图片描述

    7、增加一个Remote调试的调试选项,端口选择:8700

    这里写图片描述

    8、设置端口号

    这里写图片描述

    9、选择File–>Project Structure 配置JDK

    这里写图片描述

    10、以调试状态启动app

    adb shell am start -D -n com.example.simpleencryption/.MainActivity
    如果不用 ddms 可以通过adb shell执行 ps | grep kugou命令查看转发端口:

    然后进行端口转发:
    adb forward tcp:8700 jdwp:24551
    记住这时候需要将DDMS关掉,不然会出现错误
    • 1
    • 1

    11、下好断点之后Run->Debug

    这里写图片描述

    12、调试程序


    展开全文
  • AS动态调试smali

    千次阅读 2018-01-14 17:17:00
    1.用AndroidKiller把apk反编译成smali文件; 新建一个文件夹 然后把打开文件路径目录里的smali文件夹复制到文件中并改名为src ; 反编译后记得查看清单文件,在application标签里面要有 android:debuggable=”...

    1.用AndroidKiller把apk反编译成smali文件;
    新建一个文件夹 然后把打开文件路径目录里的smali文件夹复制到文件中并改名为src ;
    这里写图片描述
    反编译后记得查看清单文件,在application标签里面要有 android:debuggable=”true” 这句代码,没有是不能调试apk的,有的apk中没有这句代码要自行添加上,再回编译apk,便于后续安装apk;
    2.安装ideasmali插件,File->Settings->Plugins,下载安装ideasmali插件;
    打开Android Device Monitor,(Tools/Adndroid/Android Device Monitor);
    找到要调试APK的包名和入口的Activity,查看清单文件;
    把自己要调试的APK安装到手机中 并用数据线连接手机 打开USB调试模式,也可以装在模拟器上,adb install pc上apk路径;
    打开命令行 输入命令 adb shell am start -D -n 包名/入口activity, 对apk进行动态调试 这条命令运行后手机屏幕将会进入到调试界面(如果手机屏幕没有进入到调试界面说明USB没有连接好手机 或者USB调试模式 没有打开 或者其他原因);
    查看Android Device Monitor 记住下图圈起来的两个值 然后把Android Device Monitor关掉(这里一定要关掉,因为它会占用8700端口 导致后面转发端口失败);
    这里写图片描述
    如果还遇到 “error: could not install smartsocket listener: cannot bind to 127.0.0.1:port号: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 (10048)”这种问题。
    解决:Cmd:netstat -nao | findstr port号,查找占用进程的pid
    然后任务管理器关掉相应pid的进程。

    3.用AndroidStudio导入文件夹(里面含有smali文件改名后的src文件夹),next知道finish;
    点击Android选择Project 对之前反编译的 src文件夹右键–>Make Directory As —>Source Root;
    配置远程调试的选项,选择Run–>Edit Configurations 并增加一个Remote调试的调试选项,端口选择:8700;
    选择File–>Project Structure 配置JDK;
    这里写图片描述

    4.下断点 下好断点之后Run–>Debug’smali’,这里的smali是我们之前配置好的调试选项;
    按F8执行下一步 F9运行程序
    可以看到程序执行的逻辑 Watches窗口中可以点+按钮添加寄存器的名字 就可以看到这个寄存器的值。
    这里写图片描述

    参考: https://www.52pojie.cn/thread-658865-1-1.html
    http://blog.csdn.net/jiangwei0910410003/article/details/51456735(四哥)

    展开全文
  • 最近在研究安卓逆向,刚开始接触,...今天首先讲一下 安卓动态调试smali代码(需要smalidea插件的哦,没有插件调试不了) 1,首先用 Androidkiller 反编译出项目源码,可以导入到桌面方便找 2 ,需要下载Android s...
  • 上一篇博文中我们讲解了smali语法,今天就带大家如何进行动态调试smali代码。你可能要问,为什么要学会动态调试smali代码?那就是为了减轻我们逆向分析的负担! 在上篇的博文中我们已经了解到,一个smali文件中代码...
  • 基于Android studio动态调试smali全过程1 工具和环境2 smali反编译和导入2.1 获取smali文件2.2 打开smali文件夹2.3 调试smali2.3.1 配置Android Studio调试环境2.3.2 进入等待调试 1 工具和环境 1、Android studio ...
  • 使用 Android Studio 进行动态调试,通过 Android Studio 导入反编译出的完整的 smali 代码,设置好调试所需的条件,设置断点。将移动设备连接至 PC端,然后运行待调试的apk应用程序,当该应用程序执行流程,运行至...
  • 使用IDEA动态调试smali代码

    千次阅读 2017-02-13 20:55:59
    原创,转载请注明出处。...一般java ide(如eclipse、idea)都可用来进行smali动态调试,这里选择IDEA。   第1步:使用apktool反编译apk java -jar apktool_2.0.0rc4.jar d -d 123.apk -o
  • 鉴于网上大多转载的smali动态调试方法,都是来源一个模板,而且有一些不必要的繁琐冗余过程,我在这里简化了一下。
  • 前置准备条件: 已安装SmaliIdea插件 1.启动设备,确保adb devices能看到设备。 2.adb shell 3.dumpsys window windows | grep -E ‘mCurrentFocus|mFocusedApp’ 4.am start -D -n <Packagename>...
  • 准备工具 android killer,android studio,夜神模拟器,adb ...2、使用android killer逆向apk为smali 3、使用adb工具启动app adb shell am start -D -n com.dazhuang.smali_dynamic_debug/.MainActivity ...
  • 大部分调试步骤网上都可以找得到,说两个新手容易跳坑的两个地方 1 调试之前 IDE 一定要安装 Smali 插件, 2 8700 或者相应的端口一定要在DDMS 或者 cmd 对接成功, 待续。。。
  • Android APK程序的smali动态调试

    千次阅读 2017-05-07 01:32:59
    一、Apktool的下载和安装 ...Apktool是Android逆向分析的基础工具,在进行Android APK的smali动态调试的时候会使用到它。有关Apktool工具的下载、安装、使用以及源码的编译可以参考Apktool工具的官网:https://ib
  • smali动态调试

    2019-03-13 16:39:00
    run新建一个调试模式为Smali,端口为8700>adb shell am start -D -n >monitor查看端口>转发端口>File-->Project Structure 配置SDK>打上断点Run→Debug Smalismali目录右键 ...
  • Smali动态调试:包含脚本、工具及具体操作文档。 1.反编译apk 2.回编译apk 3.对apk重新签名(生成修改过的可安装apk) 4.输出src(smali文件便于调试
  • Android Studios上的smali代码的动态调试插件。。。。。。。。。。。。。。。。。。。。
  • Smali动态调试方法

    2015-03-31 09:58:51
    对apk使用apktool反编译出可调试smali代码到testout文件夹apktoold的-dtest.apk-otestout 注意-d参数是生成可调试代码 2,在AndroidManifest.xml中,设置application为可调试:android:debuggable="true" 3,...
  • Mac下基于Android studio 4.0动态调试smali全过程 用到的工具 系统环境 macOS ; 反编译工具 Android-Crack-Tool;(包括:apktool 反编译apk->Smali 并且重新打包修改后的Smali到apk,jadx 用了查看Smali对应的...
  • 这篇文章的主题,进行smali动态调试,其中关键的一点,就是获得apk的smali代码。当然,这里先排除加壳等情况。默认是可以通过反编译的。 这里我们选中的反编译工具是 apktool。工具在github 有的下载。下载得到...
1 2 3 4 5 ... 20
收藏数 2,208
精华内容 883
热门标签
关键字:

smali动态调试