新手简单入门逆向-消除对汇编的恐惧

Windows PE逆向入门:从Easy_Re题解透视二进制分析四步法 PE文件是Windows可执行程序的基础结构,理解其节区布局、导入表与字符串存储机制,是开展逆向分析的前提。其核心原理在于将程序视为‘数据+逻辑’的静态映射,通过解析头结构定位关键代码与数据节,再结合动态调试追踪输入处理与校验流程。这一技术路径不仅支撑CTF逆向解题,更广泛应用于软件安全审计、恶意代码分析和漏洞挖掘等工程实践。对于初学者,掌握PE Tools识别节区、x64dbg精准搜索ASCII字符串、手动还原控制流及逆推异或算法等能力,能有效跨越从高级语言到机器指令的认知断层。本文以经典CTF题Easy 阅读详情

最近这几天一直在看一本电子书,看雪的0day安全:软件漏洞分析技术

内容灵感来自:第一篇,第一章节最后一节1.4小实验

#include <stdio.h>
#include <string.h>
#define PASSWORD "1234567"
// 验证输入的密码是否正确
int verify_password(char* password) {
    int authenticated;
    authenticated = strcmp(password, PASSWORD);
    return authenticated;
}
int main() {
    int valid_flag = 0;
    char password[1024];

    while (1) {
        printf("please input password: ");
        scanf_s("%s", password);

        valid_flag = verify_password(password);

        if (valid_flag) {
            printf("incorrect password!\n\n");
        }
        else {
            printf("Congratulation! You have passed the verification!\n");
            break;
        }
    }

    return 0;
}

这是书中给到的源码

编译前要关闭vs的内存地址随机化

环境:vs 2022 release 32位程序

IDA反编译后伪代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // eax
  int v4; // eax
  char password[1024]; // [esp+0h] [ebp-400h] BYREF

  printf("please input password: ");
  scanf_s("%s", password);
  v3 = strcmp(password, "1234567");
  if ( v3 )
    v3 = v3 < 0 ? -1 : 1;
  if ( v3 )
  {
    do
    {
      printf("incorrect password!\n\n");
      printf("please input password: ");
      scanf_s("%s", password);
      v4 = strcmp(password, "1234567");
      if ( v4 )
        v4 = v4 < 0 ? -1 : 1;
    }
    while ( v4 );
  }
  printf("Congratulation! You have passed the verification!\n");
  return 0;
}

看到这里进行了两次判断,第一次输入v3进行判断,第二次输入v4进行判断

下面介绍一下伪代码中的迷惑点

在v3和v4的strcmp函数下面会有这样的代码

  if ( v3 )
    v3 = v3 < 0 ? -1 : 1;

这个其实就是strcmp函数的返回值,可以不用管它

strcmp函数介绍
功能:从左至右逐个对字符串 s1 和 s2 中的字符按 ASCII 值大小进行比较 ,直到出现不同字符或遇 '\0' 为止。
返回值:
若 s1 等于 s2 ,返回 0。
若 s1 小于 s2 ,返回负数。
若 s1 大于 s2 ,返回正数。

伪代码的逻辑大致如下:

  1. 输入password,通过strcmp函数来判断。然后将返回的结果返还给v3

  2. if 判断v3的值,如果不是等于0(那就是密码输入错误了)就会执行if内的内容,如果等于零直接执行 printf("Congratulation! You have passed the verification!\n"); 那很不错了(๑•̀ㅂ•́)و✧

  3. 假如输入错误,进入到if体内,先给我们打印出密码输入错误,然后重新提示我们输入密码。

  4. 这次重新输入password,使用strcmp来比较,将返回结果赋给v4。这里有意思的是,最后没有if判断v4是否等于零,直接用do while来判断v4是否等于零。如果v4等于零,那么直接跳出循环并打印Congratulation! You have passed the verification!,如果v4不等于0(负数也包含在内)那么就会一直在do while循环中徘徊直到我们输入的password正确。

流程图分析1

由于流程图太多太长,这里就不一一展示了,只挑重点的说

loc_4010E7 这个就是我们第一个if,也就是判断我们v3的if。

这里再介绍两个汇编指令:

test:指令用于对两个操作数进行按位逻辑与运算,但不保存运算结果,仅根据运算结果设置标志寄存器
​
jz条件跳转指令,全称为 “Jump if Zero”,即当零标志位(ZF)为 1 时,程序会跳转到指定的目标地址执行;若零标志位(ZF)为 0,则顺序执行下一条指令。

这个是来判断我们v3的值是否为0,如果我们v3的值为0的话就会执行jz跳转指令,直接跳到密码正确那里。

test eax,eax 来判断eax的值是否为0,如果为0则执行jz跳转,不为零则向右侧执行

破解点1

在test eax,eax指令这里按下空格

记住这个内存地址 4010E7

然后我们将程序拖入到x32dbg中

Ctrl+G 打开查询框,输入我们内存地址4010E7,然后跳转到那里

将test eax,eax的值修改为xor eax,eax 这样一来ZF标志位肯定为1了

xor eax, eax 是将 eax 寄存器的值与自身进行按位异或运算。由于 eax 中的每一位都与自身相同,根据按位异或运算规则,每一位的运算结果都为 0。
由于 xor eax, eax 的运算结果为 0,根据 ZF 的设置规则,零标志位(ZF)会被置为 1。

所以下面的那条jz指令就会自动变成了je指令

je指令
​
je 是 “Jump if Equal” 的缩写,也就是当零标志位(ZF)的值为 1 时,程序就会跳转到指定的目标地址继续执行;若零标志位(ZF)为 0,程序则会按顺序执行下一条指令。

这样,我们就算破解完成了

然后导出看下成果

正确密码是1234567,但是这里输入1234就提示正确 (๑•̀ㅂ•́)و✧

流程图分析2

这个跟上一个类似,但是这个是do while来判断是否为0的,上面那个是if

jnz指令
jnz 是 “Jump if Not Zero” 的缩写,即当零标志位(ZF)的值为 0 时,程序会跳转到指定的目标地址继续执行;若零标志位(ZF)为 1,则程序会顺序执行下一条指令。

这里可能有点乱,我来梳理一下下

jnz指令,是0标志位ZF为0的时候 (也就是v4不是0的时候)发生跳转
jz指令,是0标志位ZF为1的时候(也就是v3是0的时候)发生跳转

我这里发懒了,直接nop掉了

原样

后者

直接给你跳转nop掉,让你啥也不是,然后保存补丁

依旧可以,这里为什么第一遍会错呢?

这个程序至少有两次判断,第一个判断是通过判断v3,第二个是判断v4的。我们改的是v4那个while判断所以第一遍输入v3的内容时候自然会提示密码错误,但是第二遍输入的时候就提示密码正确了

正确密码依旧是:1234567

从纸带编程到机器码:深入理解计算机指令的本质与当代价值 计算机指令是CPU能直接执行的底层命令,构成了所有软件运行的基石。其本质是操作码与操作数的组合,通过取指、译码、执行循环驱动硬件工作。理解指令原理对于掌握程序性能优化、内存管理及系统调试至关重要,尤其在嵌入式开发、操作系统内核及高性能计算等场景中不可或缺。本文以纸带编程这一历史实践为切入点,生动阐释了机器码的生成与执行过程,并关联到现代开发中的硬件指纹生成与软件授权机制,揭示了从物理孔洞到电子信号的演化脉络。通过学习汇编语言与指令集架构,开发者能获得对计算机体系结构的深刻洞察,从而在高级语言编程中实现更高效 阅读详情

相关推荐

从零到CVE:实战漏洞挖掘的系统化成长路线图

软件安全漏洞是计算机系统中因设计或实现缺陷导致的安全弱点,其本质源于程序与系统交互时对数据边界的失控。理解漏洞原理需要掌握内存管理、程序执行流等底层机制,这构成了漏洞挖掘的技术基础。从技术价值看,漏洞研究不仅关乎攻击与防御的对抗,更是提升软件质量、推动安全开发流程的关键实践。在应用场景上,无论是企业安全审计、渗透测试还是开源软件维护,系统化的漏洞挖掘能力都至关重要。本文围绕CVE漏洞复现与实战挖掘,提供了一套从基础原理到高级狩猎的渐进式学习框架,特别针对CVE编号申请流程和项目中CVE管理策略给出了具体指引

weixin_30379531的博客 390

跳转指令的学习

CMP 该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。 零标志位z JZ指令,如果Z标志被置为1,就跳转,否则,就不跳转。符号标志位s 比较第一个操作数是否大于第二个操作数 正数为0 负数为1 cmp eax,ecx eax>ecx eax = 02 ecx = 01

gacmy的专栏 4328

端侧大模型部署实战:Pulsar2 NPU上Grounding DINO的混合精度量化

大模型端侧部署是边缘智能的核心能力,其本质是在算力、功耗、内存与精度多重约束下实现高效推理。混合精度量化作为突破‘内存墙’与‘带宽瓶颈’的关键技术,通过为不同算子动态分配4/6/8位等差异化bit-width,在保持模型语义理解能力的同时显著降低NPU推理开销。Grounding DINO作为开放词汇检测的代表性多模态模型,对跨模态对齐精度极为敏感,使其成为验证混合精度策略的理想载体;而Pulsar2这类高能效比端侧NPU,则提供了硬件级INT8/F16协同计算支持,使该方案具备工程落地基础。本文聚焦真实嵌

weixin_34221773的博客 392

TEST EAX,EAX作用

test eax,eax je xxxxxxxx test指令的操作是将目的操作数和源操作数按位与,运算结果不送回目的操作数,然后根据结果设置SF,ZF,PF标志位,并将CF和OF标志位清零,一般下面会跟跳转,根据ZF标志位是否为零来决定是否跳转,即,这句意思就是判断eax是否为零 <wiz_tmp_tag id="wiz-table-range-borde...

weixin_30470643的博客 5305

APK反编译技术解析:法律边界、隐私风险与合规实践指南

在Android应用开发与安全领域,反编译技术是理解软件内部结构和实现原理的重要方法。其核心原理是通过解析APK文件中的Dalvik字节码和资源文件,将其转换为可读的Java代码或中间表示形式,从而实现对应用逻辑的静态分析。这项技术的价值在于支持安全研究、漏洞挖掘和恶意软件分析等合法场景,帮助开发者学习优秀架构、提升代码质量。然而,技术应用必须严格遵循法律与伦理边界,涉及著作权法、用户协议和商业秘密保护等多个层面。在实际操作中,开发者需要关注隐私数据安全,避免接触API密钥、加密算法等敏感信息,并建立隔离的

weixin_30628801的博客 364

Mythos:首个可规模化漏洞挖掘的AI安全引擎

漏洞挖掘正从依赖专家经验的手工艺术,演变为基于形式化推理与符号执行的可计算工程问题。其核心原理在于将源码分析、状态建模、约束求解与攻击图感知深度融合,实现从代码到可利用漏洞的端到端自动推理链。这种能力带来显著的技术价值:大幅提升发现深度与复现效率,支撑毫秒级响应的DevSecOps自愈流水线,并推动安全左移向‘提交前守卫’和‘PR时EXP模拟’演进。典型应用场景覆盖金融核心系统审计、工业控制系统加固、开源供应链风险治理等高保障环境。Mythos标志着AI安全已跨越SOTA基准测试阶段,进入真实世界漏洞生命周

weixin_33713350的博客 346

为什么汇编语言当中要用 test eax, eax

想象一下,你有一个开关(eax寄存器),这个开关可以处于两种状态:开(非零值)或关(零值)。这条指令就像是检查这个开关是否处于“关”状态的动作。test指令的作用是检查eax寄存器中的值,然后根据这个值更新一些内部的信号灯(状态标志寄存器)。这些信号灯会告诉程序的其他部分这个开关是开还是关。假设你在家里有一个智能灯泡,这个灯泡可以通过一个开关来控制。这个开关有两个状态:开(灯泡亮)和关(灯泡灭)。现在,你想编写一个规则,如果灯泡是关的(开关处于“关”状态),就去做某件事情(比如打开另一个灯)。

zhuqiyua的博客 2605

Mythos:首个可规模化漏洞挖掘的AI安全模型解析

漏洞挖掘正从依赖人工经验与规则引擎的传统模式,转向基于大模型的因果推理与系统建模新范式。其核心原理是将软件运行本质(内存管理、指令调度、协议交互)内化为通用推理能力,而非匹配已知特征;技术价值在于实现‘可复现、可调度、端到端’的自动化攻击链生成,显著压缩从代码提交到POC产出的周期;典型应用场景覆盖DevSecOps左移审计、企业级持续攻防推演及零日风险评估;本文聚焦Mythos所代表的‘推理即能力’范式跃迁,深入剖析其稀疏激活架构、多阶段红队强化训练与动态计算预算分配机制。

weixin_30378623的博客 379

关于test eax eax

test eax eax 一般 if (a) { a = 0; } else { a++; } 会生成 TEST EAX, EAX JZ lb1 ;如果EA...

chudianmao8309的博客 2630

如何制作微信小程序的在线购物商城应用

首先,你需要规划好商城的整体框架,确定好你的目标用户群体,思考他们的需求是什么。接下来,使用微信开发者工具创建一个新的小程序项目,输入你的AppID,选择好保存路径,点击“创建”,一个新的商城雏形就诞生了。你可以把这里当作自己的家,无论是工作之余的小憩,还是寻找灵感的驿站,我都希望你能在这里找到属于你的那份快乐和满足。数据是现代商业的灵魂,通过数据分析,你可以更准确地把握用户的行为模式,从而做出更明智的决策。

master_chenchen的博客 2427

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 413

test eax,eax

mov eax,[ecx+000002F0] ;将ds:[ecx+000002F0]内的32位值存入eax test eax,eax ;测试eax是否为负数 jnge 0050235A ;为负数则跳转到 0050235A 处(你没贴出地址不知是那行)

linuxheik的专栏 2973

【基于51】红外寻迹智能小车 - 代码篇

这是一个基于C51单片机的红外巡线智能小车,是一个适合嵌入式单片机、C语言初学者练习的小Demo,文章提供完整的项目思路、免费的源代码。

ZER00000001的博客 3万+

从 C 到汇编:循环的底层跳转逻辑与性能优化

CPU 按程序计数器顺序执行指令,循环的本质是对跳转指令的巧妙运用。程序员用 C 写出的 for、while、do-while,在汇编层表现为带标签的指令块与条件跳转(如 jle、jg)的灵活组合。理解这些底层机制,有助于把握编译器如何优化循环、为何使用寄存器存放循环变量、分支预测如何影响性能,以及栈帧与标志位在循环中的真实角色。无论是调试崩溃栈、排查死循环,还是分析 -O2/-O3 下的汇编代码,掌握从高级语言到汇编的映射关系,都能让你的程序性能分析更扎实。本文以一个工程师的视角,拆解循环被翻译成汇编的完

weixin_33883104的博客 184

Foxmail 7.2.25以下版本XSS漏洞实战复现:手把手教你如何构造恶意邮件(含防御方案)

本文深入解析Foxmail 7.2.25以下版本的XSS漏洞(CNVD-2025-06036),详细展示如何构造恶意邮件进行跨站脚本攻击,并提供从客户端升级到企业级防护的多层次防御方案,帮助用户有效防范安全风险。

view3的博客 163

CANoe.DiVa的应用——生成测试用例过程流程详解(一)

Diva 生成用例过程

LOVE135149的博客 7925

解析简单C编译器源码:从词法分析到代码生成的完整实现

编译原理是计算机科学的核心基础,它研究如何将高级编程语言转换为机器可执行的指令。其核心流程遵循词法分析、语法分析、语义分析、中间代码生成与优化、目标代码生成五大阶段,构成了现代编译器的通用架构。理解这一流程对于深入掌握编程语言、系统软件和计算机体系结构至关重要,是提升开发者底层能力的关键。通过剖析一个教学级C语言编译器的源码,可以直观地看到抽象理论如何落地为具体的工程实现,例如递归下降语法分析器如何构建抽象语法树,以及符号表如何管理作用域和类型信息。这种从概念到代码的映射,能有效帮助学习者跨越理论与实践的鸿

weixin_30458043的博客 382

【嵌入式DIY实例-ESP32篇】-热成像仪

在本文中,我们将使用 MLX90640 热像仪和 1.8 英寸 ST7735 TFT 显示屏,构建一款基于 ESP32 的高性能紧凑型热像仪。本项目旨在打造一款便携、响应迅速的热像仪,具有增强的图像质量、优化的帧率和精准的温度读数。

视觉与物联智能 877

AI时代,程序员真的会被取代吗?

过去,AI在编程中扮演的角色是“助手”——开发者敲出for,AI补全(int i=0;i<n;i++)。这种辅助的本质是减少打字工作量,而非减少思考工作量。现在的情况已经完全不同。场景一:新功能开发输入:产品经理的需求文档AI处理:分析需求 → 识别技术难点 → 提出实现方案 → 选择最优方案 → 设计数据库表结构 → 编写接口文档 → 生成代码框架 → 实现具体业务逻辑人工干预:方案选择、代码审查、部署配置场景二:BUG排查输入:生产环境报错日志AI处理。

安晴晚风的博客 835

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188

YOLOv12改进策略【独家融合改进】| SPD-Conv+PPA 再次提升模型针对小目标的特征提取能力

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1026

AI如何用2283美元20小时自动化漏洞利用?解析三步走策略与安全影响

漏洞挖掘与利用(Exploit开发)是网络安全领域的核心技术,其传统高度依赖安全研究员深厚的逆向工程、操作系统和编译器原理知识。随着大语言模型(LLM)能力的突破,这一过程正被重新定义。AI通过自动化分析补丁差异、逆向漏洞原理并生成利用代码,显著降低了技术门槛与时间成本。其核心价值在于将人类专家的领域知识(如攻击面选择、利用链架构)与AI的代码生成、模式匹配能力相结合,实现人机协同。在应用场景上,这不仅加速了针对浏览器、操作系统等基础软件的漏洞武器化,更对软件供应链安全、补丁响应时效提出了严峻挑战。本文通过

GOBY 栏目 430

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言学习新路径:从项目目标倒推语法工具,告别知识孤岛

编程语言学习常陷入孤立语法点的困境,导致学习者虽掌握概念却难以实践。其核心在于缺乏从知识到技能的转化路径,即如何将抽象语法与具体问题解决相结合。理解计算机底层原理,如内存管理、指针操作,是掌握C语言的关键,这不仅是语法学习,更是对计算机工作方式的深度认知。通过项目驱动学习,将变量、数组、函数、指针等知识点融入实际应用场景,如开发通讯录、成绩管理系统等,能有效打破知识孤岛,实现技能内化。结合调试工具与环境配置,如GDB调试器和命令行编译,可提升工程实践能力。本文以C语言为例,系统拆解如何通过重构学习路径,将编

weixin_33871366的博客 370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

AI代码隐写术检测与防御:从原理到工程实践

隐写术是一种将信息隐藏于普通载体中的技术,与加密不同,其核心在于隐蔽而非保护。在软件工程领域,文本隐写可通过格式微调、Unicode字符替换等手法实现,尤其在AI生成的代码中,模型的黑盒特性为隐蔽标记提供了可能。这项技术的工程价值在于数据溯源与版权保护,但若被滥用,则会引发严重的安全与信任危机。其典型应用场景包括代码水印、软件指纹和隐蔽通信。针对近期关于AI生成代码可能携带隐写标记的讨论,开发者需掌握从基础字符检查到统计模式分析的多层次检测方法,并构建包含强制格式化、CI/CD集成扫描的防御性编码流程,以应

weixin_34306593的博客 406

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Claude Mythos:通用AI模型如何重构漏洞挖掘与红队实践

大语言模型正从代码生成工具演进为具备深度系统理解与自主推理能力的安全智能体。其核心在于对程序语义、内存布局与权限逻辑的底层建模能力,而非传统规则匹配或模糊测试的简单延伸。这种基于语义推理的漏洞发现范式,显著提升了在SWE-bench Pro、CyberGym等真实软件与网络环境基准上的任务完成率与攻击链稳定性。技术价值体现在将原本依赖专家经验的逆向分析、多跳渗透压缩为可控API调用,推动安全能力从‘人工驱动’转向‘AI协同’。典型应用场景覆盖开源项目补丁生成、企业内网红队演练及老旧系统影子审计。Claude

weixin_33908217的博客 356

Claude Mythos:AI驱动的全栈自动化渗透与对齐安全新范式

AI安全正从规则匹配、人工研判迈向基于因果推理与系统建模的自主攻防新阶段。以Claude Mythos为代表的新型AI安全模型,融合符号执行、跨模块数据流分析与强化学习驱动的工具调用,在SWE-bench Pro、CyberGym等真实维护与对抗场景中展现出远超传统模型的漏洞发现与利用链生成能力。其技术价值不仅在于零日漏洞挖掘效率跃升,更在于将‘AI对齐’具象为可嵌入CI/CD、实时约束推理路径的工程实践。典型应用场景覆盖老旧系统审计、红蓝对抗增强、内核级漏洞预见及沙箱边界探索,标志着AI从辅助工具升级为具

一个2年工作经验的程序测试员 321
上一篇: CTFshow命令执行(55-71)
下一篇: 习题爱抚瘦(ctfshow)胖(Pwn)栈溢出36-44
阿斯顿法国红酒快
博客等级 码龄5年 154粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值