BUUCTF crackMe
2021/11/1 23:13:56
本文主要是介绍BUUCTF crackMe,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
太菜了 做了好久没做出来,参考其他师傅的解答总结一下
题目背景:
老规矩,Ex PE打开,32位无壳程序,用IDApro打开;主程序如下:
主体是一个while循环,如果我们想让while结束,我们就需要使得两个if成立;
我们首先看跟v3有关的loc_4011A0,点进去,发现无法反编译,解决办法IDA无法反编译
编译成功之后:
发现v3的值一直为1;
我们来看看sub_401830函数,主要由两个while构成,我们先来看第一个while
主要是把输入的转换成数字并且按照每两位分成一组,也就是输入a21c32ba,最后分为0xa2,0x1c,0x32,0xba,接下来看第二个while循环;
我们开始从后向前看, 最后需要输出v13==0xAB94,我们先点击进入sub_401470函数查看,
一堆的if判断,把判断条件转换为字符查看,这些字符就是大概他想要得到的字符,不是的话就执行错误的操作,最后进行验证,需要注意是这里
我们可以尝试运算一遍,应该是s,最后得到 a2的值为dbappsec 。最后我们就要求的是a数组的值了(源程序是byte_416050数组,被我改了)
怎么求呢?IDA调试,有反调试没成功,试试OD,
先在ida中找到xor异或,查看他的地址(建议先图装查看,找起来方便,再查看地址)
我们现在就要看ecx的值了(XOR destination, source为什么不是eax,怪我汇编没学好,就是xor异或和实际异或的顺序相反的,我是这么记忆的)在**1B3E处下一个硬件断点,然后输入用户名,随便输入一个密码,循环8次记录下ecx的值。
0x2a, 0xd7, 0x92, 0xe9, 0x53, 0xe2, 0xc4, 0xcd
最后就是写脚本解密了。
str="dbappsec" flag="" a=[0x2a, 0xd7, 0x92, 0xe9, 0x53, 0xe2, 0xc4, 0xcd] for i in range(8): flag+=hex(a[i]^ord(str[i])) print(flag.replace('0x',''),end='')
最后输出为4eb5f3992391a1ae,md5加密之后的答案为
flag{d2be2981b84f2a905669995873d6a36c}
这篇关于BUUCTF crackMe的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享