news 2026/4/18 5:21:14

逆向方向第二周任务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
逆向方向第二周任务

一,学习加密算法RC4,tea,编码Base64

1.学习加密算法RC4

RC4(Rivest Cipher 4)是一种流密码算法,由Ron Rivest于1987年设计。它以其简单性和速度而闻名,曾经被广泛应用于各种安全协议中,如早期的SSL/TLS(用于保护网页安全)和WEP(用于保护Wi-Fi网络)。它是一种对称密钥算法,即加密和解密使用相同的密钥。

RC4的工作原理

RC4的核心在于生成一个伪随机字节流(称为密钥流),然后将这个密钥流与明文(需要加密的数据)进行异或(XOR)操作来生成密文。解密时,使用相同的密钥再次生成相同的密钥流,并与密文进行异或操作即可恢复出明文。

算法主要包含两个部分:

  1. 密钥调度算法(Key Scheduling Algorithm - KSA)

    • 初始化一个256字节的数组 $S$(称为S盒),通常 $S$ 被初始化为 $S[i] = i$($i$ 从 0 到 255)。
    • 使用用户提供的密钥(长度可变)来打乱这个 $S$ 盒。

RC4的特点和安全性

  • 优点: 算法简单、实现容易、运行速度快。
  • 缺点(安全性问题)
    • 密钥相关偏差: RC4生成的密钥流在初始阶段存在统计偏差(称为“初始字节问题”或“偏差”),攻击者可以利用这些偏差来恢复密钥或明文。
    • 密钥重用风险: 绝对不能使用相同的密钥流加密不同的数据(即不能重用密钥),否则攻击者可以轻易恢复明文。
    • 弱密钥: 存在某些密钥,使得生成的密钥流更易被预测。
    • 已知攻击: 存在多种针对RC4的实际攻

RC4是一种历史悠久的流密码算法,曾因其高效性而被广泛采用。然而,其固有的安全缺陷导致它最终被淘汰。在需要加密的现代应用中,应避免使用RC4,转而采用更安全的替代方案。

2.tea

TEA(Tiny Encryption Algorithm)是一种轻量级对称加密算法,由David Wheeler和Roger Needham于1994年提出。它以简洁高效著称,适用于资源受限的环境(如嵌入式系统)。以下是核心要点:

算法原理

  1. 基本结构
    TEA采用Feistel网络结构,将64位明文分成两个32位块($L_0$、$R_0$),通过多轮迭代(通常64轮)混淆数据。
    每轮操作包含:

    • 轮函数:$F(R, K) = \left( (R \ll 4) + K_0 \right) \oplus \left( R + \delta \right) \oplus \left( (R \gg 5) + K_1 \right)$
    • 更新规则:
      $$ \begin{cases} L_{i+1} = R_i \ R_{i+1} = L_i + F(R_i, K) \end{cases} $$
  2. 密钥与常量

    • 密钥:128位,分为4个32位子密钥($K_0, K_1, K_2, K_3$)。
    • 常量$\delta$:固定值$0x9e3779b9$(黄金分割数衍生值),用于增强非线性。

安全性

  • 优点:结构简单、执行速度快,抗已知明文攻击。
  • 弱点
    • 易受相关密钥攻击(Related-key Attack)
    • 每轮数据变化较小,需足够轮数(建议≥64轮)。
  • 改进版本:XTEA(扩展TEA)和XXTEA(支持可变块长)弥补了部分缺陷。

3.编码Base64

Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方案,常用于数据传输和存储中,以避免二进制数据的特殊字符问题。其核心原理是将输入数据划分为固定大小的块(通常为3字节),然后将每个块转换为4个Base64字符。Base64字符集包含64个字符:大写字母A-Z、小写字母a-z、数字0-9,以及符号+和/,填充字符=用于处理输入长度不足的情况。

编码过程
  1. 输入处理:将输入数据视为字节序列(例如字符串的字节表示)。
  2. 分组:将字节序列分成每组3字节(24位)。如果输入长度不是3的倍数,则使用0字节填充剩余部分。
  3. 位操作:对于每组3字节$b_1, b_2, b_3$(每个字节为8位),组合成一个24位整数: $$v = (b_1 \ll 16) | (b_2 \ll 8) | b_3$$ 其中$\ll$表示左移位操作。
  4. 提取6位组:将24位整数$v$分成4个6位组:
    • 第一组:$g_1 = (v \gg 18) \mathbin{&} 63$
    • 第二组:$g_2 = (v \gg 12) \mathbin{&} 63$
    • 第三组:$g_3 = (v \gg 6) \mathbin{&} 63$
    • 第四组:$g_4 = v \mathbin{&} 63$ 这里$\gg$表示右移位操作,$\mathbin{&}$表示位与操作,63是$2^6 - 1$(即6位最大值)。
  5. 字符映射:每个6位组$g_k$(范围0-63)映射到Base64字符集中的一个字符:
    • 索引0-25: A-Z
    • 索引26-51: a-z
    • 索引52-61: 0-9
    • 索引62: +
    • 索引63: /
  6. 填充处理:如果输入字节数不是3的倍数,则添加填充字符=:
    • 剩余1字节:添加两个填充字符(编码为2个Base64字符和2个=)。
    • 剩余2字节:添加一个填充字符(编码为3个Base64字符和1个=)。

二,解决upx壳

一、使用UPX官方工具

二、动态调试脱壳

  1. 定位OEP(原始入口点)

    • 在调试器中单步跟踪
    • 观察jmp指令跳转目标地址
    • 典型特征:跳转后出现push ebp等标准入口代码
  2. 内存转储

    • 到达OEP后暂停执行
    • 使用调试器的内存转储功能(如OllyDbg的Scylla插件)
    • 修正IAT(导入地址表)

三、自动化工具

常用工具:

  • UPXUnpacker:专用脱壳脚本
  • x64dbg/OllyDbg:配合脱壳插件
  • PEiD:先检测壳版本再选择对应方法
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:01:26

仅剩30天!MCP量子认证旧版将被永久淘汰(速看应对方案)

第一章:MCP量子认证旧版淘汰的背景与影响随着量子计算技术的快速发展,传统加密体系面临前所未有的安全挑战。MCP(Multi-Channel Protocol)量子认证作为早期应对量子攻击的尝试性方案,在初期阶段为多通道通信提供了基础…

作者头像 李华
网站建设 2026/4/18 7:36:01

终极指南:XXPermissions框架让Android权限请求变得简单高效

你是否还在为Android权限适配夜不能寐?用户拒绝授权导致应用崩溃,Android 14新权限无法处理,国产手机特殊权限让你束手无策?XXPermissions权限框架已经为你解决了这些痛点,本文将带你从入门到精通,掌握Andr…

作者头像 李华
网站建设 2026/4/18 8:54:45

从开机到关机:这些被你忽略的电脑使用好习惯,能延长电脑寿命

‍“刚买的电脑用了一年就变卡”“笔记本电池越用越不经用”“硬盘突然坏了,重要文件全没了”——这些糟心事儿,很多时候不是电脑质量差,而是你在日常使用中忽略了细节。电脑就像汽车,需要定期保养和正确操作,才能保持…

作者头像 李华
网站建设 2026/4/18 8:41:40

systemverilog--队列学习

近期在写功能模块的sv-ref_model时,想到使用队列来实现会方便很多,搜索队列的使用会有很多帖子,自己也是在前辈的基础上稍作总结,作为自己的记录,也供后续参考。一、队列的核心概念队列是一种大小可动态调整的有序集合…

作者头像 李华
网站建设 2026/4/17 8:54:19

Node.js应用打包终极指南:一键生成跨平台可执行文件

Node.js应用打包终极指南:一键生成跨平台可执行文件 【免费下载链接】nexe 🎉 create a single executable out of your node.js apps 项目地址: https://gitcode.com/gh_mirrors/ne/nexe 你是否曾经为Node.js应用的部署而烦恼?需要确…

作者头像 李华