• 首页
  • Java前后端
  • Cpp嵌入式
  • Go云原生
  • Linux安全
  • Win安全
  • 数据与算法
  • 工作相关
  • 文章标签

    Tags

    • AI
    • Boost库
    • Collection
    • Cpp编程
    • Fescar
    • Gc
    • K8s
    • Linux
    • MapReduce
    • Math
    • Net
    • Nosql
    • Python计算库
    • Rust
    • Sharding-jdbc
    • SkyWalking
    • Spark
    • TensorFlow
    • Turi
    • Windows系统
    • Windows驱动
    • Yarn
    • assembly
    • c/cpp语言
    • debug
    • design
    • docker
    • dubbo
    • eth
    • flume
    • go
    • go-kernel
    • io
    • java
    • juc
    • kubernetes
    • map
    • mfc
    • microservice
    • mybatis
    • netty
    • python-book
    • qt
    • sentinel
    • skycoin
    • spring
    • spring-cloud
    • stl
    • tomcat
    • x86 Windows系统总结
    • 中台
    • 分布式文件系统
    • 多线程编程
    • 嵌入式
    • 架构
    • 消息队列
    • 网络编程
  • 历史归档
    1. 1. 基础篇
      1. 1.1. 逆向分析技术
      2. 1.2. ASCII与Unicode字符集
      3. 1.3. Windows操作系统
        1. 1.3.1. Win32Api函数
        2. 1.3.2. WOW64
        3. 1.3.3. Windows消息机制
        4. 1.3.4. 虚拟内存
    2. 2. 调试篇
      1. 2.1. 动态分析技术
        1. 2.1.1. OllyDbg调试器
          1. 2.1.1.1. 算法分析
          2. 2.1.1.2. 常用断点
            1. 2.1.1.2.1. INT3 断点
            2. 2.1.1.2.2. 硬件断点
          3. 2.1.1.3. 内存断点
          4. 2.1.1.4. 内存访问一次性断点
          5. 2.1.1.5. 消息断点
          6. 2.1.1.6. 条件断点
            1. 2.1.1.6.1. 按寄存器条件中断
            2. 2.1.1.6.2. 按存储器条件中断
        2. 2.1.2. MDebug调试器
        3. 2.1.3. WinDbg调试器
      2. 2.2. 静态分析技术
        1. 2.2.1. 文件类型分析
        2. 2.2.2. 反汇编引擎
          1. 2.2.2.1. Udis86
          2. 2.2.2.2. BeaEngine
          3. 2.2.2.3. OllyDbg的ODDisasm
          4. 2.2.2.4. AsmJit
        3. 2.2.3. IDAPro静态反汇编
        4. 2.2.4. 静态分析技术应用实例
          1. 2.2.4.1. 解密初步
          2. 2.2.4.2. 逆向工程初步
    3. 3. 解密篇
      1. 3.1. 逆向分析技术
        1. 3.1.1. 32位软件逆向
          1. 3.1.1.1. 启动函数
          2. 3.1.1.2. 函数
          3. 3.1.1.3. 数据结构
          4. 3.1.1.4. 虚函数
          5. 3.1.1.5. 控制语句
          6. 3.1.1.6. 循环语句
          7. 3.1.1.7. 数学运算符
          8. 3.1.1.8. 文字字符串
          9. 3.1.1.9. 指令修改技巧
        2. 3.1.2. 64未软件逆向
          1. 3.1.2.1. 寄存器
          2. 3.1.2.2. 函数
          3. 3.1.2.3. 数据结构
          4. 3.1.2.4. 循环语句
          5. 3.1.2.5. 数学运算符
          6. 3.1.2.6. 虚函数
      2. 3.2. 各类保护技术
        1. 3.2.1. 序列号保护方式
        2. 3.2.2. 警告窗口
        3. 3.2.3. 时间限制
        4. 3.2.4. 菜单功能限制
        5. 3.2.5. KeyFile保护
        6. 3.2.6. 网络验证
        7. 3.2.7. 光盘检测
      3. 3.3. 加密算法
        1. 3.3.1. 单向散列算法
          1. 3.3.1.1. MD5
          2. 3.3.1.2. SHA
          3. 3.3.1.3. SM3
        2. 3.3.2. 对称加密算法
          1. 3.3.2.1. RC4流密码
          2. 3.3.2.2. TEA算法
          3. 3.3.2.3. IDEA算法
          4. 3.3.2.4. BlowFish算法
          5. 3.3.2.5. AES算法
          6. 3.3.2.6. SM4分组密码算法
        3. 3.3.3. 公开密钥加密算法
          1. 3.3.3.1. RSA算法
          2. 3.3.3.2. ElGamal公钥算法
          3. 3.3.3.3. DSA数字签名算法
          4. 3.3.3.4. 椭圆曲线密码
          5. 3.3.3.5. SM2算法
        4. 3.3.4. 其他算法
          1. 3.3.4.1. CRC32算法
          2. 3.3.4.2. Base64编码
        5. 3.3.5. 常见加密库与识别
          1. 3.3.5.1. Miracl大数运算库
          2. 3.3.5.2. FGInt
    4. 4. 系统篇
      1. 4.1. Windows内核基础
        1. 4.1.1. 内核理论基础
          1. 4.1.1.1. 权限级别
          2. 4.1.1.2. 内存空间布局
          3. 4.1.1.3. Wndows与内核启动过程
          4. 4.1.1.4. Window R3与R0通信
          5. 4.1.1.5. 内核函数
          6. 4.1.1.6. 内核驱动模块
        2. 4.1.2. 内核重要数据结构
          1. 4.1.2.1. 内核对象
          2. 4.1.2.2. SSDT
          3. 4.1.2.3. TEB
          4. 4.1.2.4. PEB
      2. 4.2. Windows下的异常处理
        1. 4.2.1. 异常处理的基本概念
        2. 4.2.2. SEH的概念及基本知识
        3. 4.2.3. SEH异常处理程序原理及涉及
        4. 4.2.4. 向量化异常处理
        5. 4.2.5. x64平台上的异常处理
        6. 4.2.6. 异常处理程序涉及中的注意事项
        7. 4.2.7. 异常处理的实际应用
      3. 4.3. Win32调试Api
        1. 4.3.1. 调试相关函数说明
        2. 4.3.2. 调试事件
        3. 4.3.3. 创建并跟踪进程
        4. 4.3.4. 调试循环体
        5. 4.3.5. 处理调试事件
        6. 4.3.6. 线程环境
        7. 4.3.7. 将代码注入进程
      4. 4.4. PE文件格式
        1. 4.4.1. PE的概念
          1. 4.4.1.1. 基地址
          2. 4.4.1.2. 虚拟地址
          3. 4.4.1.3. 相对虚拟地址
          4. 4.4.1.4. 文件偏移地址
        2. 4.4.2. MS-DOS头部
        3. 4.4.3. PE文件头
        4. 4.4.4. 区块
          1. 4.4.4.1. 区块表
          2. 4.4.4.2. 常见区块与区块合并
          3. 4.4.4.3. 区块的对齐值
          4. 4.4.4.4. 文件偏移与虚拟地址转换
        5. 4.4.5. 输入表
          1. 4.4.5.1. 输入函数的调用
          2. 4.4.5.2. 输入表的结构
          3. 4.4.5.3. 输入地址表
          4. 4.4.5.4. 输入表实例分析
        6. 4.4.6. 绑定输入
        7. 4.4.7. 输出表
          1. 4.4.7.1. 输出表的结构
          2. 4.4.7.2. 输出表实例分析
        8. 4.4.8. 基址重定位
          1. 4.4.8.1. 基址重定位的概念
          2. 4.4.8.2. 基址重定位表的结构
          3. 4.4.8.3. 基址重定位表实例分析
        9. 4.4.9. 资源
          1. 4.4.9.1. 资源结构
          2. 4.4.9.2. 资源结构实例分析
          3. 4.4.9.3. 资源编辑工具
        10. 4.4.10. TLS初始化
        11. 4.4.11. 调试目录
        12. 4.4.12. 延迟载入数据
        13. 4.4.13. 调试目录
        14. 4.4.14. 延迟载入数据
        15. 4.4.15. 程序异常数据
      5. 4.5. 注入技术
        1. 4.5.1. Dll注入技术
        2. 4.5.2. Dll注入应用
        3. 4.5.3. Dll注入的防范
          1. 4.5.3.1. 驱动层防范
          2. 4.5.3.2. 应用层防范
      6. 4.6. Hook技术
        1. 4.6.1. Hook概述
          1. 4.6.1.1. Address Hook
            1. 4.6.1.1.1. PE的IAT
            2. 4.6.1.1.2. PE的EAT
            3. 4.6.1.1.3. user32.dll的回调函数表
            4. 4.6.1.1.4. IDT(系统的中断描述符表)
            5. 4.6.1.1.5. SSDT和Shadow SSDT
            6. 4.6.1.1.6. C++类的虚函数表
            7. 4.6.1.1.7. COM接口的功能函数列表
            8. 4.6.1.1.8. DRIVER_OBJECT中的MajorFunction及FastIo派遣例程地址
            9. 4.6.1.1.9. StartIo等特殊例程的地址
            10. 4.6.1.1.10. OBJECT_TYPE中_OBJECT_TYPE_INITIALIZER中包含的各种处理过程
            11. 4.6.1.1.11. 特殊寄存器中的地址
            12. 4.6.1.1.12. 特殊的函数指针
          2. 4.6.1.2. Inline Hook
            1. 4.6.1.2.1. 1. jmp XXxXXXxx (5字节)
            2. 4.6.1.2.2. 2. push xxxxxx/rein ( 6字节)
            3. 4.6.1.2.3. 3. mov eax, xxxxxxxx/jmp eax(7字节)
            4. 4.6.1.2.4. 4. call Hook(更换指令或输入表)
            5. 4.6.1.2.5. 5. HotPatch Hook
          3. 4.6.1.3. 基于异常处理的Hook
          4. 4.6.1.4. 不是Hook的Hook
            1. 4.6.1.4.1. PE病毒感染,修改了EntryPoint
            2. 4.6.1.4.2. 系统回调机制与分层模型
          5. 4.6.1.5. 案例
            1. 4.6.1.5.1. IAT Hook篡改MessageBox消息
            2. 4.6.1.5.2. Inline Hook篡改MessageBox消息
        2. 4.6.2. Hook的位置挑选
        3. 4.6.3. Hook的典型过程
          1. 4.6.3.1. Address Hook的实施过程
          2. 4.6.3.2. Inline Hook的实施过程
          3. 4.6.3.3. 基于异常处理的Hook的实施过程
          4. 4.6.3.4. 二次Hook的注意事项
          5. 4.6.3.5. 通过Hook引擎的实现
        4. 4.6.4. Detour函数的用法
        5. 4.6.5. Hook中的注意事项
        6. 4.6.6. Hook在x64平台上的新问题
        7. 4.6.7. Hook技术的应用
          1. 4.6.7.1. Hook的检测、恢复
          2. 4.6.7.2. Hook的对抗
    5. 5. 漏洞篇
      1. 5.1. 漏洞分析技术
        1. 5.1.1. 软件漏洞原理
          1. 5.1.1.1. 缓冲区溢出漏洞
          2. 5.1.1.2. 整型溢出漏洞
          3. 5.1.1.3. UAF漏洞
        2. 5.1.2. ShellCode
          1. 5.1.2.1. ShellCode的结构
          2. 5.1.2.2. ShellCode通用技术
          3. 5.1.2.3. 实战ShellCode的编写
        3. 5.1.3. 漏洞利用
          1. 5.1.3.1. 漏洞利用基本技术
          2. 5.1.3.2. 漏洞利用高级技术
        4. 5.1.4. 漏洞样本
        5. 5.1.5. 样本分析
          1. 5.1.5.1. 准备工作
          2. 5.1.5.2. 静态分析
          3. 5.1.5.3. 动态调试
          4. 5.1.5.4. 追根溯源
    6. 6. 脱壳篇
      1. 6.1. 专用加密软件
        1. 6.1.1. 认识壳
          1. 6.1.1.1. 壳的引擎
          2. 6.1.1.2. 压缩引擎
        2. 6.1.2. 压缩壳
          1. 6.1.2.1. UPX
          2. 6.1.2.2. ASPack
        3. 6.1.3. 加密壳
          1. 6.1.3.1. ASProtect
          2. 6.1.3.2. Armadillo
          3. 6.1.3.3. EXECryptor
          4. 6.1.3.4. Themida
        4. 6.1.4. 虚拟机保护软件
          1. 6.1.4.1. 虚拟机介绍
          2. 6.1.4.2. VMProtect简介
      2. 6.2. 脱壳技术
        1. 6.2.1. 基本知识
          1. 6.2.1.1. 壳的加载过程
          2. 6.2.1.2. 脱壳机
          3. 6.2.1.3. 手动脱壳
        2. 6.2.2. 寻找OEP
          1. 6.2.2.1. 根据跨段指令寻找OEP
          2. 6.2.2.2. 内存访问断点寻找OEP
          3. 6.2.2.3. 根据栈平衡原理寻找OEP
          4. 6.2.2.4. 根据编译语言特点寻找OEP
        3. 6.2.3. 抓取内存映像
          1. 6.2.3.1. Dump原理
          2. 6.2.3.2. 反Dump技术
        4. 6.2.4. 重建输入表
          1. 6.2.4.1. 输入表重建的原理
          2. 6.2.4.2. 确定IAT的地址和大小
          3. 6.2.4.3. 根据IAT的地址和大小
          4. 6.2.4.4. 根据IAT重建输入表
          5. 6.2.4.5. 用Import REC重建输入表
          6. 6.2.4.6. 输入表加密概括
        5. 6.2.5. Dll文件脱壳
          1. 6.2.5.1. 寻找OEP
          2. 6.2.5.2. Dump映像文件
          3. 6.2.5.3. 重建Dll的输入表
          4. 6.2.5.4. 构造重定位表
        6. 6.2.6. 附加数据
        7. 6.2.7. PE文件的优化
        8. 6.2.8. 压缩壳
          1. 6.2.8.1. UPX外壳
          2. 6.2.8.2. ASPack外壳
        9. 6.2.9. 加密壳
        10. 6.2.10. 静态脱壳
          1. 6.2.10.1. 外壳Loader分析
          2. 6.2.10.2. 编写静态脱壳器
    7. 7. 保护篇
      1. 7.1. 软件保护技术
        1. 7.1.1. 防范算法求逆
          1. 7.1.1.1. 基本概念
          2. 7.1.1.2. 堡垒战术
          3. 7.1.1.3. 游击战术
        2. 7.1.2. 抵静态分析
          1. 7.1.2.1. 花指令
          2. 7.1.2.2. SMC技术实现
          3. 7.1.2.3. 信息隐藏
          4. 7.1.2.4. 简单的多态变形技术
        3. 7.1.3. 文件完整性校验
          1. 7.1.3.1. 磁盘文件校验的实现
          2. 7.1.3.2. 校验和
          3. 7.1.3.3. 内存映像校验
        4. 7.1.4. 代码和数据结合
          1. 7.1.4.1. 准备工作
          2. 7.1.4.2. 加密算法的选用
          3. 7.1.4.3. 手动加密代码
          4. 7.1.4.4. 使.txt区块可写
      2. 7.2. 反跟踪技术
        1. 7.2.1. 由BeingDebugged引发的蝴蝶效应
          1. 7.2.1.1. BeingDebugged
          2. 7.2.1.2. NtGlobalFlag
          3. 7.2.1.3. HeapMagic
        2. 7.2.2. 回归Native:用户态的梦魇
          1. 7.2.2.1. CheckRemoteDebuggerPresent
          2. 7.2.2.2. ProcessDebugPort
          3. 7.2.2.3. ThreadHideFromDebugger
          4. 7.2.2.4. DebugObject
          5. 7.2.2.5. SystemKernelDebuggerInformation
          6. 7.2.2.6. NativeApi
          7. 7.2.2.7. Hook和AntiHook
        3. 7.2.3. 真正的奥义:小技巧一览
          1. 7.2.3.1. SoftICE检测方法
          2. 7.2.3.2. OllyDbg检测方法
          3. 7.2.3.3. 调试器漏洞
          4. 7.2.3.4. 防止调试器附加
          5. 7.2.3.5. 父进程检测
          6. 7.2.3.6. 时间差
          7. 7.2.3.7. 通过Trap Flag检测
          8. 7.2.3.8. 双进程保护
      3. 7.3. 外壳编写基础
        1. 7.3.1. 外壳结构
        2. 7.3.2. 加壳主程序
          1. 7.3.2.1. 判断文件是否PE格式
          2. 7.3.2.2. 文件基本数据读入
          3. 7.3.2.3. 附加数据读取
          4. 7.3.2.4. 输入表的处理
          5. 7.3.2.5. 重定位表的处理
          6. 7.3.2.6. 文件的压缩
          7. 7.3.2.7. 资源数据的处理
          8. 7.3.2.8. 区块的融合
        3. 7.3.3. 用汇编写外壳部分
          1. 7.3.3.1. 外壳的加载过程
          2. 7.3.3.2. 自建输入表
          3. 7.3.3.3. 外壳引导段
          4. 7.3.3.4. 将外壳添加至源程序
        4. 7.3.4. C++编写外壳部分
      4. 7.4. 虚拟机设计
        1. 7.4.1. 虚拟机保护技术原理
          1. 7.4.1.1. 反汇编引擎
          2. 7.4.1.2. 指令分类
        2. 7.4.2. 启动框架和调用约定
          1. 7.4.2.1. 调度器
          2. 7.4.2.2. 虚拟环境
          3. 7.4.2.3. 平衡栈vBegin和vCheckESP
        3. 7.4.3. Handler的设计
          1. 7.4.3.1. 辅助的Handler
          2. 7.4.3.2. 普通Handler和指令拆解
          3. 7.4.3.3. 标志位的问题
          4. 7.4.3.4. 相同作用的指令
          5. 7.4.3.5. 转移指令
          6. 7.4.3.6. 转移跳转指令的另一种实现
          7. 7.4.3.7. call指令
          8. 7.4.3.8. retn指令
          9. 7.4.3.9. 不可模拟指令
        4. 7.4.4. 托管代码的异常处理
          1. 7.4.4.1. VC++的异常处理
      5. 7.5. VMProtect逆向和还原浅析
        1. 7.5.1. VMProtect逆向分析
          1. 7.5.1.1. VMProtect虚拟执行引擎的全景图
          2. 7.5.1.2. VMProtect虚拟引擎的基本架构
        2. 7.5.2. VMProtect的还原
          1. 7.5.2.1. 虚拟执行系统
          2. 7.5.2.2. 生成完整的字节码流程图
          3. 7.5.2.3. Handler命名并添加语义动作
          4. 7.5.2.4. 字节码的低级描述转为中级描述
          5. 7.5.2.5. 清除无用的字节码
          6. 7.5.2.6. 用真值表化简要逻辑指令
          7. 7.5.2.7. 从特征中建立部分寄存器映射信息
          8. 7.5.2.8. 其他无法确定的寄存器图着色算法
          9. 7.5.2.9. 使用DAG匹配生成指令
    8. 8. 软件重构篇
      1. 8.1. 补丁技术
        1. 8.1.1. 文件补丁
        2. 8.1.2. 内存补丁
          1. 8.1.2.1. 跨进程内存存取机制
          2. 8.1.2.2. DebugApi机制
          3. 8.1.2.3. 利用调试器寄存器机制
          4. 8.1.2.4. 利用Dll注入技术
          5. 8.1.2.5. 利用Hook技术
          6. 8.1.2.6. 利用VT技术
        3. 8.1.3. SMC补丁技术
          1. 8.1.3.1. 单层SMC补丁技术
          2. 8.1.3.2. 多层SMC补丁技术
        4. 8.1.4. 补丁工具
      2. 8.2. 代码的二次开发
        1. 8.2.1. 数据对齐
        2. 8.2.2. 增加空间
          1. 8.2.2.1. 区块间隙
          2. 8.2.2.2. 手动构造区块
          3. 8.2.2.3. 工具辅助构造区块
        3. 8.2.3. 获得函数的调用信息
          1. 8.2.3.1. 增加输入函数
          2. 8.2.3.2. 显式链接调用Dll
        4. 8.2.4. 代码的重定位
          1. 8.2.4.1. 修复重定位表
          2. 8.2.4.2. 代码的自定位技术
        5. 8.2.5. 增加输出函数
        6. 8.2.6. 消息循环
          1. 8.2.6.1. WinProc函数
          2. 8.2.6.2. 寻找消息循环
          3. 8.2.6.3. WinProc汇编形式
        7. 8.2.7. 菜单扩展
          1. 8.2.7.1. 扩充WinProc
          2. 8.2.7.2. 扩充Exit菜单功能
          3. 8.2.7.3. 扩充Open菜单的功能
        8. 8.2.8. Dll扩展
          1. 8.2.8.1. 扩展接口
          2. 8.2.8.2. 扩展消息循环

    加密与解密第四版[笔记篇]

    2020-05-27

    国内查看评论需要代理~

    Powered by Hexo, Theme by Concise