Re--题
一.[NSSCTF 2022 Spring Recruit]easy C
直接看for循环,异或
写代码
就得到了flag easy_Re
二.[SWPUCTF 2021 新生赛]非常简单的逻辑题
先对这段代码进行分析
flag = 'xxxxxxxxxxxxxxxxxxxxx'
s = 'wesyvbniazxchjko1973652048@$+-&*<>'
result = ''
for i in range(len(flag)):
s1 = ord(flag[i])//17 //ord(flag[i]) 获取 flag 字符串中第 i 个字符的 ASCII 码值。
s2 = ord(flag[i])%17
result += s[(s1+i)%34]+s[-(s2+i+1)%34]
print(result)
# result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'
假如flag的第一个字母是N,N的ASCII码值是78,78//17=4,所以s1是4,78%17=10,所以s2是10. 此时i=0,(s1+i)%34=4,-(s2+i+1)%34=-11
那就是在s里面找第五个字母,倒着在s里面找第十一个字母,也就是v和0,result就是这样来的。
现在知道了result倒推flag即可
flag = ""
enc = "v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i"
s = "wesyvbniazxchjko1973652048@$+-&*<>"
for i in range(len(enc)//2):
for j in range(34,127):
s1 = j//17
s2 = j%17
if (enc[2*i] == s[(s1+i)%34] and enc[2*i+1] == s[-(s2+i+1)%34]):
flag += chr(j)
print(flag)
NSSCTF{Fake_RERE_QAQ}
三.
[SWPUCTF 2022 新生赛]upx
脱壳
Upx -d
这是一道异或
就得到了flag
四.[HGAME 2022 week1]easyasm
拖进ida64
不能f5查看伪代码,所以要分析汇编代码,看一下dseg和seg001函数
dseg里面是一个假的flag
看一下seg001函数
Shift+e导出来
0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21,
0x14, 0xC1, 0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1,
0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0, 0x17
分析汇编语言
由于汇编语言还没怎么学,所以ai了一下
这段代码是用汇编语言编写的,它执行了一系列的位操作和比较。下面是每条指令的解释:
xor ax, ax:将寄存器 ax 清零。
mov al, [si]:将内存地址 si 指向的值移动到寄存器 al 中。
shl al, 1:将 al 寄存器中的值左移一位,相当于乘以2。
shl al, 1:再次左移一位。
shl al, 1:第三次左移一位。
shl al, 1:第四次左移一位,总共左移了四位,相当于乘以16。
push ax:将 ax 寄存器的值压入堆栈。
xor ax, ax:再次将 ax 寄存器清零。
mov al, [si]:再次将内存地址 si 指向的值移动到寄存器 al 中。
shr al, 1:将 al 寄存器中的值右移一位,相当于除以2。
shr al, 1:再次右移一位。
shr al, 1:第三次右移一位。
shr al, 1:第四次右移一位,总共右移了四位,相当于除以16。
pop bx:从堆栈中弹出一个值到寄存器 bx 中,这个值是之前 ax 的值,即0。
add ax, bx:将 bx 寄存器的值加到 ax 寄存器中,由于 bx 是0,所以 ax 的值不变。
xor ax, 17h:将 ax 寄存器的值与十六进制数 17h 进行异或操作。
add si, 1:将 si 寄存器的值加1,指向下一个内存地址。
cmp al, es:[si-1]:比较 al 寄存器的值与 es 段寄存器和 si-1 地址指向的内存值。
jz short loc_100DD:如果比较结果为零(即两个值相等),则跳转到标签 loc_100DD 处执行。
首先是将ax清零,然后从数据段中拿出数据,向左偏移4,压入栈中,再清零ax,再从数据段中拿出数据,再向右偏移4,将栈中的数据拿出给bx,ax+bx,再拿ax与 (十六进制的17)23进行异或,最后的数据拿来和额外段的数据比较。
逆着这个逻辑写脚本
先与十六进制的17进行异或,右移4位 再将左移后的值对128取模,两者相加后对应ASCII码
就得到了flag
NSSCTF{welc0me_to_4sm_w0rld}
五.[SWPUCTF 2021 新生赛]老鼠走迷宫
下载完没有后缀,拖入010
搜一下MZ开头是什么文件
添加后缀
然后我们需要将exe转化为py
将其放到pyinstxtractor.py这个工具下面
cmd打开终端
输入命令 python pyinstxtractor.py 文件名
将5.pyc和struct.pyc这两个pyc文件拖入010中,将struct的前16位十六进制数复制到5.pyc开头
另存为
然后使用在线网站
套脚本
得到sssssddssddssaaaassssddwwddddssssssaawwaassssddssaassddddwwddssddwwwwwwwwaawwddwwwwaaaawwddwwwwddssssddwwwwddddwwddddssaassaassddddssddssaassssssddsssssss
Md5解密
就得到了
69193150b15c87d39252d974bc323217
所以flag就是NSSCTF{69193150b15c87d39252d974bc323217}