lgjxj
发表于 2008-10-25 14:10:27
^_^ 退出你是没输入注册码,4 楼的截图就是注册成功的样子,但他还没破解,那只是爆破了 /:014
cc5 不加入任何抗爆破的代码,cc6 里有
hflywolf
发表于 2008-10-25 14:49:47
原帖由 lgjxj 于 2008-10-25 00:31 发表 https://www.chinapyg.com/images/common/back.gif
绝对不是体力活,开始上传的那个 cc5 编译时把位数拉大了,后来改小了
算法很简单的
.......分析错误........
发现算出来的注册码有时候是对的,有时候是错的......晕呼呼!!!!!!!!!!
BTW:最后膜拜一下lgjxj大侠~~~~~~~~
[ 本帖最后由 hflywolf 于 2008-10-25 17:39 编辑 ]
lgjxj
发表于 2008-10-25 15:13:49
的确有那么一点意思,但又不能算是 5 阶 ,怕难度大,少人玩,后面的那个不用穷举的,再看清楚 努力 /:014
x80x88
发表于 2008-10-25 15:23:20
首先膜拜一下楼主/:good !精巧的算法,运气好找到一个注册码!/:L
用户名:x88xvr
注册码:~@~x~~~~x~~@~@~~l~0~~|~0~~0~0~~0~0~~0~0~~0~0~=
[ 本帖最后由 x80x88 于 2008-10-25 15:25 编辑 ]
lgjxj
发表于 2008-10-25 15:36:19
x80 兄弟好样的 /:good已经解密了 90% ,还差一部,完美 pj
再次透露,真正的完美注册码很短的,楼上的 x80 兄弟 ,理解强 /:good ,属于我
的算法漏洞 /:L
看来漏洞无处不在 ,难怪 MS 的补丁满天飞
[ 本帖最后由 lgjxj 于 2008-10-25 15:37 编辑 ]
lgjxj
发表于 2008-10-25 15:46:59
可惜现在不能再修补了,/:010最后把计较设为 0x1000 如果没看清楚的
用 几百位都无法达到 , 开始的时候太善良了 /:013
x80 /:good
hflywolf
发表于 2008-10-25 15:47:12
原帖由 x80x88 于 2008-10-25 15:23 发表 https://www.chinapyg.com/images/common/back.gif
首先膜拜一下楼主/:good !精巧的算法,运气好找到一个注册码!/:L
用户名:x88xvr
注册码:~@~x~~~~x~~@~@~~l~0~~|~0~~0~0~~0~0~~0~0~~0~0~=
39779
/:good /:good /:good 膜拜~~~~~~
Luckly
发表于 2008-10-25 16:37:17
/:10 /:10 /:10
倒踏~~~~
00401450 FF15 8C324200 call dword ptr [<&KERNEL32.GetVolumeI>; kernel32.GetVolumeInformationA
00401456 8B4424 08 mov eax, dword ptr
0040145A 6A 00 push 0 ; 77D18B26
0040145C 8BCE mov ecx, esi
0040145E 8D50 FE lea edx, dword ptr
00401461 33D0 xor edx, eax
00401463 81C2 0B010000 add edx, 10B //这里的值会改变最后一次比较
00401469 8915 B4004300 mov dword ptr , edx
0040146F E8 498C0100 call 0041A0BD
0042C0C0 21 2C 37 42 4D 58 42 4D!,7BMXBM
0042C0C8 58 57 EA 23 18 37 42 4DXW?7BM
0042C0D0 16 BA 02 02 22 83 18 04?"?
0042C0D8 04 22 37 42 4D 4D 4D 4D"7BMMMM
0042C0E0 00 00 ..
一共取22个字节的ASCII码 ASCII= 0x4FC
00401562 A1 B4004300 mov eax, dword ptr ; 这个地址的值是在GetVolumeInformationA 时取出的
00401567 8D5424 20 lea edx, dword ptr
0040156B 6A 0C push 0C
0040156D 52 push edx
0040156E 8D0C48 lea ecx, dword ptr ; eax+ecx*2这个就是最后一次的比较值 CMP->第三次比较时用的
到这里 SN1=ECX
///////////////////////////////
以上代码得出来的值设为 SN1
限制 用户名5位以上 注册码15位以上
1. 连接用户名和注册码
2. 每一位的ascii + 0xD0生成新的ASCII组合
3. 新的ASCII总和SN2
4. 取新生成的ASCII前5位的ASCII总和 SN3
5. 从新生成的ASCII组合的第4位开始取.每次取的位置+5ASCII总和 SN4
6. 从新生成的ASCII组合的第2位开始取.每次取的位置+5ASCII总和 SN5
注册成功的条件是:
004016CB /75 36 jnz short 00401703 ; SN5 == SN4
004016CD |3B4424 14 cmp eax, dword ptr ; SN4 == SN3
004016D1 |75 30 jnz short 00401703
004016D3 |8B4424 1C mov eax, dword ptr
004016D7 |6A 00 push 0
004016D9 |3BE8 cmp ebp, eax
004016DB |6A 00 push 0
004016DD |75 16 jnz short 004016F5 SN1 == SN2
004016DF |8B4C24 20 mov ecx, dword ptr
004016E3 |68 E8C04200 push 0042C0E8 ; ok
004016E8 |E8 74820100 call 00419961
[ 本帖最后由 Luckly 于 2008-10-25 18:29 编辑 ]
creantan
发表于 2008-10-25 16:43:12
我也来发个吧。。。/:013 /:013
用户名:creantanaiwaley
密码:zzzxyzqy1yn0z21z0t5yz0x6ov0w7xx0f8zn0z9m30r0uvf9d
楼主CC6呢。。。。。/:014
[ 本帖最后由 creantan 于 2008-10-25 17:06 编辑 ]
x80x88
发表于 2008-10-25 16:44:32
晕倒,原来内有乾坤,看不大懂啊?/:010
换了台2K3的机子,注册码就不行了,OD载入看了下:
..........
0401420 .8>sub esp,6C
00401423 .5>push esi
00401424 .B>mov al,5C
00401426 .6>push 0A ; /pFileSystemNameSize = 0000000A
00401428 .8>mov byte ptr ss:,al ; |
0040142C .8>mov byte ptr ss:,al ; |
00401430 .6>push 0 ; |pFileSystemNameBuffer = NULL
00401432 .6>push 0 ; |pFileSystemFlags = NULL
00401434 .8>lea eax,dword ptr ss: ; |
00401438 .8>mov esi,ecx ; |
0040143A .6>push 0 ; |pMaxFilenameLength = NULL
0040143C .5>push eax ; |pVolumeSerialNumber
0040143D .6>push 0C ; |MaxVolumeNameSize = C (12.)
0040143F .8>lea ecx,dword ptr ss: ; |
00401443 .6>push 0 ; |VolumeNameBuffer = NULL
00401445 .5>push ecx ; |RootPathName
00401446 .C>mov byte ptr ss:,63 ; |
0040144B .C>mov byte ptr ss:,3A ; |
00401450 .F>call dword ptr ds:[<&KERNEL32.GetVolumeI>; \GetVolumeInformationA
00401456 .8>mov eax,dword ptr ss:
0040145A .6>push 0
0040145C .8>mov ecx,esi
0040145E .8>lea edx,dword ptr ds:
00401461 .3>xor edx,eax
00401463 .8>add edx,10B
00401469 .8>mov dword ptr ds:,edx ;这里写入ds:的值
...............
GetVolumeInformationA函数应该是查文件所在的磁盘卷标号吧,那么注册码应该和CM所在的磁盘卷标号有关了!
继续往下看:
...............
00401540 .8>sub esp,50
00401543 .5>push ebx
00401544 .5>push ebp
00401545 .5>push esi
00401546 .8>mov esi,ecx
00401548 .3>xor ebp,ebp
0040154A .3>xor ecx,ecx
0040154C .5>push edi
0040154D .8>mov dword ptr ss:,esi
00401551 .3>xor eax,eax
00401553 >0>movsx edx,byte ptr ds: ;这段将程序内置的码值相加,结果为4FC
0040155A .0>add ecx,edx
0040155C .4>inc eax
0040155D .8>cmp eax,22
00401560 .^ 7>jl short cc5.00401553
00401562 .A>mov eax,dword ptr ds: ;注意这里,ds:的值,我的这台机子为111
00401567 .8>lea edx,dword ptr ss:
0040156B .6>push 0C ; /Arg3 = 0000000C
0040156D .5>push edx ; |Arg2
0040156E .8>lea ecx,dword ptr ds: ; |看这里ecx=111+4FC*2=B09
00401571 .6>push 3E8 ; |Arg1 = 000003E8
00401576 .8>mov dword ptr ss:,ecx ; |值再赋到ss:,也即后面的最后一个比较ss:的地址
0040157A .8>mov ecx,esi ; |
0040157C .E>call cc5.0041AA10 ; \cc5.0041AA10
00401581 .8>lea edi,dword ptr ss:
........
最后一次比较处:
..........
004016D3 .8>mov eax,dword ptr ss: ss:中的值就是上面的ss:中的值
004016D7 .6>push 0
004016D9 .3>cmp ebp,eax ebp中为用户名和假码连接串变换后值的累加和
004016DB .6>push 0
004016DD .7>jnz short cc5.004016F5
..........
看前面的,如果磁盘卷标号不为空,ss:的值在大家的机器上值应该是不一样的吧!
莫非还有猫腻/:010 ,等着楼主解密/:QQ2
[ 本帖最后由 x80x88 于 2008-10-25 16:59 编辑 ]