终于考完试了,爽!!!然后就做了两道题打发闲暇时光,如图:先来第一题:
打开题会看到让下载一个exe 文件,下载完成后,打开运行,先观察一下特征,在进行调试,这是一贯的套路,但是在这个题上,我翻车了。。。。首先是程序运行是这么个情况:然后我就傻乎乎的在win7x86 虚拟机上运行,还是运行不起来,然后我就懵逼了。。。。最后清晰思路,先看一下文件本身是不是有效的PE文件,查看PE 结构,果然:这个很明显是一段图片资源的字符串,使用html 进行显示:打开后是一张二维码:对二维码进行扫描得到字符串:Bingo这个题具有一定的迷惑性,会让人下意识的认为这个exe 文件是可以执行的,但是其实这个只是一个文本。
这里提供了一个reverse_3.exe 是可以执行的让首先观察一下,这个题应该是要求输入正确的字符串,然后进行匹配,判断输入的字符串是否是正确的,那么顺着这个思路可以大致想到在程序内部肯定存在与目标字符串相关的字符串,而目标字符串可能就是flag ,也有可能是输入正确字符串后才会获取flag, 但是可以肯定的是程序内肯定存在一个与正确答案相关的字符串然后对程序进行查壳:无壳,然后进行调试:这里我使用静态调试与动态调试相结合的方式进行调试:x32Dbg:查询一下字符串,查看输入错误是打印的那句:"wrong flag!"从这里到达该函数的头部,绘制一下看看执行逻辑:找到代码块后,使用IDA pro 看一下这里的伪代码,当然,建议先进行调试一下,看一下字符串的传递和处理是怎样的,对其有基本了解后,在看伪代码,更容易理解其加密算法:这里是我分析的一些执行逻辑:
使用IDA pro 打开软件,并且跳转到该代码区域这里需要注意一个问题,该程序使用的动态基址,其地址会发生变动,所以可以将当前地址改写为reverse_3.exe + 偏移的形式在IDA pro中,默认模块地址是0x00400000按下F5 后便可以查看:这里我解释一下这个程序的大致逻辑:1、输入字符串2、第一次加密(Base64)3、第二次加密(字符值 + 该字符所在下标)4、和正确的加密字符串比较,并输出结果
而从X32dbg 调试中,也发现了正确的加密字符串是:e3nifIH9b_C@n@dH
按上面的逻辑进行解密:当前字符串字符值 - 所在下标,即可得出Base64 字符串,在进行base64 解密
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课