[网鼎杯 2020 青龙组]jocker
打开ida查看文件,按f5发现不能反编译
找到这块地址,并且把这里的栈指针修改正确
然后在按f5
接着改
然后f5反汇编
进入wrong看一看
一个简单的加密
打开omg看一看
有个全局变量unk_4030c0进去看一看
发现就是一堆加密后的数据
还有一个encrypt函数
这里的for循环应该是把程序里加壳的部分给脱壳,所以动态调试
这一部分就对应着上面的for循环
直接把断点设在这个jle下面一行指令
通过ida的顺序可以知道,上面这个函数就是encypt函数,进入看看
不难发现这里有个for循环,并且循环了19次,并且进行了异或运算,然后对全局变量中的值进行比较,如下是异或后的结果,所以我们只需要拿这个结果对其进行异或即可
00403040 0E 00 00 00 0D 00 00 00 09 00 00 00 06 00 00 00 .............. 00403050 13 00 00 00 05 00 00 00 58 00 00 00 56 00 00 00 ......X...V... 00403060 3E 00 00 00 06 00 00 00 0C 00 00 00 3C 00 00 00 >..........<... 00403070 1F 00 00 00 57 00 00 00 14 00 00 00 6B 00 00 00 ...W......k... 00403080 57 00 00 00 59 00 00 00 0D 00 00 00 W...Y.......
运行完后,发现只对了19个进行了加密,所以还有5个flag{d07abccf8a410cd_me?所以继续运行,进入finally函数,开头设置了一个字符串,并且调用了随机函数,
然后接下来会看到这些奇怪的运算,没搞清楚是干嘛的
接着往下看,发现这里是取局部变量字符串的第一个和参数字符串的第一个来比较,如果相同就将al设置为0,不同为1,然后在比较eax和ebp-0xc的值
接下来,不会分析了,不过由于每次随机出来的数字都不一样,并且最终eax的值只会是0或1,无法跟随机的值比较,那么这道题得靠猜了。。
flag最后一个是}所以,接下来猜其加密方式是啥,看了网上wp大佬后,发现这只是用了异或,并且是对0x47进行了异或
所以得到的最后5个字符串就是
b37a}
所以答案就是flag{d07abccf8a410cb37a}