图书介绍

逆向工程核心原理2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

逆向工程核心原理
  • (韩)李承远著;武传海译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:9787115350183
  • 出版时间:2014
  • 标注页数:680页
  • 文件大小:137MB
  • 文件页数:699页
  • 主题词:软件工程

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

逆向工程核心原理PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第一部分 代码逆向技术基础2

第1章 关于逆向工程2

1.1 逆向工程2

1.2 代码逆向工程2

1.2.1 逆向分析法2

1.2.2 源代码、十六进制代码、汇编代码4

1.2.3 “打补丁”与“破解”5

1.3 代码逆向准备5

1.3.1 目标5

1.3.2 激情6

1.3.3 谷歌6

1.4 学习逆向分析技术的禁忌6

1.4.1 贪心6

1.4.2 急躁7

1.5 逆向分析技术的乐趣7

第2章 逆向分析Hello Wo rld!程序8

2.1 Hello World!程序8

2.2 调试HelloWorld.exe程序9

2.2.1 调试目标9

2.2.2 开始调试9

2.2.3 入口点10

2.2.4 跟踪40270C函数10

2.2.5 跟踪40104F跳转语句12

2.2.6 查找main()函数12

2.3 进一步熟悉调试器14

2.3.1 调试器指令14

2.3.2 “大本营”15

2.3.3 设置“大本营”的四种方法15

2.4 快速查找指定代码的四种方法17

2.4.1 代码执行法18

2.4.2 字符串检索法19

2.4.3 API检索法(1):在调用代码中设置断点20

2.4.4 API检索法(2):在API代码中设置断点21

2.5 使用“打补丁”方式修改“Hello World!”字符串23

2.5.1 “打补丁”23

2.5.2 修改字符串的两种方法24

2.6 小结28

第3章 小端序标记法31

3.1 字节序31

3.1.1 大端序与小端序32

3.1.2 在OllyDbg中查看小端序32

第4章 IA-32寄存器基本讲解34

4.1 什么是CPU寄存器34

4.2 IA-32寄存器34

4.3 小结40

第5章 栈41

5.1 栈41

5.1.1 栈的特征41

5.1.2 栈操作示例41

第6章 分析abex'crackme#144

6.1 abex'crackme #144

6.1.1 开始调试45

6.1.2 分析代码45

6.2 破解47

6.3 将参数压入栈47

6.4 小结48

第7章 栈帧49

7.1 栈帧49

7.2 调试示例:stackframe.exe49

7.2.1 StackFrame.cpp50

7.2.2 开始执行main()函数&生成栈帧51

7.2.3 设置局部变量52

7.2.4 add()函数参数传递与调用53

7.2.5 开始执行add()函数&生成栈帧54

7.2.6 设置add()函数的局部变量(x,y)55

7.2.7 ADD运算55

7.2.8 删除函数add()的栈帧&函数执行完毕(返回)56

7.2.9 从栈中删除函数add()的参数(整理栈)57

7.2.10 调用printf()函数58

7.2.11 设置返回值58

7.2.12 删除栈帧&main()函数终止58

7.3 设置OllyDbg选项59

7.3.1 Disasm选项59

7.3.2 Analysis1选项60

7.4 小结61

第8章 abex'crackme #262

8.1 运行abex'crackme #262

8.2 Visual Basic文件的特征63

8.2.1 VB专用引擎63

8.2.2 本地代码和伪代码63

8.2.3 事件处理程序63

8.2.4 未文档化的结构体63

8.3 开始调试63

8.3.1 间接调用64

8.3.2 RT_MainStruct结构体64

8.3.3 ThunRTMain()函数65

8.4 分析crackme65

8.4.1 检索字符串65

8.4.2 查找字符串地址66

8.4.3 生成Serial的算法68

8.4.4 预测代码69

8.4.5 读取Name字符串的代码69

8.4.6 加密循环70

8.4.7 加密方法70

8.5 小结72

第9章 Process Explorer——最优秀的进程管理工具74

9.1 Process Explorer74

9.2 具体有哪些优点呢75

9.3 sysinternals75

第10章 函数调用约定76

10.1 函数调用约定76

10.1.1 cdecl76

10.1.2 stdcall77

10.1.3 fastcall78

第11章 视频讲座79

11.1 运行79

11.2 分析79

11.2.1 目标(1):去除消息框79

11.2.2 打补丁(1):去除消息框81

11.2.3 目标(2):查找注册码83

11.3 小结85

第12章 究竟应当如何学习代码逆向分析86

12.1 逆向工程86

12.1.1 任何学习都应当有目标86

12.1.2 拥有积极心态86

12.1.3 要感受其中的乐趣86

12.1.4 让检索成为日常生活的一部分87

12.1.5 最重要的是实践87

12.1.6 请保持平和的心态87

第二部分 PE文件格式90

第13章 PE文件格式90

13.1 介绍90

13.2 PE文件格式90

13.2.1 基本结构91

13.2.2 VA&RVA92

13.3 PE头92

13.3.1 DOS头93

13.3.2 DOS存根94

13.3.3 NT头94

13.3.4 NT头:文件头95

13.3.5 NT头:可选头97

13.3.6 节区头101

13.4 RVA to RAW104

13.5 IAT105

13.5.1 DLL105

13.5.2 IMAGE_IMPORT_DESCRIPTOR107

13.5.3 使用notepad.exe练习108

13.6 EAT112

13.6.1 IMAGE_EXPORT_DIRECTORy113

13.6.2 使用kernel32.dl1练习114

13.7 高级PE116

13.7.1 PEView.exe116

13.7.2 Patched PE117

13.8 小结118

第14章 运行时压缩121

14.1 数据压缩121

14.1.1 无损压缩121

14.1.2 有损压缩121

14.2 运行时压缩器122

14.2.1 压缩器122

14.2.2 保护器123

14.3 运行时压缩测试123

第15章 调试UPX压缩的notepad程序127

15.1 notepad.exe的EP代码127

15.2 notep ad_upx.exe的EP代码127

15.3 跟踪UPX文件129

15.3.1 OllyDbg的跟踪命令129

15.3.2 循环#1129

15.3.3 循环#2130

15.3.4 循环#3131

15.3.5 循环#4131

15.4 快速查找UPX OEP的方法132

15.4.1 在POPAD指令后的JMP指令处设置断点132

15.4.2 在栈中设置硬件断点133

15.5 小结133

第16章 基址重定位表135

16.1 PE重定位135

16.1.1 DLL/SYS135

16.1.2 EXE136

16.2 PE重定位时执行的操作136

16.3 PE重定位操作原理138

16.3.1 基址重定位表138

16.3.2 IMAGE_BASE_RELOCATION结构体139

16.3.3 基址重定位表的分析方法139

16.3.4 练习141

第17章 从可执行文件中删除.reloc节区142

17.1 reloc节区142

17.2 reloc.exe142

17.2.1 删除.reloc节区头142

17.2.2 删除.reloc节区143

17.2.3 修改IMAGE_FILE_HEADER143

17.2.4 修改IMAGE_OPTIONAL_HEADER144

17.3 小结145

第18章 UPack PE文件头详细分析146

18.1 UPack说明146

18.2 使用UPack压缩notepad.exe146

18.3 使用Stud_PE工具148

18.4 比较PE文件头148

18.4.1 原notepad.exe的PE文件头149

18.4.2 notepad_upack.exe运行时压缩的PE文件头149

18.5 分析UPack的PE文件头150

18.5.1 重叠文件头150

18.5.2 IMAGE FILE HEADER.SizeOfOptionalHeader150

18.5.3 IMAGE_OPTIONAL_HEADER.NumberOf-RvaAndSizes152

18.5.4 IMAGE_SECTION_HEADER153

18.5.5 重叠节区155

18.5.6 RVA to RAW156

18.5.7 导入表(IMAGE_IMPORT_DESCRIPTOR array)158

18.5.8 导入地址表160

18.6 小结161

第19章 UPack调试-查找OEP162

19.1 OllyDbg运行错误162

19.2 解码循环163

19.3 设置IAT165

19.4 小结166

第20章 “内嵌补丁”练习167

20.1 内嵌补丁167

20.2 练习:Patchme168

20.3 调试:查看代码流168

20.4 代码结构172

20.5 “内嵌补丁”练习173

20.5.1 补丁代码要设置在何处呢173

20.5.2 制作补丁代码175

20.5.3 执行补丁代码176

20.5.4 结果确认177

第三部分 DLL注入180

第21章 Windows消息钩取180

21.1 钩子180

21.2 消息钩子180

21.3 SetWindowsHookEx()181

21.4 键盘消息钩取练习182

21.4.1 练习示例HookMain.exe182

21.4.2 分析源代码185

21.5 调试练习187

21.5.1 调试HookMain.exe188

21.5.2 调试Notepad.exe进程内的KeyHook.dll190

21.6 小结192

第22章 恶意键盘记录器194

22.1 恶意键盘记录器的目标194

22.1.1 在线游戏194

22.1.2 网上银行194

22.1.3 商业机密泄露194

22.2 键盘记录器的种类与发展趋势195

22.3 防范恶意键盘记录器195

22.4 个人信息195

第23章 DLL注入197

23.1 DLL注入197

23.2 DLL注入示例198

23.2.1 改善功能与修复Bug198

23.2.2 消息钩取198

23.2.3 API钩取198

23.2.4 其他应用程序199

23.2.5 恶意代码199

23.3 DLL注入的实现方法199

23.4 CreateRemoteThread()199

23.4.1 练习示例myhack.dll199

23.4.2 分析示例源代码203

23.4.3 调试方法208

23.5 AppInit_DLLs210

23.5.1 分析示例源码211

23.5.2 练习示例myhack2.dll212

23.6 SetWindowsHookEx()214

23.7 小结214

第24章 DLL卸载216

24.1 DLL卸载的工作原理216

24.2 实现DLL卸载216

24.2.1 获取进程中加载的DLL信息219

24.2.2 获取目标进程的句柄220

24.2.3 获取FreeLibrary() API地址220

24.2.4 在目标进程中运行线程220

24.3 DLL卸载练习220

24.3.1 复制文件及运行notepad.exe220

24.3.2 注入myhack.dll221

24.3.3 卸载myhack.dll222

第25章 通过修改PE加载DLL224

25.1 练习文件224

25.1.1 TextView.exe224

25.1.2 TextView_patched.exe225

25.2 源代码-myhack3.cpp227

25.2.1 DllMain()227

25.2.2 DownloadURL()228

25.2.3 DropFile()229

25.2.4 dummy()230

25.3 修改TextView.exe文件的准备工作231

25.3.1 修改思路231

25.3.2 查看IDT是否有足够空间231

25.3.3 移动IDT233

25.4 修改TextView.exe235

25.4.1 修改导入表的RVA值235

25.4.2 删除绑定导入表235

25.4.3 创建新IDT235

25.4.4 设置Name、INT、IAT236

25.4.5 修改IAT节区的属性值238

25.5 检测验证240

25.6 小结241

第26章 PE Tools242

26.1 PE Tools242

26.1.1 进程内存转储243

26.1.2 PE编辑器245

26.2 小结245

第27章 代码注入247

27.1 代码注入247

27.2 DLL注入与代码注入247

27.3 练习示例249

27.3.1 运行notepad.exe249

27.3.2 运行CodeInjection.exe249

27.3.3 弹出消息框250

27.4 CodeInjection.cpp250

27.4.1 main()函数251

27.4.2 ThreadProc()函数251

27.4.3 InjectCode()函数254

27.5 代码注入调试练习256

27.5.1 调试notepad.exe256

27.5.2 设置OllyDbg选项256

27.5.3 运行CodeInjection.exe257

27.5.4 线程开始代码258

27.6 小结259

第28章 使用汇编语言编写注入代码260

28.1 目标260

28.2 汇编编程260

28.3 OllyDbg的汇编命令260

28.3.1 编写ThreadProc()函数262

28.3.2 保存文件265

28.4 编写代码注入程序266

28.4.1 获取ThreadProc()函数的二进制代码266

28.4.2 CodeInjection2.cpp267

28.5 调试练习270

28.5.1 调试notepad.exe270

28.5.2 设置OllyDbg选项270

28.5.3 运行CodeInjection2.exe271

28.5.4 线程起始代码272

28.6 详细分析272

28.6.1 生成栈帧272

28.6.2 THREAD_PARAM结构体指针273

28.6.3 “User32.dll”字符串274

28.6.4 压入“user32.dll”字符串参数274

28.6.5 调用LoadLibraryA(“user32.dll”)275

28.6.6 “MessageBoxA”字符串276

28.6.7 调用GetProcAddress(hMod,""MessageBoxA"")276

28.6.8 压入MessageBoxA()函数的参数1-MB_OK277

28.6.9 压入MessageBoxA()函数的参数2-“ReverseCore”277

28.6.10 压入MessageBoxA()函数的参数3-“www.reversecore.com”278

28.6.11 压入MessageBoxA()函数的参数4-NULL279

28.6.12 调用MessageBoxA()279

28.6.13 设置ThreadProc()函数的返回值280

28.6.14 删除栈帧及函数返回280

28.7 小结280

第四部分 API钩取282

第29章 API钩取:逆向分析之“花”282

29.1 钩取282

29.2 API是什么282

29.3 API钩取283

29.3.1 正常调用API283

29.3.2 钩取API调用284

29.4 技术图表284

29.4.1 方法对象(是什么)285

29.4.2 位置(何处)285

29.4.3 技术(如何)286

29.4.4 API286

第30章 记事本WriteFile()API钩取288

30.1 技术图表-调试技术288

30.2 关于调试器的说明289

30.2.1 术语289

30.2.2 调试器功能289

30.2.3 调试器的工作原理289

30.2.4 调试事件289

30.3 调试技术流程290

30.4 练习291

30.5 工作原理293

30.5.1 栈293

30.5.2 执行流295

30.5.3 “脱钩”&“钩子”295

30.6 源代码分析295

30.6.1 main()296

30.6.2 DebugLoop()296

30.6.3 EXIT_PROCESS_DEBUG_EVENT298

30.6.4 CREATE_PROCESS_DEBUG_EVENT-OnCreateProcess-DebugEvent()298

30.6.5 EXCEPTION_DEBUG_EVENT-OnException-DebugEvent()300

第31章 关于调试器305

31.1 OllyDbg305

31.2 IDA Pro305

31.3 WinDbg306

第32章 计算器显示中文数字308

32.1 技术图表308

32.2 选定目标API309

32.3 IAT钩取工作原理312

32.4 练习示例314

32.5 源代码分析316

32.5.1 DllMain()316

32.5.2 MySetWindowTextW()317

32.5.3 hook_iat()319

32.6 调试被注入的DLL文件322

32.6.1 DllMain()325

32.6.2 hook_iat()325

32.6.3 MySetWindowTextW()327

32.7 小结328

第33章 隐藏进程329

33.1 技术图表329

33.2 API代码修改技术的原理329

33.2.1 钩取之前330

33.2.2 钩取之后330

33.3 进程隐藏332

33.3.1 进程隐藏工作原理332

33.3.2 相关API332

33.3.3 隐藏技术的问题333

33.4 练习#1(HideProc.exe,stealth.dll)333

33.4.1 运行notepad.exe、procexp.exe、taskmgr.exe334

33.4.2 运行HideProc.exe334

33.4.3 确认stealth.dll注入成功334

33.4.4 查看notepad.exe进程是否隐藏成功335

33.4.5 取消notepad.exe进程隐藏336

33.5 源代码分析336

33.5.1 HideProc.cpp336

33.5.2 stealth.cpp338

33.6 全局API钩取344

33.6.1 Kernel32.CreateProcess()API344

33.6.2 Ntdll.ZwResumeThread()API345

33.7 练习#2(HideProc2.exe,Stealth2.dll)345

33.7.1 复制stealth2.dll文件到%SYSTEM%文件夹中345

33.7.2 运行HideProc2.exe-hide346

33.7.3 运行ProcExp.exe&notepad.exe346

33.7.4 运行HideProc2.exe-show347

33.8 源代码分析348

33.8.1 HideProc2.cpp348

33.8.2 stealth2.cpp348

33.9 利用“热补丁”技术钩取API350

33.9.1 API代码修改技术的问题350

33.9.2 “热补丁”(修改7个字节代码)350

33.10 练习#3:stealth3.dll353

33.11 源代码分析353

33.12 使用“热补丁”API钩取技术时需要考虑的问题356

33.13 小结357

第34章 高级全局API钩取:IE连接控制359

34.1 目标API359

34.2 IE进程结构361

34.3 关于全局API钩取的概念362

34.3.1 常规API钩取363

34.3.2 全局API钩取363

34.4 ntdll!ZwResumeThread() API364

34.5 练习示例:控制IE网络连接368

34.5.1 运行IE368

34.5.2 注入DLL369

34.5.3 创建新选项卡369

34.5.4 尝试连接网站370

34.5.5 卸载DLL371

34.5.6 课外练习372

34.6 示例源代码372

34.6.1 DllMain()372

34.6.2 NewInternetConnectW()373

34.6.3 NewZwResumeThread()374

34.7 小结375

第35章 优秀分析工具的五种标准376

35.1 工具376

35.2 代码逆向分析工程师376

35.3 优秀分析工具的五种标准376

35.3.1 精简工具数量377

35.3.2 工具功能简单、使用方便377

35.3.3 完全掌握各种功能377

35.3.4 不断升级更新377

35.3.5 理解工具的核心工作原理377

35.4 熟练程度的重要性377

第五部分 64位&Windows内核6380

第36章 64位计算380

36.1 64位计算环境380

36.1.1 64位CPU380

36.1.2 64位OS381

36.1.3 Win32 API381

36.1.4 WOW64381

36.1.5 练习:WOW64Test384

36.2 编译64位文件385

36.2.1 Microsoft Windows SDK(Software DevelopmentKit)386

36.2.2 设置Visual C++++ 2010 Express环境386

第37章 x64处理器389

37.1 x64中新增或变更的项目389

37.1.1 64位389

37.1.2 内存389

37.1.3 通用寄存器389

37.1.4 CALL/JMP指令390

37.1.5 函数调用约定391

37.1.6 栈&栈帧392

37.2 练习:Stack32.exe&Stack64.exe392

37.2.1 Stack32.exe392

37.2.2 Stack64.exe394

37.3 小结397

第38章 PE32+398

38.1 PE32+(PE+、PE64)398

38.1.1 IMAGE_NT_HEADERS398

38.1.2 IMAGE_FILE_HEADER398

38.1.3 IMAGE_OPTIONAL_HEADER399

38.1.4 IMAGE_THUNK_DATA401

38.1.5 IMAGE_TLS_DIRECTORY403

第39章 WinDbg405

39.1 WinDbg405

39.1.1 WinDbg的特征405

39.1.2 运行WinDbg406

39.1.3 内核调试407

39.1.4 WinDbg基本指令409

第40章 64位调试411

40.1 x64环境下的调试器411

40.2 64位调试411

40.3 PE32:WOW64Test_x86.exe413

40.3.1 EP代码414

40.3.2 Startup代码414

40.3.3 main()函数415

40.4 PE32+:WOW64Test_x64.exe416

40.4.1 系统断点416

40.4.2 EP代码417

40.4.3 Startup代码418

40.4.4 main()函数420

40.5 小结423

第41章 ASLR424

41.1 Windows内核版本424

41.2 ASLR424

41.3 Visual C+++424

41.4 ASLR.exe425

41.4.1 节区信息426

41.4.2 IMAGE_FILE_HEADERCharacteristics427

41.4.3 IMAGE_OPTIONAL_HEADERDLL Characteristics428

41.5 练习:删除ASLR功能428

第42章 内核6中的会话430

42.1 会话430

42.2 会话0隔离机制432

42.3 增强安全性432

第43章 内核6中的DLL注入433

43.1 再现DLL注入失败433

43.1.1 源代码433

43.1.2 注入测试435

43.2 原因分析436

43.2.1 调试#1436

43.2.2 调试#2438

43.3 练习:使CreateRemoteThread()正常工作440

43.3.1 方法#1:修改CreateSuspended参数值440

43.3.2 方法#2:操纵条件分支441

43.4 稍作整理443

43.5 InjectDll new.exe443

43.5.1 InjectDll_new.cpp443

43.5.2 注入练习446

第44章 InjDll.exe:DLL注入专用工具448

44.1 InjDll.exe448

44.1.1 使用方法448

44.1.2 使用示例449

44.1.3 注意事项450

第六部分 高级逆向分析技术452

第45章 TLS回调函数452

45.1 练习#1:HelloTls.exe452

45.2 TLS453

45.2.1 IMAGE_DATA_DIRECTORY[9]453

45.2.2 IMAGE_TLS_DIRECTORY454

45.2.3 回调函数地址数组454

45.3 TLS回调函数455

45.4 练习#2:TlsTest.exe456

45.4.1 DLL_PROCESS_ATTACH457

45.4.2 DLL_THREAD_ATTACH457

45.4.3 DLL_THREAD_DETACH457

45.4.4 DLL PROCESS_DETACH457

45.5 调试TLS回调函数458

45.6 手工添加TLS回调函数459

45.6.1 修改前的原程序460

45.6.2 设计规划460

45.6.3 编辑PE文件头461

45.6.4 设置IMAGE_TLS_DIRECTORY结构体463

45.6.5 编写TLS回调函数464

45.6.6 最终完成464

45.7 小结465

第46章 TEB466

46.1 TEB466

46.1.1 TEB结构体的定义466

46.1.2 TEB结构体成员466

46.1.3 重要成员469

46.2 TEB访问方法470

46.2.1 Ntdll.NtCurrentTeb()470

46.2.2 FS段寄存器471

46.3 小结472

第47章 PEB473

47.1 PEB473

47.1.1 PEB访问方法473

47.1.2 PEB结构体的定义474

47.1.3 PEB结构体的成员475

47.2 PEB的重要成员477

47.2.1 PEB.BeingDebugged478

47.2.2 PEB.ImageBaseAddress478

47.2.3 PEB.Ldr479

47.2.4 PEB.ProcessHeap & PEB.NtGlobalFlag480

47.3 小结480

第48章 SEH481

48.1 SEH481

48.2 SEH练习示例#1481

48.2.1 正常运行481

48.2.2 调试运行482

48.3 OS的异常处理方法484

48.3.1 正常运行时的异常处理方法484

48.3.2 调试运行时的异常处理方法484

48.4 异常485

48.4.1 EXCEPTION_ACCESS_VIOLATION(C0000005)486

48.4.2 EXCEPTION_BREAKPOINT(80000003)486

48.4.3 EXCEPTION_ILLEGAL_INSTRUCTION(C000001D)488

48.4.4 EXCEPTION_INT_DIVIDE_BY_ZERO(C0000094)488

48.4.5 EXCEPTION_SINGLE_STEP(80000004)489

48.5 SEH详细说明489

48.5.1 SEH链489

48.5.2 异常处理函数的定义489

48.5.3 TEB.NtTib.ExceptionList491

48.5.4 SEH安装方法492

48.6 SEH练习示例#2(seh.exe)492

48.6.1 查看SEH链493

48.6.2 添加SEH493

48.6.3 发生异常494

48.6.4 查看异常处理器参数494

48.6.5 调试异常处理器496

48.6.6 删除SEH498

48.7 设置OllyDbg选项499

48.7.1 忽略KERNEL32中发生的内存非法访问异常500

48.7.2 向被调试者派送异常500

48.7.3 其他异常处理500

48.7.4 简单练习500

48.8 小结501

第49章 IA-32指令502

49.1 IA-32指令502

49.2 常用术语502

49.2.1 反汇编器503

49.2.2 反编译器504

49.2.3 反编译简介504

49.3 IA-32指令格式506

49.3.1 指令前缀507

49.3.2 操作码507

49.3.3 ModR/M507

49.3.4 SIB508

49.3.5 位移508

49.3.6 立即数509

49.4 指令解析手册509

49.4.1 下载IA-32用户手册509

49.4.2 打印指令解析手册509

49.5 指令解析练习510

49.5.1 操作码映射510

49.5.2 操作数511

49.5.3 ModR/M512

49.5.4 Group514

49.5.5 前缀516

49.5.6 双字节操作码518

49.5.7 移位值&立即数519

49.5.8 SIB520

49.6 指令解析课外练习524

49.7 小结524

第七部分 反调试技术526

第50章 反调试技术526

50.1 反调试技术526

50.1.1 依赖性526

50.1.2 多种反调试技术526

50.2 反调试破解技术526

50.3 反调试技术的分类527

50.3.1 静态反调试技术528

50.3.2 动态反调试技术528

第51章 静态反调试技术529

51.1 静态反调试的目的529

51.2 PEB529

51.2.1 BeingDebugged(+0x2)531

51.2.2 Ldr(+0xC)531

51.2.3 Process Heap(+0x18)532

51.2.4 NtGlobalFlag(+0x68)533

51.2.5 练习:StaAD PEB.exe534

51.2.6 破解之法534

51.3 NtQueryInformationProcess()537

51.3.1 ProcessDebugPort(0x7)538

51.3.2 ProcessDebugObjectHandle(0x1E)539

51.3.3 ProcessDebugFlags(0x1F)539

51.3.4 练习:StaAD_NtQIP.exe540

51.3.5 破解之法540

51.4 NtQuerySystemInformation()542

51.4.1 SystemKernelDebugger-Information(0x23)544

51.4.2 练习:StaAD_NtQSI.exe545

51.4.3 破解之法545

51.5 NtQueryObject()545

51.6 ZwSetInformationThread()549

51.6.1 练习:StaAD ZwSIT.exe549

51.6.2 破解之法550

51.7 TLS回调函数550

51.8 ETC551

51.8.1 练习:StaAD_FindWindow.exe551

51.8.2 破解之法551

51.9 小结553

第52章 动态反调试技术554

52.1 动态反调试技术的目的554

52.2 异常554

52.2.1 SEH554

52.2.2 SetUnhandledException-Filter()558

52.3 Timing Check562

52.3.1 时间间隔测量法562

52.3.2 RDTSC563

52.4 陷阱标志565

52.4.1 单步执行566

52.4.2 INT 2D569

52.5 0xCC探测572

52.5.1 API断点573

52.5.2 比较校验和575

第53章 高级反调试技术577

53.1 高级反调试技术577

53.2 垃圾代码577

53.3 扰乱代码对齐578

53.4 加密/解密581

53.4.1 简单的解码示例581

53.4.2 复杂的解码示例582

53.4.3 特殊情况:代码重组584

53.5 Stolen Bytes(Remove OEP)584

53.6 API重定向587

53.6.1 原代码588

53.6.2 API重定向示例#1588

53.6.3 API重定向示例#2589

53.7 Debug Blocker(Self Debugging)593

53.8 小结595

第八部分 调试练习598

第54章 调试练习1:服务598

54.1 服务进程的工作原理598

54.1.1 服务控制器598

54.1.2 服务启动过程599

54.2 DebugMel.exe示例讲解600

54.2.1 安装服务600

54.2.2 启动服务602

54.2.3 源代码604

54.3 服务进程的调试606

54.3.1 问题在于SCM606

54.3.2 调试器无所不能606

54.3.3 常用方法606

54.4 服务调试练习606

54.4.1 直接调试:强制设置EIP606

54.4.2 服务调试的常用方法:“附加”方式609

54.5 小结615

第55章 调试练习2:自我创建616

55.1 自我创建616

55.2 工作原理617

55.2.1 创建子进程(挂起模式)617

55.2.2 更改EIP618

55.2.3 恢复主线程618

55.3 示例程序源代码618

55.4 调试练习620

55.4.1 需要考虑的事项620

55.4.2 JIT调试621

55.4.3 DebugMe2.exe622

55.5 小结626

第56章 调试练习3:PE映像切换627

56.1 PE映像627

56.2 PE映像切换628

56.3 示例程序:Fake.exe、Real.exe、DebugMe3.exe628

56.4 调试1631

56.4.1 Open-输入运行参数631

56.4.2 main()函数632

56.4.3 SubFunc_1()634

56.4.4 CreateProcess(""fake.exe"",CREATE_SUSPENDED)635

56.4.5 SubFunc_2()635

56.4.6 SubFunc_3()641

56.4.7 ResumeThread()644

56.5 调试2644

56.5.1 思考645

56.5.2 向EP设置无限循环645

56.6 小结647

第57章 调试练习4:Debug Blocker648

57.1 Debug Blocker648

57.2 反调试特征648

57.2.1 父与子的关系649

57.2.2 被调试进程不能再被其他调试器调试649

57.2.3 终止调试进程的同时也终止被调试进程649

57.2.4 调试器操作被调试者的代码649

57.2.5 调试器处理被调试进程中发生的异常649

57.3 调试练习:DebugMe4.exe650

57.4 第一次调试650

57.4.1 选定调试的起始位置650

57.4.2 main()650

57.5 第二次调试651

57.6 第三次调试653

57.7 第四次调试656

57.8 第五次调试658

57.8.1 系统断点658

57.8.2 EXCEPTION_ILLEGAL_INSTRUCTION(1)659

57.8.3 EXCEPTION_ILLEGAL_INSTRUCTION(2)660

57.9 第六次调试661

57.9.1 40121D(第一个异常)661

57.9.2 401299(第二个异常)665

57.10 第七次调试667

57.10.1 静态方法668

57.10.2 动态方法669

57.11 小结673

结束语674

索引676

热门推荐