精华内容
下载资源
问答
  • 动态调试

    2013-10-22 15:28:08
    如何动态调试 (ddebug) 这篇文档主要介绍动态调试 (ddebug) 特性.   动态调试的主要功能是允许你动态的打开或关闭内核代码的各种提示信息. 现在, 假如    CONFIG_DYNAMIC_DEBUG 已经设置好了, 那么所有...

    如何动态调试 (ddebug)

    这篇文档主要介绍动态调试 (ddebug) 特性. 

    动态调试的主要功能是允许你动态的打开或关闭内核代码的各种提示信息. 现在, 假如  
    CONFIG_DYNAMIC_DEBUG 已经设置好了, 那么所有的 pr_debug()/dev_debug() 之类的函数可以动态的在代码里所使用. 

    动态调试有很多有用的特性: 

     * 简洁的查询语言允许打开或关闭调试的状态通过匹配以下的任意组合: 

       - 资源文件名  
       - 函数名  
       - 行号 (包括一定范围的行号) 
       - 模块名  
       - 格式化字符串  

     * 提供一个debugfs 控制文件: <debugfs>/dynamic_debug/control 这个文件被读取用来显示已完成的调试信息列表, 来帮助指导你  
    控制动态调试的行为  
    =================================== 

    pr_debug()/dev_debug()的行为控制通过在'debugfs'文件系统上写一个控制文件 .因此,为了这个特性,你首先必须挂载这个debugfs文件系统. 然后, 我们再像这样使用控制文件: <debugfs>/dynamic_debug/control. 下面这个是个例子, 假如你要显示文件'svcsock.c'的1603行内容,你可以这样做: 

    nullarbor:~ # echo 'file svcsock.c line 1603 +p' > 
                    <debugfs>/dynamic_debug/control 

    如果你的语法有错误,写成了下边这个样子,会有下面的写操作错误提示: 

    nullarbor:~ # echo 'file svcsock.c wtf 1 +p' > 
                    <debugfs>/dynamic_debug/control 
    -bash: echo: write error: Invalid argument 
    查看动态调试行为  
    =========================== 

    你可以查看目前所有调试状态的行为配置通过以下命令: 

    nullarbor:~ # cat <debugfs>/dynamic_debug/control 
    # filename:lineno [module]function flags format 
    /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:323 
    [svcxprt_rdma]svc_rdma_cleanup - "SVCRDMA Module Removed, deregister RPC RDMA transport\012" 
    /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:341 
    [svcxprt_rdma]svc_rdma_init - "\011max_inline       : %d\012" 
    /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:340 
    [svcxprt_rdma]svc_rdma_init - "\011sq_depth         : %d\012" 
    /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svc_rdma.c:338 
    [svcxprt_rdma]svc_rdma_init - "\011max_requests     : %d\012" 
    ... 


    你也可以应用标准的Unix文本过滤命令来过滤这些数据, 例如. 

    nullarbor:~ # grep -i rdma <debugfs>/dynamic_debug/control  | wc -l 
    62 

    nullarbor:~ # grep -i tcp <debugfs>/dynamic_debug/control | wc -l 

    42

    在第三列(在Uninx下执行这个命令的结果是一列一列的)显示了调试状态位的激活标志(后边的是标志位的定义).  默认值, 无额外行为被激话, 是这个 "-".  因此你可以查看任何不是默认标志的状态位通过下面的命令:

    nullarbor:~ # awk '$3 != "-"' <debugfs>/dynamic_debug/control 
    # filename:lineno [module]function flags format 
    /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c:1603 [sunrpc]svc_send p 
    "svc_process: st_sendto returned %d\012" 

    命令语言参考 
    ========================== 

    在词汇层面上,一个命令由一系列由空格分割的的单词组成。注意的是换行符会认为是单词的分割,同时*不会*结束一条命令或者允许多个命令一起完成。下面的这些都是等价的: 

    nullarbor:~ # echo -c 'file svcsock.c line 1603 +p' > 
                    <debugfs>/dynamic_debug/control 
    nullarbor:~ # echo -c '  file   svcsock.c     line  1603 +p  ' > 
                    <debugfs>/dynamic_debug/control 
    nullarbor:~ # echo -c 'file svcsock.c\nline 1603 +p' > 
                    <debugfs>/dynamic_debug/control 
    nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > 
                    <debugfs>/dynamic_debug/control 

    命令由wirte()的系统调用界定。如果你想执行多个命令,你需要为每个加入“echo”分割,像这样: 

    nullarbor:~ # echo 'file svcsock.c line 1603 +p' > /proc/dprintk ;\ 
    > echo 'file svcsock.c line 1563 +p' > /proc/dprintk 

    或者甚至是这样:  

    nullarbor:~ # ( 
    > echo 'file svcsock.c line 1603 +p' ;\ 
    > echo 'file svcsock.c line 1563 +p' ;\ 
    > ) > /proc/dprintk 

    在语法层面上,一个命令由一系列的规格匹配组成,随后由一个标记来改变这规格。 

    command ::= match-spec* flags-spec 

    match-spec常用来选择一个已知的dprintk()调用点的子集来套用flags-spec。把他们当做彼此之间的每对做隐式查询。注意一个空的match_specs列表是有可能的,但不是非常有用,因为它不会匹配任何调用点的调试子句。 

    一个匹配规范由一个关键字组成,关键字控制被比较的调用点的属性和要比较的值。可能关键字是: 

    match-spec ::= 'func' string | 
               'file' string | 
               'module' string | 
               'format' string | 
               'line' line-range 

    line-range ::= lineno | 
               '-'lineno | 
               lineno'-' | 
               lineno'-'lineno 
    // 注意:line-range不能包含空格,例如 
    // “1-30”是有效的范围,但“1 - 30”就是无效的 

    lineno ::= unsigned-int 

    每个关键字的意思是: 

    func 
         给定的字符穿会和每个调用点的函数名比较。例如: 

        func svc_tcp_accept 

    file 
         给定的字符串会和每个调用点的源文件的全路径名或者相对名比较。例如: 

        file svcsock.c 
        file /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c 

    module 
        给定的字符串会和每个调用点的模块名进行比较。模块名是和在“lsmod”里看到的字符串一样,举例来说,没有路径或者是.ko后缀同时带有'-'的改变为'_'。 

        module sunrpc 
        module nfsd 

    format 
         给定的字符串会在动态调试格式字符串里查找。注意这字符串不需要匹配这个格式,这是一部分。空格和其他特殊字符能够用C的八进制字符语法来转义,例如空字符是\040。作为选择,这个字符串可以附上双引号(")或者是单引号(‘)。 
         例如: 

        format svcrdma:        // 大多数NFS/RDMA 服务器的dprintks 
        format readahead        // 一些在预加载缓存里的dprintks 
        format nfsd:\040SETATTR // 一个使用空格来匹配格式的方式 
        format "nfsd: SETATTR"  // 一个整齐的方法来用空格匹配格式 
        format 'nfsd: SETATTR'  // 同样是一个用空格来匹配格式的方法和 

    line 

         给定的行号或者是行号范围会和每个dprintk()调用点
          的行号进行比较。一个单一的行号与调用点 的行号 进行准
         确匹配。一个行号范围会和包含的第一行和最后一行 的任何调
          用点进行匹配。一个空的第一个数字表示该文件的第 一行
          ,一个空的行号表示文件的最后一行。例如:


        line 1603        // 准确定位到1603行  
        line 1600-1605  //1600行到1605行之间的6行 
        line -1605        // 从第一行到1605行之间的1605行 
        line 1600-        // 从1600行到结尾的全部行 

    标记规范包含了一个由一个或多个标记字符跟随的变化操作。这变化操作是下面的字符之一: 

    - 
         移除给定的标记 

    + 
         加入给定的标记 

    = 
        设置标记到给定的标记上  

    这些标记是: 

    f 
        包含已打印消息的函数名 
    l 
         包含已在打印消息的行号 
    m 
        包含已打印消息的模块名 
    p 
        产生一个printk()消息到显示系统启动日志 
    t 
        包含了不在中断上下文中产生的消息里的线程ID 

    注意正则表达式^[-+=][flmpt]+$匹配一个标记规范。 
    同样也要注意,没有便捷的语法来一次性移除所有的标记,你需要使用"-flmpt"。 

    引导进程中的调试信息

    即使在用户空间和debugfs存在之前,也可以使用引导参数:ddebug_query=“QUERY”来激活引导进程中的调试信息。

    QUERY遵循上述语法,但一定不能超过1023个字符。调试信息的启动随着arch_initcall而完成。因此通过引导参数arch_initcall之后,你可以在所有的代码处理中启用调试信息。

    例如,在一个x86的系统中,ACPI启用是一个subsys_initcall并且如果你的机器(通常是一台笔记本)有一个嵌入式的控制器,ddebug_query=“fileec.c+p”将会在ACPI装备期间显示早期的嵌入式控制器事务。PCI(或其他设备)的初始化也是使用这个引导参数来调试的热门候选。

    实例 
    ======== 

    // 提供文件 svcsock.c   1603行信息 
    nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' > 
                    <debugfs>/dynamic_debug/control 

    // 提供文件svcsock.c所有信息  
    nullarbor:~ # echo -n 'file svcsock.c +p' > 
                    <debugfs>/dynamic_debug/control 

    // 提供NFS服务模块所有的信息 
    nullarbor:~ # echo -n 'module nfsd +p' > 
                    <debugfs>/dynamic_debug/control 

    // 提供函数svc_process()的所有12条信息  
    nullarbor:~ # echo -n 'func svc_process +p' > 
                    <debugfs>/dynamic_debug/control 

    // 不显示 函数svc_process()的所有12条信息 
    nullarbor:~ # echo -n 'func svc_process -p' > 
                    <debugfs>/dynamic_debug/control 

    // 提供NFS调用的所有以READ开始的信息. 
    nullarbor:~ # echo -n 'format "nfsd: READ" +p' > 
                    <debugfs>/dynamic_debug/control

     

     

     

     

     
     

    Linux内核动态调试信息的打开,如pr_debug

     (2012-08-23 13:38:54)
     

    【1】配置Kconfig,添加要调试驱动模块的DDEBUG选项,如

    kernel_imx\drivers\mxc\pmic\mc13892\Kconfig

    config MXC_PMIC_DEBUG
     bool "Support MXC PMIC DEBUG"
     depends on MXC_PMIC
     

    【2】配置Makefile,添加编译支持驱动模块 EXTRA_CFLAGS  += -DDEBUG ,如

    kernel_imx\drivers\mxc\pmic\core\Makefile

    ifeq ($(CONFIG_MXC_PMIC_DEBUG),y)
     EXTRA_CFLAGS  += -DDEBUG
    endif

     

    【3】配置内核,使支持动态调试

    make menuconfig

      | |        Kernel hacking  --->

      | |    [*] Tracers  --->

      | |          [*]   Trace max stack

      | |    [*] Enable dynamic printk() support

     

      | |        Device Drivers  --->

      | |            MXC support drivers  --->

      | |                MXC PMIC support  ---> 
      | |                       [*] Support MXC PMIC DEBUG

     

    【4】重烧内核启动后,改变控制台debug消息显示级别,可以打印printk(DEBUG ...)信息
    echo > /proc/sys/kernel/printk "8"

     
    展开全文
  • Android逆向动态调试

    2020-05-19 21:12:25
    Android逆向动态调试思维导图,便捷整理思路,反编译、AS配置、以调试模式启动、IDEA调试命令
  • Android 反动态调试

    2019-05-07 19:58:29
    Android 检查动态调试 最近项目中,三方安全报告中一直存在动态调试检测的高危漏洞。经过多次探索研究,参考了网上不少示例,集大家所成,研究在Android studio 3.0以上,可以使用的示例代码。
  • JEB动态调试

    2020-10-21 11:33:29
    往期推荐 Method Profiling ...动态调试有两种方法:Jeb调试和AndroidStudio+smalidea插件动态调试。 一:JEB工具介绍 JEB是一款功能强大的为安全专业人士设计的Android、应用程序反编译工具。用于逆向工程

    往期推荐

    Method Profiling

    方法栈跟踪

    Log插桩调试smali代码

    DDMS工具使用

    调试逆向分为动态分析技术和静态分析技术。静态分析技术是指破解者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来破解软件;而动态调试则是指破解者利用调试器跟踪软件的运行,寻求破解的途径。
    动态调试有两种方法:Jeb调试和AndroidStudio+smalidea插件动态调试。

    一:JEB工具介绍

    JEB是一款功能强大的为安全专业人士设计的Android、应用程序反编译工具。用于逆向工程或审计APK文件,可以提高效率减少许多工程师的分析时间。

    首先下载JEB工具,下载完成后解压安装包, 解压后运行安装目录下的jeb_wincon.bat文件。

    本次以“zhuceji.apk”文件作为案例,再下载“zhuceji.apk”文件,打开雷电模拟器安装该APK,点击运行。弹出两个编辑框“用户名”和“注册码” 以及一个注册按钮,如下图所示。

    在这里插入图片描述

    打开JEB工具,将该“zhuceji.apk”文件拖入“项目”窗口,自动开始反编译。反编译完成后,包含以下4项信息,如下图所示:

    Manifest:配置文件
    Bytecode:字节码
    Certificate:证书
    Resources:资源文件

    在这里插入图片描述

    探究:如果无法打开JEB工具怎么办?

    简单来讲,就是检查JDK环境变量,是否配置JAVA_HOME。具体可以查看JDK环境配置教程。

    接下来双击“Bytecode”,右侧打开了两个窗口,工程目录(Bytecode/Hierarchy)和反汇编窗口(Bytecode/Disassembly),如下图所示。

    在这里插入图片描述

    为了方便后面的静态分析和动态调试,通过拖拽窗口的方式,调整UI界面。在工程目录(Bytecode/Hierarchy)中双击指定的文件,就会跳转到反汇编窗口(Bytecode/Disassembly)里面smali代码对应的位置。

    比如这里选中“MainActivity”双击则会跳转到对应的位置,也可以直接双击指定字段或者方法跳转到对应的位置,如下图所示。

    在这里插入图片描述

    二:逆向分析JAVA代码

    为了方便操作,平时都会使用快捷键,在这里介绍两个快捷键:

    1.快捷键Q:将定位到的smali转换为伪代码。具体操作就是在工程目录中,单击选中“MainActivity”文件按“Q”即可。
    2.快捷键Ctrl+B:在Smali中鼠标单击选中行后添加断点,再按一次取消断点。

    在做JEB的动态调试前,必须先静态分析APP执行流程。

    在工程目录中,选中“MainActivity”文件按“Q”将smali转换为伪代码,然后找到它的onCreate函数,这个函数的作用就是初始化当前代码绑定的一些事件,如下图所示,分析的这个”注册”按钮的点击事件。

    在这里插入图片描述

    这个onClick函数就是我们需要分析的“点击事件”,紧接着就是一个if判断,可以看到“edit_username”,它获取到了我们账号编辑框里的内容以及注册码的内容,接着调用了当前类里面的一个checkSN这个方法,我们看这个方法实现了那些功能,如下图所示。

    在这里插入图片描述

    然后直接双击checkSN这个方法就会跳转到对应的实现位置,如下图所示。

    在这里插入图片描述

    在这里可以看到账号和注册码传递进来,首先判断账号是否为空(null),如果为空,就return返回一个false,方法执行结束;不为空,继续执行。

    再判断账号的长度是否为0 ,如果长度为0,就return返回一个false,方法执行结束;不为0,继续执行。
    最后判断注册码是否为空(null)以及它的长度是否为16。如果为空或不为16,就return返回一个false,执行结束。不为空且长度为16,继续执行。
    将传进来的账号进行MD5运算,里面还有一个for循环一直对运算的结果进行一个拼接,每次+2。拼接完成以后还调

    equalsIgnoreCase进行了一个比较,如果该方法的返回值为false ,就说明输入的注册码错误,反之,返回值为true,就说明注册码是正确的。

    三:Jeb动态调试

    Jeb动态调试有两种方式:
    一种是普通模式调试,另外一种是debug模式启动程序调试。

    1.普通模式调试

    (1)在smali代码中找到checkSN方法,鼠标点击该方法的第一条指令,
    按快捷键Ctrl+B设置断点,如下图所示。

    在这里插入图片描述

    (2)运行设备上被调试的应用,这节课里也是“zhuceji.apk”,再点击菜单栏上“Debugger”选项下的“Start”按钮开始调试,如下图所示。

    在这里插入图片描述

    (3)点击”start”按钮后,会弹出一个弹窗,在这里点击“确定”按钮,如下图所示。

    在这里插入图片描述

    (4)之后就会弹出一个“Attach”窗口:
    Machines/Devices:选中要调试设备,即设备名称。
    Processes:选中要调试的应用程序对应的进程,即Flags为D的进程,也就是进程列表,可通过点击Flags 排序的方式快速选中。点击下“attach”按钮开始调试,如下图所示。

    在这里插入图片描述

    (5)点击“attach”附加成功后,可以看到调试界面中有增加的窗口,如下图所示。
    VM/Threads 是线程窗口。
    VM/Breakpoints 是查看断点窗口。
    VM/Locals是寄存器窗口,使用它查看对应寄存器的值,但是上排的工具还是灰色无法使用。

    在这里插入图片描述

    (6)再次打开“zhuceji.apk”,分别输入“用户名”为“易锦大学”,“注册码”为“1234567890123456”,用户名和注册码可以自拟,如下图所示。

    此时点击“注册”按钮,程序就会在我们设置断点的位置断下来,如下图所示。

    在这里插入图片描述

    查看是否断点成功,下段点的位置变为深蓝色,这就表示成功断下。寄存器窗口,显示当前寄存器的信息。如下图所示。

    在这里插入图片描述

    这时,上排灰色的图标会变亮,这些图标是JEB调试的常用功能,如下图所示。
    绿色三角:恢复程序运行。
    红色正方形:结束调试。
    后面四个黄色的箭头依次分别为:单步步入、单步步过、返回、运行到光标所在位置。

    在这里插入图片描述

    通过之前的分析,我们知道checkSN方法会对我们输入的“用户名”和“注册码”进行一系列的判断:判断账号不是不为空(null),判断账号的长度不为0 ,判断注册码的不为空(null)且长度为16。如果均满足条件,然后就会对我们输入的用户名进行MD5运算,获取摘要信息。将MD5后的摘要信息转换为字符串存放在v3寄存器里面 。要查看v3寄存器里面存放的字符串内容,需要修改它的数据类型,将int类型改为string类型。v3寄存器存放的字符串长度为32,对这个字符串进行处理,如下图所示。

    注意:查看完寄存器的值后记得把它的数据类型改回int类型,否则程序会崩溃。

    在这里插入图片描述

    这里看到他加密出来的值为:“2693cd1ae58a54a161599de9130fa864”,把这个值传递进去,进行一个for循环,看到这里就是循环 v4的值每次都加2,然后goto到68这个位置,判断是否取这个32位的循环,取完后会在0000007c这个位置进行一个比较,最后把运行取值存放在v6寄存器中,这里需要转换为string类型,后面的“200c5d8e953336bd”就是正确的注册码。

    注意:jeb反编译中的smali代码和androidkiller 反编译的smali代码的格式区别

    通过以上的调试,得出正确的注册码为:“200c5d8e953336bd”,如下图所示。

    在这里插入图片描述

    现在把这个字符串输入到注册码编辑框里面,点击“注册”按钮,提示“注册成功”,如下图所示。

    在这里插入图片描述

    2. debug模式调试

    debug模式调试和普通模式调试区别在哪里?在程序启动过程中,程序入口界面和入口点里的函数执行时机非常早。要调试此类函数,就需要使用debug模式启动。

    首先打开雷电模拟器,保证需要调试的apk已经安装。在cmd里面输入adb shell am start -D -n 应用程序包名/应用程序入口界面,回车执行该命令,如下图所示。

    在这里插入图片描述

    我们可以看到模拟器弹出了一个弹窗,等待被调试,如下图所示。

    在这里插入图片描述

    在onCreate方法打一个断点,设置断点的方法和普通模式相同。点击菜单栏“Debugger”选项下的“Start”按钮开始调试,如下图所示。

    在这里插入图片描述

    附加成功后,可以看到成功在onCreate方法断下,如下图所示。

    在这里插入图片描述

    既然断点设置成功,就说明我们同样可以采用“debug”模式进行调试,也可以得到和普通模式一样的结果,步骤一样就不再重复。

    小结;

    本次主要分享Jeb动态调试相关内容:

    1.调试快捷键:
    “Q”→ 将smali转换为伪代码
    “Ctrl+B”→设置断点

    2.普通模式调试的步骤:
    (1)找到checkSN方法 ,Ctrl+B设置断点。
    (2)运行被调试的应用,点“Debugger”选项下的“Start”按钮开始调试。
    (3)点击弹窗里“确定”按钮。
    (4)点击“Attach”窗口下方的“attach”按钮开始调试
    (5)输入“用户名”“注册码”,点击“注册”按钮,程序会在设置断点的位置断下来了。
    (6)分析调试得到正确的“注册码”。

    3.debug模式调试的命令:
    adb shell am start -D -n 应用程序包名/应用程序入口界面。

    今天的内容到这人就已经分享完成了,喜欢就点个关注呗,给博主一点动力啊

    如果你也对安卓逆向感兴趣。可以加下方的群,大家一起讨论问题,或者扫描下方二维码,关注回复 “安卓逆向” 获取免费教程

    安卓逆向交流学习:1139349849
    vx:Yjxiaox

    在这里插入图片描述

    展开全文
  • 动态调试工具ollydbg

    2019-05-05 10:15:09
    强大的逆向动态调试工具,可在程序运行过程分析内存、寄存器等信息,此为2.01版本,解压密码xx123
  • Android 如何动态调试进行检查 最近项目在进行三方安全报告中一直存在很多动态调试检测的高危漏洞。经过多次研究及测试,也参考了网上不少的示例,集大家精髓所成,测试在Android studio 3.0以上,可以使用的示例...
  • IDA 动态调试

    2020-04-09 21:05:39
    感谢南邮,让我把ida动态调试,给搞定了,困扰了很久,之前下的ubuntu的源,好像有问题,ifconfig这个命令一直装不上,突然想起来了我的服务器很久没用了,重装了下系统,换成ubuntu,这里记录一下ida动态调试过程。...

    感谢南邮,让我把ida动态调试,给搞定了,困扰了很久,之前下的ubuntu的源,好像有问题,ifconfig这个命令一直装不上,突然想起来了我的服务器很久没用了,重装了下系统,换成ubuntu,这里记录一下ida动态调试过程。
    一.ida动态调试
    1.先点击这个文件夹在这里插入图片描述
    2.
    在这里插入图片描述
    很多类型,看那个文件是哪个平台的,比如我这里是linux64的,所以将那个linux_server64上传到我服务器那里,之后开始运行,
    在这里插入图片描述
    3.打开ida,按钮换一下
    在这里插入图片描述
    借用一下网图,说的简洁。
    在这里插入图片描述
    F9开始运行,没报错就成功了,如果报错,服务器那边的linux_server64重新启动一下就好了。

    展开全文
  • 【逆向】IDA 动态调试之普通模式调试 apk 调试模式 【逆向】IDA 动态调试之调试模式调试 apk 一、软件环境 IDA:IDA 7.0 SDK APK:Calculator.apk 软件下载:百度网盘 提取码:qhij 二、搭建环境 1、...

    起序:因为 安卓模拟器(比如:雷电,夜神,蓝叠...) 都是 x86 架构的,而调试的是 arm 架构,所以需要 arm 架构的 安卓模拟器

    调试模式 文章
    普通模式 【逆向】IDA 动态调试之普通模式调试 apk
    调试模式 【逆向】IDA 动态调试之调试模式调试 apk

    一、软件环境

    • IDA:IDA 7.0

    • SDK

    • APK:Calculator.apk

    • 软件下载:百度网盘 提取码:qhij

    二、搭建环境

    1、下载并解压文件

    在这里插入图片描述

    2、打开模拟器

    这个模拟器打开的运行效果很差,将就可以调试用。

    在这里插入图片描述

    3、启动 DDMS

    sdk/tools 目录下有一个 ddms.bat 脚本,点击启动。

    在这里插入图片描述

    4、android_server

    IDA pro/dbgsrv 目录下有一红框圈出的文件 android_server,它是提供调试 arm 架构的所需服务文件。

    在这里插入图片描述

    5、连接设备

    1、检查设备

    因为我电脑上已经有了一个 SDK,所以解压出来的 SDK 配置好环境变量后,我把 sdk/platform-tools 目录下的 adb.exe 复制了一份,更改为 adb1.exe 文件,为了是不与我原来的 SDK 在命令上的冲突。

    # 检查是否连接上设备
    adb devices
    

    在这里插入图片描述

    2、上传 android_server

    android_server 复制到 模拟器/data/local/tmp 目录下,这里建议更改复制之后的文件名,因为有一些模拟器会检测,会导致 android_server 复制失败,我这里更改为 as

    # 最后的 as 是文件复制之后更改的名称,这里原目录为什么有双引号呢,是因为 IDA pro 这个文件名中间有空格
    adb push "F:\Program Files\IDA Pro\dbgsrv\android_server" /data/local/tmp/as
    

    在这里插入图片描述

    3、授予可执行权限

    android_server 文件上传到 /data/local/tmp 目录下之后,还没有 可执行权限,需要 授予可执行权限

    # 连接设备
    adb shell
    # 获取 root 权限(有些模拟器需要执行 su 命令),这里默认就是 root 权限了,所以我就没写
    su
    # 授予可执行权限
    chmod 777 /data/local/tmp/as
    # 执行,启动之后开启占用 23946 端口
    ./as
    

    在这里插入图片描述

    综合

    在这里插入图片描述

    4、端口转发

    此时需要使用 本机模拟器 之间进行端口转发,需要新打开一个 cmd 窗口。

    adb forward tcp:23946 tcp:23946
    

    在这里插入图片描述

    5、获取包名入口

    **此时 Calculator.apk 软件已经安装上在 安卓模拟器 上。此时不需要手动打开 Calculator 应用。 **

    # adb shell am start -D -n 包名/入口函数
    adb shell am start -D -n com.star.calculator/.MainActivity
    

    在这里插入图片描述

    模拟器上 Calculator 应用显示

    在这里插入图片描述

    6、IDA 配置

    DebuggerAttachRemote ARMLinux/Android debugger

    在这里插入图片描述

    Hostname 输入 127.0.0.1,点击 OK。

    在这里插入图片描述

    出现的都是 进程信息,选择刚刚启动软件的进程,选择包名 com.star.calculator,点击 OK。

    在这里插入图片描述

    效果展示,好了,我该调试软件了。

    在这里插入图片描述

    6、勾选三项

    DebuggerDebugger options

    在这里插入图片描述

    勾选下面三项,这些是在 断点线程启动的时候、以及 so 加载的时候 会断下来。

    • Suspend on process entry point
    • Suspend on thread start/exit
    • Suspend on library load/unload

    在这里插入图片描述

    7、恢复程序运行

    1、查看 Calculator 进程端口

    可以看出 Calculator 进程占用的端口是 8601。

    在这里插入图片描述

    2、恢复程序运行

    # cmd 窗口中执行
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8601
    

    在这里插入图片描述

    点击左上角的 绿色小三角形 一下,可以看出下面红框圈出的 libcalculator.so 文件

    在这里插入图片描述

    8、取消三项

    接下来调试的时候,记得取消前面勾选的 三项。不然有可能会在其他的地方又断下来。

    在这里插入图片描述

    如果对您有帮助,点个赞再走吧。

    展开全文
  • IDA动态调试

    千次阅读 2018-09-16 21:18:27
    IDA Pro使用(静态分析+动态调试)(https://www.cnblogs.com/blacksunny/p/7199572.html) IDA动态调试流程(https://blog.csdn.net/feibabeibei_beibei/article/details/52740212)
  • Android 动态调试

    2020-09-07 15:09:13
    Android 2种动态调试方式 初始化准备: 1.将ida 的dbgsrv 目录下android_server 调试服务push 到手机local/tmp 下 adb push android_server /data/local/tmp/wc 重命名为wc 避免名字反调试 2.赋权 adb shell ...
  • 上几篇文章已经为大家介绍了js调试系列的一些基础知识,支持乱码兄弟为大家带来了js断点与动态调试方法,需要的朋友可以参考下
  • ysoserial 动态调试

    2019-12-24 19:53:03
    在尝试对cve-2018-2628反序列化漏洞做分析的时候,发现一个比较重要的概念是JRMP,而在ysoserial中已经实现了JRMP的客户端和服务端,所以想可以直接进行动态调试一下,大概了解下JRMP的机制,下面简单讲一下...
  • 有时候想更了解别人App的调用流程,就需要在App运行的时候进行动态调试动态调试指的是将程序运行起来,通过下断点、打印等方式,查看参数、返回值、函数调用流程等。 下面话不多说了,来随着小编一起看看详细的...
  • Android动态调试逆向反编译smaliAndroid动态调试逆向反编译smaliAndroid动态调试逆向反编译smali
  • lldb动态调试

    千次阅读 2016-09-06 11:27:33
    LLDB动态调试 安装debugserver
  • 动态分析Android App之动态调试

    千次阅读 多人点赞 2019-08-24 18:36:38
    动态分析Android App之动态调试 这个系列一共有五篇左右,内容主要介绍如何动态分析和调试Android App,和网上其他教程相比,内容更充实,体系更健全,深入而浅出。闻道有先后,术业有专攻,希望能给刚入门Android...
  • 文章目录前言一、虚拟机配置二,IDA动态调试1.windows本地调试2.linux远程调试总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了...
  • Android动态调试七种武器.zip,安卓动态调试七种武器
  • AndroidSo动态调试.zip

    2020-06-08 17:01:11
    Android So动态调试大法, 此为blog里的例子,包含图片、pdf 以及apk程序,为逆向初学者提供很大的帮助!!!
  • 下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。 问题篇: 1.动态调试的作用以及与我们常说的脱壳区别之处? 2.IDA的下断点调试的原理? 3.有无反调试的步骤区别?...
  • Android So动态调试大法

    2016-10-06 11:51:55
    Android So动态调试大法
  • iOS-Debug-Hacks:iOS项目开发过程中使用的高级调试技巧,涉及动态调试,静态分析和第三方库的反编译。 iOS项目开发过程中用到的高级调试技巧,涉及三方库动态调试,静态分析和反编译等领域
  • App动态调试

    千次阅读 2018-10-25 18:05:07
    APK使用反编译工具AndroidKiller进行反编译后,在AndroidManifest.xml没有设置android:debuggable属性,没有该属性下debuggable默认是关闭,但是在模拟器或...来检测该值)可进行动态调试。 1.先查看AndroidManifes...
  • 要调试此类的函数,是通过 【逆向】JEB 动态调试之普通模式调试 smali 代码 这个普通模式,是调试不了的。比如 onCreate() 方法是在我们打开界面的时候就已经完成了调用这个函数。根本调试不了 onCreate() 以及更早...
  • vscode动态调试

    2018-09-21 18:29:00
    关于vscode动态调试php项目其实在网上有文章,但那些文章或多或少都有些坑点或者转载他人,未经验证过,几度重装系统重新配置的时候在网上看文章配置总是有点问题,所以这次自己写了一篇文章,从头到尾重新配置。...
  • AS动态调试smali

    2020-02-05 10:46:47
    0x1 AS动态调试smali环境配置 Android Studio是由谷歌发布的一个为Android平台开发程序的集成开发环境。由于其功能的强大,近几年来已经逐渐取代eclipse成为Android开发的首选工具。 AS动态调试smali代码需要用到...
  • Java 动态调试技术原理及实践

    千次阅读 多人点赞 2019-11-07 19:55:19
    总第367篇2019年 第45篇1. 动态调试要解决的问题断点调试是我们最常使用的调试手段,它可以获取...本文将研究Java语言中的动态调试技术,首先概括Java动态调试所涉及的技术基础,接着介绍我们在Java动态调试领域的思...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,632
精华内容 4,652
关键字:

动态调试