常见加解密算法03 - RC4逆向认识

逆向分析中的密码学---RC4 0x01 简介 RC4是对称加密算法,通过密钥key和S盒生成密钥流,明文逐字节异或S盒,同时S盒也会发生改变。所以加密与解密使用了相同的函数和密钥K。RC4加密的强度主要来源于密钥的安全性,如果密钥泄露,则能直接解密出明文。 0x02 RC4算法分析 S盒初始化 第一个256循环:初始化为0-255 第二个256循环:根据密钥K,交换密钥盒S for i=0 to 255 do S[i]=i j=0 for i=0 to 255 do j = (j+S[i] + key[i mod keylength 阅读详情

各位聪明绝顶,才高八斗的读者们你们好!今天我们主要讨论编译之后的RC4算法识别。

题外话,之前看到一个蛋疼的小知识,说“势”这个字最好不好查词典释义。我是很好奇的,果然后来无法直视势不可挡这个成语。

言归正传,我们将上一篇的Java与C的代码都编译一下,分别反编译看看。

Java版

Java版的就很好识别,几乎与源码没啥区别。

C版

这里我们先给出RC4加密算法在逆向分析过程中的快速识别经验:

  1. 首先判断明文和密文长度是否相等,等长则代表是序列密码。

  2. 接下来判断是否是RC4。RC4算法中的初始化算法(KSA)中有两轮非常显著的长度为256的循环体,用于根据给定的key生成s盒。伪随机子密码生成算法(PRGA)会根据上一步得到的扰乱的s盒,进一步生成子密钥流,最终和给定的明文进行逐字节的异或。

由于 so 是可以加 ollvm 的,而且还可以做字符混淆,所以逆向起来不会像Java那么容易,在我们找到一个怀疑对象函数之后,就可以通过编写frida脚本或xposed插件完成对相应函数的主动调用,判断当输入明文为任意长度时的密文长度。

关于 ndk 的混淆是有很多文章的,自己可以尝试一下控制流混淆与字符串混淆。

我们看一个混淆之后的例子:

  sub_F658(&unk_38008, dest);

unk_38008实际上是一个字符串,不过这个字符串被混淆了,在 init 阶段后才会被解密。

看里面的逻辑:

  sub_F0AC((__int64)v7, (__int64)a1, v4);
  v2 = strlen(a2);
  return sub_F3C4(v7, a2, v2);

有2个函数比较可疑,先看 sub_F0AC

先看1处,有一个很明显的交换数组元素的逻辑。

再看2处,只有当 v7 = 915845509 的时候才会交换逻辑,循环次数是 256 次,这些都与  RC4 的 init 阶段是一样。

当然这里也只是大胆猜测,而且混淆级别开的没那么高,所以还能看清楚一定的逻辑。实际上这里就已经很难看出来第一个给 S 盒赋值的循环在哪里了,只能根据 result 的位置来看。

后面我们可以使用hook来验证我们的想法。

再看 sub_F3C4

RC4加密解密逆向 解密过程与加密过程完全相同,只需要使用相同的密钥来重新生成相同的伪随机流,然后将其与密文进行异或运算,以便还原明文。生成伪随机流 接下来,RC4使用密钥来生成一个流,这个流被认为是伪随机的,因为它实际上是S盒中的值的排列重组。因此,在 RC4 加密算法中,加密和解密过程使用相同的代码,只需要提供相同的密钥和待加密/解密的数据即可。初始化S盒 RC4算法的关键是初始化一个256字节大小的S盒(S-box),其中包含了0到255的所有可能值的排列组合。因此,在进行 RC4 加密和解密时,请确保使用相同的密钥。 阅读详情

相关推荐

解析 RC4 加密算法(C语言、python)

目录 解析 RC4 加密算法(C语言、python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC4加密: 包含三个参数: 代码实现:(已注释) C语言代码: Python代码: 三丶RC4逆向小技巧 1:逆向特征 2:魔改RC4 解析 RC4 加密算法(C语言、python): RC4加密算法是一种对称加密算法: 对称加密(也叫私钥加密)指加密和解密使用相同密

沐一 · 林 的博客 1万+

java实现的RC4加密解密算法示例

主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下

【CTF-Reverse中的加密算法RC4,TEA和Base 64加密算法

在我们做CTF逆向题目的时候,数据结构可谓是最基础的东西了,有很多题目都是逆向算法题目,所以好的算法能力对我们打CTF比赛还是很有帮助的,今天就来带领大家了解一下加密算法RC4,TEA和Base 64。

WdIg-2023的博客 5376

RC4加密解密Java实现

RC4加密算法Java实现代码 简单清楚,不需要复杂的调试

实现RC4加解密算法Java实例

通过编写相关的加解密方法,我们可以轻松地对数据进行加密和解密操作。RC4算法的简单性和高效性使得它成为了一种常用的加密算法之一。它使用一个状态向量(即S盒)来生成伪随机数流,并将明文与该流进行异或运算来实现加解密操作。RC4加解密算法是一种流式密码算法,广泛应用于网络通信和数据保护领域。本文将介绍如何使用Java编写RC4加解密算法的实例,并提供相应的源代码。以上是一个简单的RC4加解密算法Java实现示例。现在我们来看看如何在Java中实现RC4加解密算法。最后,打印出密文和解密后的明文结果。

TechBurst的博客 367

逆向算法RC4

RC4(Rivest Cipher 4)是一种流加密算法,由罗纳德·李维斯特(Ron Rivest)在1987年开发RC4算法的核心思想是利用伪随机数生成器(PRNG)和密钥共同生成一个密钥流,该密钥流与明文进行异或运算得到密文。在RC4算法中,密钥流由两部分组成:密钥调度算法(KSA)和伪随机数生成算法(PRGA)。KSA的主要作用是将输入的密钥进行排列,生成一个密钥数组。PRGA则根据密钥数组生成伪随机数序列,这个序列与明文进行异或运算,得到密文。

lvguangxv的博客 825

CTF 逆向涉及的各种加密算法

在密码学中,RC4(来自 Rivest Cipher 4 的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法RC4 是有线等效加密(WEP)中采用的加密算法,也曾经是 TLS 可采用的算法之一。RC4 算法的原理非常简单,包括初始化算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。1. 1-256 初始化 S-Box 和临时向量 T 2.初始排列 S-Box 并作乱序处理 3.生成密钥流 len:明文为 len 个字节 将子密钥序列同明

2201_75735270的博客 1487

RC4算法逆向分析

在密码学中,RC4 是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法RC4 是有线等效加密(WEP)中采用的加密算法,也曾经是 TLS 可采用的算法之一。流密码也属于对称密码,但与分组加密算法不同的是,流密码不对明文数据进行分组,而是用密钥生成与明文一样长短的密码流对明文进行加密,加解密使用相同的密钥。也就是说,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节。

2503_90751938的博客 1742

RC4加密算法结合CTF逆向签到

本问带你深入理解RC4加密流程,并结合一道CTF题目分析。

m0_73391639的博客 2162

算法特征逆向分析之-RC4

RC4逆向分析

weixin_44348983的博客 1044

RC4加密解密算法Java实现

*网上很多RC4算法在用的时候,都会出现「加密然后立即在内存中解密」可以,但先把加密后的密文写入文件再读取解密就失败的情况。这段代码没有这种情况。 *采用了重载函数,我用了String加密解密,成功。

逆向RC4

本文介绍了RC4工作原理并附带加解密脚本

Wasimdesy的博客 1413

Java实现RC4算法

RC4算法

qq_39411709的博客 1493

RC4加解密

RC4加解密

weixin_52397263的博客 1160

Java:实现RC4加解密算法(附完整源码)

Java:实现RC4加解密算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 765

RC4加密及逆向对应题目

title: RC4加密及逆向对应题目 date: 2021-10-09 10:29:23 tags: 逆向学习 categories: 逆向学习 前言 学习了RC4加密算法,做一下记录顺便拿一个题目来说 RC4加密算法分为两部分,初始化KAS和伪随机子密钥生成PRGA 我的理解就是:首先进行初始化,然后就是生成随机数 第一步初始化: 对S的初始化 for i in range(256): S[i]=i #对K初始化 密钥长度可变这里以256来说 用密钥的ascii 来遍历K K[i].

qq_46540840的博客 2299

逆向算法--对称算法RC4

RC4算法分析 标签(空格分隔): Reverse Crypto RC4简介 RC4是一种对称的流加密算法,它的密钥长度可变,通过随机数生成的核心与异或运算完成对于数据流的加密。相对于AES,DES对于固定长度数据块加密,RC4输入的plaintext为任意的。RC4的特点是运算速度快,密钥长度为1–256BYTE可变。 RC4的核心可以分为对密钥空间s的初始化与密文的交换。 初始化密钥空间...

kdsj_0030的博客 1630

java RC4加解密

/** * 解密 * @param data * @param key * @return */ public static String decry_RC4(byte[] data, String key) { if (data == null || key == null) { return null; } return asString(RC4Base(data, key

走在风雨路的专栏 1156
上一篇: 常见加解密算法02 - RC4算法分析
下一篇: 常见加解密算法04 - 分组密码DES
二手的程序员
博客等级 码龄3年 1411粉丝 112原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二手的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值