Easy-Crackme 0.3 by wuhanqi【强势出击,^_^】
本版本采用重启验证。。。加了UPX壳。。。。代码重新编译希望大家测试啊~!/:017
一点小错误,已经修正!
[ 本帖最后由 wuhanqi 于 2007-8-14 16:59 编辑 ] 解压出来就已经是“已注册”了/:017 哦,一个小错误 不知道是不是程序有错还是怎么..不会弄了
看起来正确的一组:
jsblong
1147811042
[ 本帖最后由 极速暴龙 于 2007-8-14 18:32 编辑 ] ls来篇算法!
[ 本帖最后由 wuhanqi 于 2007-8-14 20:07 编辑 ] 看下这两段代码,好像逻辑上有点问题.
00412C44 /75 37 jnz short 00412C7D
00412C46 |8B02 mov eax, dword ptr
00412C48 |3A01 cmp al, byte ptr
00412C4A |75 2B jnz short 00412C77
00412C4C |0AC0 or al, al
00412C4E |74 24 je short 00412C74
00412C50 |3A61 01 cmp ah, byte ptr
00412C53 |75 22 jnz short 00412C77
00412C55 |0AE4 or ah, ah
00412C57 |74 1B je short 00412C74
00412C59 |C1E8 10 shr eax, 10
00412C5C |3A41 02 cmp al, byte ptr
00412C5F |75 16 jnz short 00412C77
00412C61 |0AC0 or al, al
00412C63 |74 0F je short 00412C74
00412C65 |3A61 03 cmp ah, byte ptr
00412C68 |75 0D jnz short 00412C77
00412C6A |83C1 04 add ecx, 4
00412C6D |83C2 04 add edx, 4
00412C70 |0AE4 or ah, ah
00412C72^|75 D2 jnz short 00412C46
00412C74 |33C0 xor eax, eax
00412F17 /74 02 je short 00412F1B
00412F19 |D9E0 fchs
00412F1B \DC1D 1AC14000 fcomp qword ptr
00412F21 DFE0 fstsw ax
00412F23 F6C4 41 test ah, 41
00412F26 0F84 22000000 je 00412F4E
00412F2C 6A 00 push 0
00412F2E 68 22C14000 push 0040C122 ; 已注册
00412F33 6A FF push -1
00412F35 6A 08 push 8
00412F37 68 6F000116 push 1601006F
00412F3C 68 01000152 push 52010001
00412F41 E8 3C030000 call 00413282
00412F46 83C4 18 add esp, 18
00412F49 E9 1D000000 jmp 00412F6B
00412F4E 6A 00 push 0
00412F50 68 29C14000 push 0040C129 ; 未注册
00412F55 6A FF push -1
00412F57 6A 08 push 8
00412F59 68 6F000116 push 1601006F
00412F5E 68 01000152 push 52010001
00412F63 E8 1A030000 call 00413282
00412F68 83C4 18 add esp, 18
00412F6B 6A 00 push 0
00412F6D 68 29C14000 push 0040C129 ; 未注册
00412F72 6A FF push -1
00412F74 6A 08 push 8
00412F76 68 6F000116 push 1601006F
00412F7B 68 01000152 push 52010001
00412F80 E8 FD020000 call 00413282
这个图是使用了点暴力弄出来的. 找到此处的方法是:
重启验证方式的分析主要有以下3种可能:
1、把注册码保存到注册表,利用注册表读取注册码,然后经过计算验证其正确性。
2、建立一个文件,把注册信息保存到文件里,然后通过读取来验证。
3、也可能把先验证注册信息,如果正确,那么就保存到注册表或某个文件中,下次启动读取验证,如果为空则失败。
这个Easy-Crackme 在提示错误后,暂停,返回用户代码时,附件可以看见是在往注册表中放置name和sn,在整体内存中搜索同样的语句,可以很快定位在412CDC,直接可以进行分析了!
在爆破中,和上面说的一样,00412F49 E9 1D000000 jmp 00412F6B会又跳回“未注册”!
时间和水平不行!算法还没时间好好去看懂! 怎么都那么难的 。。。 恩,是程序上有些问题哈,我把源码贴出来,高手看一下!
.版本 2
.程序集 窗口程序集1
.子程序 _按钮3_被单击
结束 ()
.子程序 _按钮2_被单击
.子程序 _按钮1_被单击
.局部变量 name, 文本型
.局部变量 sn, 文本型
.局部变量 ljbl, 逻辑型
.如果 (编辑框1.内容 = “”)
信息框 (“请输入用户名”, 0, “提示”)
.否则
.如果 (编辑框2.内容 = “”)
信息框 (“请输入注册码”, 0, “提示”)
.否则
name = 编辑框1.内容
sn = 编辑框2.内容
ljbl = 写注册项 (3, “Software\Microsoft\Notepad\name”, name)
ljbl = 写注册项 (3, “Software\Microsoft\Notepad\sn”, sn)
信息框 (“请重启软件已验证注册码是否正确”, 0, “提示”)
.如果结束
.如果结束
.子程序 _标签3_反馈事件, 整数型
.参数 参数一, 整数型
.参数 参数二, 整数型
.子程序 __启动窗口_创建完毕
.局部变量 name, 文本型
.局部变量 sn, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 c, 整数型
.局部变量 gdzh, 整数型
.局部变量 sum, 整数型
.局部变量 real, 逻辑型
name = 取文本注册项 (3, “Software\Microsoft\Notepad\name”, )
sn = 取文本注册项 (3, “Software\Microsoft\Notepad\sn”, )
.如果真 (name = “”)
.如果真 (sn = “”)
len = 取文本长度 (name)
gdzh = 1383838438
.计次循环首 (len, i)
c = 位异或 (取代码 (name, i), gdzh)
sum = c × 96 + 459478830
sum = sum × len
.计次循环尾 ()
.如果 (sn = 到文本 (sum))
标签4.标题 = “未注册”
.否则
标签4.标题 = “已注册”
.如果结束
.如果真结束
.如果真结束
标签4.标题 = “未注册” .如果真 (name = “”)
.如果真 (sn = “”)
.如果真结束
标签4.标题 = “未注册”
/:L