美文网首页
一个GDB调试技巧:修改程序的标准输入

一个GDB调试技巧:修改程序的标准输入

作者: Ovie | 来源:发表于2017-06-14 01:28 被阅读0次

想有没有一种方式能一边使用GDB调试程序,一边在需要的时候通过标准输入传递构造好的恶意数据(通常含有各种特殊字符,如\x01\x02\x03等),这样可以实时知道恶意数据输入后,程序的状态、执行过程。而不是执行exp,把程序弄崩溃,利用core file还原崩溃现场。

想了好几种方式,最后是利用GDB的call命令来调用函数修改被调试程序的标准输入,这样程序可以从我们指定的文件里读取特殊字符。

写了个GDB Python插件,代码在:https://github.com/Ovi3/pstdio

使用例子

编译测试用的程序。read.c

#include "stdio.h"

int main(void){
        char buf[32];
        char buf1[32];
        int len;
        len = read(0, buf, 32);
        buf[len] = 0;
        write(1, buf, len);

        len = read(0, buf1, 32);
        buf1[len] = 0;
        write(1, buf1, len);

        return 0;
}

编译:gcc -o read read.c
安装pstdio:

git clone https://github.com/Ovi3/pstdio.git ~/pstdio
echo "source ~/pstdio/pstdio.py" >> ~/.gdbinit

开始调试gdb -q read

先看下帮助文档:pstdio help

snipaste20170614_011330.png

调试执行到call <read@plt>之前,执行(有两个反斜杆)

pstdio data /x \\x41\\x42\\x43\\x44\\x01\\x02\\x03\\x04

接着执行ni单步执行call <read@plt>后,数据就会被写入。

snipaste20170614_012101.png snipaste20170614_012143.png

或者在/path/to/data文件里存数据,接着执行pstdio file /path/to/data,再单步到call <read@plt>,文件里的数据就会被写入。

snipaste20170614_012344.png

程序在重新运行后,或者在执行pstdio reset后,程序的标准输入就会恢复,也就是数据从屏幕上输入。

snipaste20170614_012454.png

参考资料

相关文章

  • 一个GDB调试技巧:修改程序的标准输入

    想有没有一种方式能一边使用GDB调试程序,一边在需要的时候通过标准输入传递构造好的恶意数据(通常含有各种特殊字符,...

  • 8-23: leetcode

    gdb 调试多进程程序的技巧 Median of two Sorted Arrays leetcode merg...

  • 【实践】gdb调试golang程序入门及gdb命令列表

    1. 摘要 本文讲解gdb调试GOLANG程序的入门配置,以及gdb命令详解备忘。 2. gdb调试go程序入门...

  • gdb调试基本方法

    gdb调试基本方法 gdb调试常用命令 在GDB中运行程序 断点(BreakPoint) 观察点(WatchPoi...

  • GDB调试环境配置

    GDB调试环境配置 GDB安装 在调试的时候,会提示如下信息 首先需要修改CentOS-Debuginfo.rep...

  • GDB学习笔记

    本文介绍使用gdb调试程序的常用命令。 简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果...

  • iOS安全防护方案

    1.阻止动态调试 GDB、LLDB是Xcode内置的动态调试工具。使用GDB、LLDB可以动态的调试你的应用程序(...

  • Linux调试-GDB

    启动GDB调试 在使用GDB之前,编译出带调试信息的程序,调试信息中包含了函数和变量所在文件和行号信息,通过gcc...

  • 【性能优化】如何使用 gdb dump 内存

    1.GDB 调试器简介 GDB 全称 “GNU symbolic debugger”,是 Linux 下常用的程序...

  • linux编程入门(七)-使用gdb调试程序

    程序开发离不开调试,可以断点调试,也可以打log调试,linux下断点调试c,c++程序用gdb。 断点调试虽然很...

网友评论

      本文标题:一个GDB调试技巧:修改程序的标准输入

      本文链接:https://www.haomeiwen.com/subject/viajqxtx.html