破解的是《加密与解密第三版》中的traceme.exe,下载地址将会在最后给出。
这个是软件的主界面,软件的主要流程是,当按下check后,会读取用户名和序列号的内容,然后检查用户名是否超过五位,不超过则弹框报错。超过后,会读入用户名和序列号。会根据用户名生成正确的序列号,然后用正确的序列号和输入框内的序列号做对比,如果内容一致则显示成功。如果不一致,则显示再试一次。
首先用ollydbg打开traceme。根据教程上说的,这种读取输入框内内容的exe通常用到user32.dll的GetDlgItemTextA方法。所以使用Ctrl+G调出窗口
输入要跟踪的表达式中输入GetDlgItemTextA并且在user32.dll中找到它的代码段
左上角的红色代表我已经在GetDlgItemTextA处设置了断点,一旦程序运行了GetDlgItemTextA,就会停下来。接下来就开始运行exe程序了。
序列号我是瞎输的,然后按check开始检验。果不其然就停在了75e66b36处。然后就可以不停的按F7键,
直到这边,可以看到call命令已经运行了两次GetDlgItemTextA,可以判断程序已经将输入框中的用户名和序列号读取了,接下来可以猜测test方法就是在比对序列号。不过结果不是我现象的那样。test方法下面有一个je的跳转。我点击了它。
立即出现了一个红色的箭头,这个箭头一直通向
原来是检查用户名字符的数目的,那么就继续找下去。
第一个箭头是我刚刚看的第一个箭头,第二个箭头又是一个test的方法,我看看它跳转到哪里去了,
嗯没错这个跳转到的地址显示的是序列号错误,说明这个地方的test是判断的序列号是否正确,错误就跳转到序列号错误部分,如果不跳转呢?
不跳转显示的是成功,那么就把这个跳转涂掉试试看。右键
没错,我成功了,这个就是传说中的爆破。它让判断失败失败后依旧运行成功的结果。不过这样无论输入什么结果都是成功的。可以在这个地方右键,选择菜单中的“复制到可执行文件”,然后选择“所有修改”。在弹出的新窗口中,保存文件。
生成了新的traceme.exe,这个exe不管输入什么序列号都是成功的。
当然也可以不掉过使用F8继续运行程序,观察现象,直到这个地方。
在右边有一个明显是我输入的序列号的地方,而上面还有一个2360,并且使用了一个叫做lstrcmpA的方法去使用了这两个参数。这个可以猜测是真的序列号和输入的验证号比对的一个过程。
很明显这个lstrcmpA用了一个叫做CompareStringA的方法,它们确实是在比较是否一致。
可以在程序正常打开的情况下,试着输入admin和序列号2360
这个是在程序运算的时候,在内存中看到这正确的答案。
当然还有一种方法是根据汇编代码来逆推出根据用户名生成序列号的方法,不过这个目前我还没研究出来。
traceme.exe的下载地址:https://u19693866.ctfile.com/fs/19693866-388338607
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。