【破文标题】超级电视 4.4注册算法分析
【破文作者】XXNB
【作者邮箱】
【作者主页】
【破解工具】OD
【破解平台】xpsp2
【软件名称】超级电视 4.4
【软件大小】1013KB
【原版下载】http://www.onlinedown.net/soft/44942.htm
【保护方式】
【软件简介】超级电视可接收各地精彩电视节目和广播电台,软件界面简洁,人性化的的程序设计,使您操作更简便。所有节目免费试看,给您透明的选择! 不包含任何广告和插件。
【破解声明】向大侠们学习!!!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
1、OD载入后,按Ctrl+N,在__vbaStrCmp这个函数下断“在每个参考上设置断点”,F9运行。
其间会有这样一句猛的运行。我们就把这下面句的断点取消掉。
0044F05F . FF15 7C124600 call [<&MSVBVM50.__vbaStrCmp>] ; MSVBVM50.__vbaStrCmp
在程序正确运行后,点“帮助”-“注册”,随便输入用户名和注册码,按“立即注册”中断在下面这句。
0045D2E3 . FF15 7C124600 call [<&MSVBVM50.__vbaStrCmp>] ; MSVBVM50.__vbaStrCmp堆栈处可以看到用户名
0045D2E9 . F7D8 neg eax
0045D2EB . 1BC0 sbb eax, eax
0045D2ED . 8D4D E0 lea ecx, [ebp-20]
0045D2F0 . F7D8 neg eax
0045D2F2 . F7D8 neg eax
0045D2F4 . 8985 34FFFFFF mov [ebp-CC], eax
0045D2FA . FF15 5C134600 call [<&MSVBVM50.__vbaFreeStr>] ; MSVBVM50.__vbaFreeStr
0045D300 . 8D4D C8 lea ecx, [ebp-38]
0045D303 . FF15 58134600 call [<&MSVBVM50.__vbaFreeObj>] ; MSVBVM50.__vbaFreeObj
0045D309 . 66:39BD 34FFF>cmp [ebp-CC], di
0045D310 . 0F84 500A0000 je 0045DD66
0045D316 . 53 push ebx
0045D317 . FF95 0CFFFFFF call [ebp-F4]
0045D31D . 8D4D C8 lea ecx, [ebp-38]
0045D320 . 50 push eax
0045D321 . 51 push ecx
0045D322 . FF15 30124600 call [<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0045D328 . 8B10 mov edx, [eax]
0045D32A . 8D4D E0 lea ecx, [ebp-20]
0045D32D . 51 push ecx
0045D32E . 50 push eax
0045D32F . 8985 3CFFFFFF mov [ebp-C4], eax
0045D335 . FF92 A0000000 call [edx+A0]
0045D33B . 3BC7 cmp eax, edi
0045D33D . 7D 18 jge short 0045D357
0045D33F . 8B95 3CFFFFFF mov edx, [ebp-C4]
0045D345 . 68 A0000000 push 0A0
0045D34A . 68 C08A4000 push 00408AC0
0045D34F . 52 push edx
0045D350 . 50 push eax
0045D351 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D357 > 8B45 E0 mov eax, [ebp-20] ; 用户名
0045D35A . 50 push eax
0045D35B . FF15 E0114600 call [<&MSVBVM50.__vbaLenBstr>] ; MSVBVM50.__vbaLenBstr
0045D361 . 8D4D E0 lea ecx, [ebp-20] ; 这里得到用户名位数
0045D364 . 8985 20FFFFFF mov [ebp-E0], eax
0045D36A . BE 01000000 mov esi, 1
0045D36F . FF15 5C134600 call [<&MSVBVM50.__vbaFreeStr>] ; MSVBVM50.__vbaFreeStr
0045D375 . 8D4D C8 lea ecx, [ebp-38]
0045D378 . FF15 58134600 call [<&MSVBVM50.__vbaFreeObj>] ; MSVBVM50.__vbaFreeObj
0045D37E > 3BB5 20FFFFFF cmp esi, [ebp-E0]
0045D384 . 0F8F A6000000 jg 0045D430
0045D38A . 53 push ebx
0045D38B . FF95 0CFFFFFF call [ebp-F4]
0045D391 . 8D4D C8 lea ecx, [ebp-38]
0045D394 . 50 push eax
0045D395 . 51 push ecx
0045D396 . FF15 30124600 call [<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0045D39C . 8B45 C8 mov eax, [ebp-38]
0045D39F . 8D55 A4 lea edx, [ebp-5C]
0045D3A2 . 8945 BC mov [ebp-44], eax
0045D3A5 . 52 push edx
0045D3A6 . 8D45 B4 lea eax, [ebp-4C]
0045D3A9 . 56 push esi
0045D3AA . 8D4D 94 lea ecx, [ebp-6C]
0045D3AD . 50 push eax
0045D3AE . 51 push ecx
0045D3AF . C745 AC 01000>mov dword ptr [ebp-54], 1
0045D3B6 . C745 A4 02000>mov dword ptr [ebp-5C], 2
0045D3BD . C745 C8 00000>mov dword ptr [ebp-38], 0
0045D3C4 . C745 B4 09000>mov dword ptr [ebp-4C], 9
0045D3CB . FF15 68124600 call [<&MSVBVM50.#632>] ; MSVBVM50.rtcMidCharVar
0045D3D1 . 8D55 94 lea edx, [ebp-6C]
0045D3D4 . 8D45 E0 lea eax, [ebp-20]
0045D3D7 . 52 push edx
0045D3D8 . 50 push eax
0045D3D9 . FF15 CC124600 call [<&MSVBVM50.__vbaStrVarVal>] ; MSVBVM50.__vbaStrVarVal
0045D3DF . 50 push eax
0045D3E0 . FF15 F8114600 call [<&MSVBVM50.#516>] ; MSVBVM50.rtcAnsiValueBstr
0045D3E6 . 0FBFC8 movsx ecx, ax ; 逐位取用户名 的字母的ASCII码。其实是用来求和。
0045D3E9 . 03CF add ecx, edi
0045D3EB . 0F80 850A0000 jo 0045DE76
0045D3F1 . 8BF9 mov edi, ecx
0045D3F3 . 8D4D E0 lea ecx, [ebp-20]
0045D3F6 . FF15 5C134600 call [<&MSVBVM50.__vbaFreeStr>] ; MSVBVM50.__vbaFreeStr
0045D3FC . 8D4D C8 lea ecx, [ebp-38]
0045D3FF . FF15 58134600 call [<&MSVBVM50.__vbaFreeObj>] ; MSVBVM50.__vbaFreeObj
0045D405 . 8D55 94 lea edx, [ebp-6C]
0045D408 . 8D45 A4 lea eax, [ebp-5C]
0045D40B . 52 push edx
0045D40C . 8D4D B4 lea ecx, [ebp-4C]
0045D40F . 50 push eax
0045D410 . 51 push ecx
0045D411 . 6A 03 push 3
0045D413 . FF15 EC114600 call [<&MSVBVM50.__vbaFreeVarList>] ; MSVBVM50.__vbaFreeVarList
0045D419 . B8 01000000 mov eax, 1
0045D41E . 83C4 10 add esp, 10
0045D421 . 03C6 add eax, esi
0045D423 . 0F80 4D0A0000 jo 0045DE76
0045D429 . 8BF0 mov esi, eax
0045D42B .^ E9 4EFFFFFF jmp 0045D37E
0045D430 > A1 10F04500 mov eax, [45F010]
0045D435 . 85C0 test eax, eax
0045D437 . 75 19 jnz short 0045D452
0045D439 . 8B1D E0124600 mov ebx, [<&MSVBVM50.__vbaNew2>] ; MSVBVM50.__vbaNew2
0045D43F . 68 10F04500 push 0045F010
0045D444 . 68 28634000 push 00406328
0045D449 . FFD3 call ebx ; <&MSVBVM50.__vbaNew2>
0045D44B . A1 10F04500 mov eax, [45F010]
0045D450 . EB 06 jmp short 0045D458
0045D452 > 8B1D E0124600 mov ebx, [<&MSVBVM50.__vbaNew2>] ; MSVBVM50.__vbaNew2
0045D458 > 85C0 test eax, eax
0045D45A . 8985 2CFFFFFF mov [ebp-D4], eax
0045D460 . 75 11 jnz short 0045D473
0045D462 . 68 10F04500 push 0045F010
0045D467 . 68 28634000 push 00406328
0045D46C . FFD3 call ebx
0045D46E . A1 10F04500 mov eax, [45F010]
0045D473 > 8B10 mov edx, [eax]
0045D475 . 50 push eax
0045D476 . FF92 00030000 call [edx+300]
0045D47C . 50 push eax
0045D47D . 8D45 C8 lea eax, [ebp-38]
0045D480 . 50 push eax
0045D481 . FF15 30124600 call [<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0045D487 . 8BF0 mov esi, eax
0045D489 . 8D55 E0 lea edx, [ebp-20]
0045D48C . 52 push edx
0045D48D . 56 push esi
0045D48E . 8B0E mov ecx, [esi]
0045D490 . FF91 A0000000 call [ecx+A0]
0045D496 . 85C0 test eax, eax
0045D498 . 7D 12 jge short 0045D4AC
0045D49A . 68 A0000000 push 0A0
0045D49F . 68 C08A4000 push 00408AC0
0045D4A4 . 56 push esi
0045D4A5 . 50 push eax
0045D4A6 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D4AC > A1 10F04500 mov eax, [45F010]
0045D4B1 . 85C0 test eax, eax
0045D4B3 . 75 11 jnz short 0045D4C6
0045D4B5 . 68 10F04500 push 0045F010
0045D4BA . 68 28634000 push 00406328
0045D4BF . FFD3 call ebx
0045D4C1 . A1 10F04500 mov eax, [45F010]
0045D4C6 > 8B08 mov ecx, [eax]
0045D4C8 . 50 push eax
0045D4C9 . FF91 00030000 call [ecx+300]
0045D4CF . 8D55 C4 lea edx, [ebp-3C]
0045D4D2 . 50 push eax
0045D4D3 . 52 push edx
0045D4D4 . FF15 30124600 call [<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0045D4DA . 8BF0 mov esi, eax
0045D4DC . 8D4D DC lea ecx, [ebp-24]
0045D4DF . 51 push ecx
0045D4E0 . 56 push esi
0045D4E1 . 8B06 mov eax, [esi]
0045D4E3 . FF90 A0000000 call [eax+A0]
0045D4E9 . 85C0 test eax, eax
0045D4EB . 7D 12 jge short 0045D4FF
0045D4ED . 68 A0000000 push 0A0
0045D4F2 . 68 C08A4000 push 00408AC0 ;下面是关键地方了。
0045D4F7 . 56 push esi
0045D4F8 . 50 push eax
0045D4F9 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D4FF > 8B95 2CFFFFFF mov edx, [ebp-D4]
0045D505 . 8B45 DC mov eax, [ebp-24] ;这里读取的是C盘下的文件Iotmrd里面的字符串
0045D508 . 50 push eax
0045D509 . 8B1A mov ebx, [edx]
0045D50B . FF15 60134600 call [<&MSVBVM50.#581>] ; MSVBVM50.rtcR8ValFromBstr
0045D511 . FF15 24134600 call [<&MSVBVM50.__vbaFpI4>] ; MSVBVM50.__vbaFpI4
0045D517 . 99 cdq
0045D518 . B9 E8030000 mov ecx, 3E8 ; 3E8固定值到ecx
0045D51D . F7F9 idiv ecx ; 用从c盘读取到的文件的字符串除以3E8
0045D51F . 8BF2 mov esi, edx ; 余数到esi
0045D521 . 8B55 E0 mov edx, [ebp-20] ; 读到的字符串
0045D524 . 52 push edx
0045D525 . FF15 60134600 call [<&MSVBVM50.#581>] ; MSVBVM50.rtcR8ValFromBstr
0045D52B . FF15 24134600 call [<&MSVBVM50.__vbaFpI4>] ; MSVBVM50.__vbaFpI4
0045D531 . 99 cdq
0045D532 . B9 E8030000 mov ecx, 3E8
0045D537 . F7F9 idiv ecx
0045D539 . 0FAFF2 imul esi, edx ; 余数平方放到esi
0045D53C . 0F80 34090000 jo 0045DE76
0045D542 . 03F7 add esi, edi ; 余数平方后记为A。A+用户名ASCII码累加值
0045D544 . 0F80 2C090000 jo 0045DE76
0045D54A . 83C6 02 add esi, 2 ; +2
0045D54D . 0F80 23090000 jo 0045DE76
0045D553 . 46 inc esi ; +1。这里得到的数转换成10进制就是真正注册码了。
0045D554 . 0F80 1C090000 jo 0045DE76
0045D55A . 56 push esi
0045D55B . 8BB5 2CFFFFFF mov esi, [ebp-D4]
0045D561 . 56 push esi
0045D562 . FF93 04070000 call [ebx+704]
0045D568 . 85C0 test eax, eax
0045D56A . 7D 12 jge short 0045D57E
0045D56C . 68 04070000 push 704
0045D571 . 68 487F4000 push 00407F48
0045D576 . 56 push esi
0045D577 . 50 push eax
0045D578 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D57E > 8D55 DC lea edx, [ebp-24]
0045D581 . 8D45 E0 lea eax, [ebp-20]
0045D584 . 52 push edx
0045D585 . 50 push eax
0045D586 . 6A 02 push 2
0045D588 . FF15 FC124600 call [<&MSVBVM50.__vbaFreeStrList>] ; MSVBVM50.__vbaFreeStrList
0045D58E . 83C4 0C add esp, 0C
0045D591 . 8D4D C4 lea ecx, [ebp-3C]
0045D594 . 8D55 C8 lea edx, [ebp-38]
0045D597 . 51 push ecx
0045D598 . 52 push edx
0045D599 . 6A 02 push 2
0045D59B . FF15 F4114600 call [<&MSVBVM50.__vbaFreeObjList>] ; MSVBVM50.__vbaFreeObjList
0045D5A1 . A1 10F04500 mov eax, [45F010]
0045D5A6 . 83C4 0C add esp, 0C
0045D5A9 . 85C0 test eax, eax
0045D5AB . 75 10 jnz short 0045D5BD ; ++++++++
0045D5AD . 68 10F04500 push 0045F010
0045D5B2 . 68 28634000 push 00406328
0045D5B7 . FF15 E0124600 call [<&MSVBVM50.__vbaNew2>] ; MSVBVM50.__vbaNew2
0045D5BD > 8B35 10F04500 mov esi, [45F010]
0045D5C3 . 8D8D 40FFFFFF lea ecx, [ebp-C0]
0045D5C9 . 51 push ecx
0045D5CA . 56 push esi
0045D5CB . 8B06 mov eax, [esi]
0045D5CD . FF90 00070000 call [eax+700]
0045D5D3 . 85C0 test eax, eax
0045D5D5 . 7D 12 jge short 0045D5E9
0045D5D7 . 68 00070000 push 700
0045D5DC . 68 487F4000 push 00407F48
0045D5E1 . 56 push esi
0045D5E2 . 50 push eax
0045D5E3 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D5E9 > 8B5D 08 mov ebx, [ebp+8]
0045D5EC . 8BBD 10FFFFFF mov edi, [ebp-F0]
0045D5F2 . 53 push ebx
0045D5F3 . FF97 08030000 call [edi+308]
0045D5F9 . 8D55 C8 lea edx, [ebp-38]
0045D5FC . 50 push eax
0045D5FD . 52 push edx
0045D5FE . FF15 30124600 call [<&MSVBVM50.__vbaObjSet>] ; MSVBVM50.__vbaObjSet
0045D604 . 8BF0 mov esi, eax
0045D606 . 8D4D E0 lea ecx, [ebp-20]
0045D609 . 51 push ecx
0045D60A . 56 push esi
0045D60B . 8B06 mov eax, [esi]
0045D60D . FF90 A0000000 call [eax+A0]
0045D613 . 85C0 test eax, eax
0045D615 . 7D 12 jge short 0045D629
0045D617 . 68 A0000000 push 0A0
0045D61C . 68 C08A4000 push 00408AC0
0045D621 . 56 push esi
0045D622 . 50 push eax
0045D623 . FF15 08124600 call [<&MSVBVM50.__vbaHresultCheckObj>; MSVBVM50.__vbaHresultCheckObj
0045D629 > 8B55 E0 mov edx, [ebp-20] ; 假码
0045D62C . 52 push edx
0045D62D . FF15 60134600 call [<&MSVBVM50.#581>] ; MSVBVM50.rtcR8ValFromBstr
0045D633 . FF15 5C124600 call [<&MSVBVM50.__vbaFpR8>] ; MSVBVM50.__vbaFpR8
0045D639 . DB85 40FFFFFF fild dword ptr [ebp-C0] ;这里将出现真正的注册码。
0045D63F . DD9D 04FFFFFF fstp qword ptr [ebp-FC]
0045D645 . DC9D 04FFFFFF fcomp qword ptr [ebp-FC] ;真假比较。浮点运算。
0045D64B . DFE0 fstsw ax
0045D64D . F6C4 40 test ah, 40
0045D650 . 74 07 je short 0045D659 2、我们通过使用Smartcheck跟踪,可以找到机器码的生成在地址0045E1F2,所以我们能得到机器码计算的地方在这里:
0045E1CE . 52 push edx ; 从C盘文件读取到的字符串
0045E1CF . FF15 60134600 call [<&MSVBVM50.#581>] ; MSVBVM50.rtcR8ValFromBstr
0045E1D5 . DC8D 48FFFFFF fmul qword ptr [ebp-B8] ; 自己乘以自己,就是平方
0045E1DB . 83EC 08 sub esp, 8
0045E1DE . DC25 D8124000 fsub qword ptr [4012D8] ; 减去-1000000。就是加上1000000。
0045E1E4 . DFE0 fstsw ax ; 得到最终的机器码。
0045E1E6 . A8 0D test al, 0D
0045E1E8 . 0F85 7B020000 jnz 0045E469
0045E1EE . DD1C24 fstp qword ptr [esp]
【易语言注册机源码】
------------------------------------------------------------------------
.版本 2
.子程序 _按钮1_被单击
.局部变量 jiqima, 长整数型
.局部变量 a, 长整数型
.局部变量 string, 文本型
.局部变量 b, 长整数型
.局部变量 name, 文本型
.局部变量 len, 整数型
.局部变量 i, 整数型
.局部变量 c, 整数型
.局部变量 sum, 长整数型
.局部变量 code, 文本型
jiqima = 到整数 (编辑框1.内容)
jiqima = jiqima - 1000000
a = 求平方根 (jiqima)
b = a % 1000
name = 编辑框2.内容
len = 取文本长度 (name)
.计次循环首 (len, i)
c = 取代码 (name, i)
sum = sum + c
.计次循环尾 ()
b = b × b
sum = sum + b
code = 到文本 (sum + 3)
编辑框3.内容 = 到文本 (code) 【破解总结】
------------------------------------------------------------------------
这个算法很简单。但是,由于是VB,所以感觉挺麻烦的。
注册算法是:
1、读取C盘下的这个文件“Iotmrd.sys”。我们用记事本打开可以看到类似下面的东西。
[MyApp]
pt1=5555 《-----这个值
pt2=S
Form1Top= 1065
Form1Left= 2625
Form1Height= 8520
Form1Width= 11520
主要需要的是“pt1=5555”这个“5555”。机器码就是根据这个数运算出来的。我们可以随意更改,然后机器码也变了。机器码的计算是取这个数平方后加1000000。
2、得到上面的“5555”后,转成16进制,然后除以3E8求得余数。余数平方,结果记为A(16进制)。
3、A+用户名各位Ascii码值的累加值,他们的和记为B(16进制)。
4、B(16进制)+2+1=C(16进制)。C的10进制就是最终的注册码。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)