《2022年反汇编的艺术 .pdf》由会员分享,可在线阅读,更多相关《2022年反汇编的艺术 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1/12反 汇 编 的 艺 术-逆向引 擎 网络 教程 2003年 11 月 18 日 ALPHA RELEASE 目 录1 前言2 反汇编器的框架2.1 什么我们需要一个反汇编器2.2 我们需要什么工具2.3 构造一个简单的框架2.4 在代码中的一些改变2.4.1 Skeleton.INC 2.4.2 Skeleton.asm 2.5 总结2.6 下一章简介3 给框架带来一点活力3.1 处理我们的菜单源代码3.1.1 处理我们的DlgProc 代码3.1.2 打开 菜单名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -2/123.1.3 关闭 菜单3.1.4 离开 菜
2、单3.2 总结3.3 下一章简介4 ListView 4.1 什么是 ListView 控件4.2 使用 ListView 控件4.3 总结4.4 下一章简介5 PE 旅程5.1 什么是 PE 5.2 理解 PE 5.2.1 DOS MZ HEADER(IMAGE_DOS_HEADER)5.2.2 DOS STUB 5.2.3 PE FILE SIGNATURE 5.2.4 PE HEADER(IMAGE_NT_HEADERS)5.3 检查是否是有效PE文件5.4 获取 PE的块5.5 什么是 EP 5.6 获取 EP 5.7 转换 RVA 到 Offset 5.8 什么是引入表5.8.1 引
3、入表的意义名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -3/125.8.2 我们如何能找到引入表5.8.3 这就是引入表 5.9 获取 PE的引入表5.10 总结5.11 下一章简介6 Opcodes的介绍6.1 什么是 Opcodes 6.2 熟悉 Opcodes 6.3 一个 Opcode意味着一个助记符号吗6.4 更多了解 Opcodes 6.5 Intel 指令格式的介绍 6.5.1 Prefix(可选)6.5.2 Code (必须)6.5.3 ModR/M(00:000:000b)6.5.4 SIB 6.5.5 Displacement 6.5.6 Imm
4、ediate 6.6 总结6.7 下一章简介7.关于 Prefix的一切7.1 更多了解 Prefix 7.2 控制段的 Prefix 7.3 控制操作数大小的 Prefix 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -4/127.3.1 选择默认操作大小的意义7.4 控制地址大小的 Prefix 7.5 控制循环(REP/REPNE)的 Prefix 7.6 控制总线锁定的 Prefix 7.7 总结7.8 下一章简介8 关于 CODE 的一切(一)8.1 CODE 块的基础8.2 总结8.3 下一章简介9 关于 CODE 的一切(二)9.1 演示 CODE 9
5、.2 总结9.3 下一章简介10 关于 ModR/M的一切10.0.1 什么时候考虑Code的扩展10.0.2 什么时候考虑寄存器10.0.3 更多了解 ModR/M 10.1 演示我们的工具10.2 查看关于 ModR/M Byte 位的例子10.3 总结10.4 下一章简介名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -5/1211 关于 SIB 的一切11.1 SIB 代表什么 11.2 演示我们的工具 11.3 总结11.4 下一章简介12 关于 Displacement的一切 12.1 总结12.2 下一章简介13 关于 Immediate的一切13.1 B
6、it(S):一个新的特别的Bit位13.2 总结13.3 下一章简介14 Intel 指令格式的总结14.1 ModRM 16-Bit 14.2 总结14.3 下一章简介15 构造一个解码的引擎框架15.1 在开始之前15.2 构造一个 Byte 分析程序15.2.1 理解旧的代码名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -6/1215.3 一个真正的引擎框架的想法15.4 总结15.5 下一章简介名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -7/121 前言欢迎来到反汇编的艺术一本用纯汇编写反汇编器的免费在线书。你可能注意到这本书没有
7、完成。现在的状态是ALPHA。所以请容忍我们。我们现在包含的14 章提供你理解反汇编器如何工作的基本知识。我们努力完成这本书但是你要给我们时间。所以在一切完成之前有问题请不要联系我们。我们还为每一章提供了一个小代码包,你可以使用这些代码。这本手册主要是CUTEDEVIL 写的,检查错误的是PEGASUSREN和 BEN。这本书将一直免费没有意图将它商业化。如果你有任何建议和意见不要客气和我们联系通过逆向代码引擎社区的论坛HTTP:/board.anticrack.de最后的版本将指向http:/aod.anticrack.de为什么我们要做这个工程。我不知道?增长知识,乐趣,浪费时间。为什么你
8、对写一个反汇编器感兴趣。2 反汇编器的框架2.1 什么我们需要一个反汇编器如果你见过任何一个图形界面的反汇编器(IDA,W32DASM,BDASM。)我们将很快的注意到这些反汇编器结构的主要部分:菜单:使用主要的功能(文件句柄,查看,寻找。)LISTVIEW:主要的查看区,显示(OPCODES,助记符,注释。)还有其他的我们需要的组成部分:工具栏:更方便快捷的使用主要的功能LISTVIEW:显示重大的事件结果(打开,检查,反汇编以及其他关于目标文件的信息)2.2 我们需要什么工具在以前提及,我们将使用RADASM 和 MASM 7 作为我们的IDE 和编程语言。名师资料总结-精品资料欢迎下载-
9、名师精心整理-第 7 页,共 12 页 -8/122.3 构造一个简单的框架OK,现在让我们开始吧。这里是我们要做的事情:从 RadAsm 打开工程向导选取新工程接受默认设置(汇编器为MASM,工程类型为Win32 App)填写工程名字(Skeleton)填写工程说明(Simple Skeleton)选择工程的存放文件夹选取模板(Dialog application-DialogApp.tpl)我们按”NEXT”,接受默认选项现在已经包含了所有需要的文件,让我们编译并运行它。图 2.1:编译运行后的空白程序现在,在”Resources”部分,我们打开”Skeleton.dlg”做一些必要的改变
10、。改变窗口大小为(600 x600)改变窗口名字为IDD_MAIN 禁止最大化(MaxButton)禁止可变窗体(SizeBorders)编译、运行名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -9/12OK,现在对话框比较适合。让我们加一些必须资源,为了达到目的,我们必须一步一步做:添加菜单,我们添加一个新的菜单到工程(Main.mnu),出现菜单编辑器(MENU EDITOR),我们编辑它使我们能得到一个菜单目录(File-Open/Close/Exit):#define IDR_MENU 10000#define IDM_FILE 10001#define ID
11、M_OPEN 10002#define IDM_CLOSE 10003#define IDM_EXIT 10004 IDR_MENU MENU BEGIN POPUP&File BEGIN MENUITEM OpentCtrl+O,IDM_OPEN MENUITEM Close,IDM_CLOSE MENUITEM ExittAlt+X,IDM_EXIT END END 从“IDD_MAIN”选项卡中选取“Main.mnu”作为默认菜单。我们在反汇编显示器添加一个LISTVIEW控件我们在底部添加一个LISTBOX以方便显示所发生的重要事件。我们再次编译、允许。名师资料总结-精品资料欢迎下载-
12、名师精心整理-第 9 页,共 12 页 -10/12图 2:重新调整后的空白程序虽然我们做的第一部分,它看起来并不是很好,下一次我们再让它更好看一些。2.4 在代码中的一些改变2.4.1 Skeleton.INC.const IDC_DASM equ 1001.data?hDsmList dd?ListView控件的句柄hWnd dd?主窗口的句柄IDC_DASM 是 ListView控件的常量定义。我们需要这个常量当我们需要用GetGlgItem 函数获取ListView的句柄时使用。HDsmList 保存 ListView控件的句柄。HWnd 保存主窗口的句柄。同样我们需要它们。2.4.2
13、Skeleton.asm 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 12 页 -11/12.code PrepareListView proc;-;预备 ListView控件并且改变它的颜色和属性;-;Invoke GetDlgItem,hWnd,IDC_DASM;获取 ListView控件的句柄mov hDsmList,eax invoke SendMessage,hDsmList,LVM_SETTEXTCOLOR,0,0FE7000h;Sets its color invoke SendMessage,hDsmList,LVM_SETEXTENDEDLISTVIEWS
14、TYLE,0,;Sets its style LVS_EX_FULLROWSELECT or LVS_EX_GRIDLINES+LVS_EX_FLATSB ret PrepareListView endp 这个子程序主要是设定ListView控件的属性为我们反汇编器所需要的和设定它的背景颜色。我们将不注意这些不同之处在我们插入一些文字到ListView控件当中去。当然那是其他的事情,在其他章节。注意:我们也要添加下面这些代码,来调用我们的代码在程序的开始处(程序初始化的时候).if eax=WM_INITDIALOG invoke PrepareListView;预备初始化ListView.elseif eax=WM_COMMAND 2.5 总结名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 12 页 -12/12在这一章我们没有真正的开始,我们只是预热一些,准备我们反汇编器工程的漫长旅程。2.6 下一章简介我们将:写菜单处理代码知道如何(打开、映射、处理、关闭)文件学习如何让ListView工作的例子还有更多。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 12 页 -