MD5加密程序解flag
****问题-1:****找到开头“This program cannot be run …” 这个字符串的内存起始地址(即字符串的指针),并准确计算该字符串的长度;
1.运行程序寻找字符串位置
- 打开IDA寻找字符串
发现无法找到目标字符串
3.通过for fun找到主函数,查看伪代码。
分析得知各功能实现应%S所实现的内容。
从而定位其地址*0x40004E*
4.将程序放入010Editor找到相应位置,然后数字节。
共计****44****个字节
****问题-2:****需要结合具体的加密操作逻辑,说明所发现的加密算法。
- 由第一个子函数可知,输入的字符串长度有固定要求。
输入内容被保存在byte_407444。
且长度必须为9.
2.打开第二个子函数,可以看见其中并无加密转码操作,还是在确认输入内容的范围。
3.在第三个函数
首先在18行有一次混淆交换
随后有sub_40210C(Str1, (int)byte_407444, 5)说明进行了另一种交换
进入发现是将byte_407444的前五个字符进行MD5加密。
随后密文Str1与Str2进行比较
4.根据以上推断,可知flag经过一次加密后,前五位经MD5加密后与Str2进行比较,后四位直接进行比较。
根据MD5要求写出脚本
得到密文为*K502G32Z2*
5.在解密第一层加密方法,这是一个类仿射加密
范思宇:通过dbg按顺序尝试各个字符的对应关系,从而一一对照找到原flag。
例如输入123456789,就可得知对应密文为0BEHKNQTW。
依次类推,可以推出原文为*5M1LE_L0L*
张原赫:找到初次转码后密文的储存位置
更改存储内容继续运行
得到结果。
不足:该方法可以得到结果但是无法拿到flag。
所以使用脚本进行转换
得到flag。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZYH's blog!
评论