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]= key[i%len(key)] #key 是密钥 

第二步:生成置换S表 就是将S表打乱

i=k=j=0
while(i<n)
    s[i]=i
    j=(j+s[i]+s[j])%n #这里n取256
    然后交换s[i] s[j]
    i+=1
#至于为啥要这么做 我的理解就是打乱s表

第三步伪随机密钥生成

i=j=k=0
for w in range(len(明文长度))
    i=(i+1)%n
    j=(j+S[i])%n
    交换S[i],S[j]
    随机值在S表中的序号:k= (s[i]+s[j])%n
    取得迭代值:R=S[k]
    最后与明文单位xor就行

解密的时候就很简单了

重复上次过程只把明文换成密码在xor就行了

这里注意的是要,用ascii码值来进行操作

三步完成

以绿城杯[warmup]easy_re来说

首先查壳,没有发现 看到是32位的

打开后 f5 不了

请添加图片描述

看到 开头有个花指令

给nop掉就行了

image-20211009100514837

然后按c 将其转换为代码就行了

得到主代码

根据上面所的rc4特征一眼就可以看出来

不过这里改了一点地方,问题不大我们代码跟着跑一遍,最后xor一下就行了

首先找密文

看到v18-v21是连续的 v17 v18点进去 然后 shift +e 复制出来 再加上v19 v20v21 拼接出来就行了

这里注意是小端存储所以要从后面读

找到密文

enc='F58C8DE49FA5286530F4EBD324A9911A6FD46AD70B8DE8B8834A5A6EBECBF44B99D6E6547A4F5014'

根据特征找到v25就是key

key='tallmewhy'

然后跟着写一遍最后xor就行了

贴一下脚本

enc='F58C8DE49FA5286530F4EBD324A9911A6FD46AD70B8DE8B8834A5A6EBECBF44B99D6E6547A4F5014E5EC'
enc_flag=[]
for i in range(0,len(enc),2):
    enc_flag.append(int(enc[i:i+2],16))

v24=[0]*256
Dst=[0]*256
key='tallmewhy'
key_=[]
for i in key:
    key_.append(ord(i))

v6=0
v5= len(key)
#初始化
for v6 in range(256):
    Dst[v6]=v6
    v24[v6]= key_[v6%v5]

v7=0
v8=0
for v7 in range(256):
    v9=Dst[v7]
    v8=(v8+v24[v7]+v9)%256
    Dst[v7]=Dst[v8]
    v7+=1
    Dst[v8]=v9^0x37
v10 = 0
v22 = 0
v11 = 0
#print(len(enc_flag))
for  w in range(0,42):

    v10=(v10+1)%256
    v12= Dst[v10]
    v11= (v12+v11)%256
    Dst[v10]= Dst[v11]
    Dst[v11]=v12
    t= (Dst[v10]+Dst[v11])%256
    R= Dst[t]
    print(chr(R^enc_flag[w]),end='')




请添加图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值