能力值:
(RANK:410 )
|
-
-
2 楼
shellwolf
770C-0CF6-B0CA-1155
|
能力值:
(RANK:260 )
|
-
-
3 楼
慢了,呵呵。
补个keygen,请测试。有问题请反馈。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
Thank you For Very Nice Keygen and Thank shellwolf
|
能力值:
( LV2,RANK:85 )
|
-
-
5 楼
[QUOTE=书呆彭;569109]慢了,呵呵。
补个keygen,请测试。有问题请反馈。[/QUOTE]
keygen都出来了,干脆来篇教学
|
能力值:
( LV9,RANK:180 )
|
-
-
6 楼
要书呆写教学?
他怕他精华会太多.
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
shellwolf 这个也没有太多 algo 阿
我来一篇:
algo 很容易找到,来个 string search:
00401405 /$ 55 PUSH EBP
00401406 |. 8BEC MOV EBP,ESP
00401408 |. 56 PUSH ESI
00401409 |. 57 PUSH EDI ; ntdll.7C910208
0040140A |. 53 PUSH EBX
0040140B |. 8B75 0C MOV ESI,[ARG.2]
0040140E |. 33DB XOR EBX,EBX
00401410 |. B9 23560000 MOV ECX,5623
00401415 |> AC /LODS BYTE PTR DS:[ESI]
00401416 |. 84C0 |TEST AL,AL
00401418 |. 75 04 |JNZ SHORT Find_Val.0040141E
0040141A |. FEC3 |INC BL
0040141C |. FECD |DEC CH
0040141E |> FECD |DEC CH
00401420 |. FEC9 |DEC CL
00401422 |.^ 75 F1 \JNZ SHORT Find_Val.00401415
00401424 |. 8B75 0C MOV ESI,[ARG.2] ; bl=23-pass.len
00401427 |. 66:33C0 XOR AX,AX ; ch=pass.len*3
0040142A |. 66:33D2 XOR DX,DX
0040142D |. 2AEB SUB CH,BL ; ch=pass.len*4-23
0040142F |> 8A16 /MOV DL,BYTE PTR DS:[ESI]
00401431 |. 66:0FBDC2 |BSR AX,DX ; (bit scan right)(most significant bit)
00401435 |. 66:83F8 06 |CMP AX,6 ; chars which inc:
00401439 |. 75 17 |JNZ SHORT Find_Val.00401452
0040143B |. 66:81E2 BF00 |AND DX,0BF ; 20~2F
00401440 |. 66:0FBDC2 |BSR AX,DX ; 3A~40
00401444 |. 66:83F8 03 |CMP AX,3 ; 47~7E
00401448 |. 77 2E |JA SHORT Find_Val.00401478
0040144A |. 66:83FA 06 |CMP DX,6 ; available chars: 30~39, 41~46 (0-9,A-F)
0040144E |. 77 28 |JA SHORT Find_Val.00401478
00401450 |. EB 28 |JMP SHORT Find_Val.0040147A
00401452 |> 66:0FBDC2 |BSR AX,DX
00401456 |. 66:83F8 05 |CMP AX,5
0040145A |. 75 1C |JNZ SHORT Find_Val.00401478
0040145C |. 66:81E2 DF00 |AND DX,0DF
00401461 |. 66:0FBDC2 |BSR AX,DX
00401465 |. 66:83F8 04 |CMP AX,4
00401469 |. 75 0D |JNZ SHORT Find_Val.00401478
0040146B |. 66:81E2 EF00 |AND DX,0EF
00401470 |. 66:83FA 09 |CMP DX,9
00401474 |. 77 02 |JA SHORT Find_Val.00401478
00401476 |. EB 02 |JMP SHORT Find_Val.0040147A
00401478 |> FEC7 |INC BH
0040147A |> 46 |INC ESI
0040147B |. FECD |DEC CH
0040147D |.^ 75 B0 \JNZ SHORT Find_Val.0040142F
第一个loop看似很长,其实只不过算一算 pass.len 而已
第二个: valid/invalid:
available chars: 30~39, 41~46 (0-9,A-F)
之后:
0040148A |> /AD /LODS DWORD PTR DS:[ESI]
0040148B |. |AC |LODS BYTE PTR DS:[ESI]
0040148C |. |8A56 FF |MOV DL,BYTE PTR DS:[ESI-1]
0040148F |. |C1E2 08 |SHL EDX,8
00401492 |. \67:E2 F5 \LOOPW SHORT Find_Val.0040148A
把每5个一轮取出char,
00401495 |. C1C2 18 ROL EDX,18 ; rol(edx,18)^50615^ebx=282828
00401498 |. 81F2 15060500 XOR EDX,50615 ; edx=2D2D2D00
0040149E |. 33D3 XOR EDX,EBX ; format: xxxx-xxxx-xxxx-xxxx
004014A0 |. 81F2 28282800 XOR EDX,282828
004014A6 |. 0F85 EF000000 JNZ Find_Val.0040159B ; include chars: 3
004014AC |. 66:81EB 1003 SUB BX,310 ; bx=310 (pass.len=13)
004014B1 |. 0F85 E4000000 JNZ Find_Val.0040159B
004014B7 |. 33C0 XOR EAX,EAX
edx=ror(282828^310^50615,18)=2D2D2D00
xxxx-xxxx-xxxx-xxxx
然后一个对name的hash
(与密码无关,这里就不再多说了,书呆彭写得很详细)
最后compare:
用两个TABLE, 分别取出pass, name.hash index:
index table:
pass:
00403274 05 0C 12 00 03 07 0F 02 0B 01 06 0A 10 08 0D 11 ....
user.hash:
00403284 13 07 0C 1D 0A 15 1E 03 1B 0E 06 12 19 0B 09 14 ...
套一下便keygen
|
能力值:
(RANK:260 )
|
-
-
8 楼
我帖子里什么都没写啊?
你???
我???
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
你的keygen...
原来没有 source ????????
反正也不难,我还是认为用不着了
|
能力值:
(RANK:260 )
|
-
-
10 楼
source???
写得太丑,没好意思放。
我怎么觉得你看过我的source???
奇怪的感觉。
|