【AIGC】逆向入门第二课:静态读代码,动态改流程,以及 NOP 一条指令为什么要填满剩余空间

这一讲的位置 上一讲把字节、位数、壳这些东西钉死了。这一讲开始真的拆代码:静态怎么读,动态怎么改。 配套的两个小工程(异或链的加密原版和逆推版)在 r4-reverse-course,那节课就是拿它们演示的。 一、先把"逆向"和"PWN"的边界说清楚 两个都是搞二进制的,为什么要分家? 区别在你能不能碰到那份代码。 逆向:代码在你本地运行。你能读它、能改它、能单步它、能把它 dump 下来。所以 flag 一定藏在程序里面——你把整个代码分析透了,flag 就在你手里。 PWN:代码在服务器上,你碰不到。你把程序整个打穿、源代码分析得再透,也拿不到 flag;你得把服务打下来、拿到权限,去读服务器上的文件。 这个边界一旦立住,很多东西就顺了:为什么逆向要学调试器(因为程序在你手里)、为什么 PWN 不太需要静态读通业务逻辑(因为攻击面在输入而不是在算法)、为什么"能不能本地调试"是判断这两类题目的第一直觉。 顺带一个应用面上的差别:逆向的能力会直接用在注册机、勒索病毒解密工具这类事情上——因为那些东西的算法就在本地,是可以反推的。 二、异或的双向可逆,就是解题引擎 拿到一道"输入 flag → 变成看不懂的东西 → 比对"的题,第一件事不是看它加密得多复杂,而是确认它用的是不是异或。 ...