【破解作者】 落魄浪子
【使用工具】 FlyOD1.1
【破解平台】 Win9x/NT/2000/XP
【软件名称】 远程网络维护系统V4.5.2
【下载地址】 华军软件园
【加壳方式】 ASPack 2.001 -> Alexey Solodovnikov
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
软件没有注册时有100次的使用限制,注册码不对时有注册错误的提示。软件是一机一码,通过序列号算出注册码
。先脱壳,之后用OD载入注程式pcNxeit.exe,F9运行。找到出错提示字符,向上找看看哪里跳来的,下断。然后
点网络设置=》注册,输入注册名和注册码。点注册,OK,OD断下了。
005336E8   /.  55              push ebp              断在这里
005336E9   |.  8BEC            mov ebp,esp
005336EB   |.  33C9            xor ecx,ecx
005336ED   |.  51              push ecx
005336EE   |.  51              push ecx
005336EF   |.  51              push ecx
005336F0   |.  51              push ecx
005336F1   |.  51              push ecx
005336F2   |.  51              push ecx
005336F3   |.  51              push ecx
005336F4   |.  53              push ebx
005336F5   |.  8BD8            mov ebx,eax
005336F7   |.  33C0            xor eax,eax
005336F9   |.  55              push ebp
005336FA   |.  68 EA375300     push pcNxeit_.005337EA
005336FF   |.  64:FF30         push dword ptr fs:[eax]
00533702   |.  64:8920         mov dword ptr fs:[eax],esp
00533705   |.  8D45 F4         lea eax,dword ptr ss:[ebp-C]
00533708   |.  E8 2B9CFCFF     call pcNxeit_.004FD338
0053370D   |.  8B45 F4         mov eax,dword ptr ss:[ebp-C]
00533710   |.  8D55 FC         lea edx,dword ptr ss:[ebp-4]
00533713   |.  E8 445AEDFF     call pcNxeit_.0040915C
00533718   |.  8D55 F0         lea edx,dword ptr ss:[ebp-10]
0053371B   |.  8B83 F8020000   mov eax,dword ptr ds:[ebx+2F8]
00533721   |.  E8 7E43F1FF     call pcNxeit_.00447AA4
00533726   |.  8B45 F0         mov eax,dword ptr ss:[ebp-10]  输入的注册码入EAX
00533729   |.  50              push eax
0053372A   |.  8D55 E8         lea edx,dword ptr ss:[ebp-18]
0053372D   |.  8B83 F4020000   mov eax,dword ptr ds:[ebx+2F4]
00533733   |.  E8 6C43F1FF     call pcNxeit_.00447AA4
00533738   |.  8B45 E8         mov eax,dword ptr ss:[ebp-18]    注册名入EAX
0053373B   |.  8D4D EC         lea ecx,dword ptr ss:[ebp-14]
0053373E   |.  8B55 FC         mov edx,dword ptr ss:[ebp-4]     序列号入EDX
00533741   |.  E8 769AFCFF     call pcNxeit_.004FD1BC          进入看看

004FD1BC   /$  55              push ebp  进入后来到这里
004FD1BD   |.  8BEC            mov ebp,esp
004FD1BF   |.  83C4 E0         add esp,-20
004FD1C2   |.  53              push ebx
004FD1C3   |.  33DB            xor ebx,ebx
------------------略过代码---------------------------------

004FD1E2   |.  8B45 F8         mov eax,dword ptr ss:[ebp-8]   序列号入EAX
004FD1E5   |.  E8 767AF0FF     call pcNxeit_.00404C60 
004FD1EA   |.  33C0            xor eax,eax
004FD1EC   |.  55              push ebp
004FD1ED   |.  68 FED24F00     push pcNxeit_.004FD2FE
004FD1F2   |.  64:FF30         push dword ptr fs:[eax]
004FD1F5   |.  64:8920         mov dword ptr fs:[eax],esp
004FD1F8   |.  33DB            xor ebx,ebx
004FD1FA   |.  33C0            xor eax,eax
004FD1FC   |.  8945 E0         mov dword ptr ss:[ebp-20],eax
004FD1FF   |.  8B45 FC         mov eax,dword ptr ss:[ebp-4]  注册名入EAX
004FD202   |.  E8 7178F0FF     call pcNxeit_.00404A78   取注册名的长度
004FD207   |.  85C0            test eax,eax
004FD209   |.  7E 1F           jle short pcNxeit_.004FD22A
004FD20B   |.  BA 01000000     mov edx,1
004FD210   |>  8B4D FC         /mov ecx,dword ptr ss:[ebp-4] 注册名入ECX
004FD213   |.  8A4C11 FF       |mov cl,byte ptr ds:[ecx+edx-1]
004FD217   |.  80F9 7F         |cmp cl,7F
004FD21A   |.  72 0A           |jb short pcNxeit_.004FD226 看看是否中文,不是则跳,是则计算
004FD21C   |.  8B4D FC         |mov ecx,dword ptr ss:[ebp-4]注册名入ECX
004FD21F   |.  0FB64C11 FF     |movzx ecx,byte ptr ds:[ecx+edx-1]右取注册名一位的十六进制入ECX
004FD224   |.  03D9            |add ebx,ecx  依次右取注册名一位HEX累加
004FD226   |>  42              |inc edx      记数器加一
004FD227   |.  48              |dec eax      用户名长度减一
004FD228   |.^ 75 E6           \jnz short pcNxeit_.004FD210  是否取完,没有则继续
004FD22A   |>  8B45 F8         mov eax,dword ptr ss:[ebp-8]  序列号入EAX
004FD22D   |.  E8 4678F0FF     call pcNxeit_.00404A78   取序列号的长度
004FD232   |.  85C0            test eax,eax
004FD234   |.  7E 20           jle short pcNxeit_.004FD256
004FD236   |.  BA 01000000     mov edx,1
004FD23B   |>  8B4D F8         /mov ecx,dword ptr ss:[ebp-8]    序列号入ECX
004FD23E   |.  8A4C11 FF       |mov cl,byte ptr ds:[ecx+edx-1]  依次右取序列号一位的十六进制入CL
004FD242   |.  80F9 7F         |cmp cl,7F
004FD245   |.  73 0B           |jnb short pcNxeit_.004FD252   看看序列号是否有非法字符
004FD247   |.  8B4D F8         |mov ecx,dword ptr ss:[ebp-8]  序列号入ECX
004FD24A   |.  0FB64C11 FF     |movzx ecx,byte ptr ds:[ecx+edx-1]依次右取序列号一位的十六进制入ECX
004FD24F   |.  014D E0         |add dword ptr ss:[ebp-20],ecx  依次右取序列号一位HEX累加
004FD252   |>  42              |inc edx     记数器加一
004FD253   |.  48              |dec eax     注同码长度减一
004FD254   |.^ 75 E5           \jnz short pcNxeit_.004FD23B 是否取完,没有则继续
004FD256   |> \81C3 400A0000   add ebx,0A40   用户名的累加结果+0A40 
004FD25C   |.  8D4D F0         lea ecx,dword ptr ss:[ebp-10]
004FD25F   |.  BA 05000000     mov edx,5      注同码长度
004FD264   |.  8BC3            mov eax,ebx
004FD266   |.  E8 71C2F0FF     call pcNxeit_.004094DC   0A40前加0补足5位得到第一组注同码
004FD26B   |.  81C3 2F090000   add ebx,92F              0A40+92F=136F
004FD271   |.  8D4D EC          lea ecx,dword ptr ss:[ebp-14]
004FD274   |.  BA 05000000      mov edx,5       注同码长度
004FD279   |.  8BC3             mov eax,ebx
004FD27B   |.  E8 5CC2F0FF      call pcNxeit_.004094DC  136F前加0补足5位得到第二组注同码
004FD280   |.  8145 E0 400A0000 add dword ptr ss:[ebp-20],0A40   0A40与序列号累加的结果相加=0C5C
004FD287   |.  8D4D E8          lea ecx,dword ptr ss:[ebp-18]   
004FD28A   |.  BA 05000000      mov edx,5      注同码长度
004FD28F   |.  8B45 E0          mov eax,dword ptr ss:[ebp-20]
004FD292   |.  E8 45C2F0FF      call pcNxeit_.004094DC  0C5C前加0补足5位得到第三组注同码
004FD297   |.  8145 E0 2F090000 add dword ptr ss:[ebp-20],92F 92F+0C5C=158B
004FD29E   |.  8D4D E4          lea ecx,dword ptr ss:[ebp-1C]
004FD2A1   |.  BA 05000000      mov edx,5     注同码长度
004FD2A6   |.  8B45 E0          mov eax,dword ptr ss:[ebp-20]
004FD2A9   |.  E8 2EC2F0FF      call pcNxeit_.004094DC  158B前加0补足5位得到第四组注同码
004FD2AE   |.  FF75 F0          push dword ptr ss:[ebp-10] 第一组注册码
004FD2B1   |.  68 14D34F00      push pcNxeit_.004FD314   符号“-”
004FD2B6   |.  FF75 EC          push dword ptr ss:[ebp-14] 第二组注册码
004FD2B9   |.  68 14D34F00      push pcNxeit_.004FD314    符号“-”
004FD2BE   |.  FF75 E8          push dword ptr ss:[ebp-18] 第三组注册码
004FD2C1   |.  68 14D34F00      push pcNxeit_.004FD314     符号“-”
004FD2C6   |.  FF75 E4          push dword ptr ss:[ebp-1C]  第四组注册码
004FD2C9   |.  8B45 F4          mov eax,dword ptr ss:[ebp-C]
004FD2CC   |.  BA 07000000      mov edx,7
004FD2D1   |.  E8 6278F0FF      call pcNxeit_.00404B38  把注册码用“-”连起来
004FD2D6   |.  33C0             xor eax,eax
004FD2D8   |.  5A               pop edx
004FD2D9   |.  59               pop ecx
004FD2DA   |.  59               pop ecx
004FD2DB   |.  64:8910          mov dword ptr fs:[eax],edx
004FD2DE   |.  68 05D34F00      push pcNxeit_.004FD305
004FD2E3   |>  8D45 E4          lea eax,dword ptr ss:[ebp-1C]
004FD2E6   |.  BA 04000000      mov edx,4
004FD2EB   |.  E8 F474F0FF      call pcNxeit_.004047E4
004FD2F0   |.  8D45 F8          lea eax,dword ptr ss:[ebp-8]
004FD2F3   |.  BA 02000000      mov edx,2
004FD2F8   |.  E8 E774F0FF      call pcNxeit_.004047E4
004FD2FD   \.  C3               retn                    返回
00533746   |.  8B55 EC          mov edx,dword ptr ss:[ebp-14] 返回到这里,真注册码入EDX。这里可以做内存注册机。
00533749   |.  58               pop eax                         假注册码
0053374A   |.  E8 6D14EDFF      call pcNxeit_.00404BBC   比较
0053374F   |.  75 49            jnz short pcNxeit_.0053379A 不对则出错
00533751   |.  6A 40           push 40
00533753   |.  B9 F8375300     mov ecx,pcNxeit_.005337F8
00533758   |.  BA 04385300     mov edx,pcNxeit_.00533804             ;  恭喜!注册成功
0053375D   |.  A1 A00A5400     mov eax,dword ptr ds:[540AA0]
00533762   |.  8B00            mov eax,dword ptr ds:[eax]
00533764   |.  E8 E746F3FF     call pcNxeit_.00467E50
00533769   |.  68 1C385300     push pcNxeit_.0053381C                ;  ASCII " UPDATE COMPANYTABLE SET CHINANAME =""
0053376E   |.  8D55 E4         lea edx,dword ptr ss:[ebp-1C]
00533771   |.  8B83 F4020000   mov eax,dword ptr ds:[ebx+2F4]
00533777   |.  E8 2843F1FF     call pcNxeit_.00447AA4
0053377C   |.  FF75 E4         push dword ptr ss:[ebp-1C]
0053377F   |.  68 4C385300     push pcNxeit_.0053384C                ;  ASCII "" WHERE COMPANYID = "1""
00533784   |.  8D45 F8         lea eax,dword ptr ss:[ebp-8]
00533787   |.  BA 03000000     mov edx,3
0053378C   |.  E8 A713EDFF     call pcNxeit_.00404B38
00533791   |.  8BC3            mov eax,ebx
00533793   |.  E8 7C0EF3FF     call pcNxeit_.00464614
00533798   |.  EB 18           jmp short pcNxeit_.005337B2
0053379A   |>  6A 10           push 10
0053379C   |.  B9 64385300     mov ecx,pcNxeit_.00533864
005337A1       BA 70385300     mov edx,pcNxeit_.00533870             ;  注册联系:0755-25849320 王工
005337A6   |.  A1 A00A5400     mov eax,dword ptr ds:[540AA0]
005337AB   |.  8B00            mov eax,dword ptr ds:[eax]
005337AD   |.  E8 9E46F3FF     call pcNxeit_.00467E50

--------------------------------------------------------------------------------
【破解总结】
注册算法很简单:注册名如果全是英文,则不参与运算,在0A40前面加0补足5位为第一组注册码,如果是中文注册名
则0A40与注册名的十六进制的累加结果相加,如果不够5位则在前面加0补足5位为第一组注册码。
92F与第一组注册码相加,结果如果不够5位则在前面加0补足5位为第二组注册码。
0A40与序列号的累加结果相加,结果为第三组注册码。
92F与第三组注册码相加,结果如果不够5位则在前面加0补足5位为第四组注册码。
注册名中如有数字和字母则数字和字母不参与运算,只计算中文字符。
东拼西凑了个VB注册机,呵呵,高手见笑啦。
    Dim a, b, c, d, e, f, g, h, j, k, l, m, n, s, Q
    Dim x As String
    Dim y As Variant
If Text1.Text = "" Then
MsgBox "请输入你的序列号!", , " 呵呵,对不起出错啦!"
Exit Sub
ElseIf Text2.Text = "" Then
MsgBox "请输入你的用户名,可以是中文!", , " 呵呵,对不起出错啦!"
Exit Sub
End If
a = Len(Text1.Text)
b = Len(Text2.Text)
For c = 1 To b
If LenB(StrConv(Mid(Text2.Text, c, 1), vbFromUnicode)) = 2 Then
d = d & Mid(Text2.Text, c, 1)
End If
Next c
For e = 1 To Len(d)
x = x & Hex(Asc(Mid(d, e, 1)))
Next e
g = 0
For f = 1 To Len(x)
y = CLng("&H" & Mid(x, f, 2))
If y < 0 Then y = y + 65536
f = f + 1
g = g + y
Next f
For h = 1 To Len(Text1.Text)
j = Asc(Mid(Text1.Text, h, 1))
k = k + j
Next h
Q = "00000"
l = Hex(CLng("&H" & "0A40") + g)
If Len(l) < 5 Then l = Mid(Q, 1, 5 - Len(l)) & l
m = Hex(CLng("&H" & "92F") + (CLng("&H" & "0A40") + g))
If Len(m) < 5 Then m = Mid(Q, 1, 5 - Len(m)) & m
n = Hex((CLng("&H" & "A40") + k))
If Len(n) < 5 Then n = Mid(Q, 1, 5 - Len(n)) & n
s = Hex(((CLng("&H" & "A40") + k)) + CLng("&H" & "92F"))
If Len(s) < 5 Then s = Mid(Q, 1, 5 - Len(s)) & s
Text3.Text = l & "-" & m & "-" & n & "-" & s
End Sub
本注册机在WINXP SP2下VB6下编译通过。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!