
CTF reverse
文章平均质量分 69
安全不再安全
网络安全、Java开发
展开
-
BUUCTF逆向题Oruga
这一部分很多人看不懂,其实也很好理解,这个 unsigned int 表示无符号整型,你也可以理解成绝对值,v2 表示当前所在方块(以 ① 中的图为例)位置,v2(max) = 256 (16 x 16),当 v2 = 240 时,如图所示。由第二个 while 可以知道,只要按下反向后,在该方向上只要都是 0 ,那就一直走下去,直到遇到障碍物,由循环体的判断可以知道,方向上必须有障碍物存在,否则会导致程序退出执行。(+1 、-1 这个就不用分析了,+ 就向右,- 就向左)双击进去查看关键函数实现代码。原创 2023-11-11 18:12:23 · 679 阅读 · 1 评论 -
BUUCTF逆向题Youngter-drive
其实线程一代码我自己也不大理解,看了正确的 flag 后,我自己推出来的是这样:在 couece 中取出字符,然后在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中找出一样的,取出该字符在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中的下标,如果取出的字符是大写则 在ASCII中找出【下标 - 38】值对应的字符替换couece中的字符,同理,小写就减 96。原创 2023-11-07 20:00:28 · 820 阅读 · 0 评论 -
BUUCTF逆向题[2019红帽杯]easyRE
*(&v15 + i) 有了前面的分析,这条语句就不难理解了,我们输入的字符串保存到 v51 中,然后取出每个字符与 i 值异或再与 v15 到 v50 的字符进行比较(&v15是首元素的地址,+i 表示指向下一个的意思)跟过来后可以发现是我们前面看到的与 base64 有关的东西,所以我们猜测 sub_400E44 是一个 base64 加密处理函数,由代码可知对同一个数据加密了 10 次,加密后的数据是什么,我们接着找。我们去看看,发现是看雪的一篇文章,到这里我们基本可以确定这是一个干扰项。原创 2023-10-23 13:26:59 · 1447 阅读 · 1 评论 -
BUUCTF逆向题Xor
1、IDA(32位)①、运行程序,发现窗口会出现一段字符串我们在字符串窗口尝试找一下这串字符双击定位到关键位置,双击选中这段字符串,交叉引用显示图表视图,会发现无法生成伪代码,那就分析汇编代码②、由mov al,[edx] 可知 al 保存着 edx 的值,inc edx 表示edx自增 1 ,cmp edx,1Bh 是 edx 的值与 1Bh(十进制:27) 进行比较,若 edx 的值大于 27 则执行 wrong 那一块的代码。原创 2023-09-08 16:43:42 · 2572 阅读 · 1 评论 -
BUUCTF逆向题Transform
33 ) 可以知道,flag 的长度位 33 个字节,v6 保存的是正确的 flag ,而 for 循环通过对 v6 进行换位加异或的处理,最终得到的字符串与 aGyURsywBFbLwya 保存的字符串相同。所以前面的8 dup(0)意思是定义8个字节的 0 ,即0 0 0 0 0 0 0 0 ,所以对象是 0 而不是 8 ,如果没搞清楚,就会导致得不到正确的 flag。2、把 byte_414040 中的字符依此取出,保存回 v6 里该字符原来所在的位置,即可得到 flag。1、IDA(64位)原创 2023-09-07 10:40:06 · 1389 阅读 · 0 评论 -
BUUCTF逆向题usualCrypt
我们会发现 byte_40E0A0 好像不满足 6 到 14 位吧,那后面的字符怎么办,这样我们就猜测 byte_40E0A0 和 byte_40E0AA 的字符串会不会是拼接起来的,结果为:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/到此 sub_401080 函数分析完毕,他的大致作用就是对flag进行base64加密(base64经过变换的),然后再进行大小写转换的到一个加密字符串。1、IDA(32位)原创 2023-09-06 11:42:55 · 1209 阅读 · 1 评论 -
BUUCTF逆向题luck_guy
里我已经分析过了) ,因此猜测这里的 f2 经过下面循环处理后得到的字符串与 f1 拼接即为正确的 flag。s => f2 所以 f2 = icug`of (这里要注意大小端存储问题,在之前的文章。所以正确的flag :flag{do_not_hate_me}虽然前面代码无法直接找到 f2 ,但往下分析代码发现。浏览分析代码得知这个函数就是解出flag的关键函数。分析后发现 patch_me 这个函数是关键点。进去后发现 get_flag 这个函数。②、在函数窗口中找到 main 函数。原创 2023-08-28 14:40:11 · 1200 阅读 · 0 评论 -
BUUCTF逆向题不一样的flag
综上分析,这应该是一个迷宫,0 表示通路,1 表示障碍,# 表示出口。所以flag:flag{222441144222}②、在函数窗口找到 main 函数,生成伪代码。得到一串字符,大小位25,将其记录下来。浏览代码,看看有无关键信息可以获取。由图可知先向下走3次即:222。1、认识迷宫类型的题目大概模型。①、载入32位 IDA 中。发现这个提示表示上下左右。最后向下三次:222。原创 2023-08-28 13:58:45 · 1484 阅读 · 0 评论 -
BUUCTF逆向题hello_world_go
1、遇到复杂的代码先别慌也别急着去分析,先看看每个函数内有什么,或者每个地址对应的反汇编窗口会有什么关键的字符或字符串。这里有一些字符,连起来看好像是个flag的,不妨把他连起来:flag{hello_world_gogogo}发现伪代码很复杂,根本不想分析,就试着每个函数或地址都跟进去看一下。②、函数窗口拉到最下面找到 main 函数。①、载入64位IDA。原创 2023-08-28 12:05:57 · 1141 阅读 · 0 评论 -
BUUCTF逆向题rome
大写字母 C 对应的 ASCII 码是 67 ,带入表达式中 => (67 - 51) % 26 + 65 = 81,ASCII码 81 对应的字符为大写 Q ,诶,发现和所给的字符串第一个字符对应上了,他们的 ASCII 码相差 14 ,我们大胆的猜测,所给字符串中的大写字母减去 14 就可以得到flag中对应的字符。读完代码大致明白,该代码就是把flag中的每个字符(字母)进行了凯撒加密,最终得到:Qsw3sj_lz4_Ujw@l 既然这样我们就只需要把过程逆一下就可以得到正确的 flag 了。原创 2023-08-28 11:29:49 · 1128 阅读 · 0 评论 -
BUUCTF逆向题SimpleRev
刚开始对这个处理过程进行逆向分析的时候我的想法是把这个表达式逆过来算,最后发现结果很奇怪,百思不得其解,在一个视频看到了另一种思路,str2[i] == (v1 - 39 - key[v3 % v5] + 97) % 26 + 97 保持原有的表达式,通过对限定范围内的字符进行比较,符合条件就输出,这种方法更清晰简单。这里要给大家提个醒,涉及大小端存储问题,elf文件这种通常使用小端存储,而IDA会把内存中的数据自动转成大端存储,但是有些变量双击过去,在文本视图能直接看到转好的字符串,以key3为例。原创 2023-08-26 22:20:31 · 1226 阅读 · 0 评论 -
BUUCTF逆向题reverse1
分析代码可得在 v8 <= v2 的情况下,字符串 Str2 中下表为j的字符如果对应的 ASCII 码等于 111 则将该字符改为 ASCII 为 48 所对应的字符。(技巧:选中数字,然后按 r 键就可以把数值转成对应的 ASCII 码,111 对应的字符为 o;①、查壳,我这边显示不是有效的PE文件,不管他,载入32位IDA后提示我们用64位的,那就切换成64位的IDA。1、通过交叉引用可以找到代码之间的关系,同时也能快速定位到关键地方的伪代码。②、载入后搜索字符串,发现关键字符串。原创 2023-08-25 18:30:39 · 1157 阅读 · 1 评论 -
BUUCTF逆向题reverse3
根据伪代码不难分析出:先对字符串进行了 base64 的加密,然后再通过加法运算又对字符串进行了修改,所以我们可以写一个脚本把过程逆一下就可以得到加密的flag。这样就把经 base64 加密的flag得到了 e2lfbDB2ZV95b3V9 ,然后通过网上在线工具将这段字符串解密即可得到真正的 flag。再双击 sub_411AB0 查看行数的大致实现步骤,不过太复杂,不需要去理会,进去之后双击数组查看内容。进去之后会发现一串字符,这里基本可以判断采用了base64加密(判断技巧:字符串里有个等号)原创 2023-08-25 17:32:49 · 2117 阅读 · 2 评论