http://bbs.pediy.com/showthread.php?s=&threadid=19735
首先要感谢marsaber,小弟是在他分析的基础上深入研究的
算法其实挺简单的,一点耐心加上一点汇编基础就行了 0042499E |. 83F8 02 CMP EAX,2 ; 用户名至少两位
004249A1 |. 7D 13 JGE SHORT VideoCon.004249B6
004249A3 |. 6A 00 PUSH 0
004249A5 |. 6A 00 PUSH 0
004249A7 |. 68 2C034600 PUSH VideoCon.0046032C ; ASCII "Please input correct User Name!"
004249AC |. E8 BEC10200 CALL VideoCon.00450B6F
004249B1 |. E9 A9020000 JMP VideoCon.00424C5F
004249B6 |> 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
004249B9 |. 83C1 74 ADD ECX,74
004249BC |. E8 8F70FEFF CALL VideoCon.0040BA50
004249C1 |. 83F8 08 CMP EAX,8 ; 注册码至少八位
004249C4 |. 7D 13 JGE SHORT VideoCon.004249D9
004249C6 |. 6A 00 PUSH 0
004249C8 |. 6A 00 PUSH 0
004249CA |. 68 4C034600 PUSH VideoCon.0046034C ; ASCII "Please input correct Registration Code!"
004249CF |. E8 9BC10200 CALL VideoCon.00450B6F
004249D4 |. E9 86020000 JMP VideoCon.00424C5F
004249D9 |> 6A 00 PUSH 0 ; /Arg1 = 00000000
004249DB |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
004249DE |. 83C1 70 ADD ECX,70 ; |
004249E1 |. E8 AAF5FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
004249E6 |. 8845 EF MOV BYTE PTR SS:[EBP-11],AL ; 用户名第一位
004249E9 |. 6A 01 PUSH 1 ; /Arg1 = 00000001
004249EB |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
004249EE |. 83C1 70 ADD ECX,70 ; |
004249F1 |. E8 9AF5FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
004249F6 |. 8845 F8 MOV BYTE PTR SS:[EBP-8],AL ; 用户名第二位
004249F9 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
004249FB |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
004249FE |. 83C1 70 ADD ECX,70 ; |
00424A01 |. E8 8AF5FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424A06 |. 8845 FF MOV BYTE PTR SS:[EBP-1],AL ; 第一位
00424A09 |. 6A 01 PUSH 1 ; /Arg1 = 00000001
00424A0B |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424A0E |. 83C1 70 ADD ECX,70 ; |
00424A11 |. E8 7AF5FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424A16 |. 8845 FA MOV BYTE PTR SS:[EBP-6],AL ; 第二位
00424A19 |. 0FB645 EF MOVZX EAX,BYTE PTR SS:[EBP-11] ; 第一位ASCII
00424A1D |. 83C8 41 OR EAX,41 ; 第一位ASCII OR 41
00424A20 |. 8845 EF MOV BYTE PTR SS:[EBP-11],AL ; 放回[ebp-11],记作码1
00424A23 |. 0FB64D F8 MOVZX ECX,BYTE PTR SS:[EBP-8] ; 第二位ASCII
00424A27 |. 83C9 56 OR ECX,56 ; 第二位ASCII OR 56
00424A2A |. 884D F8 MOV BYTE PTR SS:[EBP-8],CL ; 放回[ebp-8],记作码2
00424A2D |. 0FB655 FF MOVZX EDX,BYTE PTR SS:[EBP-1] ; 第一位
00424A31 |. 83CA 49 OR EDX,49 ; 第一位ASCII OR 49
00424A34 |. 8855 FF MOV BYTE PTR SS:[EBP-1],DL ; 放回[ebp-1],记作码3
00424A37 |. 0FB645 FA MOVZX EAX,BYTE PTR SS:[EBP-6] ; 第二位ASCII
00424A3B |. 83C8 43 OR EAX,43 ; 第二位ASCII OR 43
00424A3E |. 8845 FA MOV BYTE PTR SS:[EBP-6],AL ; 放回[ebp-6],记作码4
00424A41 |. 0FB645 EF MOVZX EAX,BYTE PTR SS:[EBP-11]
00424A45 |. 99 CDQ
00424A46 |. B9 0A000000 MOV ECX,0A ; 被除数10(十进制,下同)
00424A4B |. F7F9 IDIV ECX
00424A4D |. 8855 EF MOV BYTE PTR SS:[EBP-11],DL ; 码1除以10,余数放回码1
00424A50 |. 0FB645 F8 MOVZX EAX,BYTE PTR SS:[EBP-8]
00424A54 |. 99 CDQ
00424A55 |. B9 0A000000 MOV ECX,0A
00424A5A |. F7F9 IDIV ECX
00424A5C |. 8855 F8 MOV BYTE PTR SS:[EBP-8],DL ; 码2除以10,余数放回码2
00424A5F |. 0FB645 FF MOVZX EAX,BYTE PTR SS:[EBP-1]
00424A63 |. 99 CDQ
00424A64 |. B9 0A000000 MOV ECX,0A
00424A69 |. F7F9 IDIV ECX
00424A6B |. 8855 FF MOV BYTE PTR SS:[EBP-1],DL ; 码3除以10,余数放回码3
00424A6E |. 0FB645 FA MOVZX EAX,BYTE PTR SS:[EBP-6]
00424A72 |. 99 CDQ
00424A73 |. B9 0A000000 MOV ECX,0A
00424A78 |. F7F9 IDIV ECX
00424A7A |. 8855 FA MOV BYTE PTR SS:[EBP-6],DL ; 码4除以10,余数放回码4
00424A7D |. C745 F0 0000000>MOV DWORD PTR SS:[EBP-10],0
00424A84 |. C745 E8 0000000>MOV DWORD PTR SS:[EBP-18],0
00424A8B |. EB 09 JMP SHORT VideoCon.00424A96
00424A8D |> 8B55 E8 /MOV EDX,DWORD PTR SS:[EBP-18] ; 用户名第X位
00424A90 |. 83C2 01 |ADD EDX,1 ; 位数加1
00424A93 |. 8955 E8 |MOV DWORD PTR SS:[EBP-18],EDX
00424A96 |> 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]
00424A99 |. 83C1 70 |ADD ECX,70
00424A9C |. E8 AF6FFEFF |CALL VideoCon.0040BA50
00424AA1 |. 3945 E8 |CMP DWORD PTR SS:[EBP-18],EAX ; eax=用户名位数,到最后一位了吗?
00424AA4 |. 7D 1E |JGE SHORT VideoCon.00424AC4
00424AA6 |. 8B45 E8 |MOV EAX,DWORD PTR SS:[EBP-18]
00424AA9 |. 50 |PUSH EAX ; /Arg1
00424AAA |. 8B4D E0 |MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424AAD |. 83C1 70 |ADD ECX,70 ; |
00424AB0 |. E8 DBF4FFFF |CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424AB5 |. 8845 E7 |MOV BYTE PTR SS:[EBP-19],AL
00424AB8 |. 0FB64D E7 |MOVZX ECX,BYTE PTR SS:[EBP-19] ; 第X位ASCII 码- ecx
00424ABC |. 034D F0 |ADD ECX,DWORD PTR SS:[EBP-10] ; 用户名每位ASCII 码累加
00424ABF |. 894D F0 |MOV DWORD PTR SS:[EBP-10],ECX
00424AC2 |.^ EB C9 \JMP SHORT VideoCon.00424A8D
00424AC4 |> 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 上面累加结果->eax
00424AC7 |. 99 CDQ
00424AC8 |. B9 0A000000 MOV ECX,0A
00424ACD |. F7F9 IDIV ECX ; 累加结果除以10,余数放到[ebp-c]
00424ACF |. 8855 F4 MOV BYTE PTR SS:[EBP-C],DL ; 记此余数为码5
00424AD2 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
00424AD4 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424AD7 |. 83C1 74 ADD ECX,74 ; |
00424ADA |. E8 B1F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424ADF |. 8845 FC MOV BYTE PTR SS:[EBP-4],AL ; 假注册码第一位放到[ebp-4]
00424AE2 |. 6A 01 PUSH 1 ; /Arg1 = 00000001
00424AE4 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424AE7 |. 83C1 74 ADD ECX,74 ; |
00424AEA |. E8 A1F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424AEF |. 8845 FD MOV BYTE PTR SS:[EBP-3],AL ; 假注册码第二位放到[ebp-3]
00424AF2 |. 6A 02 PUSH 2 ; /Arg1 = 00000002
00424AF4 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424AF7 |. 83C1 74 ADD ECX,74 ; |
00424AFA |. E8 91F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424AFF |. 8845 F6 MOV BYTE PTR SS:[EBP-A],AL ; 假注册码第三位放到[ebp-A]
00424B02 |. 6A 03 PUSH 3 ; /Arg1 = 00000003
00424B04 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424B07 |. 83C1 74 ADD ECX,74 ; |
00424B0A |. E8 81F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424B0F |. 8845 F5 MOV BYTE PTR SS:[EBP-B],AL ; 假码第四位放到[ebp-B]
00424B12 |. 6A 04 PUSH 4 ; /Arg1 = 00000004
00424B14 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424B17 |. 83C1 74 ADD ECX,74 ; |
00424B1A |. E8 71F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424B1F |. 8845 F9 MOV BYTE PTR SS:[EBP-7],AL ; 第五位[ebp-7]
00424B22 |. 6A 05 PUSH 5 ; /Arg1 = 00000005
00424B24 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424B27 |. 83C1 74 ADD ECX,74 ; |
00424B2A |. E8 61F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424B2F |. 8845 F7 MOV BYTE PTR SS:[EBP-9],AL ; 第六位[ebp-9]
00424B32 |. 6A 06 PUSH 6 ; /Arg1 = 00000006
00424B34 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424B37 |. 83C1 74 ADD ECX,74 ; |
00424B3A |. E8 51F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424B3F |. 8845 FE MOV BYTE PTR SS:[EBP-2],AL ; 第七位[ebp-2]
00424B42 |. 6A 07 PUSH 7 ; /Arg1 = 00000007
00424B44 |. 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ; |
00424B47 |. 83C1 74 ADD ECX,74 ; |
00424B4A |. E8 41F4FFFF CALL VideoCon.00423F90 ; \VideoCon.00423F90
00424B4F |. 8845 FB MOV BYTE PTR SS:[EBP-5],AL ; 第八位[ebp-5]
00424B52 |. 0FB655 EF MOVZX EDX,BYTE PTR SS:[EBP-11] ; 码1
00424B56 |. 0FB645 FC MOVZX EAX,BYTE PTR SS:[EBP-4] ; 假注册码第1位的ASCII
00424B5A |. 83E8 30 SUB EAX,30 ; 转成数字
00424B5D |. 3BD0 CMP EDX,EAX ; 要相等
00424B5F |. 75 3C JNZ SHORT VideoCon.00424B9D
00424B61 |. 0FB64D F8 MOVZX ECX,BYTE PTR SS:[EBP-8]
00424B65 |. 0FB655 FD MOVZX EDX,BYTE PTR SS:[EBP-3]
00424B69 |. 83EA 30 SUB EDX,30
00424B6C |. 3BCA CMP ECX,EDX
00424B6E |. 75 2D JNZ SHORT VideoCon.00424B9D ; 码2与第二位注册码
00424B70 |. 0FB645 FF MOVZX EAX,BYTE PTR SS:[EBP-1]
00424B74 |. 0FB64D F6 MOVZX ECX,BYTE PTR SS:[EBP-A]
00424B78 |. 83E9 30 SUB ECX,30
00424B7B |. 3BC1 CMP EAX,ECX
00424B7D |. 75 1E JNZ SHORT VideoCon.00424B9D ; 码3
00424B7F |. 0FB655 FA MOVZX EDX,BYTE PTR SS:[EBP-6]
00424B83 |. 0FB645 F5 MOVZX EAX,BYTE PTR SS:[EBP-B]
00424B87 |. 83E8 30 SUB EAX,30
00424B8A |. 3BD0 CMP EDX,EAX
00424B8C |. 75 0F JNZ SHORT VideoCon.00424B9D ; 码4
00424B8E |. 0FB64D F4 MOVZX ECX,BYTE PTR SS:[EBP-C]
00424B92 |. 0FB655 F9 MOVZX EDX,BYTE PTR SS:[EBP-7]
00424B96 |. 83EA 30 SUB EDX,30
00424B99 |. 3BCA CMP ECX,EDX
00424B9B |. 74 58 JE SHORT VideoCon.00424BF5 ; 码5
00424B9D |> 0FB645 FC MOVZX EAX,BYTE PTR SS:[EBP-4] ; 上面码1至码5如果有一个不符合,则运算出的注册码不对
00424BA1 |. 83F8 35 CMP EAX,35 ; 但是还有一次机会,通用注册码,51897629
00424BA4 |. 0F85 A7000000 JNZ VideoCon.00424C51
00424BAA |. 0FB64D FD MOVZX ECX,BYTE PTR SS:[EBP-3]
00424BAE |. 83F9 31 CMP ECX,31
00424BB1 |. 0F85 9A000000 JNZ VideoCon.00424C51
00424BB7 |. 0FB655 F6 MOVZX EDX,BYTE PTR SS:[EBP-A]
00424BBB |. 83FA 38 CMP EDX,38
00424BBE |. 0F85 8D000000 JNZ VideoCon.00424C51
00424BC4 |. 0FB645 F5 MOVZX EAX,BYTE PTR SS:[EBP-B]
00424BC8 |. 83F8 39 CMP EAX,39
00424BCB |. 0F85 80000000 JNZ VideoCon.00424C51
00424BD1 |. 0FB64D F9 MOVZX ECX,BYTE PTR SS:[EBP-7]
00424BD5 |. 83F9 37 CMP ECX,37
00424BD8 |. 75 77 JNZ SHORT VideoCon.00424C51
00424BDA |. 0FB655 F7 MOVZX EDX,BYTE PTR SS:[EBP-9]
00424BDE |. 83FA 36 CMP EDX,36
00424BE1 |. 75 6E JNZ SHORT VideoCon.00424C51
00424BE3 |. 0FB645 FE MOVZX EAX,BYTE PTR SS:[EBP-2]
00424BE7 |. 83F8 32 CMP EAX,32
00424BEA |. 75 65 JNZ SHORT VideoCon.00424C51
00424BEC |. 0FB64D FB MOVZX ECX,BYTE PTR SS:[EBP-5]
00424BF0 |. 83F9 39 CMP ECX,39
00424BF3 |. 75 5C JNZ SHORT VideoCon.00424C51 ; 也不是通用注册码,就注册失败,否则成功 总结一下算法:
用户名至少2位,注册码至少8位
第一位的ASCII码 OR 41(十六进制),除以A(十六进制),余数作为码1
第二位的ASCII码 OR 56(十六进制),除以A(十六进制),余数作为码2
第一位的ASCII码 OR 49(十六进制),除以A(十六进制),余数作为码3
第二位的ASCII码 OR 43(十六进制),除以A(十六进制),余数作为码4
用户名所有位数ASCII码累加,除以A,余数作为码5
码1至码5分别与注册码前五位比较,全同则注册成功
否则判断注册码前八位是否为通用注册码51897629,是则注册成功,否则注册失败。
用户名:alifriend
注册码:76512XXXXXXXXXX(XX随便,注册码至少八位就行)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)