Binary Note

PWN & RE方向介绍

PWN

Pwn类题目重点考察选手对于二进制漏洞的挖掘和利用能力,其考点也通常在堆栈溢出、格式化漏洞、UAF、Double Free等常见二进制漏洞上。选手需要根据题目中给出的二进制可执行文件进行逆向分析,找出其中的漏洞并进行利用,编写对应的漏洞攻击脚本(Exploit),进而对主办方给出的远程服务器进行攻击并获取flag


RE

涉及Windows、Linux、Android平台的多种编程技术,要求利用常用工具对源代码及二进制文件进行逆向分析,掌握Android移动应用APK文件的逆向分析,掌握加解密、内核编程、算法、反调试和代码混淆技术
Re类题目考察选手逆向工程能力。题目会给出一个可执行二进制文件,有些时候也可能Android的APK安装包。选手需要逆向给出的程序,分析其程序工作原理。最终根据程序行为等获得flag。
image.png

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的使用

这篇很详细
Ollydbg下载

4.学习逆向工程相关

  • 静态: 一边做RE题目一边学习,计算机组成原理、操作系统、数据结构、汇编语言相关知识等等
  • 动态调试:crackme 160汇编纯逻辑题目
  • 拓展: 尝试跟着分析博客去破解经典的单机游戏

PWN(二进制漏洞)入门

认识PWN

CTF中的PWN是在linux环境下通过对目标文件(c语言程序)漏洞的分析,利用工具来getshell的一个过程

  • Exploit: 用于漏洞利用,攻击脚本
  • Rop: 常指rop链,用于攻击目标程序
  • payload: 攻击载荷,是对目标进程被劫持控制流的数据
  • Getshell: Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行

学习路径

RE做题过程零散笔记

工具使用相关

IDA

  • shift+E:提取数据

markdown语法

  • 折叠代码块:img
    summary后写折叠后显示的标题,同时注意代码前后各空一行

Android逆向

APKIDE
Java环境搭建与配置

大小端序

  • 大端序: 高位存放在低地址,低位存放在高地址。数据字节位随着内存地址的增长而减小。正常的存储模式,便于数据类型的符号判断,因为最低地址位数据即为符号位,可以直接判断数据的正负号。
  • 小端序: 高位存放在高地址,低位存放在低地址。数据字节位随着内存地址的增长而增长。将数字逆序存储。强制转换数据不需要调整字节内容。做数值四则运算时从低位每次取出相应字节运算,最后直到高位,并且最终把符号位刷新,这样的运算方式会更高效。
  • 字符串数字等在x86内存中是反向存放的,如果用地址来取的话要反向,如果用数组下标来取的话才是正向。

可执行文件

PE文件

种类 主扩展名
可执行系列 EXE、XER
库系列 DLL、OCX、CPL、DRV
驱动程序系列 SYS、VXD
对象文件系列 OBJ
posted @ 2023-01-11 21:55  Tree_24  阅读(26)  评论(0编辑  收藏  举报