适合破解新手的160个CrackMe之001 第一次的CrackMe

适合破解新手的160个CrackMe001

 

 

 

打开程序,发现给了两种注册方式.

左边是用序列号与姓名,右边是只有序列号

先解决左边的

 

 

 

点击Check it Baby后提示序列号错误.

OD打开程序

点击运行,程序弹出运行

 

 

 

 

 

 

继续运行程序直到弹出Sorry,The serial is incorrect!

 

 

 

这个时候不要点确定.在OD中点击暂停让程序停止

 

 

 

之后再按Alt+K打开调用堆栈窗口

 

 

 

这里发现了MessageBox函数

 

 

 

右击选择显示调用

 

 

 

跳转到调用位置后点击跳转到的地址,按 f2进行断点

 

 

 

然后往上翻,找到函数头,按f2进行断点

 

 

 

断点后,地址会变红.

接下来运行程序,然后再点出刚刚挂起的程序,点击确认,然后再点击Check it Baby!

 

 

 

再打开OD发现发生了变化

 

 

 

看右下角的堆栈窗口,右击最上面的那条语句选择反汇编窗口中跟随.

 

 

 

发现程序在0042FB37的地方停下来了.

往上看,在0042FB1D有一个跳转指令跳到了0042FB37.

再往上有一个jnz(jump if not zero)指令,它跳转到了042FB1F.

刚好略过0042FB1D,执行下面的try again弹窗.

所以我们只需要把这条jnz指令给nop(空指令操作)掉,或者修改它,让它跳到正确的位置就可以了.

这里我选择nop掉

 

 

 

选择这条jnz指令,右击选择二进制再选择用NOP填充.

 

 

 

变成这样,由于nop指令也占用一个字节,所以会变成两行.

接下来在数据去右击,选择复制到可执行文件,进行保存.

 

 

 

 

 

 

 

 

 

 

 

 

 

随便改个名字保存.

接下来点开我们保存到的那个程序,一步步点开

 

 

 

成功.

 

右边的方式也一样.

先运行

 

 

 

 

提示出现后不要点确定,在OD中暂停

Alt+k打开调用堆栈窗口

 

 

 

然后转到,加断点

 

 

 

 

 

 

 

 

再运行程序,在右下角选择最顶上的那条,选择在内存中转到.

 

 

 

可以看见程序在0042F509停下来了.按照我们上面的方法.可以看出问题出在0042F4D5的jnz指令.它跳过提示正确的指令执行了提示错误的指令.把他nop掉.

然后保存,打开保存的修改后的程序.

 

 

 

成功!

总结:第一次做CrackMe,跟平常的做题差别有点大.学到了许多东西.包括OD的使用,汇编语言的一些知识等等.

posted @ 2022-12-18 16:30  M4r1s4  阅读(167)  评论(0编辑  收藏  举报