Bugku-杰瑞的下午茶先运行测试一下程序,发现还是要求出flag,所以开始分析程序,先查壳,因为用IDA分析我并没有像往常一样成功,所以还是用od动调
经过刚才运行程序发现,有一串字符,所以首先尝试od搜索字符串定位到那个地方
找到了程序开始的地方,从这里开始单步调试输入我们的测试字符串123456789
继续向下运行将参数61,62压入栈,但并不知道有什么用,进入下面这个函数看一看
有一些操作,但并没有看出来是什么意思
跳过这个函数继续分析,数据窗口跟随,发现我们输入的字符串传入了下一个函数
继续向下分析,再进入下一个函数分析时发现,里面调用了我们输入的字符串并且还调用了一个函数,继续跟进去看看
跟进去发现了以下操作,将输入的内容与3异或
加密后的数据
在继续向下分析时,发现进行了一些操作,但并没有影响我们的输入或是加密后的数据跳过那些函数,发现一个特殊的字符串和我们加密后的数据
进入这个函数,会发现进行了一些处理,就是将加密后的输入字符串和那一串特殊字符进行比较
当je跳转实现时,就会输出success
这个函数结束后直接就是判断输出成功还是失败,所以就可以推断出是输入的字符串与3异或然后那一串特殊字符进行比较,相同则输出成功,可以根据这个写脚本了
脚本:
[Python] 纯文本查看 复制代码 x = [0x65, 0x6F, 0x62, 0x64, 0x78, 0x77, 0x6C, 0x67, 0x62, 0x7A, 0x7A, 0x5C, 0x6A, 0x70, 0x5C, 0x64, 0x6C, 0x67, 0x7E,0x00]
for i in range(0, 20):
x[i] = x[i] ^ 3
print(chr(x[i])) |