您好,欢迎来到聚文网。 登录 免费注册
x86汇编与逆向工程:软件破解与防护的艺术

x86汇编与逆向工程:软件破解与防护的艺术

  • 字数: 345
  • 出版社: 机械工业
  • 作者: [美]斯蒂芬妮·多马斯(Stephanie Domas) [美]克里斯托弗·多马斯(Christopher Domas)
  • 商品条码: 9787111767404
  • 版次: 1
  • 开本: 16开
  • 页数: 237
  • 出版年份: 2025
  • 印次: 1
定价:¥99 销售价:登录后查看价格  ¥{{selectedSku?.salePrice}} 
库存: {{selectedSku?.stock}} 库存充足
{{item.title}}:
{{its.name}}
精选
内容简介
本书以软件反汇编技术为中心,首先带领读者从x86的基础知识开始,学习如何读取、编写和构建赋能全球大量计算机的汇编语言;然后介绍如何使用IDA、Ghidra、Olly 等业界最受欢迎的工具对应用程序进行逆向工程;接着介绍如何利用补丁和密钥生成等技术进行软件破解,所有这些都利用了汇编和逆向工程的知识;最后从防御的角度向读者介绍相关技术,使他们能够更好地保护自己的软件。本书将引领好奇的读者深入软件破解和计算机的核心,探索其运作机制。深入学习x86计算机的运行原理,不仅对逆向工程和软件破解来说至关重要,还能帮助读者在代码优化、效率提高、调试、编译器设置调整以及芯片选择等方面成为更出色的开发者。
作者简介
斯蒂芬妮·多马斯<br />(Stephanie Domas)<br />Canonical首席信息安全官(CISO)、英特尔(Intel)前首席安全技术战略师。她在道德黑客、逆向工程和高级漏洞分析方面拥有逾十年经验,作为一位知名行业顾问,她的服务对象涵盖初创企业和行业巨头。她目前致力于使Canonical成为开源界最受信赖的计算伙伴。在英特尔时,她负责全公司的安全技术战略,推动英特尔在安全领域实力、竞争力和收益的不断增长。她是一位充满激情的教育家、战略家、演说家、顾问和安全爱好者。<br /><br /><br />克里斯托弗·多马斯<br />(Christopher Domas)<br />知名硬件安全研究员。他的研究重点在于固件、硬件及处理器的底层安全漏洞利用。他因针对还不存在的问题提出天马行空的解决方案而闻名,其所提解决方案包括全球首个单指令的C语言编译器(M/o/Vfuscator)、能够生成程序控制流图的开发工具集(REpsych),以及在vi文本编辑器里实现的图灵机。
目录
目  录<br />译者序<br />前言<br />关于作者<br />关于技术撰稿人<br />关于技术编辑<br />第1章 反编译和架构  1<br />1.1 反编译  1<br />1.1.1 反编译何时有用  1<br />1.1.2 反编译JIT语言  2<br />1.1.3 保护JIT语言  3<br />1.2 实验:反编译  4<br />1.2.1 技能  4<br />1.2.2 要点  4<br />1.3 架构  4<br />1.3.1 计算机架构  4<br />1.3.2 汇编  6<br />1.4 总结  10<br />第2章 x86汇编:数据、模式、寄存器<br />和内存访问  11<br />2.1 x86简介  11<br />2.2 汇编语法  12<br />2.3 数据表示  13<br />2.3.1 数字系统的基数  13<br />2.3.2 位、字节和字  14<br />2.3.3 处理二进制数  16<br />2.4 寄存器  17<br />2.4.1 x86中的寄存器  18<br />2.4.2 寄存器的使用  19<br />2.5 内存访问  20<br />2.6 寻址模式  23<br />2.6.1 绝对寻址  23<br />2.6.2 间接寻址  23<br />2.6.3 基址加偏移量寻址  24<br />2.6.4 索引寻址  24<br />2.6.5 基址–索引寻址  24<br />2.7 总结  25<br />第3章 x86 汇编:指令  26<br />3.1 x86指令格式  26<br />3.2 x86指令  27<br />3.2.1 mov  28<br />3.2.2 inc、dec  30<br />3.2.3 add、sub  30<br />3.2.4 mul  30<br />3.2.5 div  31<br />3.2.6 and、or、xor  31<br />3.2.7 not  32<br />3.2.8 shr、shl  32<br />3.2.9 sar、sal  32<br />3.2.10 nop  33<br />3.2.11 lea  33<br />3.3 整合所有内容  34<br />3.4 常见的x86指令错误  35<br />3.5 总结  36<br />第4章 构建和运行汇编程序  37<br />4.1 输出  37<br />4.1.1 控制引脚  38<br />4.1.2 由操作系统处理与显卡的交互  39<br />4.2 系统调用  39<br />4.2.1 sys_write  39<br />4.2.2 sys_exit  40<br />4.2.3 输出字符串  40<br />4.3 汇编和链接  41<br />4.3.1 Linux中的汇编与链接  41<br />4.3.2 编写汇编程序  42<br />4.4 objdump  45<br />4.5 实验:Hello World  45<br />4.5.1 技能  45<br />4.5.2 要点  46<br />4.6 ASCII  46<br />4.6.1 识别ASCII字符串  47<br />4.6.2 ASCII操作技巧  48<br />4.7 总结  48<br />第5章 理解条件码  49<br />5.1 条件码  49<br />5.1.1 eflags  49<br />5.1.2 影响状态标志的操作  52<br />5.2 总结  55<br />第6章 分析和调试汇编代码  56<br />6.1 二进制分析  56<br />6.1.1 静态分析与动态分析  56<br />6.1.2 调试  57<br />6.2 断点  57<br />6.2.1 软件断点  57<br />6.2.2 硬件断点  58<br />6.3 gdb  58<br />6.4 段错误  63<br />6.5 实验:鲨鱼模拟器3000  63<br />6.5.1 技能  64<br />6.5.2 要点  64<br />6.6 消除噪声  64<br />6.7 总结  65<br />第7章 函数和控制流  66<br />7.1 控制流  66<br />7.1.1 指令指针  66<br />7.1.2 控制流指令  67<br />7.2 x86中的逻辑结构  70<br />7.2.1 if(...) {...}  70<br />7.2.2 if(...) {...} else{...}  71<br />7.2.3 do {...} while (...);  75<br />7.2.4 while (...) {...}  76<br />7.2.5 for (...; ...; ...) {...}  77<br />7.2.6 switch (...) {...}  79<br />7.2.7 continue  83<br />7.2.8 break  84<br />7.2.9 &&  86<br />7.2.10 ||  86<br />7.3 栈  87<br />7.3.1 栈是如何工作的  87<br />7.3.2 x86栈  87<br />7.4 函数调用与栈帧  91<br />7.4.1 x86中的函数  91<br />7.4.2 栈分析  94<br />7.4.3 调用约定  95<br />7.4.4 cdecl  96<br />7.4.5 栈帧  100<br />7.4.6 宏观程序  105<br />7.4.7 需要记住的事情  106<br />7.5 总结  107<br />第8章 编译器和优化器  108<br />8.1 寻找目标代码入口点  108<br />8.2 编译器  110<br />8.2.1 优化  111<br />8.2.2 剥离  113<br />8.2.3 链接  114<br />8.3 总结  116<br />第9章 逆向工程:工具和策略  117<br />9.1 实验:RE Bingo  117<br />9.1.1 技能  117<br />9.1.2 要点  118<br />9.2 基础侦察  118<br />9.2.1 objdump  118<br />9.2.2 ltrace和strace  119<br />9.2.3 strings  122<br />9.2.4 Dependency Walker  123<br />9.3 逆向工程的策略  124<br />9.3.1 寻找感兴趣的区域  124<br />9.3.2 迭代注释代码  124<br />9.4 总结  125<br />第10章 破解:工具和策略  126<br />10.1 密钥检查器  126<br />10.1.1 不好的方法  127<br />10.1.2 合理的方法  127<br />10.1.3 更好的方法  128<br />10.1.4 最佳方法  128<br />10.1.5 其他的建议  129<br />10.2 密钥生成器  130<br />10.2.1 为什么要创建密钥生成器  130<br />10.2.2 密钥生成的原理  130<br />10.2.3 破解各种类型的密钥检查  131<br />10.2.4 对抗密钥生成器  132<br />10.3 实验:密钥生成器  132<br />10.3.1 技能  132<br />10.3.2 要点  133<br />10.4 Procmon  133<br />10.4.1 示例:Notepad.exe  133<br />10.4.2 怎样用Procmon辅助逆向工程和破解  136<br />10.5 Resource Hacker  138<br />10.5.1 示例  138<br />10.5.2 小实验:Windows计算器  139<br />10.6 打补丁  142<br />10.6.1 打补丁与密钥生成  142<br />10.6.2 在哪里打补丁  143<br />10.6.3 nop指令  143<br />10.7 其他调试器  144<br />10.7.1 OllyDbg  144<br />10.7.2 Immunity  144<br />10.7.3 x86dbg  145<br />10.7.4 WinDbg  145<br />10.8 使用Immunity调试工具进行<br />调试  145<br />10.8.1 Immunity:汇编代码  146<br />10.8.2 Immunity:模块  147<br />10.8.3 Immunity:字符串  147<br />10.8.4 Immunity:运行程序  149<br />10.8.5 Immunity:异常  149<br />10.8.6 Immunity:重写程序  151<br />10.9 实验:使用Immunity进行破解  153<br />10.9.1 技能  153<br />10.9.2 要点  153<br />10.10 总结  153<br />第11章 打补丁和高级工具  154<br />11.1 在010编辑器中打补丁  154<br />11.2 CodeFusion补丁  156<br />11.3 Cheat Engine  158<br />11.3.1 Cheat Engine:打开进程  159<br />11.3.2 Cheat Engine:查看内存  159<br />11.3.3 Cheat Engine:字符串引用  161<br />11.3.4 Cheat Engine:重写程序  161<br />11.3.5 Cheat Engine:复制字节  163<br />11.3.6 Cheat Engine:获取地址  163<br />11.4 实验:破解LaFarge  163<br />11.4.1 技能  163<br />11.4.2 要点  164<br />11.5 IDA  164<br />11.5.1 IDA:字符串  165<br />11.5.2 IDA:基本块  167<br />11.5.3 IDA:函数和变量  168<br />11.5.4 IDA:注释  168<br />11.5.5 IDA:路径  170<br />11.6 IDA补丁  171<br />11.7 实验:IDA逻辑流程  173<br />11.7.1 技能  173<br />11.7.2 要点  173<br />11.8 Ghidra  174<br />11.9 实验:使用IDA进行破解  174<br />11.9.1 技能  174<br />11.9.2 要点  174<br />11.10 总结  174<br />第12章 防御  175<br />12.1 混淆技术  175<br />12.1.1 评估混淆技术  177<br />12.1.2 自动化混淆  177<br />12.1.3 混淆器  181<br />12.1.4 攻克混淆器  182<br />12.2 实验:混淆技术  182<br />12.2.1 技能  183<br />12.2.2 要点  183<br />12.3 反调试  183<br />12.3.1 IsDebuggerPresent()  183<br />12.3.2 调试寄存器  184<br />12.3.3 读时间戳计数器  184<br />12.3.4 无效CloseHandle()调用  185<br />12.3.5 目录扫描  185<br />12.3.6 攻击性反调试  186<br />12.3.7 攻克反调试技术  186<br />12.4 实验:反调试  186<br />12.4.1 技能  186<br />12.4.2 要点  187<br />12.5 总结  187<br />第13章 高级防御技术  188<br />13.1 防篡改技术  188<br />13.1.1 哈希  188<br />13.1.2 签名  189<br />13.1.3 水印  189<br />13.1.4 软件守护  189<br />13.2 加壳技术  190<br />13.2.1 加壳器是如何工作的  190<br />13.2.2 这是强大的保护机制吗  191<br />13.2.3 破解加壳技术  191<br />13.2.4 PEiD  192<br />13.3 实验:检测和脱壳  192<br />13.3.1 技能  193<br />13.3.2 要点  193<br />13.4 虚拟化技术  193<br />13.4.1 代码虚拟化是如何工作的  195<br />13.4.2 分层虚拟化  195<br />13.4.3 虚拟化存在的问题  195<br />13.4.4 这是强大的保护机制吗  196<br />13.4.5 破解虚拟化技术  196<br />13.5 加密器/解密器  196<br />13.5.1 这种保护机制有用吗  197<br />13.5.2 攻克加密器  197<br />13.6 总结  197<br />第14章 检测与预防  199<br />14.1 循环冗余校验  199<br />14.2 代码签名  200<br />14.2.1 如何进行代码签名  200<br />14.2.2 如何验证已签名的应用<br />程序  201<br />14.2.3 代码签名有效吗  201<br />14.2.4 代码签名与循环冗余校验  202<br />14.2.5 这是强大的保护机制吗  202<br />14.3 RASP  202<br />14.3.1 钩子函数  202<br />14.3.2 RASP的风险  203<br />14.3.3 这是强大的保护机制吗  203<br />14.4 白名单  203<br />14.4.1 如何运行白名单  204<br />14.4.2 这是强大的保护机制吗  204<br />14.5 黑名单  205<br />14.6 远程认证  205<br />14.6.1 远程认证示例  206<br />14.6.2 这是强大的保护机制吗  206<br />14.7 实验:进程监控  207<br />14.7.1 技能  207<br />14.7.2 要点  207<br />14.8 总结  207<br />第15章 法律  208<br />15.1 影响逆向工程的美国法律  208<br />15.1.1 《数字千年版权法》  208<br />15.1.2 《计算机欺诈和滥用法案》  208<br />15.1.3 《版权法》  209<br />15.1.4 重要法庭判例  210<br />15.1.5 合理使用  211<br />15.1.6 DMCA研究免责  211<br />15.1.7 合法性  212<br />15.2 总结  212<br />第16章 高级技术  213<br />16.1 时间旅行调试  213<br />16.2 二进制插桩  213<br />16.3 中间表示  214<br />16.4 反编译  214<br />16.5 自动化结构恢复  215<br />16.6 可视化  215<br />16.7 去混淆  215<br />16.8 定理证明器  216<br />16.9 符号分析  216<br />16.10 总结  217<br />第17章 附加话题  218<br />17.1 栈溢出  218<br />17.1.1 shellcode  224<br />17.1.2 栈溢出与栈保护  227&l;br />17.2 关联C代码与x86汇编代码  228<br />17.2.1 在x86代码中使用C函数  228<br />17.2.2 在C代码中使用x86函数  230<br />17.2.3 _start与main()  231<br />17.2.4 标准参数  233<br />17.2.5 混合使用C语言和汇编<br />语言  233<br />17.3 总结  235<br />结语  236

蜀ICP备2024047804号

Copyright 版权所有 © jvwen.com 聚文网