题目一览
1、easyre 1
2、reverse1 1
3、reverse2 1
4、内涵的软件 1
5、新年快乐 1
6、xor 1
7、helloword 1
8、reverse3 1
1、easyre 1
exeinfo了解到是64位无壳
IDA打开,shift+F12查看字符串
flag{this_Is_a_EaSyRe}
2、reverse1 1
exeinfo了解到64位无壳
IDA打开,shift+F12查看字符串
这里涉及到了flag
这里看到了这个字符串与flag格式相似
跳转过来发现被引用
跳转过来
F5查看伪代码
这里是输入str1与str2进行比较,相同则为flag
str2为{hello_world}
上面有一个判断,将111换为48,转为char即为
将o转换为0
flag{hell0_w0ld}
3、reverse2 1
64位的ELF文件
shift+F12查看字符串
跟前面那个差不多,跟进right flag
F5转换伪代码
相同的套路,输入的字符串与flag进行比较,相同则正确
flag就是{hacking_for_fun}
上面的ASCII码转字符就可以了
把上面的字符串中的i和r换为1
flag{hack1ng_fo1_fun}
4、内涵的软件 1
exeinfo了解到32位无壳
shift+F12查看字符串
main函数F5查看伪代码
v5在这里并没有被调用
直接把DBAPP换为flag提交就可以了
flag{49d3c93df25caad81232130f3d2ebfad}
5、新年快乐 1
exeinfo查看,32位upx壳
upx.exe -d脱一下壳
shift+F5看一下字符串
main函数F5看一下伪代码
根据提示,字符串应该就是HappyNewYear!
6、xor 1
exeinfo查看一下,64位无壳
拖入IDA,shift+F12查看字符串
直接F5查看一下伪代码
第一个if很明显,表示flag长度为33位
后面就是一个for循环,进行异或运算
最后判断__b和global是否相等,相等则返回success
这样的话,flag应该就是global的值
双击跟踪找到global的值
写脚本运算一下
这里的数组可以直接shift+E得到
test = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11,
0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F,
0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F,
0x47, 0x32, 0x4F, 0x00]
flag = [0 for i in range(len(test))]
flag[0] = 'f'
flag1 = 'f'
for i in range(1,len(test)):
flag[i] = test[i] ^ test[i-1]
flag1 += chr(flag[i])
print(flag1)
得到flag
flag{QianQiuWanDai_YiTongJiangHu}
7、helloword 1
附件是个APK文件,使用APKIDE打开
下载地址:https://down.52pojie.cn/Tools/Android_Tools/ApkIDE_v3.3.rar
找到主函数,直接就看到了flag
8、reverse3 1
exeinfo查看信息
32位无壳
IDA32位打开,shift+F5查看字符串
跟踪一下right flag
找到main函数,F5查看一下伪代码
输入的数据进行了一次sub_9A10BE这个算法的处理,处理后的结果赋值给v4
使用strncpy函数把v4的数据赋值给Destination
v11为Destination的长度
for循环对Destination的数据进行了一下移位(ASCII码层面)
v5为移位后的Destiantion的长度
移位后的Destination与Str2相同的话,正确
Str2为这个
e3nifIH9b_C@n@dH
需要得到flag的话应该就是把上面处理的过程反过来
Str2——>移位——>sub_9A10BE算法解码
这样的话关键就是sub_9A10BE这个算法是什么算法
双击跟踪,这个算法是直接调用的sub_9A1AB0,变量为三个
可以了解到这个是base64加密算法
其实根据一开始的字符串检索那里就能猜到
这样的话就可以用以下的脚本处理一下
import base64
test = "e3nifIH9b_C@n@dH"
flag = ""
for i in range(len(test)): //对每个字符进行循环处理
flag += chr(ord(test[i])-i) //伪代码中的处理是循环j,在循环中每次+j,这里就是反过来每次-
print(base64.b64decode(flag)) //移位的字符串进行一下base64解码就可以了
flag{i_l0ve_you}
439

被折叠的 条评论
为什么被折叠?



