加密与解密

加密与解密
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
出版社: 电子工业出版社
2008-07
版次: 1
ISBN: 9787121066443
定价: 59.00
装帧: 平装
开本: 大16开
纸张: 胶版纸
页数: 543页
字数: 1018千字
正文语种: 简体中文
  •   本书以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。读者在掌握本书的内容,很容易在漏洞分析、安全编程、病毒分析、软件保护等领域扩展,这些知识点都是相互的,彼此联系。国内高校对软件安全这块领域教育重视程度还不够,许多方面还是空白,而近年来许多企业对软件安全技术人才需求量越来越大。从就业角度来说,掌握这方面技术,可以提高自身的竞争能力;从个人成长角度来说,研究软件安全技术有助于掌握一些系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等外,如能掌握一些系统底层知识,熟悉整个系统的底层结构,对自己的工作必将获益良多。
      本书可以作为学校或培训机构的软件安全辅助教材,是安全技术爱好者、调试人员、程序开发人员不可多得的一本好书。   本书由看雪软件安全网站(看雪学院)站长段钢主持编著。在本书的编写过程中,参与创作的每位作者倾力将各自擅长的专业技术毫无保留地奉献给广大读者,使得本书展现出了极具价值的丰富内容。如果读者在阅读本书后,能够感受到管窥技术奥秘带来的内心的喜悦,并愿意与大家分享这份感受,这是作者很大的愿望。
      主编:段钢
      编委:(按章节顺序排列)
      Blowfish,沈晓斌,丁益青,单海波,王勇,赵勇,唐植明,softworm,afanty,李江涛,林子深,印豪,冯典,罗翼,林小华,郭春杨
      Blowfish
      看雪首席版主。经验丰富的大龄程序员。1992年上大学始接触电脑,1997年读研期间接触网络并自学加密解密技术,一发不可收拾,其时常在教育网BBS灌水。喜多方涉猎,亦能抓住一点深入钻研,对逆向分析技术尤为痴迷。多年来常在看雪论坛灌水,见证了论坛的风风雨雨,也结识了一些不错的朋友。
      参与章节:
      第5章 5.1序列号保护方式
      第14章 14.5软件保护的若干忠告
      沈晓斌
      看雪核心专家团队成员。看雪论坛ID为cnbragon,现攻读密码学专业硕士学位。最初的爱好是网络安全,进而研究软件的逆向工程,对密码学的兴趣由此而发。对密码学的各个方面都有所涉猎,尤其擅长密码学在软件保护中的应用研究。独立完成了一个加密算法库CryptoFBC。译作有《程序员密码学》。
      参与章节:第6章 加密算法
      丁益青
      看雪技术专家。看雪论坛ID为cyclotron,复旦大学在读硕士研究生,复旦大学日月光华BBS黑客与系统安全版版主,致力于Windows环境下可执行文件的加密解密与逆向工程研究。主要作品有EmbedPE、IDTProtector、PEunLOCK等。
      参与章节:第8章 8.3伪编译
      单海波
      看雪核心专家团队成员。看雪论坛ID为tankaiha,生于六朝古都南京,硕士研究生毕业,现任某研究所工程师,工作之余好与计算机为伴。2002年接触汇编并热衷于病毒技术学习,后偶遇看雪学院,遂终日游戏于程序加密与解密,不可自拔。2006年与kanxue及坛中数位好友成立.net安全小组DST(DotnetReverseTeam),共同探讨.net平台下的软件安全技术。
      参与章节:第9章 .Net平台加解密
      王勇
      看雪技术专家。毕业于石油大学(华东)计算机科学与技术专业。擅长C/C++、ASM和驱动程序开发。对面向对象程序设计和Windows系统底层的研究有丰富的经验。很高兴这次能与各位高手一起合作,也希望能与编程爱好者及加密解密爱好者更多的交流。
      参与章节:第10章 10.15编写PE分析工具
      赵勇
      看雪技术专家。来自江苏江阴,计算机业余爱好者,兴趣爱好广泛。
      参与章节:第13章 13.6附加数据
      唐植明
      看雪技术核心专业。看雪论坛ID为DiKeN,2002年毕业于兰州大学,计算机科学与技术专业。爱好逆向工程,iPB(insidePandorasBox)组织创始人(在这儿更是要感谢组织的兄弟姐妹们,大家团结友好,互相学习,为iPB的成功作出了巨大努力),曾在2002年编写过《加密与解密实战攻略》算法部分。
      参与章节:第13章 13.10静态脱壳
      softworm
      看雪技术天才。70后一代,非计算机专业的业余爱好者。1998年开始接触逆向与破解,迄今已近10年,终于达到了“知道自己不知道”的境界。感兴趣的方向包括壳、虚拟机保护、病毒引擎、Rootkit。后两项还处于只知道名字的水平,愿与有共同爱好的朋友一起学习。
      参与章节:第13章 13.9.2Thmedia的SDK分析
      afanty
      看雪技术专家。多年专业研究软件加解密技术。
      参与章节:第14章 14.1防范算法求逆
      李江涛
      看雪技术核心专业。看雪论坛ID为ljtt,喜欢学习编程技术,常用编程语言为VC/MASM。对PB、VFP的反编译有深入的研究,写过DePB、FoxSpy等程序。平时大多数时间都在电脑上耕作,很大的希望是能够领悟到编程的精髓,写一个自己比较满意的作品。
      参与章节:第14章 14.2.2SMC技术实现
      林子深
      看雪技术导师。看雪论坛ID为forgot,1989年生,看雪论坛外壳开发小组组长。熟悉Win32平台和80x86汇编,擅长代码的逆向,对壳的研究比较多。
      参与章节:
      第12章 12.4.1虚拟机介绍
      第14章 14.2.4简单的多态变形技术
      第15章 反跟踪技术
      印豪
      看雪资深技术专业。看雪论坛ID为Hying,擅长加壳技术,拥有独立创作的加密利器。
      参与章节:第16章 外壳编写基础
      冯典
      看雪技术天才。看雪论坛ID为bughoho,1990年生,来自四川,看雪论坛虚拟机开发小组组长,目前工作主要是从事逆向研究。
      个人自述:记得14岁时家里买了台电脑,使我对编程有了极大的兴趣。16岁上高一时已对读书彻底不感兴趣,于是退学(现在的我才发现,我并不是对读书感兴趣,而是对教育制度的反感)。后来听了家人的意见,转读四川新华电脑学校,感受颇多,一月之后便退学,至于为什么我就不说了。17岁时,一个偶然的机会,使我对逆向有了浓厚的兴趣,并接触到看雪论坛,也认识到了kanxue。承蒙kanxue抬举,让我执笔虚拟机这一章,由于我并不是一个才高八斗的人,所以写得也没有那么的妙笔生花、鬼斧神工了。
      参与章节:第17章 虚拟机的设计 前言
    第1篇基础篇
    第1章基础知识
    1.1文本字符
    1.1.1字节存储顺序
    1.1.2ASCII与Unicode字符集

    1.2WINDOWS操作系统
    1.2.1WinAPI简介
    1.2.2常用Win32API函数
    1.2.3什么是句柄
    1.2.4Windows9x与Unicode
    1.2.5WindowsNT/2000/XP与Unicode
    1.2.6Windows消息机制

    1.3保护模式简介
    1.3.1虚拟内存
    1.3.2保护模式的权限级别
    1.4认识PE格式

    第2篇调试篇
    第2章动态分析技术33
    2.1OLLYDBG调试器
    2.1.1OllyDbg界面
    2.1.2OllyDbg的配置
    2.1.3加载程序
    2.1.4基本操作
    2.1.5断点
    2.1.6插件
    2.1.7Runtrace
    2.1.8Hittrace
    2.1.9符号调试技术
    2.1.10OllyDbg常见问题
    2.2SOFTICE调试器

    第3章静态分析技术31
    3.1文件类型分析
    3.1.1PEiD工具
    3.1.2FileInfo工具

    3.2静态反汇编
    3.2.1打开文件
    3.2.2IDA的配置
    3.2.3IDA主窗口界面
    3.2.6交叉参考
    3.2.7参考重命名
    3.2.8标签的用法
    3.2.9进制的转换
    3.2.10代码和数据转换
    3.2.11字符串
    3.2.12数组
    3.2.13结构体
    3.2.14枚举类型
    3.2.15堆栈变量
    3.2.16IDC脚本
    3.2.17FLIRT
    3.2.18插件
    3.2.19其他功能
    3.2.20小结
    3.3可执行文件的修改
    3.4静态分析技术应用实例
    3.4.1解密初步
    3.4.2逆向工程初步

    第4章逆向分析技术35
    4.1启动函数
    4.2函数
    4.2.1函数的识别
    4.2.2函数的参数
    4.2.3函数的返回值

    4.3数据结构
    4.3.1局部变量
    4.3.2全局变量
    4.3.3数组
    4.4虚函数
    4.5控制语句
    4.5.1IF-THEN-ELSE语句
    4.5.2SWITCH-CASE语句
    4.5.3转移指令机器码的计算
    4.5.4条件设置指令
    4.5.5纯算法实现逻辑判断
    4.6循环语句

    4.7数学运算符
    4.7.1整数的加法和减法
    4.7.2整数的乘法
    4.7.3整数的除法

    4.8文本字符串
    4.8.1字符串存储格式
    4.8.2字符寻址指令
    4.8.3字母大小写转换
    4.8.4计算字符串的长度
    4.9指令修改技巧

    第3篇解密篇
    第5章常见的演示版保护技术34
    5.1序列号保护方式
    5.1.1序列号保护机制
    5.1.2如何攻击序列号保护
    5.1.3字符串比较形式
    5.1.4注册机制作
    5.2警告(NAG)窗口

    5.3时间限制
    5.3.1计时器
    5.3.2时间限制
    5.3.3拆解时间限制保护

    5.4菜单功能限制
    5.4.1相关函数
    5.4.2拆解菜单限制保护

    5.5KEYFILE保护
    5.5.1相关API函数
    5.5.2拆解KeyFile保护

    5.6网络验证
    5.6.1相关函数
    5.6.2网络验证破解一般思路

    5.7CD-CHECK
    5.7.1相关函数
    5.7.2拆解光盘保护

    5.8只运行一个实例
    5.8.1实现方案
    5.8.2实例
    5.9常用断点设置技巧

    第6章加密算法
    6.1单向散列算法
    6.1.1MD5算法
    6.1.2SHA算法
    6.1.3小结

    6.2对称加密算法
    6.2.1RC4流密码
    6.2.2TEA算法
    6.2.3IDEA算法
    6.2.4BlowFish算法
    6.2.5AES算法
    6.2.6对称加密算法小结

    6.3公开密钥加密算法
    6.3.1RSA算法
    6.3.2ElGamal公钥算法
    6.3.3DSA数字签名算法
    6.3.4椭圆曲线密码编码学

    6.4.1CRC32算法
    6.4.2Base64
    6.5常见加密库接口及其识别
    6.5.1Miracl大数运算库
    6.5.2FGInt
    6.5.4其它加密算法库介绍

    第4篇语言和平台篇
    第7章DELPHI程序
    7.1认识DELPHI
    7.2DEDE反编译器
    7.3按钮事件代码
    7.4模块初始化与结束化

    第8章VISUALBASIC程序
    8.1基础知识
    8.1.1字符编码方式
    8.1.2编译模式

    8.2自然编译(NATIVE)
    8.2.1相关VB函数
    8.2.2VB程序比较方式

    8.3伪编译(PCODE)(cyclotron编写)
    8.3.1虚拟机与伪代码
    8.3.2动态分析VBP-code程序
    8.3.3伪代码的综合分析
    8.3.4VBP-code攻击实战

    第9章.NET平台加解密(tankaiha编写)51
    9.1.NET概述
    9.1.1什么是.Net
    9.1.2几个基本概念
    9.1.3第一个.Net程序

    9.2MSIL与元数据
    9.2.1PE结构的扩展
    9.2.2.Net下的汇编MSIL
    9.2.3MSIL与元数据的结合

    9.3代码分析技术
    9.3.1静态分析
    9.3.2动态调试
    9.3.3代码修改

    9.4代码保护技术及其逆向
    9.4.1强名称
    9.4.2名称混淆
    9.4.3流程混淆
    9.4.4压缩
    9.4.5加密
    9.4.6其它保护手段

    9.5深入.NET
    9.5.1反射与CodeDOM
    9.5.2UnmaganedAPI
    9.5.3Rotor、MONO与.Net内核

    第5篇系统篇
    第10章PE文件格式54
    10.1PE的基本概念
    10.1.1基地址
    10.1.2相对虚拟地址
    10.1.3文件偏移地址
    10.2MS-DOS头部

    10.3PE文件头
    10.3.1Signature字段
    10.3.2IMAGE_FILE_HEADER结构
    10.3.3OptionalHeader

    10.4区块
    10.4.1区块表
    10.4.2各种区块的描述
    10.4.3区块的对齐值
    10.4.4文件偏移与虚拟地址转换

    10.5输入表
    10.5.1输入函数的调用
    10.5.2输入表结构
    10.5.3输入地址表
    10.5.4输入表实例分析
    10.6绑定输入

    10.7输出表
    10.7.1输出表结构
    10.7.2输出表结构实例分析

    10.8基址重定位
    10.8.1基址重定位概念
    10.8.2基址重定位结构定义
    10.8.3基址重定位结构实例分析

    10.9资源
    10.9.1资源结构
    10.9.2资源结构实例分析
    10.9.3资源编辑工具
    10.10TLS初始化
    10.11调试目录
    10.12延迟装入数据
    10.13程序异常数据
    10.14.NET头部
    10.15PE分析工具编写
    10.15.1文件格式检查
    10.15.2FileHeader和OptionalHeader内容的读取
    10.15.3得到数据目录表信息
    10.15.4得到区块表信息
    10.15.5得到输出表信息
    10.15.6得到输入表信息

    第11章结构化异常处理11
    11.1基本概念
    11.1.1异常列表
    11.1.2异常处理的基本过程
    11.1.3SEH的分类

    11.2SEH相关数据结构
    11.2.1TEB结构
    11.2.2EXCEPTION_REGISTRATION结构
    11.2.3EXCEPTION_POINTERS、EXCEPTION_RECORD、CONTEXT
    11.3异常处理回调函数

    第6篇脱壳篇
    第12章专用加密软件11
    12.1认识壳
    12.1.1壳的概念
    12.1.2压缩引擎
    12.2压缩壳
    12.2.1UPX
    12.2.2ASPacK

    12.3加密壳
    12.3.1ASProtect
    12.3.2Armadillo
    12.3.3EXECryptor
    12.3.4Themida

    12.4虚拟机保护软件
    12.4.1虚拟机介绍
    12.4.2VMProtect简介

    第13章脱壳技术64
    13.1基础知识
    13.1.1壳的加载过程
    13.1.2脱壳机
    13.1.3手动脱壳

    13.2寻找OEP
    13.2.1根据跨段指令寻找OEP
    13.2.2用内存访问断点找OEP
    13.2.3根据堆栈平衡原理找OEP
    13.2.4根据编译语言特点找OEP

    13.3抓取内存映像
    13.3.1Dump原理
    13.3.2反DUMP技术

    13.4重建输入表
    13.4.1输入表重建的原理
    13.4.2确定IAT的地址和大小
    13.4.3根据IAT重建输入表
    13.4.4ImportREC重建输入表
    13.4.5输入表加密概括

    13.5DLL文件脱壳
    13.5.1寻找OEP
    13.5.2Dump映像文件
    13.5.3重建DLL的输入表
    13.5.4构造重定位表
    13.6附加数据
    13.7PE文件的优化
    13.8压缩壳
    13.8.1UPX外壳
    13.8.2ASPack外壳
    13.9静态脱壳
    13.9.1外壳Loader的分析
    13.9.2编写静态脱壳器
    13.10加密壳
    13.10.1ASProtect
    13.10.2Thmedia的SDK分析

    第7篇保护篇
    第14章软件保护技术26
    14.1防范算法求逆
    14.1.1基本概念
    14.1.2堡垒战术
    14.1.3游击战术

    14.2抵御静态分析
    14.2.1花指令
    14.2.2SMC技术实现
    14.2.3信息隐藏
    14.2.4简单多态变形技术

    14.3文件完整性检验
    14.3.1磁盘文件校验实现
    14.3.2校验和(Checksum)
    14.3.3内存映像校验

    14.4代码与数据结合技术
    14.4.1准备工作
    14.4.2加密算法选用
    14.4.3手动加密代码
    14.4.4使.text区块可写
    14.5软件保护的若干忠告

    第15章反跟踪技术(forgot编写)52
    15.1由BEINGDEBUGGED引发的蝴蝶效应
    15.1.1BeingDebugged
    15.1.2NtGlobalFlag
    15.1.3HeapMagic
    15.1.4从源头消灭BeingDebugged

    15.2回归NATIVE:用户态的梦魇
    15.2.1CheckRemoteDebuggerPresent
    15.2.2ProcessDebugPort
    15.2.3ThreadHideFromDebugger
    15.2.4DebugObject
    15.2.5SystemKernelDebuggerInformation
    15.2.6NativeAPI
    15.2.7Hook和AntiHook

    15.3真正的奥秘:小技巧一览
    15.3.1SoftICE检测方法
    15.3.2OllyDbg检测方法
    15.3.3调试器漏洞
    15.3.4防止调试器附加
    15.3.5父进程检测
    15.3.6时间差
    15.3.7通过TrapFlag检测
    15.3.8双进程保护

    第16章外壳编写基础(Hying编写)35
    16.1外壳的结构
    16.2加壳主程序
    16.2.1判断文件是否为PE格式
    16.2.2文件基本数据读入
    16.2.3附加数据读取
    16.2.4输入表处理
    16.2.5重定位表处理
    16.2.6文件的压缩
    16.2.7资源数据处理
    16.2.8区块的融合

    16.3外壳部分编写
    16.3.1外壳的加载过程
    16.3.2自建输入表
    16.3.4外壳引导段
    16.3.5外壳第二段
    16.4将外壳部分添加至原程序

    第17章虚拟机的设计
    17.1原理
    17.1.1反汇编引擎
    17.1.2指令分类

    17.2启动框架和调用约定
    17.2.1调度器VStartVM
    17.2.2虚拟环境:VMContext
    17.2.3平衡堆栈:VBegin和VCheckEsp

    17.3HANDLER的设计
    17.3.1辅助Handler
    17.3.2普通Handler和指令拆解
    17.3.3标志位问题
    17.3.4相同作用的指令
    17.3.5转移指令
    17.3.6转移跳转指令的另一种实现
    17.3.7CALL指令
    17.3.8retn指令
    17.3.9不可模拟指令

    17.4托管代码的异常处理
    17.4.1VC++的异常处理
    17.4.2Delphi的异常处理
    17.5小结

    第8篇PEDIY篇
    第18章补丁技术
    18.1文件补丁
    18.2内存补丁
    18.2.1跨进程内存存取机制
    18.2.2DebugAPI机制
    18.2.3利用调试寄存器机制
    18.2.4DLL劫持技术

    18.3SMC补丁技术
    18.3.1单层SMC补丁技术
    18.3.2多层SMC补丁技术
    18.4补丁工具

    第19章代码的二次开发
    19.1数据对齐
    19.2增加空间
    19.2.1区块间隙
    19.2.2手工构造区块
    19.2.3工具辅助构造区块

    19.3获得函数的调用
    19.3.1增加输入函数
    19.3.2显式链接调用DLL

    19.4代码的重定位
    19.4.1修复重定位表
    19.4.2代码的自定位技术
    19.5增加输出函数

    19.6消息循环
    19.6.1WndProc函数
    19.6.2寻找消息循环
    19.6.3WndProc汇编形式

    19.7修改WNDPROC扩充功能
    19.7.1扩充WndProc
    19.7.2扩充Exit菜单功能
    19.7.3扩充Open菜单功能

    19.8增加接口
    19.8.1用DLL增加功能
    19.8.2扩展消息循环

    附录
    附录A浮点指令
    附录B在VisualC++中使用内联汇编
    术语表
    参考文献
  • 内容简介:
      本书以加密与解密为切入点,讲述了软件安全领域许多基础知识和技能,如调试技能、逆向分析、加密保护、外壳开发、虚拟机设计等。读者在掌握本书的内容,很容易在漏洞分析、安全编程、病毒分析、软件保护等领域扩展,这些知识点都是相互的,彼此联系。国内高校对软件安全这块领域教育重视程度还不够,许多方面还是空白,而近年来许多企业对软件安全技术人才需求量越来越大。从就业角度来说,掌握这方面技术,可以提高自身的竞争能力;从个人成长角度来说,研究软件安全技术有助于掌握一些系统底层知识,是提升职业技能的重要途径。作为一名合格的程序员,除了掌握需求分析、设计模式等外,如能掌握一些系统底层知识,熟悉整个系统的底层结构,对自己的工作必将获益良多。
      本书可以作为学校或培训机构的软件安全辅助教材,是安全技术爱好者、调试人员、程序开发人员不可多得的一本好书。
  • 作者简介:
      本书由看雪软件安全网站(看雪学院)站长段钢主持编著。在本书的编写过程中,参与创作的每位作者倾力将各自擅长的专业技术毫无保留地奉献给广大读者,使得本书展现出了极具价值的丰富内容。如果读者在阅读本书后,能够感受到管窥技术奥秘带来的内心的喜悦,并愿意与大家分享这份感受,这是作者很大的愿望。
      主编:段钢
      编委:(按章节顺序排列)
      Blowfish,沈晓斌,丁益青,单海波,王勇,赵勇,唐植明,softworm,afanty,李江涛,林子深,印豪,冯典,罗翼,林小华,郭春杨
      Blowfish
      看雪首席版主。经验丰富的大龄程序员。1992年上大学始接触电脑,1997年读研期间接触网络并自学加密解密技术,一发不可收拾,其时常在教育网BBS灌水。喜多方涉猎,亦能抓住一点深入钻研,对逆向分析技术尤为痴迷。多年来常在看雪论坛灌水,见证了论坛的风风雨雨,也结识了一些不错的朋友。
      参与章节:
      第5章 5.1序列号保护方式
      第14章 14.5软件保护的若干忠告
      沈晓斌
      看雪核心专家团队成员。看雪论坛ID为cnbragon,现攻读密码学专业硕士学位。最初的爱好是网络安全,进而研究软件的逆向工程,对密码学的兴趣由此而发。对密码学的各个方面都有所涉猎,尤其擅长密码学在软件保护中的应用研究。独立完成了一个加密算法库CryptoFBC。译作有《程序员密码学》。
      参与章节:第6章 加密算法
      丁益青
      看雪技术专家。看雪论坛ID为cyclotron,复旦大学在读硕士研究生,复旦大学日月光华BBS黑客与系统安全版版主,致力于Windows环境下可执行文件的加密解密与逆向工程研究。主要作品有EmbedPE、IDTProtector、PEunLOCK等。
      参与章节:第8章 8.3伪编译
      单海波
      看雪核心专家团队成员。看雪论坛ID为tankaiha,生于六朝古都南京,硕士研究生毕业,现任某研究所工程师,工作之余好与计算机为伴。2002年接触汇编并热衷于病毒技术学习,后偶遇看雪学院,遂终日游戏于程序加密与解密,不可自拔。2006年与kanxue及坛中数位好友成立.net安全小组DST(DotnetReverseTeam),共同探讨.net平台下的软件安全技术。
      参与章节:第9章 .Net平台加解密
      王勇
      看雪技术专家。毕业于石油大学(华东)计算机科学与技术专业。擅长C/C++、ASM和驱动程序开发。对面向对象程序设计和Windows系统底层的研究有丰富的经验。很高兴这次能与各位高手一起合作,也希望能与编程爱好者及加密解密爱好者更多的交流。
      参与章节:第10章 10.15编写PE分析工具
      赵勇
      看雪技术专家。来自江苏江阴,计算机业余爱好者,兴趣爱好广泛。
      参与章节:第13章 13.6附加数据
      唐植明
      看雪技术核心专业。看雪论坛ID为DiKeN,2002年毕业于兰州大学,计算机科学与技术专业。爱好逆向工程,iPB(insidePandorasBox)组织创始人(在这儿更是要感谢组织的兄弟姐妹们,大家团结友好,互相学习,为iPB的成功作出了巨大努力),曾在2002年编写过《加密与解密实战攻略》算法部分。
      参与章节:第13章 13.10静态脱壳
      softworm
      看雪技术天才。70后一代,非计算机专业的业余爱好者。1998年开始接触逆向与破解,迄今已近10年,终于达到了“知道自己不知道”的境界。感兴趣的方向包括壳、虚拟机保护、病毒引擎、Rootkit。后两项还处于只知道名字的水平,愿与有共同爱好的朋友一起学习。
      参与章节:第13章 13.9.2Thmedia的SDK分析
      afanty
      看雪技术专家。多年专业研究软件加解密技术。
      参与章节:第14章 14.1防范算法求逆
      李江涛
      看雪技术核心专业。看雪论坛ID为ljtt,喜欢学习编程技术,常用编程语言为VC/MASM。对PB、VFP的反编译有深入的研究,写过DePB、FoxSpy等程序。平时大多数时间都在电脑上耕作,很大的希望是能够领悟到编程的精髓,写一个自己比较满意的作品。
      参与章节:第14章 14.2.2SMC技术实现
      林子深
      看雪技术导师。看雪论坛ID为forgot,1989年生,看雪论坛外壳开发小组组长。熟悉Win32平台和80x86汇编,擅长代码的逆向,对壳的研究比较多。
      参与章节:
      第12章 12.4.1虚拟机介绍
      第14章 14.2.4简单的多态变形技术
      第15章 反跟踪技术
      印豪
      看雪资深技术专业。看雪论坛ID为Hying,擅长加壳技术,拥有独立创作的加密利器。
      参与章节:第16章 外壳编写基础
      冯典
      看雪技术天才。看雪论坛ID为bughoho,1990年生,来自四川,看雪论坛虚拟机开发小组组长,目前工作主要是从事逆向研究。
      个人自述:记得14岁时家里买了台电脑,使我对编程有了极大的兴趣。16岁上高一时已对读书彻底不感兴趣,于是退学(现在的我才发现,我并不是对读书感兴趣,而是对教育制度的反感)。后来听了家人的意见,转读四川新华电脑学校,感受颇多,一月之后便退学,至于为什么我就不说了。17岁时,一个偶然的机会,使我对逆向有了浓厚的兴趣,并接触到看雪论坛,也认识到了kanxue。承蒙kanxue抬举,让我执笔虚拟机这一章,由于我并不是一个才高八斗的人,所以写得也没有那么的妙笔生花、鬼斧神工了。
      参与章节:第17章 虚拟机的设计
  • 目录:
    前言
    第1篇基础篇
    第1章基础知识
    1.1文本字符
    1.1.1字节存储顺序
    1.1.2ASCII与Unicode字符集

    1.2WINDOWS操作系统
    1.2.1WinAPI简介
    1.2.2常用Win32API函数
    1.2.3什么是句柄
    1.2.4Windows9x与Unicode
    1.2.5WindowsNT/2000/XP与Unicode
    1.2.6Windows消息机制

    1.3保护模式简介
    1.3.1虚拟内存
    1.3.2保护模式的权限级别
    1.4认识PE格式

    第2篇调试篇
    第2章动态分析技术33
    2.1OLLYDBG调试器
    2.1.1OllyDbg界面
    2.1.2OllyDbg的配置
    2.1.3加载程序
    2.1.4基本操作
    2.1.5断点
    2.1.6插件
    2.1.7Runtrace
    2.1.8Hittrace
    2.1.9符号调试技术
    2.1.10OllyDbg常见问题
    2.2SOFTICE调试器

    第3章静态分析技术31
    3.1文件类型分析
    3.1.1PEiD工具
    3.1.2FileInfo工具

    3.2静态反汇编
    3.2.1打开文件
    3.2.2IDA的配置
    3.2.3IDA主窗口界面
    3.2.6交叉参考
    3.2.7参考重命名
    3.2.8标签的用法
    3.2.9进制的转换
    3.2.10代码和数据转换
    3.2.11字符串
    3.2.12数组
    3.2.13结构体
    3.2.14枚举类型
    3.2.15堆栈变量
    3.2.16IDC脚本
    3.2.17FLIRT
    3.2.18插件
    3.2.19其他功能
    3.2.20小结
    3.3可执行文件的修改
    3.4静态分析技术应用实例
    3.4.1解密初步
    3.4.2逆向工程初步

    第4章逆向分析技术35
    4.1启动函数
    4.2函数
    4.2.1函数的识别
    4.2.2函数的参数
    4.2.3函数的返回值

    4.3数据结构
    4.3.1局部变量
    4.3.2全局变量
    4.3.3数组
    4.4虚函数
    4.5控制语句
    4.5.1IF-THEN-ELSE语句
    4.5.2SWITCH-CASE语句
    4.5.3转移指令机器码的计算
    4.5.4条件设置指令
    4.5.5纯算法实现逻辑判断
    4.6循环语句

    4.7数学运算符
    4.7.1整数的加法和减法
    4.7.2整数的乘法
    4.7.3整数的除法

    4.8文本字符串
    4.8.1字符串存储格式
    4.8.2字符寻址指令
    4.8.3字母大小写转换
    4.8.4计算字符串的长度
    4.9指令修改技巧

    第3篇解密篇
    第5章常见的演示版保护技术34
    5.1序列号保护方式
    5.1.1序列号保护机制
    5.1.2如何攻击序列号保护
    5.1.3字符串比较形式
    5.1.4注册机制作
    5.2警告(NAG)窗口

    5.3时间限制
    5.3.1计时器
    5.3.2时间限制
    5.3.3拆解时间限制保护

    5.4菜单功能限制
    5.4.1相关函数
    5.4.2拆解菜单限制保护

    5.5KEYFILE保护
    5.5.1相关API函数
    5.5.2拆解KeyFile保护

    5.6网络验证
    5.6.1相关函数
    5.6.2网络验证破解一般思路

    5.7CD-CHECK
    5.7.1相关函数
    5.7.2拆解光盘保护

    5.8只运行一个实例
    5.8.1实现方案
    5.8.2实例
    5.9常用断点设置技巧

    第6章加密算法
    6.1单向散列算法
    6.1.1MD5算法
    6.1.2SHA算法
    6.1.3小结

    6.2对称加密算法
    6.2.1RC4流密码
    6.2.2TEA算法
    6.2.3IDEA算法
    6.2.4BlowFish算法
    6.2.5AES算法
    6.2.6对称加密算法小结

    6.3公开密钥加密算法
    6.3.1RSA算法
    6.3.2ElGamal公钥算法
    6.3.3DSA数字签名算法
    6.3.4椭圆曲线密码编码学

    6.4.1CRC32算法
    6.4.2Base64
    6.5常见加密库接口及其识别
    6.5.1Miracl大数运算库
    6.5.2FGInt
    6.5.4其它加密算法库介绍

    第4篇语言和平台篇
    第7章DELPHI程序
    7.1认识DELPHI
    7.2DEDE反编译器
    7.3按钮事件代码
    7.4模块初始化与结束化

    第8章VISUALBASIC程序
    8.1基础知识
    8.1.1字符编码方式
    8.1.2编译模式

    8.2自然编译(NATIVE)
    8.2.1相关VB函数
    8.2.2VB程序比较方式

    8.3伪编译(PCODE)(cyclotron编写)
    8.3.1虚拟机与伪代码
    8.3.2动态分析VBP-code程序
    8.3.3伪代码的综合分析
    8.3.4VBP-code攻击实战

    第9章.NET平台加解密(tankaiha编写)51
    9.1.NET概述
    9.1.1什么是.Net
    9.1.2几个基本概念
    9.1.3第一个.Net程序

    9.2MSIL与元数据
    9.2.1PE结构的扩展
    9.2.2.Net下的汇编MSIL
    9.2.3MSIL与元数据的结合

    9.3代码分析技术
    9.3.1静态分析
    9.3.2动态调试
    9.3.3代码修改

    9.4代码保护技术及其逆向
    9.4.1强名称
    9.4.2名称混淆
    9.4.3流程混淆
    9.4.4压缩
    9.4.5加密
    9.4.6其它保护手段

    9.5深入.NET
    9.5.1反射与CodeDOM
    9.5.2UnmaganedAPI
    9.5.3Rotor、MONO与.Net内核

    第5篇系统篇
    第10章PE文件格式54
    10.1PE的基本概念
    10.1.1基地址
    10.1.2相对虚拟地址
    10.1.3文件偏移地址
    10.2MS-DOS头部

    10.3PE文件头
    10.3.1Signature字段
    10.3.2IMAGE_FILE_HEADER结构
    10.3.3OptionalHeader

    10.4区块
    10.4.1区块表
    10.4.2各种区块的描述
    10.4.3区块的对齐值
    10.4.4文件偏移与虚拟地址转换

    10.5输入表
    10.5.1输入函数的调用
    10.5.2输入表结构
    10.5.3输入地址表
    10.5.4输入表实例分析
    10.6绑定输入

    10.7输出表
    10.7.1输出表结构
    10.7.2输出表结构实例分析

    10.8基址重定位
    10.8.1基址重定位概念
    10.8.2基址重定位结构定义
    10.8.3基址重定位结构实例分析

    10.9资源
    10.9.1资源结构
    10.9.2资源结构实例分析
    10.9.3资源编辑工具
    10.10TLS初始化
    10.11调试目录
    10.12延迟装入数据
    10.13程序异常数据
    10.14.NET头部
    10.15PE分析工具编写
    10.15.1文件格式检查
    10.15.2FileHeader和OptionalHeader内容的读取
    10.15.3得到数据目录表信息
    10.15.4得到区块表信息
    10.15.5得到输出表信息
    10.15.6得到输入表信息

    第11章结构化异常处理11
    11.1基本概念
    11.1.1异常列表
    11.1.2异常处理的基本过程
    11.1.3SEH的分类

    11.2SEH相关数据结构
    11.2.1TEB结构
    11.2.2EXCEPTION_REGISTRATION结构
    11.2.3EXCEPTION_POINTERS、EXCEPTION_RECORD、CONTEXT
    11.3异常处理回调函数

    第6篇脱壳篇
    第12章专用加密软件11
    12.1认识壳
    12.1.1壳的概念
    12.1.2压缩引擎
    12.2压缩壳
    12.2.1UPX
    12.2.2ASPacK

    12.3加密壳
    12.3.1ASProtect
    12.3.2Armadillo
    12.3.3EXECryptor
    12.3.4Themida

    12.4虚拟机保护软件
    12.4.1虚拟机介绍
    12.4.2VMProtect简介

    第13章脱壳技术64
    13.1基础知识
    13.1.1壳的加载过程
    13.1.2脱壳机
    13.1.3手动脱壳

    13.2寻找OEP
    13.2.1根据跨段指令寻找OEP
    13.2.2用内存访问断点找OEP
    13.2.3根据堆栈平衡原理找OEP
    13.2.4根据编译语言特点找OEP

    13.3抓取内存映像
    13.3.1Dump原理
    13.3.2反DUMP技术

    13.4重建输入表
    13.4.1输入表重建的原理
    13.4.2确定IAT的地址和大小
    13.4.3根据IAT重建输入表
    13.4.4ImportREC重建输入表
    13.4.5输入表加密概括

    13.5DLL文件脱壳
    13.5.1寻找OEP
    13.5.2Dump映像文件
    13.5.3重建DLL的输入表
    13.5.4构造重定位表
    13.6附加数据
    13.7PE文件的优化
    13.8压缩壳
    13.8.1UPX外壳
    13.8.2ASPack外壳
    13.9静态脱壳
    13.9.1外壳Loader的分析
    13.9.2编写静态脱壳器
    13.10加密壳
    13.10.1ASProtect
    13.10.2Thmedia的SDK分析

    第7篇保护篇
    第14章软件保护技术26
    14.1防范算法求逆
    14.1.1基本概念
    14.1.2堡垒战术
    14.1.3游击战术

    14.2抵御静态分析
    14.2.1花指令
    14.2.2SMC技术实现
    14.2.3信息隐藏
    14.2.4简单多态变形技术

    14.3文件完整性检验
    14.3.1磁盘文件校验实现
    14.3.2校验和(Checksum)
    14.3.3内存映像校验

    14.4代码与数据结合技术
    14.4.1准备工作
    14.4.2加密算法选用
    14.4.3手动加密代码
    14.4.4使.text区块可写
    14.5软件保护的若干忠告

    第15章反跟踪技术(forgot编写)52
    15.1由BEINGDEBUGGED引发的蝴蝶效应
    15.1.1BeingDebugged
    15.1.2NtGlobalFlag
    15.1.3HeapMagic
    15.1.4从源头消灭BeingDebugged

    15.2回归NATIVE:用户态的梦魇
    15.2.1CheckRemoteDebuggerPresent
    15.2.2ProcessDebugPort
    15.2.3ThreadHideFromDebugger
    15.2.4DebugObject
    15.2.5SystemKernelDebuggerInformation
    15.2.6NativeAPI
    15.2.7Hook和AntiHook

    15.3真正的奥秘:小技巧一览
    15.3.1SoftICE检测方法
    15.3.2OllyDbg检测方法
    15.3.3调试器漏洞
    15.3.4防止调试器附加
    15.3.5父进程检测
    15.3.6时间差
    15.3.7通过TrapFlag检测
    15.3.8双进程保护

    第16章外壳编写基础(Hying编写)35
    16.1外壳的结构
    16.2加壳主程序
    16.2.1判断文件是否为PE格式
    16.2.2文件基本数据读入
    16.2.3附加数据读取
    16.2.4输入表处理
    16.2.5重定位表处理
    16.2.6文件的压缩
    16.2.7资源数据处理
    16.2.8区块的融合

    16.3外壳部分编写
    16.3.1外壳的加载过程
    16.3.2自建输入表
    16.3.4外壳引导段
    16.3.5外壳第二段
    16.4将外壳部分添加至原程序

    第17章虚拟机的设计
    17.1原理
    17.1.1反汇编引擎
    17.1.2指令分类

    17.2启动框架和调用约定
    17.2.1调度器VStartVM
    17.2.2虚拟环境:VMContext
    17.2.3平衡堆栈:VBegin和VCheckEsp

    17.3HANDLER的设计
    17.3.1辅助Handler
    17.3.2普通Handler和指令拆解
    17.3.3标志位问题
    17.3.4相同作用的指令
    17.3.5转移指令
    17.3.6转移跳转指令的另一种实现
    17.3.7CALL指令
    17.3.8retn指令
    17.3.9不可模拟指令

    17.4托管代码的异常处理
    17.4.1VC++的异常处理
    17.4.2Delphi的异常处理
    17.5小结

    第8篇PEDIY篇
    第18章补丁技术
    18.1文件补丁
    18.2内存补丁
    18.2.1跨进程内存存取机制
    18.2.2DebugAPI机制
    18.2.3利用调试寄存器机制
    18.2.4DLL劫持技术

    18.3SMC补丁技术
    18.3.1单层SMC补丁技术
    18.3.2多层SMC补丁技术
    18.4补丁工具

    第19章代码的二次开发
    19.1数据对齐
    19.2增加空间
    19.2.1区块间隙
    19.2.2手工构造区块
    19.2.3工具辅助构造区块

    19.3获得函数的调用
    19.3.1增加输入函数
    19.3.2显式链接调用DLL

    19.4代码的重定位
    19.4.1修复重定位表
    19.4.2代码的自定位技术
    19.5增加输出函数

    19.6消息循环
    19.6.1WndProc函数
    19.6.2寻找消息循环
    19.6.3WndProc汇编形式

    19.7修改WNDPROC扩充功能
    19.7.1扩充WndProc
    19.7.2扩充Exit菜单功能
    19.7.3扩充Open菜单功能

    19.8增加接口
    19.8.1用DLL增加功能
    19.8.2扩展消息循环

    附录
    附录A浮点指令
    附录B在VisualC++中使用内联汇编
    术语表
    参考文献
查看详情
好书推荐 / 更多
加密与解密
古代中国文化讲义
葛兆光 著
加密与解密
历史的坏脾气:晚近中国的另类观察(增订版)
张鸣
加密与解密
清朝大历史(精)
常建华 著
加密与解密
里程碑文库|摩天大楼:始于芝加哥的摩登时代
[英]丹·克鲁克香克 著;高银 译
加密与解密
终结所有和平的和平
戴维·弗罗姆金 著;栾力夫 译
加密与解密
本雅明档案
瓦尔特·本雅明档案馆 编;李士勋 译
加密与解密
亚马逊效应
[美]娜塔莉·伯格(Natalie Berg);[美]米娅·奈茨(Miya Knights)
加密与解密
衣柜(诺贝尔文学奖得主奥尔加·托卡尔丘克小说集)
[波兰]奥尔加·托卡尔丘克 著
加密与解密
给樱桃以性别
[英]珍妮特·温特森 著;新经典 出品
加密与解密
背叛(布克奖全美书评家协会奖,《纽约时报》十大好书)
保罗.比第 著;邓晓菁 译
加密与解密
防风林的外边
黄启泰 ;后浪
加密与解密
单行道/本雅明作品系列
[德]瓦尔特·本雅明 著;姜雪 译