小迪安全第8天:基础入门-算法分析 & 传输加密 & 数据格式 & 密文存储 & 代码混淆 & 逆向保护

一、课程定位与核心思想

1.1 为什么要学习加密与编码?

  • 核心目的:安全测试(漏洞挖掘)时,必须按目标系统的数据格式和加密方式提交Payload,否则测试无效

  • 关键原则以数据的正确格式发送,对方才能正确接收并进入业务逻辑

1.2 影响范围

表格

场景 影响环节 具体说明
传输数据加密/编码 漏洞探针 不按格式提交Payload,服务端无法识别
传输数据格式 漏洞探针 格式错误导致请求被拒绝
回显数据格式/加密 数据分析 无法判断响应结果(成功/失败)
密码存储加密 后渗透测试 拿到密文但无法解密,无法登录利用
源代码加密/混淆 代码审计 无法阅读源码,无法分析漏洞
逆向保护(加壳/加固) 逆向分析 无法反编译,无法分析程序逻辑

二、传输数据加密与编码

2.1 典型案例:URL参数Base64编码

场景id=MQ== 而非 id=1

  • 识别MQ== 是Base64特征(大小写+数字+=填充)

  • 解码MQ==1

  • 测试要点

    1. 直接修改 id=2失败(服务端期望编码格式)

    2. 正确做法:2 → Base64编码 → Mg== → 提交 id=Mg==

核心逻辑 :服务端接收→解码→代入业务逻辑。测试时必须对Payload进行同等编码/加密后再提交。

2.2 典型案例:登录密码MD5加密

场景 :明文123456 → 传输e10adc3949ba59abbe56e057f20f883e

  • 爆破要点 :密码字典需先进行同等MD5加密后再替换

  • 错误做法 :直接替换为123456

  • 正确做法:字典 → MD5加密 → 替换password字段

2.3 APP/小程序数据传输加密

特征

  • 请求参数为乱码字符串(非明文键值对)

  • 返回数据同样加密

测试难点

  • 无法直接修改参数测试漏洞

  • 无法判断返回结果含义(1=成功?2=失败?)


三、传输数据格式

3.1 常见数据格式对比

表格

格式 特征 示例
常规表单 key=value&key2=value2 username=admin&password=123
JSON 大括号+键值对,字符串用引号 {"username":"admin","password":"123"}
XML 标签嵌套结构 <user><name>admin</name></user>
数组/列表 中括号包裹 ["admin","123"]

3.2 格式对测试的影响

关键原则Payload必须嵌入正确的格式位置

plain

复制

复制代码
JSON格式示例:
{"username":"admin","password":"123"}

- 测试用户名注入点 → 在"admin"处构造Payload
- 测试密码注入点 → 在"123"处构造Payload
- 不能破坏JSON结构(如缺少引号、括号)

3.3 工具辅助识别(Burp Suite)

  • Params:标识请求是否含参数(✓表示有参数)

  • Type字段:显示数据类型

    • text/plain:纯文本

    • application/json:JSON格式

    • application/xml:XML格式

    • text/html:HTML格式


四、密码存储加密(数据库层面)

4.1 常见Web程序密码加密方式

表格

类型 算法特征 示例 解密方式
单纯MD5 32位/16位,十六进制字符 e10adc3949ba59abbe56e057f20f883e 在线MD5解密(碰撞)
MD5+盐(Salt) MD5值后拼接随机字符串 md5(password)+salt 需知道盐值位置
多重MD5 MD5(MD5(password)) 双层或多层MD5 逐层解密
复杂加密(AES/DES等) 含密钥、偏移量、模式 需密钥+IV+模式 需获取源码中的密钥

4.2 实战案例对比

案例1:JCMS(单纯MD5)

plain

复制

复制代码
明文:123456
密文:e10adc3949ba59abbe56e057f20f883e(32位MD5)
特征:标准MD5,可直接解密
案例2:Discuz 3.2(MD5+盐)

plain

复制

复制代码
加密逻辑:MD5(MD5(password).salt)
数据库字段:password + salt(分开存储)
解密条件:必须同时获取密文和盐值
案例3:Discuz 3.5(复杂加密)

plain

复制

复制代码
特征:无盐字段,密文格式变化
加密方式:类似AES,需密钥+偏移量+模式
解密条件:必须从源码中获取密钥(K)和偏移量(IV)
难度:无法直接解密,需分析源码

4.3 系统级密码加密

表格

系统 加密方式 存储位置 工具
Windows NTLM哈希 SAM数据库 Mimikatz(提取哈希)
Linux SHA-512/SHA-256等 /etc/shadow 查看shadow文件
MySQL MySQL5哈希(SHA1双重) mysql.user 专用解密工具

Windows NTLM示例

plain

复制

复制代码
工具:Mimikatz
提取:NTLM哈希值 → 复制到在线平台解密
类型:选择"NTLM"
限制:密码复杂度高时无法碰撞解密

五、源代码加密与混淆

5.1 PHP源码加密

场景:防止源码泄露,保护商业逻辑

加密效果

  • 原始代码:<?php echo "hello"; ?>

  • 加密后:乱码/特殊编码,无法直接阅读

  • 运行正常:加密代码仍可被PHP解析执行

对安全测试的影响

  • 无法直接审计代码逻辑

  • 需先解密或寻找未加密版本

5.2 JavaScript代码混淆

场景:前端JS代码保护

示例

JavaScript

复制

复制代码
// 原始代码
alert(1);

// 混淆后( eval加密 )
eval(function(p,a,c,k,e,d){...})(...);

处理方式

  1. 识别混淆类型(eval加密、obfuscator等)

  2. 使用对应解密平台/工具还原

  3. 还原后分析业务逻辑和接口

5.3 逆向保护与加壳

适用对象:EXE、APK、JAR、DLL等

保护方式

  • 加壳(UPX, ASPack等)

  • 代码虚拟化(VMP)

  • 反调试/反Hook

对安全测试的影响

  • 无法直接反编译APK获取源码

  • 无法分析客户端逻辑和加密算法

  • 需先脱壳/去保护


六、密文识别与解密思路

6.1 识别加密类型的方法

表格

识别维度 观察要点 示例
密文长度 MD5=32/16位,NTLM=32位 e10adc3949ba59abbe56e057f20f883e(32位→MD5)
字符特征 是否含大小写、数字、特殊符号 Base64含+/=;NTLM纯十六进制
来源位置 Web数据库→MD5类;Windows系统→NTLM 结合场景判断
数据结构 是否含盐字段、密钥字段 数据库中password+salt字段→带盐加密

6.2 解密的核心逻辑

碰撞解密(非真正逆向)

plain

复制

复制代码
原理:明文 → 加密算法 → 密文(正向计算)
      密文 ← 对比 ← 预计算明文库(反向碰撞)

限制:
- 密码复杂度决定碰撞成功率
- 123456 易碰撞
- Abc@123#xyz 难碰撞(组合空间太大)

密钥类加密(AES/DES等)

plain

复制

复制代码
解密条件(缺一不可):
1. 密文
2. 密钥(Key)
3. 偏移量(IV)
4. 加密模式(CBC/ECB等)
5. 填充方式(PKCS7等)

获取途径:分析源码/逆向程序/配置文件

6.3 解密流程图

plain

复制

复制代码
获取密文 → 识别类型 → 判断来源 → 尝试常规解密 → 成功?
   ↓           ↓          ↓            ↓
分析源码   长度/特征   Web/系统/DB   在线平台/工具   否→寻找密钥/盐值
   ↓                                              ↓
定位加密代码 → 提取算法逻辑 → 提取密钥/盐 → 自定义解密脚本

七、核心考点总结(SRC/CTF/面试)

7.1 必知概念

表格

考点 关键内容
Base64 编码非加密,特征:大小写字母+数字+=填充,用于传输
MD5 32位/16位,不可逆(碰撞解密),常见加盐
Salt(盐) 随机字符串,增加破解难度,存储位置是关键
NTLM Windows系统哈希,Mimikatz提取
AES/DES 对称加密,需密钥+IV,分析源码获取
JSON/XML 数据格式,Payload需符合格式要求

7.2 实战测试原则

  1. 传输加密:Payload先加密/编码,再提交

  2. 格式匹配:Payload嵌入正确格式位置,不破坏结构

  3. 回显分析:识别返回数据格式,判断测试结果

  4. 密码破解:识别加密方式→获取盐/密钥→构造解密

7.3 CTF常见题型

  • Base64隐写:多层Base64嵌套解码

  • MD5碰撞:给定密文找明文(弱口令)

  • Salt爆破 :已知盐,构造md5($pass.$salt)爆破

  • 前端JS解密:识别混淆方式,还原后找Flag

  • 伪加密ZIP:识别加密标志位,修改后解压

7.4 面试高频问题

Q:拿到一个MD5密文,如何尝试解密?

A:1) 判断长度(32/16位确认MD5);2) 在线平台碰撞解密;3) 失败则判断是否加盐(查数据库是否有salt字段);4) 有盐则获取盐值,构造加密逻辑重新爆破;5) 复杂加密需分析源码获取密钥。
Q:APP抓包发现数据加密,如何测试?

A:1) 定位加密位置(客户端JS/Java或服务端);2) 逆向/审计获取加密算法和密钥;3) 编写脚本对Payload自动加解密;4) 使用Burp插件(如BurpCrypto)自动处理。
Q:为什么有些密文无法解密?

A:1) 密码复杂度过高,碰撞空间不足;2) 使用密钥类加密(AES)但无密钥;3) 自定义加密算法;4) 多层嵌套加密(需逐层分析)。


学习建议 :本节重点是建立"数据格式与加密意识",实际工作中需结合具体目标,通过抓包分析、源码审计、逆向工程等手段,逐步还原加密逻辑。并非所有加密都能破解,掌握信息越多(源码、配置文件、数据库),成功率越高。

相关推荐
Johnstons3 小时前
2026网络流量监控分析工具深度对比与选型指南
运维·网络·网络流量分析
科技观察3 小时前
启世计划紧急声明 黑客入侵导致平台暂时关闭
网络
爱人间3 小时前
apache-tomcat-8.5.72启动控制台乱码解决方案
java·tomcat·apache
同聘云3 小时前
阿里云国际服务器动态IP连不上是怎么回事?服务器的ip地址怎么查?
服务器·tcp/ip·阿里云
上海云盾安全满满3 小时前
使用高防IP防护有哪些优势
运维·网络·tcp/ip
优秀是一种习惯啊3 小时前
如何设计接口粒度?(粗粒度 vs 细粒度)
网络
Blurpath住宅代理3 小时前
什么是高纯净海外代理IP?独享IP与共享IP的本质区别与选型指南
网络·静态ip·代理ip·住宅ip·静态代理·住宅代理
芯盾时代3 小时前
高校信息化网络安全需求分析
网络·安全·web安全
薛定谔的悦3 小时前
从零实现工业储能 Modbus TCP 服务端:寄存器映射到业务控制的完整工程
网络