能力值:
( LV2,RANK:10 )
|
-
-
101 楼
一个算法也不会 不过全给暴了
|
能力值:
( LV2,RANK:10 )
|
-
-
102 楼
在00401175处,把je 00401242 nop掉,就爆破了,,,算法慢慢研究,
|
能力值:
( LV2,RANK:10 )
|
-
-
103 楼
跟了一个晚上,得出下列结论
注册码要19位数,经过
004010B8 |> /33C0 /xor eax, eax
004010BA |. |BB 1A000000 |mov ebx, 1A
004010BF |. |8A840C 040200>|mov al, byte ptr [esp+ecx+204]
004010C6 |. |03C7 |add eax, edi
004010C8 |. |99 |cdq
004010C9 |. |F7FB |idiv ebx
004010CB |. |41 |inc ecx
004010CC |. |3BCE |cmp ecx, esi
004010CE |. |8A92 30D04000 |mov dl, byte ptr [edx+40D030]
004010D4 |. |88540C 0F |mov byte ptr [esp+ecx+F], dl
004010D8 |.^\7C DE \jl short 004010B8
这些运算后,得到的19位和"QONVPWYIUYZZRFKUPFB"相比较,,如果符合条件,可能就ok,,否则不成功,更具体的结论,有没有高人分析一下,要睡觉了....明晚继续来研究一下.
|
能力值:
( LV2,RANK:10 )
|
-
-
104 楼
第一个给暴破了,算法不太懂啊
|
能力值:
( LV2,RANK:10 )
|
-
-
105 楼
写了keygen4的注册机(附源码),用户名大于2即可
|
能力值:
( LV2,RANK:10 )
|
-
-
106 楼
谢谢了,我学习学习1
|
能力值:
( LV2,RANK:10 )
|
-
-
107 楼
先下一个慢慢看,呵呵
|
能力值:
( LV3,RANK:30 )
|
-
-
108 楼
非常感谢happydown,如果能有破文就很完美了
|
能力值:
( LV2,RANK:10 )
|
-
-
109 楼
谢谢,下来练习练习
|
能力值:
( LV4,RANK:50 )
|
-
-
110 楼
@ Happytown
看您的Keygenme的文章有好几天了,觉得很好。
但终究有很多学习破解的人不具备好的编程的基础。至今还记得论坛上有人提议用visual studio产生的cod文件来学习高级语言编程和汇编。个人觉得这是非常好的方法。我在国外的一些论坛上也看到过支持类似学习方法的帖子。
对于用变动的堆栈来执行特殊功能的代码不是newbie能够搞懂的。
所以,恳请HappyTown蒋keygen源代码也打包共享。
谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
111 楼
这么多资源,要好好学习一下啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
112 楼
恩
一定要好好学
|
能力值:
( LV2,RANK:10 )
|
-
-
113 楼
爆破差不多都可以破,不过算法的话就不知道了
|
能力值:
( LV2,RANK:10 )
|
-
-
114 楼
用一个下午全部爆破完毕,不过算法呢!不行!!
|
能力值:
( LV2,RANK:10 )
|
-
-
115 楼
我是个新手。请问一下,我试了01和07两个,在OllyDbg下查看字符串参考都什么也没发现,为什么到W32Dasm无极版下都可以看到参考字符串,所以我只能先在W32Dasm无极版下查看字符串再到OllyDbg下分析关键跳。结果07给爆了,01还是爆不了,关键跳找不着啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
116 楼
先解决了前3个~第4个正努力中~爆破这些都没什么难度~推注册码中,对算法不大了解,不会写注册机....
|
能力值:
( LV9,RANK:420 )
|
-
-
117 楼
爆掉,不会算法,没有办法,努力学习~!
再多说一句,像我一样的菜鸟同志们,可以尝试着找下按钮事件,个人认为VB程序找按钮事件追码的方法很不错~!
|
能力值:
( LV2,RANK:10 )
|
-
-
118 楼
谢谢,努力去破喽,但愿成功
|
能力值:
( LV2,RANK:10 )
|
-
-
119 楼
KeyGenMe_08
大概穷举了一下 貌似算法是这样的:
1.Serial必须是20位的,可以是空格
2.Name只算位数, 也可以是空格
3.具体算法:
用 "QWYZIUPWQONNESGCJDJDB" 的ACSII码(81,87,89,90,73,85,80,87,81,79,78,78,69,83,71,67,74,68,74,68,66) - "Name位数" + "13" +/- "26的整数倍" 算得的数 再转换为符号就是正确的序列号.
如:Name : cyan ------- 4位
Serial: QWYZIUPWQONNESGCJDJDB - 4 + 13 = "ZFHIR^Y`ZXWWN\PLSMSMK" (由于输入框不能输入小写,我把几个小写符号换了)
这样,考虑到高位ACSII码和小写字母无法显示的问题, 4 位的 Name 算下来起码会有 4^20 种 Serial ......
不知道是不是真的算法, 小人班门弄斧了, 如果哪有不对的地方, 还请作者多多指正.
关键跳在下面 可以爆破
00401175 /0F84 C7000000 JE KeyGenMe.00401242
基本看了一下算法, 有一个循环, 还有几个跳转.
脑袋一直不好使, 看到一堆代码就头疼, 连编程都不会了 , 还是请大虾们做个注册机出来, 毕竟电脑比人脑好啊......
|
能力值:
( LV2,RANK:10 )
|
-
-
120 楼
好东西!好东西!
|
能力值:
( LV2,RANK:10 )
|
-
-
121 楼
工具:OD
这两天看精华8,看到了moodsky的利用万能断点找出关键跳转,我也来试试。
先运行下,看看能不能找到什么信息,输入name:repefe,serial:787878。按check,没有反应,看来只有正确的
serial才会有信息。
用peid查一下,没壳。
用OD打开KeyGenMe_05.exe,右键单击汇编区域在“查看”菜单里选择“模块USER32”。利用Ctrl+B快捷键,
查找F3 A5 8B C8 83 E1 03 F3 A4 E8,点击确定。记下到达的地址(这个就是我们要找的万能断点)
CTRL+F2重新加载一下程序,F9运行。首先填写好注册信息,不要点注册。然后快捷键CTRL+G,在出现窗口中填入刚才记下的地址。
按F2下断。回到Crackme窗口点击注册,程序被OD断了下来,看右上的寄存器窗口出现了用户名(repefe)。点击F9键出现注册码,在EDI寄存
器上单击右键,选择“在转存中跟随”。按F8到下面第一个CALL处,看转存中数据。在伪注册码(787878)上下内存访问断点,F9运行。在00404247处被OD断下
00404243 |. /74 26 je short 0040426B
00404245 |> |8B0E /mov ecx, dword ptr [esi]
00404247 |. |8B1F |mov ebx, dword ptr [edi] --被断
00404249 |. |39D9 |cmp ecx, ebx --比较
0040424B |. |75 58 |jnz short 004042A5
0040424D |. |4A |dec edx
0040424E |. |74 15 |je short 00404265
00404250 |. |8B4E 04 |mov ecx, dword ptr [esi+4]
寄存器中看到
EAX 00000000
ECX 3A5C2F5C --(ASCII "\/\:^/")
EDX 00000001
EBX 38373837 --(ASCII "787878")
ESP 0012F608
EBP 0012F660
ESI 00952630 ASCII "\/\:^/"
EDI 009525FC ASCII "787878"
EIP 00404249 KeyGenMe.00404249
按F8到了 004501A6 看到Good job,man!猜想是正确时的信息,改为jz,F8,输出信息。
0045019E |. 8B55 F4 mov edx, dword ptr [ebp-C]
004501A1 |. E8 7640FBFF call 0040421C
004501A6 |. 75 13 jnz short 004501BB 不等就跳,跳就错
004501A8 |. 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004501AA |. 68 20024500 push 00450220 ; |Title = "Congratulations"
004501AF |. 68 30024500 push 00450230 ; |Text = "Good job,man!"
004501B4 |. 6A 00 push 0 ; |hOwner = NULL
004501B6 |. E8 E562FBFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
004501BB |> 33C0 xor eax, eax
004501BD |. 5A pop edx
看来这个程序是利用用户名计算,然后直接与注册码比较的。验证一下,运行KeyGenMe_05.exe,输入name:repefe,serial:\/\:^/
按check,正确。
找出算法:
CTRL+F2重新加载一下程序,F9运行。填写好注册信息,点注册。被断(寄存器窗口出现了用户名repefe),在EDI寄存
器上单击右键,选择“在转存中跟随”。按F8到下面第一个CALL处,看转存中数据。在repefe上下内存访问断点,F9运行。在0045012e处被OD断下
这一部分代码就是处理用户名的算法了。单步
00450123 |> /33C0 /xor eax, eax
00450125 |. |8945 DC |mov dword ptr [ebp-24], eax
00450128 |. |8B45 F8 |mov eax, dword ptr [ebp-8]
0045012B |. |8B55 E0 |mov edx, dword ptr [ebp-20]
0045012E |. |0FB64410 FF |movzx eax, byte ptr [eax+edx-1] --第一个字母送入eax(72)
00450133 |. |C1E0 02 |shl eax, 2 --左移2位 (1C8)
00450136 |. |B9 1A000000 |mov ecx, 1A --1A送入ecx
0045013B |. |33D2 |xor edx, edx --清0
0045013D |. |F7F1 |div ecx --eax/ecx商到eax余数到ebx
0045013F |. |8955 DC |mov dword ptr [ebp-24], edx --保存余数 (E)
00450142 |. |8D45 CC |lea eax, dword ptr [ebp-34]
00450145 |. |8B55 F0 |mov edx, dword ptr [ebp-10] --ASCII "~!@#$%^&*()_+|\=-/?.,><;:`"
00450148 |. |8B4D DC |mov ecx, dword ptr [ebp-24] --余数
0045014B |. |8A140A |mov dl, byte ptr [edx+ecx] --~!@#$%^&*()_+|\=-/?.,><;:`中的第余数+1个字符
0045014E |. |E8 A53EFBFF |call 00403FF8
00450153 |. |8B55 CC |mov edx, dword ptr [ebp-34]
00450156 |. |8D45 EC |lea eax, dword ptr [ebp-14]
00450159 |. |E8 7A3FFBFF |call 004040D8
0045015E |. |8B45 F8 |mov eax, dword ptr [ebp-8]
00450161 |. |8B55 E0 |mov edx, dword ptr [ebp-20]
00450164 |. |0FB60410 |movzx eax, byte ptr [eax+edx] --第二个字母送入eax(65)
00450168 |. |8D0440 |lea eax, dword ptr [eax+eax*2] --65+65*2=(12F)
0045016B |. |B9 1A000000 |mov ecx, 1A --1A送入ecx
00450170 |. |33D2 |xor edx, edx --清0
00450172 |. |F7F1 |div ecx --eax/ecx商到eax余数到ebx
00450174 |. |8955 DC |mov dword ptr [ebp-24], edx --保存余数(11)
00450177 |. |8D45 C8 |lea eax, dword ptr [ebp-38]
0045017A |. |8B55 F0 |mov edx, dword ptr [ebp-10] --ASCII "~!@#$%^&*()_+|\=-/?.,><;:`"
0045017D |. |8B4D DC |mov ecx, dword ptr [ebp-24] --余数
00450180 |. |8A140A |mov dl, byte ptr [edx+ecx] --~!@#$%^&*()_+|\=-/?.,><;:`中的第余数+1个字符
00450183 |. |E8 703EFBFF |call 00403FF8
00450188 |. |8B55 C8 |mov edx, dword ptr [ebp-38]
0045018B |. |8D45 EC |lea eax, dword ptr [ebp-14]
0045018E |. |E8 453FFBFF |call 004040D8
00450193 |. |FF45 E0 |inc dword ptr [ebp-20]
00450196 |. |FF4D D4 |dec dword ptr [ebp-2C]
00450199 |.^\75 88 \jnz short 00450123 循环(用户名长度/2次,用户名长度是奇数的在用户名后加*)
|
能力值:
( LV2,RANK:10 )
|
-
-
122 楼
支持,支持
|
能力值:
( LV2,RANK:10 )
|
-
-
123 楼
这是只有成功提示的.可以查找"Good job,man!"
下断就很容易了!
|
能力值:
( LV2,RANK:10 )
|
-
-
124 楼
楼主老大,为什么下载下来就出现解压错误呢/
|
能力值:
( LV2,RANK:10 )
|
-
-
125 楼
建议把KeyGenMe的回复发在对应的KeyGenMe分支下,查看方便一些
|
|
|