逆向入门

逆向学习笔记

基本内容

1. 前置知识

  • C、 C++语言
  • x86汇编语言
  • 少量的组成原理、编译原理等方面知识
  • 少量Python类脚本语言编程
  • 部分密码算法知识
    • 熟悉Base64编码
    • 熟悉MD5,SHA1等hash算法
    • 熟悉DES、AES、RC4、TEA等分组加密算法
    • 熟悉RSA等非对称加密算法
    • 了解数字签名、SSL/TLS等密码算法的相关应用

1.1 学习内容

1.2 学习目标

  • 用C语言编写一个程序,使用openssl加密库,来对指定目录下的所有文件进行加密。
  • 《逆向工程核心原理》、《加密与解密(第四版)》相关例程都要掌握。

2. 汇编与反汇编知识

2.1 学习内容

  • 熟悉常见x86汇编指令
  • 熟悉函数调用约定
  • 熟悉函数调用栈
  • IDA工具的使用
  • IDA插件编写方法

2.2 学习目标

  1. 编程实现5个C、C++程序,包括文件操作、socket操作、进程操作、注册表操作,用IDA对程序进行反汇编处理,从反汇编代码中找出自己写的函数,理解反汇编代码指令功能(对照着c源码)。
  2. 撰写一篇关于函数调用约定和函数调用栈的笔记,能够对照反汇编实例,理解函数调用过程。

3. 可执行文件结构

3.1 PE文件结构

学习内容
  • 参考《逆向工程核心原理》关于PE文件的内容
  • 详细理解PE文件格式
  • 学习LordPE、PEStudio等PE解析器的使用方法
  • 学习ELF文件格式。ELE是Linux下的可执行文件格式,与PE类似,可参考https://blog.csdn.net/mergerly/article/details/94585901
学习目标
  1. 编写一个PE文件解析器,能够解析并输出PE文件主要内容。
  2. 编写一个ELF文件解析器,能够解析并输出ELF文件主要内容。

3.2 PE文件感染

学习内容
  • PE感染示例代码
学习目标
  1. 编写一个PE文件感染代码,通过添加节的方式,实现PE文件的感染,执行PE文件的时候,能够弹出一个计算器。

4. 调试与反调试

4.1 动态调试

学习内容
  • 学习OllyDBG调试工具的使用方法,自行百度资料
  • 学习WinDBG调试工具的使用方法,自行百度资料
学习目标
  1. 会使用OllyDBG对程序进行逆向调试,实现程序注册码破解
  2. 用OllyDBG对给定的三个PE文件进行动态调试,撰写调试分析报告

4.2 反调试方法

学习内容
学习目标
  1. 编写一个程序,使其具备反调试功能,并使用调试器检验反调试效果

5.加壳与脱壳

学习内容

  • 加壳的原理与方法
  • 脱壳的原理与方法
  • 了解虚拟机壳的原理
  • 相关内容可参考《加密与解密》

学习目标

  1. 编写一个简单的PE文件加壳工具
  2. 对5个加壳程序进行脱壳处理

6. 代码混淆与去混淆

学习内容

学习目标

  1. 编写一个自动化的代码混淆工具
  2. 对三个混淆程序进行反混淆处理

其他参考资料

其他语言逆向

Java

C#

Go

  • Go二进制文件逆向分析从基础到进阶——综述 - 安全客,安全资讯平台 (anquanke.com)

Python

Lua

Android

swf

其他资源

在线资源

  • 看雪论坛
  • 吾爱破解

CTF比赛

  • 看雪CTF,每季度一次
  • CTF等
  • 其他,几乎每周都有CTF比赛

常用工具

反汇编与反编译

  • IDA Pro(重点)
  • Ghidra
  • Jeb(安卓)

调试工具

工具 操作系统 处理器 内核 备注
OD Windows 32 不支持
x64Dbg Windows 32、64 不支持
Windbg Windows 32、64 支持
GDB Linux 32、64 支持

文件结构查看工具

文件查看工具

  • peview
  • peid
  • PEStudy
  • HackResource(PE文件资源)
  • readelf

二进制编辑工具

  • 010editor

IDA Pro

常用操作

IDAPython 脚本

插件

OD

常用操作

WinDbg

超级推荐WinDbg 10的TTD模式

配置

命令

GDB

命令

插件

  • peda
  • gef
posted @ 2023-10-05 22:28  ONE_ZJ  阅读(140)  评论(0编辑  收藏  举报