攻防世界逆向高手题之re2-cpp-is-awesome

article/2025/6/17 13:36:17

攻防世界逆向高手题之re2-cpp-is-awesome

继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的re2-cpp-is-awesome
在这里插入图片描述

下载附件,照例扔入exeinfope中查看信息:
在这里插入图片描述
64位ELF文件,无壳,运行一下查看主要显示字符串:
在这里插入图片描述

照例扔入IDA中查看伪代码,有main函数看main函数:

C++面向对象的代码有点乱,也有点杂,在string中追踪Better luck next time字符串跟踪出在下图的第一个红框处:
在这里插入图片描述
在这里插入图片描述

C++代码比较陌生,但是根据前面做题中积累的经验中在长类名静态调用的最后一个是要使用的函数名,比如std::__cxx11::basic_string<char,std::char_traits,std::allocator>::begin调用的就是begin这个函数。

所以开始分析:(这里积累第一个经验)
第一个红框中把用户命令行输入的a2赋值给了v3。
第二个红框用的是cout函数,输出Usage这个字符串。
第三个红框不明觉厉。
第四个红框allocator(&v13, a2, a3);应该是把a2的内容赋值给了v13。
第五个红框basic_string(v12, a2[1], &v13);应该是把v13赋值给了V12。
第六、七个红框应该是v11取v12字符串的开头begin(v12)。
第八、九个红框应该是v14取v12的结尾end(v12)。
在这里插入图片描述
接着往下分析:
先看这里分析跳出循环的条件,一开始我也不知道v14是字符串的结尾,所以很被动,现在知道了。

(这里积累第二个经验)
这里第一个红框sub_400D3D函数是取v11和v14比较,v14前面说过取输入字符串最后一个字符,而v11在第二个红框中sub_400D7A(v11)是向后取v11一个字符,所以这个if是判断当前字符是否为输入的最后一个字符,如果是就跳出循环。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

继续往下走:
第一个红框是v9取v11当前的字符。
第二个红框是用v9和两个嵌套数组off_6020A0[dword_6020C0[v15]]作比较,dword_6020C0[v15]作为off_6020A0的下标取字符。
第三个红框是v5的递增操作。
在这里插入图片描述

所以逻辑很明显了,逆向数组即可先找到off_6020A0数组:
在这里插入图片描述
然后打印dword_6020C0数组:

(这里积累第三个经验)
这里有个align 8,align num是让后面的字节都对齐num,也就是这里都对齐8才对,中间补7个0。可是这里下一个数和上一个数明明间隔4而已!后来查了很多资料才发现是IDA自动把多个0判断成对齐操作了,这里align 8是因为前面dd 24h中本来是db 24 0 0 0 然后后面一个双字是dd 0 也就是db 0 0 0 0,IDA把这连着的7个0当成了间隔,那上一个数和下一个数间隔就是8了,所以IDA生成了align 8。我们只要鼠标右键undefine或把上面的dd 24改一下数据大小即可重定义align 8,重新生成数据了。(前面的align 20h 也是同样的道理)
在这里插入图片描述
在这里插入图片描述

然后开始嵌入python脚本dump下数组内容

(这里积累第四个经验)
IDA库函数Dword是以当前地址向后四个作为Dword数据,所以我们地址要addr+4*i来保持4的间隔。(0x60213c-0x6020c0)>>2是因为地址之间以4为一个单位,>>2在前面博客中总结过就是除4且保留整数部分。

addr=0x6020c0
list1=[]
for i in range((0x60213c-0x6020c0)>>2):list1.append(Dword(addr+4*i))
print(list1)

在这里插入图片描述

逆向逻辑脚本:

key1=[36, 0, 5, 54, 101, 7, 39, 38, 45, 1, 3, 0, 13, 86, 1, 3, 101, 3, 45, 22, 2, 21, 3, 101, 0, 41, 68, 68, 1, 68, 43]
key2="L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t"
flag=""
for i in key1:flag+=key2[i]
print(flag)

在这里插入图片描述

.
.
总结:

1:
(这里积累第一个经验) 第一个红框中把用户命令行输入的a2赋值给了v3。 第二个红框用的是cout函数,输出Usage这个字符串。
第三个红框不明觉厉。 第四个红框allocator(&v13, a2, a3);应该是把a2的内容赋值给了v13。
第五个红框basic_string(v12, a2[1], &v13);应该是把v13赋值给了V12。
第六、七个红框应该是v11取v12字符串的开头begin(v12)。 第八、九个红框应该是v14取v12的结尾end(v12)。

2:
(这里积累第二个经验)
这里第一个红框sub_400D3D函数是取v11和v14比较,v14前面说过取输入字符串最后一个字符,而v11在第二个红框中sub_400D7A(v11)是向后取v11一个字符,所以这个if是判断当前字符是否为输入的最后一个字符,如果是就跳出循环。

3:
(这里积累第三个经验) 这里有个align 8,align num是让后面的字节都对齐num,也就是这里都对齐8才对,中间补7个0。可是这里下一个数和上一个数明明间隔4而已!后来查了很多资料才发现是IDA自动把多个0判断成对齐操作了,这里align 8是因为前面dd 24h中本来是db 24 0 0 0 然后后面一个双字是dd 0 也就是db 0 0 0 0,IDA把这连着的7个0当成了间隔,那上一个数和下一个数间隔就是8了,所以IDA生成了align 8。我们只要鼠标右键undefine或把上面的dd 24改一下数据大小即可重定义align 8,重新生成数据了。(前面的align 20h 也是同样的道理)

4:
(这里积累第四个经验)
IDA库函数Dword是以当前地址向后四个作为Dword数据,所以我们地址要addr+4*i来保持4的间隔。(0x60213c-0x6020c0)>>2是因为地址之间以4为一个单位,>>2在前面博客中总结过就是除4且保留整数部分。

解毕!敬礼!


http://chatgpt.dhexx.cn/article/ID1sJLWS.shtml

相关文章

ISCC之Re2

硬核rust逆向 首先去学了一天rust。。。我TMD IDA打开&#xff0c;跟踪主函数 看一下伪代码&#xff0c;发现有一串密文 跟进去发现一串数据&#xff0c;猜测有可能是flag的加密数据&#xff0c;于是回头去分析算法 发现一个关键点 if ( v16 v24 ) break; v2 ((*(_DWORD *)(v…

xctf攻防世界 REVERSE 高手进阶区 re2-cpp-is-awesome

0x01. 进入环境&#xff0c;下载附件 题目给出的是一个无后缀文件&#xff0c;我们将其下载。先看看是否有套壳&#xff0c;发现没有套壳。那么接下来就老套路了 0x02. 问题分析 我们使用IDA Pro打开文件&#xff0c;找到main函数&#xff0c;反编译文件&#xff0c;得到代码…

【比赛writeup】2023省赛-Reverse-Re2

2023省赛-Reverse-Re2 一、概要 1、标题&#xff1a;Re2 2、关键字&#xff1a;换表BASE64 3、比赛&#xff1a;2023省赛 4、工具&#xff1a;IDAx64、python 二、开始 1、题目分析 逆向的题目&#xff0c;找到关键字符串&#xff0c;找到关键函数&#xff0c;分析函数逻辑…

RE2:Simple and Effective Text Matching with Richer Alignment Features

原文链接&#xff1a;https://aclanthology.org/P19-1465.pdf 2019 ACL 介绍 问题 作者认为之前文本匹配模型中序列对齐部分&#xff0c;过于复杂。只有单个inter-sequence alignment层的模型&#xff0c;常会引入外部信息&#xff08;例如语法特征&#xff09;作为额外输入&am…

【NLP】文本匹配——Simple and Effective Text Matching with Richer Alignment Features阅读与总结(RE2)

背景 前文已经介绍了【NLP】文本匹配——Enhanced LSTM for Natural Language Inference&#xff0c;其实2017年发表的&#xff0c;文中使用了两个LSTM进行特征提取&#xff0c;总的来说参数多&#xff0c;速度慢&#xff0c;还不能并行处理。今天我们再来看看阿里巴巴和南京大…

Re2:读论文 CS-GNN Measuring and Improving the Use of Graph Information in Graph Neural Networks

诸神缄默不语-个人CSDN博文目录 论文下载地址&#xff1a;https://openreview.net/attachment?idrkeIIkHKvS&nameoriginal_pdf 代码&#xff1a;yifan-h/CS-GNN: Measuring and Improving the Use of Graph Information in Graph Neural Networks 论文引用方式&#xf…

ctfshow re2

打开附件如下 勒索病毒我去上网查了一下&#xff0c;发现是通过加密数据&#xff0c;所以这个题可能和加密有关&#xff0c;除了勒索病毒还有一个enflag.txt打开如下 先不管这个 第一步查壳这个exe程序 无壳。 第二步用ida32位打开这个 shiftf12查看字符 有个充值成功&#xf…

CTFShow re2 (RC4

参考&#xff1a;CTFSHOW re2 本文&#xff1a;跟着大佬的博客一步一步做CTFShow re2的记录 IDA分析 有个比较函数 re一下 s "DH~mqqvqxB^||zllJq~jkwpmvez{" s1 for i in s:s1 chr(ord(i) ^ 0x1f) print(s1)得到 再四处看看 跟进sub_401028 四个sub点进去看看…

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的库中只有着一种画法 例子…