selph
selph
Published on 2022-07-11 / 289 Visits
1
0

新160个CrackMe练习:004-AcidBytes.2

算法难度:⭐

爆破难度:⭐

脱壳难度:⭐

信息收集

运行情况:

依然是序列号验证,输入序列号点击Check,会显示提示信息

image.png

查壳与脱壳:

出现壳了,Die查出来是Upx压缩壳

image.png

对于Upx壳使用ESP定律即可完成脱壳,过程相当简单,这里简述一下就不截图演示了:

  1. 运行到OEP,运行到pushad的下一行(执行这个指令只有esp的值会被修改)
  2. 在内存中查看esp指向的地址,对该地址下访问硬件断点,然后运行,此时会运行到popad指令的下一行,是跳转到真正OEP的jmp,跳转过去
  3. 使用Scylla进行Dump和修复PE,得到脱壳后的程序

再次查壳验证:

image.png

查字符串:

有点帮助的字符串是这些,是验证提示信息

image.png

查导入表:

没有什么特别的点,看起来都是图形界面相关的内容,程序使用MessageBoxA弹窗提示

调试分析

这个程序的传参方式比较特别,根据查阅资料[1],前三个数据保存在eax,edx,ecx寄存器里,超过三个参数部分放在堆栈传递

这里以字符串作为入口进行突破,搜索字符串Congrats!...的交叉引用,找到按钮控件的处理例程:

首先是注册了SEH异常链,然后获取用户输入

image.png

接下来就是比较+弹窗三连:

输入字符串和硬编码字符串进行对比,如果相同,就弹窗提示成果

如果不相同,就判断是否输入的有内容,如果无内容,提示输入为空,否则提示输入错误

image.png

暴力破解

直接Nop掉关键跳即可:

image.png

算法分析

硬编码密码,无算法
效果:

image.png

总结

处理该CM的要点就是脱壳,脱壳之后就是硬编码判断跳转,算是个入门级脱壳练习

参考资料


Comment