首页 > 其他分享 >[渗透测试]—7.4 逆向工程和二进制破解技术

[渗透测试]—7.4 逆向工程和二进制破解技术

时间:2023-07-02 19:25:00浏览次数:41  
标签:可执行文件 逆向 十六进制 二进制 程序 符号执行 7.4 found 过程

在本章节中,我们将深入学习逆向工程和二进制破解技术。我们将尽量详细、通俗易懂地讲解,并提供尽可能多的实例。

1.1 逆向工程概述

逆向工程是指从软件的二进制文件中提取信息,以了解其工作原理和设计思路的过程。逆向工程的主要目的是对软件进行分析、调试、修改等操作,以实现特定目的(如安全分析、病毒分析、破解等)。

逆向工程的常见方法包括静态分析、动态分析、符号执行等。接下来,我们将详细介绍这些方法及其实例。

1.2 静态分析

静态分析是指在不执行程序的情况下,通过分析二进制文件的结构和指令来了解其工作原理的过程。静态分析的主要工具包括反汇编器(如IDA、Ghidra等)、十六进制编辑器(如HxD、Hex Fiend等)。

1.2.1 反汇编

反汇编是将二进制文件(如可执行文件、库文件等)转换为汇编指令的过程。反汇编器可以帮助我们理解程序的执行流程和数据结构,从而发现潜在的漏洞和逻辑错误。

以下是一个使用IDA Pro反汇编器分析可执行文件的示例:

  1. 打开IDA Pro,选择File > Open,然后选择目标可执行文件。
  2. 点击OK,开始反汇编过程。
  3. 在反汇编窗口中,可以看到程序的汇编指令。可以通过导航栏和函数窗口来查看程序的执行流程和函数调用关系。

1.2.2 十六进制编辑

十六进制编辑是指直接查看和修改二进制文件的十六进制数据的过程。十六进制编辑器可以帮助我们在不反汇编的情况下,快速定位和修改程序中的数据和指令。

以下是一个使用HxD十六进制编辑器修改可执行文件的示例:

  1. 打开HxD,选择File > Open,然后选择目标可执行文件。
  2. 在十六进制编辑窗口中,可以看到程序的十六进制数据。可以通过查找功能来定位特定数据和指令。
  3. 修改目标数据或指令,然后选择File > Save,保存修改后的文件。

1.3 动态分析

动态分析是指在执行程序的过程中,通过监控程序的行为和状态来了解其工作原理的过程。动态分析的主要工具包括调试器(如OllyDbg、GDB等)、系统监控工具(如Process Monitor、Wireshark等)。

1.3.1 调试

调试是通过单步执行、设置断点、查看寄存器和内存等手段,实时监控程序的执行过程的过程。调试器可以帮助我们深入了解程序的动态行为,从而发现潜在的漏洞和逻辑错误。

以下是一个使用OllyDbg调试器调试Windows可执行文件的示例:

  1. 打开OllyDbg,选择File > Open,然后选择目标可执行文件。
  2. 在调试窗口中,可以看到程序的汇编指令、寄存器、内存等信息。可以通过单步执行、设置断点等功能来控制程序的执行过程。
  3. 在程序执行过程中,可以实时查看寄存器和内存的变化,从而了解程序的动态行为。

1.3.2 系统监控

系统监控是指通过记录程序与操作系统、硬件、网络等资源的交互过程,了解程序的行为特征和工作原理的过程。系统监控工具可以帮助我们了解程序的外部依赖关系、数据传输过程等信息,从而发现潜在的漏洞和逻辑错误。

以下是一个使用Process Monitor监控Windows可执行文件的示例:

  1. 打开Process Monitor,选择Filter > Filter...,设置筛选条件,如进程名、操作类型等。
  2. 启动目标可执行文件,Process Monitor将自动记录其与操作系统的交互过程。
  3. 在Process Monitor窗口中,可以查看程序的文件操作、注册表操作、进程操作等详细信息。

1.4 符号执行

符号执行是一种程序分析技术,通过将程序的输入表示为符号变量,然后在不执行程序的情况下,模拟程序的执行过程,以发现潜在的漏洞和逻辑错误。符号执行的主要工具包括SMT求解器(如Z3、Yices等)、符号执行引擎(如Angr、KLEE等)。

以下是一个使用Angr符号执行引擎分析C语言程序的示例:

  1. 首先,安装Angr:pip install angr
  2. 编写以下Python脚本,使用Angr分析目标C语言程序:
import angr

# 加载目标程序
proj = angr.Project('path/to/target/binary')

# 创建符号执行状态
state = proj.factory.entry_state()

# 创建符号执行引擎
simgr = proj.factory.simgr(state)

# 模拟程序执行过程,寻找目标状态
simgr.explore(find=lambda s: b'success' in s.posix.dumps(1))

# 输出符号执行结果
if simgr.found:
    found = simgr.found[0]
    print('Found solution:', found.solver.eval(found.posix.stdin.load(0, found.posix.stdin.size), cast_to=bytes))
else:
    print('No solution found')
  1. 运行Python脚本,Angr将自动分析目标程序,寻找满足特定条件的输入。

通过以上介绍和示例,您应该对逆向工程和二进制破解技术有了初步的了解。在实际渗透测试过程中,您需要根据具体情况选择合适的方法和工具,不断积累经验,提高技能。在后续章节中,我们还将介绍其他高级渗透测试技术,敬请关注。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

标签:可执行文件,逆向,十六进制,二进制,程序,符号执行,7.4,found,过程
From: https://www.cnblogs.com/yaoqian/p/17521208.html

相关文章

  • 二进制转BCD8421码
    8421码是BCD码中最常用的编码,使用4位二进制表示十进制数0~9,即0000~1001。例如十进制数12转二进制为1100,转化为8421码为00010010(十进制为18),两个编码相减得6。二进制转8421的规则是≥10就加6,否则不加6进行校正。\[\begin{array}{r}10010B\\-1100B\\\hline0110B\end{array}......
  • 背包问题-二进制优化
    Smiling&Weeping----不讨好所有冷漠不辜负所有热爱 #[NOIP1996提高组]砝码称重 ##题目描述 设有$1\mathrm{g}$、$2\mathrm{g}$、$3\mathrm{g}$、$5\mathrm{g}$、$10\mathrm{g}$、$20\mathrm{g}$的砝码各若干枚(其总重$\le......
  • MacOS M1 环境下的 Nginx + docker php-fpm7.4 部署fastadmin
    DokerfileFROMphp:7.4-fpm#php版本低于8的话安装swoole建议指定版本RUNapt-getupdate&&apt-getinstall-y\libfreetype6-dev\libjpeg62-turbo-dev\libpng-dev\libzip-dev\libssl-dev\git\unzip\&&do......
  • yum安装mysql时出现Public key for mysql-community-common-5.7.42-1.el7.x86_64.rpm
    问题描述:yum安装mysql时出现Publickeyformysql-community-common-5.7.42-1.el7.x86_64.rpmisnotinstalled告警,如下所示:数据库:mysql5.7.42系统:rhel7.31、问题重现[root@leo-mysql-master~]#yuminstall-ymysql-community-serverLoadedplugins:langpacks,product......
  • 【胖虎的逆向之路】——GOT/PLT Hook详解&针对自定义so库的Hook实操
    文章目录@[TOC](文章目录)前言一、ELF是什么?1、ELF的概念2、ELF的组成2.1、两种视图是什么呢?2.2、ELF文件头又是什么西西?2.2、ELF中节头表是什么南南呢?2.2、ELF中程序头表是什么北北呢?二、动态库装载、动态链接与重定位简单理解1、装载2、动态链接3、重定位三、PLT与GOTHoo......
  • JS逆向实战19——通杀webpack逆向
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!网站aHR0cHM6Ly9mb2dhbmctbS5pdG91Y2h0di5jbi9tZWRpYURldGFpbC8zODc1Nw==aHR0cHM6Ly93d3cuZ205OS5jb20......
  • 401. 二进制手表
    这里可以通过遍历的方式做出来。i从0~1111111111进行遍历,如果1的个数等于要求的个数tournedOn,此时进一步判断时钟位和分钟为是否符合要求,满足要求则放入结果容器中。classSolution{public:vector<string>readBinaryWatch(intturnedOn){vector<string>res;......
  • 2023.6.29 重构 2 行二进制矩阵
    考虑贪心策略。每一列,把1优先放在lower和upper两行中较大的那一行上。implSolution{pubfnreconstruct_matrix(upper:i32,lower:i32,colsum:Vec<i32>)->Vec<Vec<i32>>{letn=colsum.len();let(mutupper,mutlower)=(upper,l......
  • 力扣---1253. 重构 2 行二进制矩阵
    给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。你需要利用 ......
  • VX小程序逆向分析
    VX小程序逆向分析https://mp.weixin.qq.com/s/7yZzf4V-2fcn-jRwm4uO-wVX小程序逆向分析Sharp_Wang 看雪学苑 2023-06-2818:03 发表于上海Frida虽然确实调试起来相当方便,但是Xposed由于能够安装在用户手机上实现持久化的hook,至今受到很多人的青睐,对于微信小程序的wx.reque......