buuctf [GUET-CTF2019]encrypt纯静态做法

本文详细介绍了如何通过静态分析来理解一个结合了魔改Base64和RC4加密的程序。首先,通过IDA分析确定关键函数,如RC4的s盒初始化和加密过程。接着,解析了非标准Base64的实现,该实现通过特定逻辑替换查表。最后,给出了还原加密流程的Python脚本,包括RC4加密和解密Base64的步骤。文章适合对逆向工程和加密算法感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二刷buu,发现网上的这个题的题解大部分都是动调(可能是我没找到静态),于是想写一篇纯静态分析的文章。

这个题的考点如名字所示,就是一个魔改base64和rc4加密。
首先拖进ida
在这里插入图片描述
上面那8个硬编码赋值一看就像key,直接改了个名。
看到结尾的密文对比,顿时有了个大致方向
在这里插入图片描述

进入sub_4006B6函数里面,发现是rc4的s盒初始化
在这里插入图片描述
传入的参数是放s盒的数组,key和key的长度
在这里插入图片描述
没看出来的可以看下这个博客,关于rc4加密的
https://www.cnblogs.com/zwios/p/4196836.html
然后下面的sub_4007DB函数显然就是rc4的crypt函数,查看代码发现没有魔改,很棒。
接下来看sub_4008FA函数
在这里插入图片描述
这里从padding和&0x3f等很容易联想到base64(从最后对比的密文也可以很容易联想到),但是这里的base64和正常的base64不一样,因为我们惊奇的发现没有表,而换成了另一种逻辑:
1.把我们的输入(rc4加密过的输入)三个字节一组,变成四个六位的数(这里和base64原理一样)
2.把四个数每个加上61,存入输出的数组之中。
对,就改了第二步,所以我们直接手撕一下就行。
由此,总的程序逻辑清晰了:
1.先将输入rc4加密,key已知。
2.将加密的结果魔改base64加密
3.和密文进行对比
脚本如下:

from base64 import *
import binascii
from Crypto.Util.number import *
duibi="Z`TzzTrD|fQP[_VVL|yneURyUmFklVJgLasJroZpHRxIUlH\\vZE="
# for i in range(len(duibi)-1):
#     print(hex(ord(duibi[i])-61),end=",")#得到shuru
shuru=[0x1d,0x23,0x17,0x3d,0x3d,0x17,0x35,0x7,0x3f,0x29,0x14,0x13,0x1e,0x22,0x19,0x19,0xf,0x3f
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值