题目描述:菜鸡觉得前面的题目太难了,来个简单的缓一下
查壳,ELF文件
Linux进行调试
在IDA的main主函数下,查找字符串who
可看到flag
题目描述:菜鸡和菜猫进行了一场py交易
是pyc文件,可知要进行反编译
用户输入的值进行了一个条件判断,encode(flag)== correct
进行反推
查壳
调试
搜索关键字符DUCTF,可看到一串16进制
运行程序
搜索关键字input,在While循环内先是判断用户输入的数值是
1-8,并且大于0,小于或者等于8,后面是判断灯的亮灭。
判断byte_532E28是否都为1,若都为1,则进入sub_457AB4,点击跟进
进行异或
main主函数分析,有一段16进制数
后面进行比较,输出结果
是C文件
代码分析
在main主函数下,有4个条件判断,其中在最后获取密钥传值hash要为 unsigned int hash = first * 31337 + (second % 17) * 11 + strlen(argv[3]) - 1615810207;所以这你可以忽略第1个条件判断,并满足剩下三个的条件判断。
要满足second模五不等于3,或者模17等于8
得到flag
UPX的壳
脱壳
main主函数下获得flag
ELF文件
F5反编译成c语言
一个个查看子函数
在authenticate发现一个加密函数decrypt,可见flag就藏在这里,是对8048A90的字符串进行加密。
使用gdb进行调试,并且在decrypt下断点,并查看下一个mov地址的eax寄存器内容
下断点
单步走
x表示要查看寄存器的内容,/s表示用字符串形式显示,/W表示4字节宽,/sw字符串形式并且四字节宽来显示。
乱码,嘤
还是用IDA动态调试吧
因为是ELF文件,所以选择在Linux下调试IDA
若不会设置,参考https://www.cnblogs.com/zhwer/p/12484708.html
在这个地方设置一个断点
运行到断点处之后,点击eax寄存器查看内容,就可以得到flag
flag为9447{you_are_an_international_mystery}
64位文件
使用到IDA64位进行动态调试
将flag写入到了文件,616C662F706D742F16进制下使用r进行校验ASCII,可看到目录
在一个子函数调用call _fopen下的mov跳转设置断点
并不完整的flag
点击offset偏移,即可偏移到对应的完整flag
发现在地址0040109E处执行了解密函数,同时发现00401094处会跳转绕过解密函数,而0040109A处会触发int3中断,导致函数提前退出,而执行完sub_401000后又会直接跳转到4010EF处,导致无法执行下面的callds:MessageBoxA函数获得flag。归结起来,需要修改三处:①jzshortloc_4010B9需要改为jnzshortloc_4010B9(或者nop),使得不会绕过下面代码②int3需要改为nop,使得int3不被触发③jmpshortloc_4010EF需要改为jmpshortloc_4010B9(不能nop,需要绕过下面的第一个messagebox,使得输出不冲突),使得下面弹框窗口不会被绕过
得到flag