Binary Note
PWN & RE方向介绍
PWN
Pwn类题目重点考察选手对于二进制漏洞的挖掘和利用能力,其考点也通常在堆栈溢出、格式化漏洞、UAF、Double Free等常见二进制漏洞上。选手需要根据题目中给出的二进制可执行文件进行逆向分析,找出其中的漏洞并进行利用,编写对应的漏洞攻击脚本(Exploit),进而对主办方给出的远程服务器进行攻击并获取flag
RE
涉及Windows、Linux、Android平台的多种编程技术,要求利用常用工具对源代码及二进制文件进行逆向分析,掌握Android移动应用APK文件的逆向分析,掌握加解密、内核编程、算法、反调试和代码混淆技术
Re类题目考察选手逆向工程能力。题目会给出一个可执行二进制文件,有些时候也可能Android的APK安装包。选手需要逆向给出的程序,分析其程序工作原理。最终根据程序行为等获得flag。
PWN&RE基础知识
c、python、汇编、Linux、数据结构和算法
RE(逆向工程)入门
1.什么是逆向工程
REer在比赛中的作用
- CTF线上赛: RE全部、PWN题目的逻辑还原、Crypto部分
- AWD攻防线下赛: 捕捉流量包发现程序漏洞,进行相应的修补
CTF中的Reverse:
- 大型软件的小部分逻辑提炼
- 不同平台(ARM,windows,ios,安卓)下软件的小部分逻辑提炼
- 对于热补丁等技术手段的还原
- 病毒程序的原理日志的复现
学习基础
- 熟悉如操作系统,汇编语言,加解密等相关知识
- 具有丰富的多种高级语言的编程经验
- 熟悉多种编译器的编译原理
- 较强的程序理解和逆向分析能力
RE做题步骤
- 研究程序的保护方法:如代码混淆,保护壳及反调试等技术,并设法破除或绕过保护
- 查看题目文件:先看一下题目程序的内容和结构:弹出一个图片,图片不能移动或修改一般在这一步获取到题目是否输出字符串?是否有check?有无提示?如果是游戏题是否可以直接玩出来?
有无出题人联系方式? - 静态分析:反汇编目标软件,快速定位到关键代码进行分析,结合动态调试,验证自己的初期猜想,在分析的过程中理清程序功能,针对程序功能,根据正向算法推理逆向算法,写出对应脚本,求解出 flag
一些tips
- 七分逆向三分猜: 合理的猜测往往能事半功倍,遇到可疑函数却看不清里面的逻辑,不妨根据其中的蛛丝马迹猜测其功能,并依据猜测继续向下分析,在不断的猜测验证中,或许能帮助我们更加接近代码的真相。
- 区分代码: 拿到反汇编代码,必须能区分哪些代码是人为编写的,而哪些是编译器自动附加的代码。人为编写的代码中,又有哪些是库函数代码,哪些才是出题人自写的代码,出题人的代码又经过编译器怎样的优化?我们无须花费时间在出题人以外的代码上,这很重要。如果当我们分析半天还在库函数里乱转,那不仅体验极差,也没有丝毫效果。
- 耐心: 无论如何,给予足够的时间,总是能将一个程序分析地透彻。但是也不应该过早地放弃分析。相信自己肯定能在抽茁剥丝的过程中突破问题。
2.静态调试入门
IDA的使用
- 32位程序用IDA Pro(32 bit),64位程序用IDA Pro(64 bit)
- IDA View图形结构窗口:该窗口下可以了解函数跳转关系及函数调用关系
- IDA View文本结构界面:窗口中显示的是具体的底层汇编实现
- ACD键:对数据使用,分别可以令数据以字符串、代码、数据形式显示
- G键:按下后在弹出的窗口输入地址可以跳转至相应位置
- N键:当分析清楚某函数功能时,为方便可将改函数重命名
- H键:转换为16进制
- ;键:添加注释
- 交叉引用:View – >Open subviews – >Cross references,查看引用当前函数的函数ctrl+X
- shift+F12: 查看所有字符串窗口,在这个窗口一般可以找到关键信息
- F5: 将当前函数的汇编代码反汇编成伪C代码
- Alt+T: 搜索,Ctrl+T找到下一个匹配项。
- ALT+B: 搜索opcode(二进制数据),搜索16进制
- ···更多查看这篇《工具使用-IDA从入门到理解》
3.动态调试入门
Ollydbg的使用
4.学习逆向工程相关
- 静态: 一边做RE题目一边学习,计算机组成原理、操作系统、数据结构、汇编语言相关知识等等
- 动态调试:crackme 160汇编纯逻辑题目
- 拓展: 尝试跟着分析博客去破解经典的单机游戏
PWN(二进制漏洞)入门
认识PWN
CTF中的PWN是在linux环境下通过对目标文件(c语言程序)漏洞的分析,利用工具来getshell的一个过程
- Exploit: 用于漏洞利用,攻击脚本
- Rop: 常指rop链,用于攻击目标程序
- payload: 攻击载荷,是对目标进程被劫持控制流的数据
- Getshell: Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
学习路径
RE做题过程零散笔记
工具使用相关
IDA
- shift+E:提取数据
markdown语法
- 折叠代码块:
summary后写折叠后显示的标题,同时注意代码前后各空一行
Android逆向
大小端序
- 大端序: 高位存放在低地址,低位存放在高地址。数据字节位随着内存地址的增长而减小。正常的存储模式,便于数据类型的符号判断,因为最低地址位数据即为符号位,可以直接判断数据的正负号。
- 小端序: 高位存放在高地址,低位存放在低地址。数据字节位随着内存地址的增长而增长。将数字逆序存储。强制转换数据不需要调整字节内容。做数值四则运算时从低位每次取出相应字节运算,最后直到高位,并且最终把符号位刷新,这样的运算方式会更高效。
- 字符串数字等在x86内存中是反向存放的,如果用地址来取的话要反向,如果用数组下标来取的话才是正向。
可执行文件
PE文件
种类 | 主扩展名 |
---|---|
可执行系列 | EXE、XER |
库系列 | DLL、OCX、CPL、DRV |
驱动程序系列 | SYS、VXD |
对象文件系列 | OBJ |
本文来自博客园,作者:{Tree_24},转载请注明原文链接:{https://www.cnblogs.com/Tree-24/}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南