CTFShow re2 (RC4

article/2025/6/17 14:59:53

参考:CTFSHOW re2

本文:跟着大佬的博客一步一步做CTFShow re2的记录


IDA分析

有个比较函数
在这里插入图片描述re一下

s = "DH~mqqvqxB^||zll@Jq~jkwpmvez{"
s1 = ''
for i in s:s1 += chr(ord(i) ^ 0x1f)
print(s1)

得到
在这里插入图片描述再四处看看
跟进sub_401028
在这里插入图片描述四个sub点进去看看,感觉最后一个比较重要(因为它的参数有stream?
在这里插入图片描述像RC4算法
我不知道啊
大概就是要%256,要打乱,要交换,要按字节运算,吧?

之后去找到RC4算法,用上面得到的[Warnning]Access_Unauthorized作为key,附件里打开是乱码的enflag.txt里的数据作为要加密的数据,改一通
因为RC4是对称加密,加密解密可以用同一个算法

enflag.txt数据怎么来的?
在这里插入图片描述
明显不能直接复制 (我就复制了当然是不行啦 ,猜想是二进制数据
那二进制数据怎么读取呢
折腾一会儿之后找到了在linux中用hexdump读取二进制数据的方法(直接使用是以十六进制显示的
参考:Linux下查看二进制文件
在这里插入图片描述看看别人的代码,发现pData的数据是以十六进制形式,每两位一存,并且上图中的四位里前两位和后两位要交换顺序 (这是什么意思啊小端序吗(混乱
也就是要改成0xc3, 0x82, 0xa3, 0x25, 0xf6, 0x4c, 0x36, 0x3b, 0x59, 0xcc, 0xc4, 0xe9, 0xf1, 0xb5, 0x32, 0x18, 0xb1, 0x96, 0xae, 0xbf, 0x08, 0x35
(亲测不换顺序不行
但至少数据能对上(我太菜了呜呜呜
十六进制两位也就是二进制八位,一个字节,对应unsigned char的size,还有一定要注意charunsigned char
来自RC4算法C语言实现:

1、明文密文还有状态数组S[i](0~255)类型应该选择为unsigned char 类型,因为其取值范围为0~255,且子长为一字节。
2、明文密文以及状态数组S[i]的类型应该全部一样,这样做异或运算时就不会发生内存溢出的问题。

最后代码是这样的

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;void rc4_init(unsigned char *s, unsigned char *key, unsigned long len)
{char k[256] = {0};unsigned char tmp = 0;for (int i = 0; i < 256; i++){s[i] = i;k[i] = key[i % len];}int j = 0;for (int i = 0; i < 256; i++){j = (j + s[i] + k[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;}
}void rc4_crypt(unsigned char *s, unsigned char *data, unsigned long len)
{unsigned char tmp;unsigned long k = 0;int i = 0, j = 0, t = 0;for (k = 0; k < len; k++){i = (i + 1) % 256;j = (j + s[i]) % 256;tmp = s[i];s[i] = s[j];s[j] = tmp;t = (s[i] + s[j]) % 256;data[k] ^= s[t] ;}}int main()
{unsigned char s[256] = {0}, s2[256] = {0};char key[256] = {"[Warnning]Access_Unauthorized"};char pData[512] = {0xc3, 0x82, 0xa3, 0x25, 0xf6, 0x4c, 0x36, 0x3b, 0x59, 0xcc, 0xc4, 0xe9, 0xf1, 0xb5,
0x32, 0x18, 0xb1, 0x96, 0xae, 0xbf, 0x08, 0x35};rc4_init(s, (unsigned char*)key, strlen(key));for (int i = 0; i < 256; i++)s2[i] = s[i];unsigned long len = strlen(pData);rc4_crypt(s, (unsigned char*)pData, strlen(pData));printf("%s\n", pData);rc4_crypt(s2, (unsigned char*)pData, strlen(pData));printf("%s\n", pData);return 0;}

在这里插入图片描述


http://chatgpt.dhexx.cn/article/7uHWywlT.shtml

相关文章

2023年天津市逆向re2.exe解析-比较难(超详细)

2023年天津市逆向re2.exe解析(较难) 1.拖进IDA里进行分析2.动态调试3.编写EXP脚本获取FLAG4.获得FLAG1.拖进IDA里进行分析 进入主程序查看伪代码 发现一个循环,根据行为初步判定为遍历输入的字符并对其ascii^7进行加密 初步判断sub_1400ab4ec为比较输入和flag的函数 跟进u…

RE2..

RE2 Simple and Effective Text Matching with Richer Alignment Features Simple and Effective Text Matching with Richer Alignment Features 论文提出了一种快速且高效的文本匹配模型&#xff0c;建议保留三个可用于序列间对齐的关键特征&#xff1a;原始点对齐特征、先前…

RE2正则表达式引擎资料

2019独角兽企业重金招聘Python工程师标准>>> 官网RE2&#xff0c;C正则表达式库实战《自动机理论 语言和计算导论》 转载于:https://my.oschina.net/letiantian/blog/280743

Go与Re2正则

Golang支持Re2正则标准&#xff08;实际上并不支持全部&#xff0c;只是Re2语法的子集&#xff09;&#xff0c;本文介绍一些Golang正则支持语法的解释。 1、Regex Flags 1、贪婪和非贪婪&#xff1a; 正则匹配的时候一个个字符向后找。贪婪就是即使已经匹配了还会尝试向后找…

【文本匹配】之 RE2论文详解

RE2 - Simple and Effective Text Matching with Richer Alignment Features 这篇论文来自阿里&#xff0c;19年的ACL论文。《Simple and Effective Text Matching with Richer Alignment Features》&#xff1a;https://arxiv.org/abs/1908.00300 Intro 很多深层网络只拥有…

文本匹配、文本相似度模型之RE2

简单有效的文本匹配&#xff0c;具有更丰富的对齐功能 github: https://github.com/daiyizheng/shortTextMatch/blob/master/src/DL_model/classic_models/models/RE2.py 本文作者提出了一种快速、强神经网络的通用文本匹配方法。保持序列间对齐可用的三个关键特征:原始点方向…

RE2,C++正则表达式库实战

RE2简介 RE2是,一个高效、原则性的正则表达式库&#xff0c;由Rob Pike和Russ Cox两位来自google的大牛用C实现。他俩同时也是Go语言的主导者。Go语言中的regexp正则表达式包&#xff0c;也是RE2的Go实现。 RE2是&#xff0c;一个快速、安全&#xff0c;线程友好&#xff0c;PC…

DB9接口定义

注意上表是公头的引脚定义&#xff0c;公头与母头的引脚编号是轴对称的&#xff0c;因此将公头和母头连接时是相同序号的引脚相连接。 作为串口使用时要注意&#xff0c;公头的2号是RXD&#xff0c;因而母头的2号是TXD&#xff0c;公头的3号是TXD&#xff0c;因而母头的3号是RX…

LIN DB9定义

没找到合适的图片所以用上图代替&#xff0c;在LIN中&#xff0c;图中CAN_H&#xff08;7&#xff09;为LIN线&#xff0c; GND&#xff08;3&#xff09;接地. 实物图如下

DB9串口接口定义

公头 母头 定义不同 连线都是2 3 5 但是 公头 2是RXD 3是Txd 母头 2是TXD 3是RXD而且两者的排列顺序,画pcb时注意 以上是公头接线方法~ 母头原理图接线 交叉 但是上图的db9的原理图是母的画法啊&#xff0c;应该是直接从ad的库中调去的&#xff0c;ad的库中只有着一种画法 例子…

DB9定义图

DB9接口定义图

DB9接口定义 串口接口定义 MAX232电路

我们知道老式电脑主板上面都会有9针的串口&#xff0c;即使到了现在&#xff0c; 很多人还是用串口来通信&#xff0c;这是做嵌入式与工控的一上很好的上位要与下位机通信的方案&#xff0c; 因为他接口简单&#xff0c;编程容易。 我们来讲一下定义&#xff1a; 首先普通主…

计算机九针孔什么接口,db9接口-USBCAN-I设备的DB9针串口头中的针脚是如何定义的-电气资讯 - 电工屋...

db9接口定义RXD和TXD接线的颜色怎么接 1)使用串口直通线。 设计电路时&#xff0c;单片机的RXD连接电路板DB9的TXD&#xff0c;单片机的TXD连接电路板DB9的RXD&#xff0c;具体实现可在232电平转换芯片处反接。 (2)使用串口交叉线。 设计电路时&#xff0c;因为串口线已做交叉&…

RS-232C接口定义(DB9)

RS-232C接口定义(DB9)引脚 定义 符号 1 载波检测 DCD&#xff08;Data Carrier Detect&#xff09; 2 接收数据 RXD&#xff08;Received Data&#xff09; 3 发送数据 TXD&#xff08;Transmit Data&#xff09; 4 数据终端准备好 DTR&#xff08;Data Terminal Rea…

DB9 ------ 接口定义

下图是母座和公座的接口定义&#xff1a; 特别提醒&#xff1a;以上是公座和母座的接口定义&#xff0c;如果是串口线&#xff0c;RXD就变成TXD&#xff0c;以此类推。 转载于:https://www.cnblogs.com/god-of-death/p/9368120.html

硬件DB9接口定义

DB9接口定义及串口芯片定义连接 双向同头线交叉&#xff0c;双向异头线直通

RS232 DB9引脚定义

DB9 各引脚定义 1 DCD 载波检测 2 RX 接收数据 3 TX 发送数据 4 DTR 数据终端准备好 5 GND 地信号 6 DSR 数据准备好 7 RTS 请求发送 8 CTS 清除发送 9 RI 振铃提示 RS232常用的是Rx、Tx和GND这三条线 也就是 2-RX 3-TX 5-GND引脚&#xff0c;RS23…