题目一览
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
![](https://i-blog.csdnimg.cn/blog_migrate/ecbd484f25a1aa20933e089d862b909b.png)
exeinfo了解到是64位无壳
![](https://i-blog.csdnimg.cn/blog_migrate/a787427b9fac53ca9b13881daddb9230.png)
IDA打开,shift+F12查看字符串
![](https://i-blog.csdnimg.cn/blog_migrate/5dda751fd01ade111a0f0ea4e25ee461.png)
flag{this_Is_a_EaSyRe}
2、reverse1 1
![](https://i-blog.csdnimg.cn/blog_migrate/e3da9a56dfef68fa6f603df01c095bc6.png)
exeinfo了解到64位无壳
![](https://i-blog.csdnimg.cn/blog_migrate/28693a7f6b28b995643d98b7bc24c25c.png)
IDA打开,shift+F12查看字符串
这里涉及到了flag
![](https://i-blog.csdnimg.cn/blog_migrate/4df6edf2b0b6d6e961563d87e0aff724.png)
这里看到了这个字符串与flag格式相似
![](https://i-blog.csdnimg.cn/blog_migrate/27fed165d7ba2da56555a4b408c2d3a7.png)
跳转过来发现被引用
![](https://i-blog.csdnimg.cn/blog_migrate/10d34fe0ec2a203d914335f97e8dc785.png)
跳转过来
![](https://i-blog.csdnimg.cn/blog_migrate/c0400cb04d1d4f7b6a9b720608169bca.png)
F5查看伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/d457c1de00004c5abea1199627eb8703.png)
这里是输入str1与str2进行比较,相同则为flag
str2为{hello_world}
上面有一个判断,将111换为48,转为char即为
![](https://i-blog.csdnimg.cn/blog_migrate/76b999f903712671fcede8496f45fe49.png)
将o转换为0
flag{hell0_w0ld}
3、reverse2 1
![](https://i-blog.csdnimg.cn/blog_migrate/1252285a138ab910f6a0e371f5af2ccc.png)
64位的ELF文件
![](https://i-blog.csdnimg.cn/blog_migrate/8cb7afa8711d8a916a0ef7be49e03c45.png)
shift+F12查看字符串
![](https://i-blog.csdnimg.cn/blog_migrate/b298584ffc5f5781f3f54490a916915c.png)
跟前面那个差不多,跟进right flag
F5转换伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/740615a9d1aee8c00939b93207cfbf7d.png)
相同的套路,输入的字符串与flag进行比较,相同则正确
flag就是{hacking_for_fun}
上面的ASCII码转字符就可以了
![](https://i-blog.csdnimg.cn/blog_migrate/f7ab3a550968bf64783f50fb44ef7397.png)
把上面的字符串中的i和r换为1
flag{hack1ng_fo1_fun}
4、内涵的软件 1
![](https://i-blog.csdnimg.cn/blog_migrate/2cca9cb35dd6600088e245001fc01e1e.png)
exeinfo了解到32位无壳
![](https://i-blog.csdnimg.cn/blog_migrate/4f799d565709308699adbcd18b356b60.png)
shift+F12查看字符串
![](https://i-blog.csdnimg.cn/blog_migrate/36cb430725a4daaac58487533811e254.png)
main函数F5查看伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/f8382b8ce26bd88b0c54b72562c8c9db.png)
v5在这里并没有被调用
直接把DBAPP换为flag提交就可以了
flag{49d3c93df25caad81232130f3d2ebfad}
5、新年快乐 1
exeinfo查看,32位upx壳
![](https://i-blog.csdnimg.cn/blog_migrate/beec020bae5a559765743c1be26755da.png)
upx.exe -d脱一下壳
![](https://i-blog.csdnimg.cn/blog_migrate/41b265313a5fc4beb022bedc232ab344.png)
shift+F5看一下字符串
![](https://i-blog.csdnimg.cn/blog_migrate/4fa8d1957ef900c996034aeb4cba1059.png)
main函数F5看一下伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/1e1ec66c685ae505b1594d22829cd130.png)
根据提示,字符串应该就是HappyNewYear!
6、xor 1
![](https://i-blog.csdnimg.cn/blog_migrate/49f344203b2098227dbb6b8be7fa1838.png)
exeinfo查看一下,64位无壳
![](https://i-blog.csdnimg.cn/blog_migrate/746b84d36be607d118217548bb911fde.png)
拖入IDA,shift+F12查看字符串
![](https://i-blog.csdnimg.cn/blog_migrate/415b0dd74f2ece70071b9e0e6fad3d82.png)
直接F5查看一下伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/44f1bed11b4b729d53a99ed135ca4471.png)
第一个if很明显,表示flag长度为33位
后面就是一个for循环,进行异或运算
最后判断__b和global是否相等,相等则返回success
这样的话,flag应该就是global的值
双击跟踪找到global的值
![](https://i-blog.csdnimg.cn/blog_migrate/afc0f2e58fb99cb628751e9ce7dace9c.png)
写脚本运算一下
这里的数组可以直接shift+E得到
![](https://i-blog.csdnimg.cn/blog_migrate/568852a2e3d4b1c9af3f3851d5d43853.png)
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
![](https://i-blog.csdnimg.cn/blog_migrate/2112e4f6349cde656d2832e7d3726402.png)
8、reverse3 1
exeinfo查看信息
32位无壳
![](https://i-blog.csdnimg.cn/blog_migrate/18ab765f02fa7fc3a26e891038e2e4ac.png)
IDA32位打开,shift+F5查看字符串
![](https://i-blog.csdnimg.cn/blog_migrate/ce474595f817f6bd271e796ac7e635f5.png)
跟踪一下right flag
找到main函数,F5查看一下伪代码
![](https://i-blog.csdnimg.cn/blog_migrate/e1dd9958a75924eb4829941ddb9a8723.png)
输入的数据进行了一次sub_9A10BE这个算法的处理,处理后的结果赋值给v4
使用strncpy函数把v4的数据赋值给Destination
v11为Destination的长度
for循环对Destination的数据进行了一下移位(ASCII码层面)
v5为移位后的Destiantion的长度
移位后的Destination与Str2相同的话,正确
Str2为这个
e3nifIH9b_C@n@dH
![](https://i-blog.csdnimg.cn/blog_migrate/e1cd6caf9ce08197fc0bdd878d6fbcc9.png)
需要得到flag的话应该就是把上面处理的过程反过来
Str2——>移位——>sub_9A10BE算法解码
这样的话关键就是sub_9A10BE这个算法是什么算法
双击跟踪,这个算法是直接调用的sub_9A1AB0,变量为三个
![](https://i-blog.csdnimg.cn/blog_migrate/f36d934ae0fd3652cbe773594ce2e305.png)
可以了解到这个是base64加密算法
![](https://i-blog.csdnimg.cn/blog_migrate/327735d088604650b4a45fbbaf057bdb.png)
其实根据一开始的字符串检索那里就能猜到
![](https://i-blog.csdnimg.cn/blog_migrate/fd965c1047c0e0c8e608e10212ea0a85.png)
这样的话就可以用以下的脚本处理一下
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解码就可以了
![](https://i-blog.csdnimg.cn/blog_migrate/dd1fe18332ae2d35d36eb4f2d808f7e4.png)
flag{i_l0ve_you}