吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3842|回复: 5
收起左侧

[原创] 160个Crackme之051学习笔记

[复制链接]
海天一色001 发表于 2021-4-23 08:47
本帖最后由 海天一色001 于 2021-4-23 09:00 编辑

51CM,难度?,Serial保护方式,先打开CM程序:
001.png
弹出窗口,输入1234567890”,点击Check按钮,弹出错误提示窗口,内容是“你输入的激活码不正确!”点掉后再点击About按钮,弹出关于窗口:
002.png
百度了一下,大致是说这个CM程序不适合新手,也不认为它适合中等水平的破解者。所以如果你不能破解它,不要制造复杂的东西,因为大多数人都不会..这么看来可能会很难的吧。
不管如何,先试着练一下:
一、查壳:
003.png
无壳,ASM编程。
二、爆破:
CM程序导入OD中,ASM程序,从00401000开头向下查看,代码很简洁清晰。
向下来到004012100040121E处,看到了错误提示框代码;
004.png
再向下,0040123400401242处,是正确注册的提示代码:
005.png
而在00401232处的跳转跳过了正确提示,说明是关键跳,nop掉,保存为可执行文件DueList.6.nop.exe,双击这个文件,在文本框中随意输入一长串字符,然后点击Check按钮,弹出正确提示,爆破成功。
006.png
但输入字符不到8位时点击Check按钮,仍会弹出错误提示,说明在跳转命令之前还需要限制输入的字符为8位及以上的数字才行。
这样爆破就不完美了。
所以再从代码中找一找,看怎么改代码更好:
007.png
向上至00401227处,从16进制数据栏中看到跳转来自00401201处,
00401201处再向上,004011F9处是调用GetDlgItemTextA函数,查了一下GetDlgItemTextA函数的用法,发现本CM程序中将文本编辑框中输入的字符串存入00402121地址处,eax返回字符串的长度;
(当输入12345”、“1234567”、“123456rty”等字符串后点击Check按钮,发现不超过8个字符时eax的值均能正确得到字符串长度,大于等于8个字符时eax的值均等于8而不是真正的字符串长度!
而004011ED GetDlgItemTextA函数参数Count = 0x9,即字符串最大长度应该是9个,与我试这几次的结果不符!
(学习了一段ASM后,猜测是汇编中的字符串存储时自动加上了“\0”,才会这样吧。修改程序代码,那将004011ED处的push 0x9改为push 0xA/B甚至是0x10,再来检查此处的eax值。这个问题不属于本程序的破解,只是自己在进一步地学习了,具体过程不在这里写了。)
下一句004011FEeax0x8比较,相等则来到关键call处,否则失败;
那么直接将00401201处的跳转改到成功提示不就行了?
说干就干,将00401201处的je 00401227改成jmp 00401234,保存为DueList.6.jmp.exe,双击运行,不输入字符或输入任意字符,点击Check按钮均弹出正确信息,爆破成功。
008.png
可是仍有点小问题,主窗体的标题栏中的进度是0%!未爆破的CM程序报错时的进度是100%nop掉跳转指令的爆破程序进度也是100%
因为刚才修改了2个地址的代码,但没保存,所以直接Ctrl+F2重新开始,修改的地方自然就恢复了。
继续从00401232处开始研究代码,00401232处是关键跳,上一句是比较指令,则是关键比较;
再上一句,是关键call了,应该是计算判断输入的激活码用的,结果存入eax中,正确为1,错误可能为0
所以在0040122A处按Enter键来到0040104B处:
0040104B00401057处为设置主窗体标题栏为“Duelist's Crackme #6 -   0%”的代码段,
接下来为运算判断代码,到00401080处,此时的eax必须等于0x4071885,才能设置主窗体标题栏为“Duelist's Crackme #6 -  50%”,
再运算判断一番,到004010B8处,此时的eax必须等于0x4B00D127,才能设置主窗体标题栏为“Duelist's Crackme #6 - 100%”,并将eax1后返回。
否则跳到004010D5处,设置设置主窗体标题栏为“Duelist's Crackme #6 - 100%”,并将eax清零,返回后注册失败。
所以比较完美的爆破,是将00401201处的改成jmp 00401227,不管输入不输入,输入多少字符均跳过失败提示,进行运算判断;
然后进入0040104B这个call内将00401085处和004010BDnop掉,保存为可执行文件DueList.6.jmpnop.exe。
双击运行DueList.6.jmpnop.exe,程序运行很慢,可以看到先显示0%,等一会儿后再显示出50%,再等会儿显示了100%,并弹出正确信息框来。爆破成功。
也可以进入0040104B这个call内将0040105C处改为jmp 00401087,显示出“Duelist's Crackme #6 -  50%”,再将00401094处指令修改为jmp 004010BF,显示出“Duelist's Crackme #6 -  100%”。
这个修改后的可执行文件重新保存为DueList.6.jmp.exe,双击运行,程序运行速度极快,还未看到50%的字样,就显示出100%了。这样爆破也算成功了。
还可以在0040105C处改为jmp 004010BF,直接跳过50%,来到100%,这样爆破也是可行的。
三、追码:
从爆破过程中可知,注册算法在0040104B这个call内,Ctrl+F2重新加载程序,爆破时修改的内容自然就撤消了。
0040104B处下断,F9运行,文本框中输入“12345678”,点击Check按钮,程序中断,回到ODF8单步向下:
009.png
0040105C00401085处和00401094004010BD处代码作用一样:
分别取激活码的前4位和后4位作为循环次数,
循环内先对eax=0x36455544/0x43534952进行循环左移6次运算,
ah=ah xor al
al=al+cl
ecx=ecx-1
eax结果分别等于0x40718850x4B00D127。这样才能注册成功。
010.png
注册机就要对这两段代码进行逆运算,上面的变成最下面的代码,dec变成incadd变成subxor不变,rol变成ror
原来破解CM程序时写过VB模拟ROR的代码,这次仍然是拿来主义了!但是拿来也不容易,一点点调试,总是出错,太累了!!!
后来发现还是高级语言对位运算等逻辑运算支持不好的原因,汇编能运算的,VBVC都不能!!!
有大神在论坛里给我推荐了一个VisualFreeBasic,仔细研究了一段时间,感觉仍然是高级语言,对汇编中的这些字节运算也不支持,还是得从汇编入手!
学习32位汇编的过程同样是困难重重。好歹以前练习过对程序的汉化及修改,这一次也相当于给CM程序打个补丁:
OD中重新加载CM程序,将0040105C00401078处,00401094处至004010BC处两部分的注册检测代码分别改成如下生成注册码逆运算代码:
011.png     012.png
F9运行,在程序编辑框中输入“1234567890”,点击“Check”按钮,程序中断,再在00401072处右键选择“断点----运行到选定位置”命令,
013.png
在右侧查看ecx中的值,可以看到ecx=0x0DBD76F6;同时在下方的地址栏中查看00402121处的值,此时显示“12345678”;
F8单步,此时00402121处的HEX值已变成了F676BD0DASC值是不可显示的ASC字符:
014.png
先不管它,继续向下运行至004010AA处,此时ecx=0x7265766500402125地址处的ASC值为“5678”;
F8单步向下,此时00402125地址处的ASC值变为“ever”,注册码应该是下图中的粉红色的字符串了:
015.png
继续向下单步运行,一直到00401242处,弹出正确信息框,说明这个注册码是正确的。
但前4位字符无法正常显示,所以要继续向下运算,在00401072处加上判断,如果得到ecx= 0x0DBD76F6,则继续向下运算:
016.png
得到ecx=0x34647369,可以正常显示成ASC值为“isd4”;
最终得到的注册码字符应该是everisd4”,复制入CM中,点击Check按钮,弹出正确信息框。
因为利用这两段代码得到everisd4”后继续运算,发现生成的字符更多的是不可显示字符,所以保存后生成的注册程序DueList.reg.exe就只算了一个正确的注册码出来,并利用弹出对话框来显示。
本想直接显示在编辑框中,可是费了不少事也没成功,在DueList.reg.exe还必须先输入不少于8位字符,再点击Check按钮,弹出信息框内容是正确的注册码,而编辑框中是假码。
感觉这个注册机还是相当别扭的,继续研究下去,发现还是要学习了解Win32汇编!
开始学习大神罗云彬的《Windows环境下32位汇编语言程序设计》第三版,带着目的急用先学,刚进行到第四章时发现可以利用其中的FirstWindow-1.asm源程序进行修改来生成自己的注册机程序。
于是不停地敲代码,查函数,调试,虽然对地址的调用是用addr还是offset伪指令,如何连接字符串等还有各种疑惑,但还是写出了一个勉强过得去的注册机。
在这个过程中,花费了大量的时间和精力,勉强达到了目标,对API函数有了一定的认识,同时对第一个注册机的不足有了新的认识,于是重新编辑修改DueList.reg.exe,
生成的程序reg.exe,可以在输入不少于8位的字符的情况下将注册码显示在编辑框里了。
继续对reg.exe进行修改,生成的regend.exe,可以直接点击Check按钮生成注册码并显示在编辑框及弹出信息框中了。
现在的状况是爆破及找到算法不算很难了,难在用注册机表达出来,这就是编程知识和经验有限,需要长期积累了。
累并快乐着这一切!
附件 051.zip (521.56 KB, 下载次数: 8) ,含CM原程序、爆破后的程序、注册机及源码,(OD的调试文件被我不小心全清了!)等等。
百度链接:https://pan.baidu.com/s/1NEpyyUefbKcoJvMGG_9OmQ提取码:p8dk

免费评分

参与人数 10威望 +1 吾爱币 +30 热心值 +10 收起 理由
笔墨纸砚 + 3 + 1 用心讨论,共获提升!
schur + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
nmy124 + 1 + 1 谢谢@Thanks!
放开那斯 + 1 热心回复!
qishi3041 + 1 + 1 我很赞同!
lyl610abc + 2 + 1 排版有待改进
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
IMivory + 1 + 1 谢谢@Thanks!
kllay + 1 + 1 我很赞同!
爱你小吉君 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2021-4-23 16:29
@海天一色001 可以试试用markdown来写文章,会好看非常多,方便阅读。
 楼主| 海天一色001 发表于 2021-4-23 16:32
Hmily 发表于 2021-4-23 16:29
@海天一色001 可以试试用markdown来写文章,会好看非常多,方便阅读。

谢谢Hmily大神的提醒,下次用markdown
whatiwhere 发表于 2021-4-25 17:42
smokegui 发表于 2022-8-15 11:15
哥,等你的CM52啊,我只有看你的破文比较看的懂。
zishen 发表于 2023-12-16 18:33
大佬在吗,有没有160个createme的所有链接,好多原链接都失效了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 15:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表