• 《逆向工程核心原理》


    《逆向工程核心原理》

    基本信息

    作者: (韩)李承远   

    译者: 武传海

    丛书名: 图灵程序设计丛书

    出版社:人民邮电出版社

    ISBN:9787115350183

    上架时间:2014-4-15

    出版日期:2014 年5月

    开本:16开

    页码:679

    版次:1-1

    所属分类:计算机 > 软件工程及软件方法学 > 综合

    更多关于》》》《逆向工程核心原理》

     

    编辑推荐

        韩国逆向分析领域龙头之作!逆向分析师必知核心原理大全!本书集中讲解逆向分析技术及其操作原理,不仅通过通俗易懂的语言介绍了每项技术,更通过丰富的示例使读者彻底掌握核心部分的原理。阅读此书不仅可以为逆向分析打下坚实基础,更能够获得恒久保值的技术精髓。

      想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过本书获得很大帮助。同时,想成为安全领域专家的人也可从本书轻松起步。

      主要内容

       IA-32 寄存器

      调试

      追踪

       PE File Format

      可执行压缩

       Base Relocation Table

      内嵌补丁练习

       Windows message hooking

       DLL Injection

       DLL Ejection

       Code Injection

       API hooking

       stealth process

       global API hooking

       64bit Computing

       ASLR

       Session in Kernel 6

       TEB

       PEB

       SEH

       IA-32 Instruction

      反调试

     

    内容简介

        书籍

        计算机书籍

    《逆向工程核心原理》十分详尽地介绍了代码逆向分析的核心原理。作者在ahnlab 研究所工作多年,书中不仅包括其以此经验为基础亲自编写的大量代码,还包含了逆向工程研究人员必须了解的各种技术和技巧。彻底理解并切实掌握逆向工程这门技术,就能在众多it 相关领域进行拓展运用,这本书就是通向逆向工程大门的捷径。

    想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过本书获得很大帮助。同时,想成为安全领域专家的人也可从本书轻松起步。

     

    媒体评论

      向安全技术专家迈出第一步的必选书!

      最近,越来越多的人开始关心信息技术安全,但是相关领域的安全技术专家仍然十分匮乏。主要有两方面原因导致这种现象形成:一方面是因为必须做大量准备,努力学习;另一方面是因为市面上缺乏系统讲解这类内容的专业书籍。

      信息技术安全领域的图书很少有讲解恶意代码分析的,本书恰好填补了这一空白。无论是刚开始学习恶意代码分析的朋友,还是从事恶意代码分析的专家,都会为本书面世而激动。

      虽然读者阅读本书时需要具有基本的汇编语言知识,但是本书内容讲解非常细致,涵盖了从恶意代码分析基础知识到高级技术的全部内容,系统而有条理,语言简洁,通俗易懂,并在讲解中选配了恰当的示例程序,使内容更易理解。对于最近出现的恶意代码中的各种常用技术,本书都做了详细讲解,无论你是初学者还是分析专家,都能从中获益。

      信息安全技术涉及各领域,需要知识渊博、经验丰富的专家。本书将帮你轻松迈出成为安全技术专家的第一步。

      ——韩昌奎,ASEC中心主任

      如果此刻你手上正捧着这本书,说明你已经被代码逆向分析的魅力深深吸引了!

      对于刚开始学习代码逆向分析技术的人而言,需要学习的内容很多,这容易让人心生畏惧、止步不前。其实不需担心,本书在学习过程中给出了大量提示,各位借助这些提示可以更好地理解所讲的内容。

      本书比较重视代码逆向分析者的心态引导与培养,在内容讲解上也与其他书籍不同,并不是单纯的技巧罗列,而是深刻讲解了相关技术的深层含义、技术的工作原理以及内部实现结构,这也是本书的重点所在。同时配合丰富示例,让内容变得更具体形象、更易理解,作者的良苦用心可见一斑。

      你想成为代码逆向分析员吗?如果你感到困惑:“我是开发人员,难道也需要读它吗?”不妨试试,它将成为你最好的同伴。

      ——郑官真,CISCO高级研究员

     

     

    目录

    《逆向工程核心原理》

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

    第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 world!程序 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#1 44

    6.1 abex’ crackme #1 44

    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.exe 49

    7.2.1 stackframe.cpp 50

    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 #2 62

    8.1 运行abex’ crackme #2 62

    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 分析crackme 65

    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 explorer 74

    9.2 具体有哪些优点呢 75

    9.3 sysinternals 75

    第10章 函数调用约定 76

    10.1 函数调用约定 76

    10.1.1 cdecl 76

    10.1.2 stdcall 77

    10.1.3 fastcall 78

    第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文件格式

    第13章 pe文件格式 90

    13.1 介绍 90

    13.2 pe文件格式 90

    13.2.1 基本结构 91

    13.2.2 va&rva 92

    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 raw 104

    13.5 iat 105

    13.5.1 dll 105

    13.5.2 image_import_descriptor 107

    13.5.3 使用notepad.exe练习 108

    13.6 eat 112

    13.6.1 image_export_directory 113

    13.6.2 使用kernel32.dll练习 114

    13.7 高级pe 116

    13.7.1 peview.exe 116

    13.7.2 patched pe 117

    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 notepad_upx.exe的ep代码 127

    15.3 跟踪upx文件 129

    15.3.1 ollydbg的跟踪命令 129

    15.3.2 循环 #1 129

    15.3.3 循环 #2 130

    15.3.4 循环 #3 131

    15.3.5 循环 #4 131

    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/sys 135

    16.1.2 exe 136

    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.exe 142

    17.2.1 删除.reloc节区头 142

    17.2.2 删除.reloc节区 143

    17.2.3 修改image_file_header 143

    17.2.4 修改image_optional_header 144

    17.3 小结 145

    第18章 upack pe文件头详细分析 146

    18.1 upack说明 146

    18.2 使用upack压缩notepad.exe 146

    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.sizeofoptionalheader 150

    18.5.3 image_optional_header.numberof-rvaandsizes 152

    18.5.4 image_section_header 153

    18.5.5 重叠节区 155

    18.5.6 rva to raw 156

    18.5.7 导入表(image_import_descriptor array) 158

    18.5.8 导入地址表 160

    18.6 小结 161

    第19章 upack调试 ? 查找oep 162

    19.1 ollydbg运行错误 162

    19.2 解码循环 163

    19.3 设置iat 165

    19.4 小结 166

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

    20.1 内嵌补丁 167

    20.2 练习:patchme 168

    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注入

    第21章 windows消息钩取 180

    21.1 钩子 180

    21.2 消息钩子 180

    21.3 setwindowshookex() 181

    21.4 键盘消息钩取练习 182

    21.4.1 练习示例hookmain.exe 182

    21.4.2 分析源代码 185

    21.5 调试练习 187

    21.5.1 调试hookmain.exe 188

    21.5.2 调试notepad.exe进程内的keyhook.dll 190

    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 改善功能与修复bug 198

    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.dll 199

    23.4.2 分析示例源代码 203

    23.4.3 调试方法 208

    23.5 appinit_dlls 210

    23.5.1 分析示例源码 211

    23.5.2 练习示例myhack2.dll 212

    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.exe 220

    24.3.2 注入myhack.dll 221

    24.3.3 卸载myhack.dll 222

    第25章 通过修改pe加载dll 224

    25.1 练习文件 224

    25.1.1 textview.exe 224

    25.1.2 textview_patched.exe 225

    25.2 源代码 - myhack3.cpp 227

    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 移动idt 233

    25.4 修改textview.exe 235

    25.4.1 修改导入表的rva值 235

    25.4.2 删除绑定导入表 235

    25.4.3 创建新idt 235

    25.4.4 设置name、int、iat 236

    25.4.5 修改iat节区的属性值 238

    25.5 检测验证 240

    25.6 小结 241

    第26章 pe tools 242

    26.1 pe tools 242

    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.exe 249

    27.3.2 运行codeinjection.exe 249

    27.3.3 弹出消息框 250

    27.4 codeinjection.cpp 250

    27.4.1 main()函数 251

    27.4.2 threadproc()函数 251

    27.4.3 injectcode()函数 254

    27.5 代码注入调试练习 256

    27.5.1 调试notepad.exe 256

    27.5.2 设置ollydbg选项 256

    27.5.3 运行codeinjection.exe 257

    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.cpp 267

    28.5 调试练习 270

    28.5.1 调试notepad.exe 270

    28.5.2 设置ollydbg选项 270

    28.5.3 运行codeinjection2.exe 271

    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_ok 277

    28.6.9 压入messageboxa()函数的参数 2 -“reversecore” 277

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

    28.6.11 压入messageboxa()函数的参数 4 -null 279

    28.6.12 调用messageboxa() 279

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

    28.6.14 删除栈帧及函数返回 280

    28.7 小结 280

    第四部分 api钩取

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

    29.1 钩取 282

    29.2 api是什么 282

    29.3 api钩取 283

    29.3.1 正常调用api 283

    29.3.2 钩取api调用 284

    29.4 技术图表 284

    29.4.1 方法对象(是什么) 285

    29.4.2 位置(何处) 285

    29.4.3 技术(如何) 286

    29.4.4 api 286

    第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_event 298

    30.6.4 create_process_debug_event-oncreateprocess-debugevent() 298

    30.6.5 exception_debug_event-onexception-debugevent() 300

    第31章 关于调试器 305

    31.1 ollydbg 305

    31.2 ida pro 305

    31.3 windbg 306

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

    32.1 技术图表 308

    32.2 选定目标api 309

    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 相关api 332

    33.3.3 隐藏技术的问题 333

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

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

    33.4.2 运行hideproc.exe 334

    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.cpp 336

    33.5.2 stealth.cpp 338

    33.6 全局api钩取 344

    33.6.1 kernel32.createprocess() api 344

    33.6.2 ntdll.zwresumethread() api 345

    33.7 练习#2(hideproc2.exe,stealth2.dll) 345

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

    33.7.2 运行hideproc2.exe -hide 346

    33.7.3 运行procexp.exe¬epad.exe 346

    33.7.4 运行hideproc2.exe -show 347

    33.8 源代码分析 348

    33.8.1 hideproc2.cpp 348

    33.8.2 stealth2.cpp 348

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

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

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

    33.10 练习 #3:stealth3.dll 353

    33.11 源代码分析 353

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

    33.13 小结 357

    第34章 高级全局api钩取:ie连接控制 359

    34.1 目标api 359

    34.2 ie进程结构 361

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

    34.3.1 常规api钩取 363

    34.3.2 全局api钩取 363

    34.4 ntdll!zwresumethread() api 364

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

    34.5.1 运行ie 368

    34.5.2 注入dll 369

    34.5.3 创建新选项卡 369

    34.5.4 尝试连接网站 370

    34.5.5 卸载dll 371

    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内核6

    第36章 64位计算 380

    36.1 64位计算环境 380

    36.1.1 64位cpu 380

    36.1.2 64位os 381

    36.1.3 win32 api 381

    36.1.4 wow64 381

    36.1.5 练习:wow64test 384

    36.2 编译64位文件 385

    36.2.1 microsoft windows sdk(software development kit) 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.exe 392

    37.2.1 stack32.exe 392

    37.2.2 stack64.exe 394

    37.3 小结 397

    第38章 pe32+ 398

    38.1 pe32+(pe+、pe64) 398

    38.1.1 image_nt_headers 398

    38.1.2 image_file_header 398

    38.1.3 image_optional_header 399

    38.1.4 image_thunk_data 401

    38.1.5 image_tls_directory 403

    第39章 windbg 405

    39.1 windbg 405

    39.1.1 windbg的特征 405

    39.1.2 运行windbg 406

    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.exe 413

    40.3.1 ep代码 414

    40.3.2 startup代码 414

    40.3.3 main()函数 415

    40.4 pe32+:wow64test_x64.exe 416

    40.4.1 系统断点 416

    40.4.2 ep代码 417

    40.4.3 startup代码 418

    40.4.4 main()函数 420

    40.5 小结 423

    第41章 aslr 424

    41.1 windows内核版本 424

    41.2 aslr 424

    41.3 visual c++ 424

    41.4 aslr.exe 425

    41.4.1 节区信息 426

    41.4.2 image_file_headercharacteristics 427

    41.4.3 image_optional_headerdll characteristics 428

    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 调试 #1 436

    43.2.2 调试 #2 438

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

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

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

    43.4 稍作整理 443

    43.5 injectdll_new.exe 443

    43.5.1 injectdll_new.cpp 443

    43.5.2 注入练习 446

    第44章 injdll.exe:dll注入专用工具 448

    44.1 injdll.exe 448

    44.1.1 使用方法 448

    44.1.2 使用示例 449

    44.1.3 注意事项 450

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

    第45章 tls回调函数 452

    45.1 练习 #1:hellotls.exe 452

    45.2 tls 453

    45.2.1 image_data_directory[9] 453

    45.2.2 image_tls_directory 454

    45.2.3 回调函数地址数组 454

    45.3 tls回调函数 455

    45.4 练习 #2:tlstest.exe 456

    45.4.1 dll_process_attach 457

    45.4.2 dll_thread_attach 457

    45.4.3 dll_thread_detach 457

    45.4.4 dll_process_detach 457

    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章 teb 466

    46.1 teb 466

    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章 peb 473

    47.1 peb 473

    47.1.1 peb访问方法 473

    47.1.2 peb结构体的定义 474

    47.1.3 peb结构体的成员 475

    47.2 peb的重要成员 477

    47.2.1 peb.beingdebugged 478

    47.2.2 peb.imagebaseaddress 478

    47.2.3 peb.ldr 479

    47.2.4 peb.processheap & peb.ntglobalflag 480

    47.3 小结 480

    第48章 seh 481

    48.1 seh 481

    48.2 seh练习示例 #1 481

    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.exceptionlist 491

    48.5.4 seh安装方法 492

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

    48.6.1 查看seh链 493

    48.6.2 添加seh 493

    48.6.3 发生异常 494

    48.6.4 查看异常处理器参数 494

    48.6.5 调试异常处理器 496

    48.6.6 删除seh 498

    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/m 507

    49.3.4 sib 508

    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/m 512

    49.5.4 group 514

    49.5.5 前缀 516

    49.5.6 双字节操作码 518

    49.5.7 移位值&立即数 519

    49.5.8 sib 520

    49.6 指令解析课外练习 524

    49.7 小结 524

    第七部分 反调试技术

    第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 peb 529

    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.exe 534

    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.exe 540

    51.3.5 破解之法 540

    51.4 ntquerysysteminformation() 542

    51.4.1 systemkerneldebugger-information(0x23) 544

    51.4.2 练习:staad_ntqsi.exe 545

    51.4.3 破解之法 545

    51.5 ntqueryobject() 545

    51.6 zwsetinformationthread() 549

    51.6.1 练习:staad_zwsit.exe 549

    51.6.2 破解之法 550

    51.7 tls回调函数 550

    51.8 etc 551

    51.8.1 练习:staad_findwindow.exe 551

    51.8.2 破解之法 551

    51.9 小结 553

    第52章 动态反调试技术 554

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

    52.2 异常 554

    52.2.1 seh 554

    52.2.2 setunhandledexception-filter() 558

    52.3 timing check 562

    52.3.1 时间间隔测量法 562

    52.3.2 rdtsc 563

    52.4 陷阱标志 565

    52.4.1 单步执行 566

    52.4.2 int 2d 569

    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重定向示例 #1 588

    53.6.3 api重定向示例#2 589

    53.7 debug blocker(self debugging) 593

    53.8 小结 595

    第八部分 调试练习

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

    54.1 服务进程的工作原理 598

    54.1.1 服务控制器 598

    54.1.2 服务启动过程 599

    54.2 debugme1.exe示例讲解 600

    54.2.1 安装服务 600

    54.2.2 启动服务 602

    54.2.3 源代码 604

    54.3 服务进程的调试 606

    54.3.1 问题在于scm 606

    54.3.2 调试器无所不能 606

    54.3.3 常用方法 606

    54.4 服务调试练习 606

    54.4.1 直接调试:强制设置eip 606

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

    54.5 小结 615

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

    55.1 自我创建 616

    55.2 工作原理 617

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

    55.2.2 更改eip 618

    55.2.3 恢复主线程 618

    55.3 示例程序源代码 618

    55.4 调试练习 620

    55.4.1 需要考虑的事项 620

    55.4.2 jit调试 621

    55.4.3 debugme2.exe 622

    55.5 小结 626

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

    56.1 pe映像 627

    56.2 pe映像切换 628

    56.3 示例程序:fake.exe、real.exe、debugme3.exe 628

    56.4 调试1 631

    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 调试2 644

    56.5.1 思考 645

    56.5.2 向ep设置无限循环 645

    56.6 小结 647

    第57章 调试练习4:debug blocker 648

    57.1 debug blocker 648

    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.exe 650

    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

     

    本图书信息来源:互动出版网

  • 相关阅读:
    oracle中scott/tiger、sys、SYSDBA、system都是什么用
    选择ORACLE数据库字符集
    如何给oracle账户解锁
    nodejs_100个实例(3)_文件读取
    nodejs+express+mongodb简单实现注册登录
    ECharts之类型map(省级,地级市)附(世界地图、中国、省份、地级市地图Json文件)
    nodejs_100个实例(2)
    nodejs_100个实例(1)
    nodejs学习过程2之相关网站2
    nodejs学习过程2之相关网站
  • 原文地址:https://www.cnblogs.com/china-pub/p/3719134.html
Copyright © 2020-2023  润新知