算法难度:⭐
爆破难度:⭐
脱壳难度:⭐
信息收集
运行情况:
依然是序列号验证,输入序列号点击Check,会显示提示信息
查壳与脱壳:
出现壳了,Die查出来是Upx压缩壳
对于Upx壳使用ESP定律即可完成脱壳,过程相当简单,这里简述一下就不截图演示了:
- 运行到OEP,运行到pushad的下一行(执行这个指令只有esp的值会被修改)
- 在内存中查看esp指向的地址,对该地址下访问硬件断点,然后运行,此时会运行到popad指令的下一行,是跳转到真正OEP的jmp,跳转过去
- 使用Scylla进行Dump和修复PE,得到脱壳后的程序
再次查壳验证:
查字符串:
有点帮助的字符串是这些,是验证提示信息
查导入表:
没有什么特别的点,看起来都是图形界面相关的内容,程序使用MessageBoxA弹窗提示
调试分析
这个程序的传参方式比较特别,根据查阅资料[1],前三个数据保存在eax,edx,ecx寄存器里,超过三个参数部分放在堆栈传递
这里以字符串作为入口进行突破,搜索字符串Congrats!...
的交叉引用,找到按钮控件的处理例程:
首先是注册了SEH异常链,然后获取用户输入
接下来就是比较+弹窗三连:
输入字符串和硬编码字符串进行对比,如果相同,就弹窗提示成果
如果不相同,就判断是否输入的有内容,如果无内容,提示输入为空,否则提示输入错误
暴力破解
直接Nop掉关键跳即可:
算法分析
硬编码密码,无算法
效果:
总结
处理该CM的要点就是脱壳,脱壳之后就是硬编码判断跳转,算是个入门级脱壳练习