题目一览
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}