还是没人写啊。苦力活还是交给我等菜菜吧。希望这篇过后牛能写个个把篇这个大赛的破文,让我等学习啊。
好了,这个魔方的CRACKEME,我还是很喜欢的。我觉得太虚伪了的创意实在令我欣赏,不管难度怎么样,我觉得 太虚伪了 还有那个断水流的走迷宫的CRACKEME无疑是最具有创意的。
下面做个简单分析,不对之处还望指出。
断在这里
004006C8 |. 85C0 TEST EAX,EAX
004006CA |. 74 49 JE SHORT 虚伪.00400715
004006CC |. 8D85 F0FEFFFF LEA EAX,DWORD PTR SS:[EBP-110]
004006D2 |. 68 00010000 PUSH 100 ; /Count = 100 (256.)
004006D7 |. 50 PUSH EAX ; |Buffer
004006D8 |. 6A 69 PUSH 69 ; |ControlID = 69 (105.)
004006DA |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004006DD |. FFD6 CALL ESI ; \GetDlgItemTextA
004006DF |. 85C0 TEST EAX,EAX
004006E1 |. 74 32 JE SHORT 虚伪.00400715
004006E3 |. 8D85 F0FEFFFF LEA EAX,DWORD PTR SS:[EBP-110]
004006E9 |. 50 PUSH EAX ;参数1,假sn
004006EA |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
004006ED |. 50 PUSH EAX ;参数2,用户名
004006EE |. E8 BDFEFFFF CALL 虚伪.004005B0 ; 关键call
004006F3 |. 05 08000400 ADD EAX,40008
004006F8 |. 59 POP ECX
004006F9 |. C1E0 04 SHL EAX,4
004006FC |. 59 POP ECX
004006FD |. 8D48 08 LEA ECX,DWORD PTR DS:[EAX+8]
00400700 |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00400702 |. 51 PUSH ECX ; |Title
00400703 |. 50 PUSH EAX ; |Text
00400704 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
00400707 |. FF15 00024000 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
先f8走下来,可知过了CALL 虚伪.004005B0后eax=0
而显示信息的地方ecx=((eax add 40008) shl 4)+8=400088
而查看地址400088时发现
00400088 BC D3 D3 CD 00 00 00 00 B3 C9 B9 A6 00 00 00 00 加油....成功....
00400098 B9 A7 CF B2 00 47 65 74 44 6C 67 49 74 65 6D 54 恭喜.GetDlgItemT
当ECX=400098就注册成功了。因此可以算出来,必须要使eax=1
所以注册成功的条件就是经过CALL 虚伪.004005B0 后返回值eax=1
现在f7进去看看把。
004005BC |. BE 40004000 MOV ESI,虚伪.00400040
004005C1 |. 8D7D BC LEA EDI,DWORD PTR SS:[EBP-44]
004005C4 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI] ; ds:[esi]中是初始的数据
004005C6 |. 56 PUSH ESI
004005C7 |. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8] ; 用户名放入esi
004005CA |. 33C0 XOR EAX,EAX
004005CC |. 99 CDQ
004005CD |> AC /LODS BYTE PTR DS:[ESI]
004005CE |. 84C0 |TEST AL,AL
004005D0 |. 74 07 |JE SHORT 虚伪.004005D9
004005D2 |. C1CA 0D |ROR EDX,0D
004005D5 |. 03D0 |ADD EDX,EAX
004005D7 |.^ EB F4 \JMP SHORT 虚伪.004005CD ; 这里对用户名做了简单的循环运算。
004005D9 |> 5E POP ESI
004005DA |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX ; 运算结果放到ebp-8=x1
004005DD |. 32DB XOR BL,BL
004005DF |> 80FB 02 /CMP BL,2
004005E2 |. 75 0D |JNZ SHORT 虚伪.004005F1
004005E4 |. 8D45 BC |LEA EAX,DWORD PTR SS:[EBP-44]
004005E7 |. 50 |PUSH EAX
004005E8 |. 6A 06 |PUSH 6
004005EA |. E8 21FDFFFF |CALL 虚伪.00400310
004005EF |. 59 |POP ECX
004005F0 |. 59 |POP ECX
004005F1 |> 0FB6C3 |MOVZX EAX,BL
004005F4 |. 0FB67405 F8 |MOVZX ESI,BYTE PTR SS:[EBP+EAX-8] ; 取x1第bl个字节
004005F9 |. 8D45 BC |LEA EAX,DWORD PTR SS:[EBP-44]
004005FC |. 50 |PUSH EAX
004005FD |. 8BC6 |MOV EAX,ESI
004005FF |. C1E8 04 |SHR EAX,4 ; 右移4位
00400602 |. 6A 06 |PUSH 6
00400604 |. 99 |CDQ
00400605 |. 59 |POP ECX
00400606 |. F7F9 |IDIV ECX ; mod 6的结果入栈
00400608 |. 52 |PUSH EDX
00400609 |. E8 02FDFFFF |CALL 虚伪.00400310
0040060E |. 8D45 BC |LEA EAX,DWORD PTR SS:[EBP-44] ; |
00400611 |. 50 |PUSH EAX ; |Arg2
00400612 |. 8BC6 |MOV EAX,ESI ; |
00400614 |. 83E0 0F |AND EAX,0F ; |
00400617 |. 6A 06 |PUSH 6 ; |
00400619 |. 99 |CDQ ; |
0040061A |. 59 |POP ECX ; |
0040061B |. F7F9 |IDIV ECX ; |
0040061D |. 52 |PUSH EDX ; |Arg1
0040061E |. E8 EDFCFFFF |CALL 虚伪.00400310 ; \虚伪.00400310
00400623 |. 83C4 10 |ADD ESP,10
00400626 |. FEC3 |INC BL
00400628 |. 80FB 04 |CMP BL,4 ; 循环4次
0040062B |.^ 72 B2 \JB SHORT 虚伪.004005DF ;以上是以用户名为参数把初始的字串顺序打乱
这是程序的初始字串
A0 D1 A2 F7 E4 A5 D4 A7 A4 A9
B0 B9 E8 B7 B2 B5 F4 B1 B8 E9
C0 D7 D8 D3 E6 C5 F2 C7 C2 E7
D0 C1 E2 E3 F6 D5 C6 B3 A6 D9
E0 A1 F8 A3 A8 E5 C8 F9 D2 C3
F0 F1 D6 F3 C4 F5 B6 E1 B4 C9
这个是用户名kyo327经过上面的变化后转换后的字串。
A0 D1 E2 E1 E8 A5 B6 B9 A2 D7
B0 D3 C4 F1 E4 B5 C8 B1 B2 C3
C0 B3 F6 A7 C2 C5 D8 F7 A4 E7
D0 B7 C6 E3 D2 D5 F8 A9 E6 A3
E0 D9 A6 A1 F4 E5 B4 F9 F2 F3
F0 C1 B8 E9 D4 F5 D6 C7 A8 C9
再接着看下面
0040062D |. 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C] ; 假码进入esi
00400630 |. 83C9 FF OR ECX,FFFFFFFF
00400633 |. 8BFE MOV EDI,ESI
00400635 |. 33C0 XOR EAX,EAX
00400637 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00400639 |. F7D1 NOT ECX
0040063B |. 49 DEC ECX
0040063C |. 8AD8 MOV BL,AL
0040063E |. 8BF9 MOV EDI,ECX
00400640 |. 74 22 JE SHORT 虚伪.00400664 ; 以SN长度做循环
00400642 |> 8A0430 /MOV AL,BYTE PTR DS:[EAX+ESI]
00400645 |. 2C 30 |SUB AL,30
00400647 |. 3C 09 |CMP AL,9 ; sn每一位减30和9比较
00400649 |. 76 02 |JBE SHORT 虚伪.0040064D
0040064B |. 04 F9 |ADD AL,0F9 ; 否则要add 0f9
0040064D |> 8D4D BC |LEA ECX,DWORD PTR SS:[EBP-44]
00400650 |. 34 0C |XOR AL,0C ; 小于等于9的话xor 0c就入栈
00400652 |. 51 |PUSH ECX
00400653 |. 50 |PUSH EAX
00400654 |. E8 B7FCFFFF |CALL 虚伪.00400310
00400659 |. FEC3 |INC BL
0040065B |. 59 |POP ECX
0040065C |. 0FB6C3 |MOVZX EAX,BL
0040065F |. 3BC7 |CMP EAX,EDI
00400661 |. 59 |POP ECX
00400662 |.^ 72 DE \JB SHORT 虚伪.00400642
00400664 |> 32DB XOR BL,BL
00400666 |> 0FB6CB /MOVZX ECX,BL
00400669 |. 8BC1 |MOV EAX,ECX
0040066B |. 6A 0A |PUSH 0A
0040066D |. 99 |CDQ
0040066E |. 5E |POP ESI
0040066F |. 8A4C0D BC |MOV CL,BYTE PTR SS:[EBP+ECX-44] ; 取经过密码转换后的每一位
00400673 |. F7FE |IDIV ESI
00400675 |. B2 06 |MOV DL,6
00400677 |. F6EA |IMUL DL
00400679 |. 2AC8 |SUB CL,AL
0040067B |. 80C1 60 |ADD CL,60
0040067E |. 3ACB |CMP CL,BL
00400680 |. 75 0F |JNZ SHORT 虚伪.00400691 ;可以看到这个跳转一实现就完蛋
00400682 |. FEC3 |INC BL
00400684 |. 80FB 3C |CMP BL,3C ; 以3c作为循环次数
00400687 |.^ 72 DD \JB SHORT 虚伪.00400666
00400689 |. 6A 01 PUSH 1
0040068B |. 58 POP EAX
0040068C |> 5F POP EDI
0040068D |. 5E POP ESI
0040068E |. 5B POP EBX
0040068F |. C9 LEAVE
00400690 |. C3 RET
00400691 |> 33C0 XOR EAX,EAX
先看00400664到00400691这段代码的意思吧
设循环次数为x,设密码经过上面变化后的字串为pass.而pass[i]表示第i位.
那么这段代码就是检查x从0到3c每一次都使下面的式子成立即可成功注册。
(pass[i]-(x/0a)*6)+60 cmp x
那么最终pass字串将是这样的形式:
pass[i]=x-60+(x/0a)*6 (把x=0,1,……,3c)带入可求出pass为:
A0 A1 A2 A3 A4 A5 A6 A7 A8 A9
B0 B1 B2 B3 B4 B5 B6 B7 B8 B9
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9
D0 D1 D2 D3 D4 D5 D6 D7 D8 D9
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9
因此现在最关键就是CALL 虚伪.00400310。同样f7进去看看。
00400310 /$ 55 PUSH EBP
00400311 |. 8BEC MOV EBP,ESP
00400313 |. 8A55 08 MOV DL,BYTE PTR SS:[EBP+8]
00400316 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00400319 |. 0FB6CA MOVZX ECX,DL
0040031C |. 84D2 TEST DL,DL
0040031E |. 8D0C89 LEA ECX,DWORD PTR DS:[ECX+ECX*4]
00400321 |. 53 PUSH EBX
00400322 |. 8D0C48 LEA ECX,DWORD PTR DS:[EAX+ECX*2]
00400325 |. 75 59 JNZ SHORT 虚伪.00400380
00400327 |. 8A58 12 MOV BL,BYTE PTR DS:[EAX+12]
0040032A |. 8A50 11 MOV DL,BYTE PTR DS:[EAX+11]
0040032D |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
00400330 |. 8A58 13 MOV BL,BYTE PTR DS:[EAX+13]
00400333 |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
00400336 |. 8A58 27 MOV BL,BYTE PTR DS:[EAX+27]
00400339 |. 8858 11 MOV BYTE PTR DS:[EAX+11],BL
0040033C |. 8A58 24 MOV BL,BYTE PTR DS:[EAX+24]
0040033F |. 8858 12 MOV BYTE PTR DS:[EAX+12],BL
00400342 |. 8A58 21 MOV BL,BYTE PTR DS:[EAX+21]
00400345 |. 8858 13 MOV BYTE PTR DS:[EAX+13],BL
00400348 |. 8A58 35 MOV BL,BYTE PTR DS:[EAX+35]
0040034B |. 8858 27 MOV BYTE PTR DS:[EAX+27],BL
0040034E |. 8A58 34 MOV BL,BYTE PTR DS:[EAX+34]
00400351 |. 8858 24 MOV BYTE PTR DS:[EAX+24],BL
00400354 |. 8A58 33 MOV BL,BYTE PTR DS:[EAX+33]
00400357 |. 8858 21 MOV BYTE PTR DS:[EAX+21],BL
0040035A |. 8A58 15 MOV BL,BYTE PTR DS:[EAX+15]
0040035D |. 8858 35 MOV BYTE PTR DS:[EAX+35],BL
00400360 |. 8A58 18 MOV BL,BYTE PTR DS:[EAX+18]
00400363 |. 8858 34 MOV BYTE PTR DS:[EAX+34],BL
00400366 |. 8A58 1B MOV BL,BYTE PTR DS:[EAX+1B]
00400369 |. 8858 33 MOV BYTE PTR DS:[EAX+33],BL
0040036C |. 8850 15 MOV BYTE PTR DS:[EAX+15],DL
0040036F |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
00400372 |. 8850 18 MOV BYTE PTR DS:[EAX+18],DL
00400375 |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
00400378 |. 8850 1B MOV BYTE PTR DS:[EAX+1B],DL
0040037B |. E9 D2010000 JMP 虚伪.00400552
00400380 |> 80FA 01 CMP DL,1
00400383 |. 75 59 JNZ SHORT 虚伪.004003DE
00400385 |. 8A58 2A MOV BL,BYTE PTR DS:[EAX+2A]
00400388 |. 8A50 2B MOV DL,BYTE PTR DS:[EAX+2B]
0040038B |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
0040038E |. 8A58 29 MOV BL,BYTE PTR DS:[EAX+29]
00400391 |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
00400394 |. 8A58 21 MOV BL,BYTE PTR DS:[EAX+21]
00400397 |. 8858 2B MOV BYTE PTR DS:[EAX+2B],BL
0040039A |. 8A58 20 MOV BL,BYTE PTR DS:[EAX+20]
0040039D |. 8858 2A MOV BYTE PTR DS:[EAX+2A],BL
004003A0 |. 8A58 1F MOV BL,BYTE PTR DS:[EAX+1F]
004003A3 |. 8858 29 MOV BYTE PTR DS:[EAX+29],BL
004003A6 |. 8A58 03 MOV BL,BYTE PTR DS:[EAX+3]
004003A9 |. 8858 21 MOV BYTE PTR DS:[EAX+21],BL
004003AC |. 8A58 02 MOV BL,BYTE PTR DS:[EAX+2]
004003AF |. 8858 20 MOV BYTE PTR DS:[EAX+20],BL
004003B2 |. 8A58 01 MOV BL,BYTE PTR DS:[EAX+1]
004003B5 |. 8858 1F MOV BYTE PTR DS:[EAX+1F],BL
004003B8 |. 8A58 17 MOV BL,BYTE PTR DS:[EAX+17]
004003BB |. 8858 03 MOV BYTE PTR DS:[EAX+3],BL
004003BE |. 8A58 16 MOV BL,BYTE PTR DS:[EAX+16]
004003C1 |. 8850 17 MOV BYTE PTR DS:[EAX+17],DL
004003C4 |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
004003C7 |. 8858 02 MOV BYTE PTR DS:[EAX+2],BL
004003CA |. 8A58 15 MOV BL,BYTE PTR DS:[EAX+15]
004003CD |. 8850 16 MOV BYTE PTR DS:[EAX+16],DL
004003D0 |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
004003D3 |. 8858 01 MOV BYTE PTR DS:[EAX+1],BL
004003D6 |. 8850 15 MOV BYTE PTR DS:[EAX+15],DL
004003D9 |. E9 74010000 JMP 虚伪.00400552
004003DE |> \80FA 02 CMP DL,2
004003E1 |. 75 59 JNZ SHORT 虚伪.0040043C
004003E3 |. 8A58 10 MOV BL,BYTE PTR DS:[EAX+10] ; 第17位
004003E6 |. 8A50 13 MOV DL,BYTE PTR DS:[EAX+13] ; 第20位
004003E9 |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
004003EC |. 8A58 0D MOV BL,BYTE PTR DS:[EAX+D] ; 第20位=bl再存到bp+f里
004003EF |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
004003F2 |. 8A58 09 MOV BL,BYTE PTR DS:[EAX+9] ; 第10位
004003F5 |. 8858 13 MOV BYTE PTR DS:[EAX+13],BL ; 第10位填到第20位
004003F8 |. 8A58 06 MOV BL,BYTE PTR DS:[EAX+6]
004003FB |. 8858 10 MOV BYTE PTR DS:[EAX+10],BL ; 第7位填到17位
004003FE |. 8A58 03 MOV BL,BYTE PTR DS:[EAX+3]
00400401 |. 8858 0D MOV BYTE PTR DS:[EAX+D],BL ; 第4位填到14位
00400404 |. 8A58 3B MOV BL,BYTE PTR DS:[EAX+3B] ; 第60位填到第10位
00400407 |. 8858 09 MOV BYTE PTR DS:[EAX+9],BL
0040040A |. 8A58 38 MOV BL,BYTE PTR DS:[EAX+38] ; 第57位填到第7位
0040040D |. 8858 06 MOV BYTE PTR DS:[EAX+6],BL
00400410 |. 8A58 35 MOV BL,BYTE PTR DS:[EAX+35] ; 第54位填到第4位
00400413 |. 8858 03 MOV BYTE PTR DS:[EAX+3],BL
00400416 |. 8A58 29 MOV BL,BYTE PTR DS:[EAX+29]
00400419 |. 8858 3B MOV BYTE PTR DS:[EAX+3B],BL ; 第42位填到第60位
0040041C |. 8A58 2C MOV BL,BYTE PTR DS:[EAX+2C]
0040041F |. 8850 29 MOV BYTE PTR DS:[EAX+29],DL ; 原来的第20位填到42位
00400422 |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
00400425 |. 8858 38 MOV BYTE PTR DS:[EAX+38],BL ; 第45位填到第57位
00400428 |. 8A58 2F MOV BL,BYTE PTR DS:[EAX+2F]
0040042B |. 8850 2C MOV BYTE PTR DS:[EAX+2C],DL ; 原来的第17位填到现在的45位
0040042E |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
00400431 |. 8858 35 MOV BYTE PTR DS:[EAX+35],BL ; 第48位填到第 54位
00400434 |. 8850 2F MOV BYTE PTR DS:[EAX+2F],DL ; 原来的第20位填到第48位
00400437 |. E9 16010000 JMP 虚伪.00400552
0040043C |> 80FA 03 CMP DL,3
0040043F |. 75 59 JNZ SHORT 虚伪.0040049A
00400441 |. 8A58 0E MOV BL,BYTE PTR DS:[EAX+E]
00400444 |. 8A50 0B MOV DL,BYTE PTR DS:[EAX+B]
00400447 |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
0040044A |. 8A58 11 MOV BL,BYTE PTR DS:[EAX+11]
0040044D |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
00400450 |. 8A58 31 MOV BL,BYTE PTR DS:[EAX+31]
00400453 |. 8858 0B MOV BYTE PTR DS:[EAX+B],BL
00400456 |. 8A58 2E MOV BL,BYTE PTR DS:[EAX+2E]
00400459 |. 8858 0E MOV BYTE PTR DS:[EAX+E],BL
0040045C |. 8A58 2B MOV BL,BYTE PTR DS:[EAX+2B]
0040045F |. 8858 11 MOV BYTE PTR DS:[EAX+11],BL
00400462 |. 8A58 33 MOV BL,BYTE PTR DS:[EAX+33]
00400465 |. 8858 31 MOV BYTE PTR DS:[EAX+31],BL
00400468 |. 8A58 36 MOV BL,BYTE PTR DS:[EAX+36]
0040046B |. 8858 2E MOV BYTE PTR DS:[EAX+2E],BL
0040046E |. 8A58 39 MOV BL,BYTE PTR DS:[EAX+39]
00400471 |. 8858 2B MOV BYTE PTR DS:[EAX+2B],BL
00400474 |. 8A58 01 MOV BL,BYTE PTR DS:[EAX+1]
00400477 |. 8858 33 MOV BYTE PTR DS:[EAX+33],BL
0040047A |. 8A58 04 MOV BL,BYTE PTR DS:[EAX+4]
0040047D |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
00400480 |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
00400483 |. 8858 36 MOV BYTE PTR DS:[EAX+36],BL
00400486 |. 8A58 07 MOV BL,BYTE PTR DS:[EAX+7]
00400489 |. 8850 04 MOV BYTE PTR DS:[EAX+4],DL
0040048C |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
0040048F |. 8858 39 MOV BYTE PTR DS:[EAX+39],BL
00400492 |. 8850 07 MOV BYTE PTR DS:[EAX+7],DL
00400495 |. E9 B8000000 JMP 虚伪.00400552
0040049A |> 80FA 04 CMP DL,4
0040049D |. 75 56 JNZ SHORT 虚伪.004004F5
0040049F |. 8A58 0C MOV BL,BYTE PTR DS:[EAX+C]
004004A2 |. 8A50 0D MOV DL,BYTE PTR DS:[EAX+D]
004004A5 |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
004004A8 |. 8A58 0B MOV BL,BYTE PTR DS:[EAX+B]
004004AB |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
004004AE |. 8A58 1D MOV BL,BYTE PTR DS:[EAX+1D]
004004B1 |. 8858 0D MOV BYTE PTR DS:[EAX+D],BL
004004B4 |. 8A58 1A MOV BL,BYTE PTR DS:[EAX+1A]
004004B7 |. 8858 0C MOV BYTE PTR DS:[EAX+C],BL
004004BA |. 8A58 17 MOV BL,BYTE PTR DS:[EAX+17]
004004BD |. 8858 0B MOV BYTE PTR DS:[EAX+B],BL
004004C0 |. 8A58 39 MOV BL,BYTE PTR DS:[EAX+39]
004004C3 |. 8858 1D MOV BYTE PTR DS:[EAX+1D],BL
004004C6 |. 8A58 3A MOV BL,BYTE PTR DS:[EAX+3A]
004004C9 |. 8858 1A MOV BYTE PTR DS:[EAX+1A],BL
004004CC |. 8A58 3B MOV BL,BYTE PTR DS:[EAX+3B]
004004CF |. 8858 17 MOV BYTE PTR DS:[EAX+17],BL
004004D2 |. 8A58 1F MOV BL,BYTE PTR DS:[EAX+1F]
004004D5 |. 8858 39 MOV BYTE PTR DS:[EAX+39],BL
004004D8 |. 8A58 22 MOV BL,BYTE PTR DS:[EAX+22]
004004DB |. 8850 1F MOV BYTE PTR DS:[EAX+1F],DL
004004DE |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
004004E1 |. 8858 3A MOV BYTE PTR DS:[EAX+3A],BL
004004E4 |. 8A58 25 MOV BL,BYTE PTR DS:[EAX+25]
004004E7 |. 8850 22 MOV BYTE PTR DS:[EAX+22],DL
004004EA |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
004004ED |. 8858 3B MOV BYTE PTR DS:[EAX+3B],BL
004004F0 |. 8850 25 MOV BYTE PTR DS:[EAX+25],DL
004004F3 |. EB 5D JMP SHORT 虚伪.00400552
004004F5 |> 80FA 05 CMP DL,5
004004F8 |. 0F85 86000000 JNZ 虚伪.00400584
004004FE |. 8A58 08 MOV BL,BYTE PTR DS:[EAX+8]
00400501 |. 8A50 07 MOV DL,BYTE PTR DS:[EAX+7]
00400504 |. 885D 0B MOV BYTE PTR SS:[EBP+B],BL
00400507 |. 8A58 09 MOV BL,BYTE PTR DS:[EAX+9]
0040050A |. 885D 0F MOV BYTE PTR SS:[EBP+F],BL
0040050D |. 8A58 25 MOV BL,BYTE PTR DS:[EAX+25]
00400510 |. 8858 07 MOV BYTE PTR DS:[EAX+7],BL
00400513 |. 8A58 26 MOV BL,BYTE PTR DS:[EAX+26]
00400516 |. 8858 08 MOV BYTE PTR DS:[EAX+8],BL
00400519 |. 8A58 27 MOV BL,BYTE PTR DS:[EAX+27]
0040051C |. 8858 09 MOV BYTE PTR DS:[EAX+9],BL
0040051F |. 8A58 2F MOV BL,BYTE PTR DS:[EAX+2F]
00400522 |. 8858 25 MOV BYTE PTR DS:[EAX+25],BL
00400525 |. 8A58 30 MOV BL,BYTE PTR DS:[EAX+30]
00400528 |. 8858 26 MOV BYTE PTR DS:[EAX+26],BL
0040052B |. 8A58 31 MOV BL,BYTE PTR DS:[EAX+31]
0040052E |. 8858 27 MOV BYTE PTR DS:[EAX+27],BL
00400531 |. 8A58 1B MOV BL,BYTE PTR DS:[EAX+1B]
00400534 |. 8858 2F MOV BYTE PTR DS:[EAX+2F],BL
00400537 |. 8A58 1C MOV BL,BYTE PTR DS:[EAX+1C]
0040053A |. 8850 1B MOV BYTE PTR DS:[EAX+1B],DL
0040053D |. 8A55 0B MOV DL,BYTE PTR SS:[EBP+B]
00400540 |. 8858 30 MOV BYTE PTR DS:[EAX+30],BL
00400543 |. 8A58 1D MOV BL,BYTE PTR DS:[EAX+1D]
00400546 |. 8850 1C MOV BYTE PTR DS:[EAX+1C],DL
00400549 |. 8A55 0F MOV DL,BYTE PTR SS:[EBP+F]
0040054C |. 8858 31 MOV BYTE PTR DS:[EAX+31],BL
0040054F |. 8850 1D MOV BYTE PTR DS:[EAX+1D],DL
00400552 |> 8A51 07 MOV DL,BYTE PTR DS:[ECX+7]
00400555 |. 8A41 01 MOV AL,BYTE PTR DS:[ECX+1]
00400558 |. 8851 01 MOV BYTE PTR DS:[ECX+1],DL
0040055B |. 8A51 09 MOV DL,BYTE PTR DS:[ECX+9]
0040055E |. 8851 07 MOV BYTE PTR DS:[ECX+7],DL
00400561 |. 8A51 03 MOV DL,BYTE PTR DS:[ECX+3]
00400564 |. 8851 09 MOV BYTE PTR DS:[ECX+9],DL
00400567 |. 8A51 04 MOV DL,BYTE PTR DS:[ECX+4]
0040056A |. 8841 03 MOV BYTE PTR DS:[ECX+3],AL
0040056D |. 8A41 02 MOV AL,BYTE PTR DS:[ECX+2]
00400570 |. 8851 02 MOV BYTE PTR DS:[ECX+2],DL
00400573 |. 8A51 08 MOV DL,BYTE PTR DS:[ECX+8]
00400576 |. 8851 04 MOV BYTE PTR DS:[ECX+4],DL
00400579 |. 8A51 06 MOV DL,BYTE PTR DS:[ECX+6]
0040057C |. 8851 08 MOV BYTE PTR DS:[ECX+8],DL
0040057F |. 8841 06 MOV BYTE PTR DS:[ECX+6],AL
00400582 |. EB 29 JMP SHORT 虚伪.004005AD
00400584 |> 80FA 06 CMP DL,6
00400587 |. 75 24 JNZ SHORT 虚伪.004005AD
00400589 |. 8A50 27 MOV DL,BYTE PTR DS:[EAX+27]
0040058C |. 8A48 07 MOV CL,BYTE PTR DS:[EAX+7]
0040058F |. 8850 07 MOV BYTE PTR DS:[EAX+7],DL ; 第40位放到第8位
00400592 |. 8A50 33 MOV DL,BYTE PTR DS:[EAX+33]
00400595 |. 8850 27 MOV BYTE PTR DS:[EAX+27],DL ; 第52位放到第40位
00400598 |. 8A50 1B MOV DL,BYTE PTR DS:[EAX+1B]
0040059B |. 8848 33 MOV BYTE PTR DS:[EAX+33],CL ; 第8位放到第52位
0040059E |. 8A48 09 MOV CL,BYTE PTR DS:[EAX+9]
004005A1 |. 8850 09 MOV BYTE PTR DS:[EAX+9],DL ; 第28位放到第10位
004005A4 |. 8A50 35 MOV DL,BYTE PTR DS:[EAX+35]
004005A7 |. 8850 1B MOV BYTE PTR DS:[EAX+1B],DL ; 第54位放到第28位
004005AA |. 8848 35 MOV BYTE PTR DS:[EAX+35],CL ; 第10位放到第54位
004005AD |> 5B POP EBX
004005AE |. 5D POP EBP
004005AF \. C3 RET
这个CALL很明显是分了7种情况进行计算的。
分别是dl=0,1,2,3,4,5,6这7种情况。
而入栈的参数是这样的:
00400645 |. 2C 30 |SUB AL,30
00400647 |. 3C 09 |CMP AL,9 ; sn每一位减30和9比较
00400649 |. 76 02 |JBE SHORT 虚伪.0040064D
0040064B |. 04 F9 |ADD AL,0F9 ; 否则要add 0f9
0040064D |> 8D4D BC |LEA ECX,DWORD PTR SS:[EBP-44]
00400650 |. 34 0C |XOR AL,0C ; 小于等于9的话xor 0c就入栈
00400652 |. 51 |PUSH ECX
那么把0,1,2,3,4,5,6代入可求出符合要求的SN只能是下面几个
CDEF8(?)9(@)A分别对应0,1,2,3,4,5,6
我还是只分析了等于2和6的情况。
由于知道这是个魔方,不过从dl=6看出,这个好象不是转面,应该是转角。
既然是魔方 前人已经总结出结果了。
http://www.wrongway.org/cube/solve.html
这个网页是有人给出的 是算魔方步骤的。把我这个状态输入进去 也就是用户名为kyo327的状态:
A0 D1 E2 E1 E8 A5 B6 B9 A2 D7
B0 D3 C4 F1 E4 B5 C8 B1 B2 C3
C0 B3 F6 A7 C2 C5 D8 F7 A4 E7
D0 B7 C6 E3 D2 D5 F8 A9 E6 A3
E0 D9 A6 A1 F4 E5 B4 F9 F2 F3
F0 C1 B8 E9 D4 F5 D6 C7 A8 C9
然后开始计算即可。好象很花时间哦。
不过好的算法在26步内可以还原任何打乱的魔方的。
不过这里多了个dl=6的情况,(可能是转角)。 可能会简单点,我不会玩魔方 也没时间学那个无聊东东 所以下面的工作给有兴趣的朋友来解决吧。
可用的序列号大家算了好多。列几个他人的结果吧。我偷懒,没时间算,呵呵。
哪位闲人可以用我的kyo327算一个出来,我在这里谢谢了。:)
user:kelly
key:DDDCAA@@@CCCFFFDDD??EE?DDDFFDDDCCCEE@EEE@E@@@CCDD??@FF
用户名pediy
注册码899FFDDDDDDFFFCCCCCCFCCC9CFFF9F999CCCFFFCDDDFFFDFFFDFFFDDDCFCCC8FFF888FFFDDDFDFFF888F8F9FFF9998FFF888FFFDDDFFDF8FFF888FDFFFDDDFFFCCCFCCFFFCCCFFF999F9FF8FF888FFF8FFF888FFF9FF999FFF9FFF999DDDFFFFFFDFDDDFFFDFDDDFD9FF999FFF9FFF999
[注意]APP应用上架合规检测服务,协助应用顺利上架!