CrackMe_Acid分析

CrackMe2

爆破难度:⭐
算法分析难度:⭐

压缩包名:004-Acid Bytes.2.zip

运行程序初步了解程序作用

是一个类似注册机的程序

利用exeinfo pe查壳

32位可执行程序,经过了upx加壳,可以使用upx.exe -d命令进行脱壳

先使用upx进行脱壳处理

破解

暴力破解

使用字符串查找的方法找到关键点

在前面的入栈处(一般为程序的入口附件)下断点进行分析

在提示成功前只有一个跳转指令,将其改为nop或相反的指令即可实现破解

算法分析

这里不进行壳的算法分析,仅进行程序本身的算法进行分析

输入的11111被放入了eax里,然后12011982赋值给了edx

进入下面调用的函数进行分析

当eax与edx相等时即返回主函数,到主函数后不相等就跳转,破解失败

所以,这里只是检验输入字符是否为12011982

手动脱壳

查找程序oep

使用平衡堆栈法找到oep

我们使用x64dbg调试加壳后的程序,观察oep处的指令,可以发现OEP的第一条指令是 pushad,其作用一般是保存寄存器环境,可以将8个通用寄存器都压入堆栈,那么我们可以单步程序(F8),执行 pushad,这样堆栈就会发生变化,而后我们可以在堆栈栈顶处,即ESP指向的内存处,设置硬件访问断点

然后在内存窗口处,右键设置4字节的硬件访问断点

之后,可以使用快捷键F9运行程序,程序会再次暂停下来,我们观察附近指令

可以发现我们暂停的指令上方就是 popad指令,一般遇到 popad指令,就离原始OEP不远了,因为执行完 popad指令意味着壳代码告一段落了

继续单步,可以发现一个比较大的jmp跳转。这个jmp其实就会跳转到原始OEP

实际上在分析时,我们是先单步到jmp跳转到的代码进行观察之后得出是否是原始OEP的结论的,这个部分需要我们对未加壳程序的OEP要有所了解

可以看到实际上已经进入到了主程序了,使用字符串搜索也能找到相关的字符串

dump内存

选择插件-scylla,打开dump窗口,此处已经自动获取了OEP,直接点击dump

保存文件后再单击Autosearch,修复IAT

修复好dump出来的程序后即可完成脱壳,执行程序发现已经能够正常运行

重新加载发现已经是正常显示了

还可以硬解,手动执行完壳程序后即会进入到主程序

总结

只是加了壳,关键在于手动脱壳过程

posted @ 2025-01-14 18:05  略略略zjr  阅读(12)  评论(0)    收藏  举报