Crack001-Acid_burn
关于题目
- 所用工具为OllyDBG,开始想用IDA,但是发现并不适合动态调试(也许将来打脸)。
- 题目中需要破解的是两个序列号,一个是一串字符,一个是两串,一串字符的往往是硬编码在程序内部,而两串的可以通过一定计算设计得复杂一点,通过研读指令才能破解。注册机需要完全理解汇编指令才能编写,注册机晚些在补。(截图之后再补2018.4.2)
破解过程
- 先用ODBG把程序运行起来,通过F8找到第一个弹框所调用的指令,然后F7单步进去,Ctrl+F8进一步定位弹框的位置,这一题,刚开始的弹框可有可无,可以迅速点击确定,然后继续点击Ctrl+F8继续运行,直到弹出下一个Form,这时候选择一个串那个,点进去,随便输一串,然后点击check,这时候,之前标记的断点起到作用了,当你看到call jmp User32.messagebox的时候,看主模块的堆栈区,找到离他最近的一个返回,右键进入反汇编,然后你会看到略微熟悉的UnIcode编码提醒,最后找到push ebp mov ebp esp,这两条指令,这两条指令是建立栈帧,然后往下寻找,找到JNZ,右键二进制,nop填充,这就破解完了,同理,两串的也是这样破解,但是这样破解唯一一点不好的地方就是不管你输什么进去都能进入,最好的方法是写注册机,这样会强大很多,这个后续一定会补上,截图后面也会补上。
- 这里还有第二种方法,比上面方法简单一些,我选用上面方法是因为根据参考网址 ,我的显示不了低地址的messagebox,无法去查找返回地址,然后我重新在虚拟机装了win7,这时候可以看见了,直接运行到弹出出错的form,然后去查找低地址的messagebox,右键查看调用,在这个call打断,然后继续点击check,这时候会停在断点,然后在主模块区的堆栈区找到第一条返回语句,然后右键查看反汇编,进去找一条JNZ的汇编语句,这时候看左边的实线,会看见跳转到sorry..的Unicode,Unicode语句在右边查看,将这句nop填充即可。
一点知识
题目相关
- 发现问题:当点击左边两串,先输入一些字符,破解会失败,比如第一行输入123,第二行输入qwe,注册不会成功,这是因为程序本身在设计的时候就不允许输入字符少于三位。
汇编指令
- JE,JNE,JNZ和JZ的区别,JE(jump equal)相等则跳转,JNE(jump not equal)不相等则跳转,JNZ结果不为零则跳转,JZ零标志为1就跳转。
- [test和cmp的区别][https://blog.csdn.net/thanklife/article/details/11067731]
- 给出VB反汇编参考
总结
- 选择破解完01的时候,第二个选择破解09,当面对的是跳出成功和失败的页面的时候,往往可以通过先OD打开程序,先运行到密码输入错误界面,然后alt+k查看堆栈,找到massagebox查看调用,然后寻找跳转成功和失败的指令,nop掉失败的指令就爆破成功,随后的13题会单独写一篇
- 再来说08,08破解的方法和09很相似,有两种方法可选,第一是和09一样,运行程序直至出错,回到OD,按F12,然后去alt+K去堆栈看messageBox,查看调用(show call),然后在主模块的堆栈区,这时候一定要看提示的Unicode语句在主模块堆栈地址是否在程序领空,如果在领空的话,离他最近return右键看反汇编,上下翻动看到成功和失败的Unicode,然后查找跳转到失败的je,jNz等语句,让NOP掉这条指令就爆了,第二种方法,由于程序是VB,所以可以利用其API,BreakPoint ->VB APIs->Comaparison->选上一切可疑的比如_vbaStrCmp,_vbaStrComp,_vbaVarCmpEq,然后点击确定的时候会中断,上下翻看程序是否有成功或者失败的提示,然后找到跳转NOP,这时候也可以看断点处是否在程序领空,如果在的话很可能就是那里。这种方法要看编译器
- 用VB.D…反编译出来的地址和OD里面一模一样,利用这个特性,其实可以把11题破了,但是要写出注册机很难,11题根据VB反编译器分析之后,可以Ctrl+G直接去含有判断的地方把跳过显示REGISTRIERT的跳转指令nop掉就可以,而且查找字符,无论是Unicode还是ASCII,都需要在程序的领空才能查到程序相关的字符,在超过程序领空的查不到
- 在这之后由看了04,04爆破可以在加载程序完之后选择查看asc码,看到恭喜注册成功双击进去,然后这里有一点小坑,上面的jnz指令,如果不点击程序图片的框的话,是不会运行到这里的,可以在这里下断试,把跳过成功这句jnz nop掉就可以,有时候会出现一直搜索不到的情况,那就先运行程序,F12暂停,alt+k查看堆栈,找到程序领空,show produce然后再查找就可以了
- 一般程序会从低地址开始加载,如果一开始运行程序的时候从F…开始的,那就是估计程序有那么一点毛病,我之前是在用OD加载之前运行了一下看,然后就从F..开始加载了,所以…讲不清
- 第五个,暴力破解,大概步骤是这样的,首先运行程序然后F9让其运行,然后F12中断,这时候alt+K,看到这里这个调用是在程序领空的,右键跟进去,进到主模块,右键查看ASC码,寻找“注册了”的字样,双击进去,把跳过这句话的指令全部nop,实际上只要nop第一个je和接下来的两个jnz就行,但是这个程序改了之后保存不下来,不知道为何,据说是有壳。