笔记:逆向002.zip
练习:01 分析实例(课堂练习).zip

第一天内容复习

一、逆向的目的是什么

  • 分析逻辑和数据结构(游戏分析)
  • 为一个没有源码的程序添加功能或修复漏洞(打补丁)

二、逆向的岗位有哪一些

  • 逆向破解程序。(没有岗位)
  • 逆向分析恶意代码(安全研究员)
  • 协议分析 ———— 密码学、移动端
  • 二进制代码审计(漏洞利用\挖掘)
  • 竞品分析 ———— 分析友商的程序,重现或者写出更厉害的功能
  • 游戏安全、免杀、内核安全

三、安全工具的使用

  • 十六进制编辑器: 010Editor WinHex UE
  • PE 工具: LORDPE PEID EXEINFO DIE | Depends | Resource Hacker
  • 抓包工具 : WarkShark(内核) WSExplorer(应用层 Socket API HOOK )
  • 行为监控: 火绒剑(看进程行为,进程树, 文件操作,注册表操作,内核信息查看)
  • ARK:用于检测拥有较高权限且能够隐藏自身的木马程序的工具
    • PCHUNTER 火绒剑(常见的 ARK 工具都被加了特征码)
  • 数据搜索工具: CE,通常用于分析游戏的数据和相关的操作

OllyDbg的使用

一、使用OD调试程序的几种方式

  1. 在菜单栏点击 -> 文件 -> 打开调试目标程序,可以设置命令行参数 ```cpp

    include

// main 函数的另外一种接收命令行参数的标准写法 int main(int argc, char* argv[]) { // 第一个参数就是当前应用程序的路径,其余的附加参数保存在后面 for (int i = 0; i < argc; ++i) printf(“[%d]: %s\n”, i, argv[i]);

  1. return 0;

} ```

  1. 通过菜单 -> 文件 -> 附加,附加到一个正在运行的程序上。
  2. 将 OllyDbg 设置为当前操作系统的实时调试器(程序崩溃时的默认调试器)。
    1. 通过菜单 -> 设置 -> 实时调试器 -> 将OllyDbg 设置为实时调试器。
  3. 最常见的是使用发送到将应用程序交给 OD 进行调试。在文件管理器输入 shell:sendto
  4. DLL调试,OD 的根目录下存在一个叫做 LoadDll.exe 的文件,当将一个 DLL 拖拽到 OD 中时,就会使用这个exe加载 DLL 文件,并且自动断到 dllMain 处,再进行调试.[操作系统提供了一个类似的 exe 叫做 rundll32.exe 经常会被恶意程序进行白利用].

    二、认识OD的界面

OD主界面中的工具栏

image-20191217144852305.png

L:日志窗口,查看调试过程中的信息

image-20191217145119084.png

E:模块窗口,保存了模块相关的信息

image-20191217145347273.png

M:应用程序的内存布局窗口,通常查看区段信息

image-20191217145704650.png

T:线程信息窗口,可以操作线程

image-20191217145915357.png

W:窗口信息,可以获取窗口的标题等,方便进行逆向分析

image-20191217150336110.png

H:内核句柄窗口,没什么使用意义

image-20191217150516133.png

C:CPU窗口,显示指令和内存等,是调试的主窗口

image-20191217150940212.png

/:补丁窗口,显示当前所有对应用的修改

20191217-OD工具 - 图12image-20191217151329202.png

K :调用堆栈,逆向的时候使用的非常多,用于进行栈回溯查找关键代码image-20191217151652384.png

B:断点窗口,可以查看和操作断点

20191217-OD工具 - 图15image-20191217151840203.png

R: 查找参考,查找当前的指令被哪一些地方调用了,在IDA中叫做(交叉引用)

image-20191217152051149.png

… : RUN跟踪,脱壳的时候会用到,会模拟执行并记录每一行代码的执行结果

三、OD提供的相关功能

查看内存信息 - 支持两种编码

20191217-OD工具 - 图18image-20191217154439554.png

通过数据窗口查看函数地址和名称

image-20191217154645261.png

指定PE文件,主要用于查看内存中的PE文件(没有对应磁盘文件的),用于DUMP

https://www.freebuf.com/articles/system/86596.html
image-20191217154954716.png

通过在内存窗口双击PE文件头也可以解析一个PE文件image-20191217155050032.png

查找数据: 查找名称(导入导出函数)image-20191217155317117.png

查找指令(序列): 通过 ctrl+s ctrl+f ctrl+L

image-20191217155513785.png

二进制查找: 用于查找特征值

image-20191217155703961.png

查找模块间的调用

image-20191217155914280.png

查找用户定义的注释. 用户的注释不应该写在堆空间

image-20191217160115723.png

OD 提供的自动分析功能 - 汇编代码界面,如果没有自动识别,应该通过 ctrl+a 进行识别

image-20191217160859724.png

OD 提供的自动分析功能 -堆栈界面

image-20191217161547276.png

对应用程序执行修改之后,可以通过菜单中的补丁功能保存修改

image-20191217164144005.png

假定参数: 使用假定参数设置消息断点

image-20191217165211437.png
20191217-OD工具 - 图32image-20191217165316689.pngimage-20191217165605366.png

OD快捷键

1.调试操作

F2 设置软件断点
F3 打开调试
F4 运行到光标处
F7 单步步入
F8 单步步过
F9 运行
Ctrl+F2 重新开始调试
Ctrl+F7 自动步入、运行到OEP
Ctrl+F8 自动步过
Ctrl+F9 运行到返回
Ctrl+F11 跟踪步入
Ctrl+A 分析模块
Ctrl+* 修改 EIP 为选中地址
Ctrl+“+” 调整到前一个函数
Ctrl+ “-” 跳到下一个函数开始处
Alt+F2 关闭调试进程
Alt+F9 执行到用户代码
Shift+F2 设置条件断点

2.代码、数据操作

空格 修改汇编指令
回车 进入 CALL 或 jmp 或 jcc
+下一步
-返回上一步
: 标签
; 注释

3.功能窗口操作

Ctrl+B 查找二进制数据
Ctrl+E 修改内存
Ctrl+F 打开命令搜索窗口(单个命令)
Ctrl+G 打开跳转窗口
Ctrl+S 打开命令序列搜索窗口
Ctrl+T 设置条件

4.信息窗口操作

Ctrl+N 查看导入导出信息
Alt+C 显示 CPU 信息(反汇编、寄存器、 …)
Alt+B 显示断点列表
Alt+E 查看模块
Alt+K 打开调用堆栈窗口
Alt+L 打开记录窗口(日志)
Alt+M 显示内存布局
Alt+o 调试选项
Alt+X 关闭 OD
F10 打开当前窗口快捷键菜单

分析程序的方法

  • 字符串搜索找到关键点
  • 通过关键函数进行栈回溯找到关键点