【破解作者】 blue_devil_bomb[BCG]
【作者邮箱】 ninesunnine@sina.com
【使用工具】 peid OllyDbg1.09 regsnap
【破解平台】 Win9x/NT/2000/XP
【软件名称】 网络电视专家5.0
【下载地址】 Forget
【软件简介】 《网络电视专家》内置数百个电视台和电台地址,除了可以收看各省的卫星电视台外,还可以收看香港凤凰卫视、阳光卫视,韩国、日本、美国、法国等多个国家的电视电影频道,收视率在95%左右。软件中还设计了老幼皆宜的桌面游戏,让您轻松度过休闲时光。软件使用方法很简单,只要用鼠标点击想要收看或收听的节目频道名称,即可享受网络在线实时电视和广播了节目了。需要提醒您的是,你的系统必须已经安装了MediaPlayer 和ReaLoneplayer。全面支持Windows9x/ME/NT/2000/XP。
●未注册版与注册版的区别
未注册版 注册版
只能收看23个电视频道 可以收看236个电视频道和18个网上电影院
只能收听23个电台广播 可以收听120个电台广播
只能玩15个休闲游戏 可以玩89个休闲游戏和流行节目
软件弹出注册窗口 不会弹出窗口
不能免费升级 终生免费升级
一般的技术支持 更好的技术支持!更好的优质服务。
注意:你的软件菜单如果是灰的,那是因为您还没有注册,所以限制了不能使用。您一旦注册后,将会取消这些限制,您就可以收到所有的电视和广播节目了。
【软件大小】 331kb
【加壳方式】 ASPack 2.1 -> Alexey Solodovnikov
【破解声明】 不为破解而破解,只为学习而破解
--------------------------------------------------------------------------------
【破解内容】
有一天无意中发现该软件,软件介绍描述的神乎其神便决定当下一试,一试不爽,有诸多限制,均是要求注册。注册费用不高,可我是穷人,地道的穷人,又没人施舍,自己的事情自己做,决定自己动手解决它,以节约几包烟钱。终于在抽了几包烟后,把它的注册搞定!但还是有问题,具体分析请看!
该软件在没有注册时,每次启动就会弹出烦人的注册框,气煞老夫,我是什么,我是什么,哈哈,我到底是什么?靠,我是男人,我破了你的xxxxx。
用peid检测发现是ASPack 2.1 -> Alexey Solodovnikov用专门的脱壳软件Stripper.exe来脱之,脱后运行,一切OK,运行破解之!拿常用的断点设之,不能中断,只能在字符参考上下断了。此时OK了。还有该软件在输入的注册信息不正确时没有任何的提示信息,只有注册成功时才有提示,且将注册信息写入注册表\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Sysdisk位置。
我们一路跟踪到如下:
代码:
00497A10 . 55 PUSH EBP 00497A11 . 8BEC MOV EBP,ESP 00497A13 . 33C9 XOR ECX,ECX 00497A15 . 51 PUSH ECX 00497A16 . 51 PUSH ECX 00497A17 . 51 PUSH ECX 00497A18 . 51 PUSH ECX 00497A19 . 53 PUSH EBX 00497A1A . 56 PUSH ESI 00497A1B . 57 PUSH EDI 00497A1C . 8BD8 MOV EBX,EAX 00497A1E . 33C0 XOR EAX,EAX 00497A20 . 55 PUSH EBP 00497A21 . 68 247B4900 PUSH _nettv.00497B24 00497A26 . 64:FF30 PUSH DWORD PTR FS:[EAX] 00497A29 . 64:8920 MOV DWORD PTR FS:[EAX],ESP 00497A2C . 33D2 XOR EDX,EDX 00497A2E . 55 PUSH EBP 00497A2F . 68 E47A4900 PUSH _nettv.00497AE4 00497A34 . 64:FF32 PUSH DWORD PTR FS:[EDX] 00497A37 . 64:8922 MOV DWORD PTR FS:[EDX],ESP 00497A3A . 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] 00497A3D . 8B83 E0020000 MOV EAX,DWORD PTR DS:[EBX+2E0] 00497A43 . E8 D44BF9FF CALL _nettv.0042C61C ; 名字长度 00497A48 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 输入的名字 00497A4B . 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4] 00497A4E . E8 B90AF7FF CALL _nettv.0040850C 00497A53 . 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 ; 输入名字了吗? 00497A57 . 75 18 JNZ SHORT _nettv.00497A71 00497A59 . A1 50A84900 MOV EAX,DWORD PTR DS:[49A850] ; 00497A5E . 8B00 MOV EAX,DWORD PTR DS:[EAX] 00497A60 . E8 D3FDFAFF CALL _nettv.00447838 ; 输入名字空时在标题上显示未注册 00497A65 . A1 C0B94900 MOV EAX,DWORD PTR DS:[49B9C0] 00497A6A . E8 C1FDFAFF CALL _nettv.00447830 00497A6F . EB 69 JMP SHORT _nettv.00497ADA 00497A71 > 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 00497A74 . 8B83 E4020000 MOV EAX,DWORD PTR DS:[EBX+2E4] 00497A7A . E8 9D4BF9FF CALL _nettv.0042C61C ; 注册码长度 00497A7F . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 输入的注册码 00497A82 . 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] 00497A85 . E8 820AF7FF CALL _nettv.0040850C 00497A8A . 837D F4 00 CMP DWORD PTR SS:[EBP-C],0 ; 输入注册码了吗? 00497A8E 75 18 JNZ SHORT _nettv.00497AA8 00497A90 . A1 50A84900 MOV EAX,DWORD PTR DS:[49A850] 00497A95 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 00497A97 . E8 9CFDFAFF CALL _nettv.00447838 ; 没输注册码时,标题上显示未注册 00497A9C . A1 C0B94900 MOV EAX,DWORD PTR DS:[49B9C0] 00497AA1 . E8 8AFDFAFF CALL _nettv.00447830 00497AA6 . EB 32 JMP SHORT _nettv.00497ADA 00497AA8 > 8BC3 MOV EAX,EBX 00497AAA . E8 25020000 CALL _nettv.00497CD4 ; 名字与注册码运算,注册算法核心,见下 00497AAF . 84C0 TEST AL,AL ; 判断注册是否成功AL非0成功,0失败 00497AB1 . 74 09 JE SHORT _nettv.00497ABC 00497AB3 . 8BC3 MOV EAX,EBX 00497AB5 . E8 7A000000 CALL _nettv.00497B34 ; 注册成功时将注册信息写入注册表 00497ABA . EB 1E JMP SHORT _nettv.00497ADA 00497ABC > B8 F4010000 MOV EAX,1F4 00497AC1 > 48 DEC EAX 00497AC2 .^75 FD JNZ SHORT _nettv.00497AC1 00497AC4 . A1 50A84900 MOV EAX,DWORD PTR DS:[49A850] 00497AC9 . 8B00 MOV EAX,DWORD PTR DS:[EAX] 00497ACB . E8 68FDFAFF CALL _nettv.00447838 00497AD0 . A1 C0B94900 MOV EAX,DWORD PTR DS:[49B9C0] 00497AD5 . E8 56FDFAFF CALL _nettv.00447830 00497ADA > 33C0 XOR EAX,EAX 00497ADC . 5A POP EDX 00497ADD . 59 POP ECX 00497ADE . 59 POP ECX 00497ADF . 64:8910 MOV DWORD PTR FS:[EAX],EDX 00497AE2 . EB 12 JMP SHORT _nettv.00497AF6 00497AE4 .^E9 D7B7F6FF JMP _nettv.004032C0 00497AE9 . B8 F4010000 MOV EAX,1F4 00497AEE > 48 DEC EAX 00497AEF .^75 FD JNZ SHORT _nettv.00497AEE 00497AF1 . E8 26BBF6FF CALL _nettv.0040361C 00497AF6 > 33C0 XOR EAX,EAX 00497AF8 . 5A POP EDX 00497AF9 . 59 POP ECX 00497AFA . 59 POP ECX 00497AFB . 64:8910 MOV DWORD PTR FS:[EAX],EDX 00497AFE . 68 2B7B4900 PUSH _nettv.00497B2B 00497B03 > 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] 00497B06 . E8 D1BFF6FF CALL _nettv.00403ADC 00497B0B . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] 00497B0E . E8 C9BFF6FF CALL _nettv.00403ADC 00497B13 . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 00497B16 . E8 C1BFF6FF CALL _nettv.00403ADC 00497B1B . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] 00497B1E . E8 B9BFF6FF CALL _nettv.00403ADC 00497B23 . C3 RETN 注册算法核心如下: 00497CD4 /$ 55 PUSH EBP 00497CD5 |. 8BEC MOV EBP,ESP 00497CD7 |. 83C4 E8 ADD ESP,-18 00497CDA |. 53 PUSH EBX 00497CDB |. 56 PUSH ESI 00497CDC |. 33D2 XOR EDX,EDX 00497CDE |. 8955 E8 MOV DWORD PTR SS:[EBP-18],EDX 00497CE1 |. 8955 EC MOV DWORD PTR SS:[EBP-14],EDX 00497CE4 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX 00497CE7 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00497CEA |. 33C0 XOR EAX,EAX 00497CEC |. 55 PUSH EBP 00497CED |. 68 D37D4900 PUSH _nettv.00497DD3 00497CF2 |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00497CF5 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 00497CF8 |. 33DB XOR EBX,EBX ;EBX清零,做为结果存放用的 00497CFA |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C] 00497CFD |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00497D00 |. 8B80 E0020000 MOV EAX,DWORD PTR DS:[EAX+2E0] 00497D06 |. E8 1149F9FF CALL _nettv.0042C61C ;返回EAX为字串长度 00497D0B |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ;将名字赋给EAX 00497D0E |. E8 49C0F6FF CALL _nettv.00403D5C ;获取字串长度 00497D13 |. 8BF0 MOV ESI,EAX 00497D15 |. 85F6 TEST ESI,ESI ;判断长度 00497D17 |. 7E 38 JLE SHORT _nettv.00497D51 00497D19 |. C745 F0 010000>MOV DWORD PTR SS:[EBP-10],1 00497D20 |> 8D45 EC /LEA EAX,DWORD PTR SS:[EBP-14] ;下面依次取名字字串字符运算 00497D23 |. 50 |PUSH EAX 00497D24 |. B9 01000000 |MOV ECX,1 ;每次取1个 00497D29 |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10] ;第i个 00497D2C |. 8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C] ;将名字赋给EAX 00497D2F |. E8 30C2F6FF |CALL _nettv.00403F64 ;取名字字串第i个字符,每次取1个 00497D34 |. 8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14] ;名字字串的第i个字符存放的内存 00497D37 |. E8 E4C1F6FF |CALL _nettv.00403F20 ;判断第i个字符 00497D3C |. 8A00 |MOV AL,BYTE PTR DS:[EAX] ;从内存中取出第i个值赋给AL 00497D3E |. 25 FF000000 |AND EAX,0FF ;EAX&=0xff;将AL值赋给EAX 00497D43 |. 03D8 |ADD EBX,EAX ;用字符的值累加更新EBX的值 00497D45 |. 81F3 05FA0B00 |XOR EBX,0BFA05 ;EBX^=0xBFA05; 00497D4B |. FF45 F0 |INC DWORD PTR SS:[EBP-10] ;i++; 00497D4E |. 4E |DEC ESI ;判断循环是否结束 00497D4F |.^75 CF \JNZ SHORT _nettv.00497D20 00497D51 |> A1 CCB94900 MOV EAX,DWORD PTR DS:[49B9CC] ;一个固定的值为0x2977537 00497D56 |. 8BD0 MOV EDX,EAX 00497D58 |. C1E0 04 SHL EAX,4 ;2977537左移四位 00497D5B |. 03C2 ADD EAX,EDX ;EAX=2977537+(2977537<<4) 00497D5D |. 03D8 ADD EBX,EAX ;EBX=字串运算结果+EAX 00497D5F |. 81C3 D4A31300 ADD EBX,13A3D4 ;EBX+=0x13a3d4 00497D65 |. 81F3 8DED5900 XOR EBX,59ED8D ;EBX^=0x59ED8D 00497D6B |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18] 00497D6E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00497D71 |. 8B80 E4020000 MOV EAX,DWORD PTR DS:[EAX+2E4] 00497D77 |. E8 A048F9FF CALL _nettv.0042C61C ;返回EAX为注册码长度 00497D7C |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] ;注册码赋给EAX 00497D7F |. E8 1C09F7FF CALL _nettv.004086A0 ;注册码10进制数转化成16进制数赋给EAX 00497D84 |. 8BF3 MOV ESI,EBX 00497D86 |. 81F6 2473C400 XOR ESI,0C47324 ;ESI=名字运算结果^0xC47324; 00497D8C |. 3BC6 CMP EAX,ESI ;注册码与名字运算结果比较 00497D8E |. 75 19 JNZ SHORT _nettv.00497DA9 ;相等注册成功; 00497D90 |. C645 FB 01 MOV BYTE PTR SS:[EBP-5],1 00497D94 |. B8 C4B94900 MOV EAX,_nettv.0049B9C4 00497D99 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] 00497D9C |. E8 8FBDF6FF CALL _nettv.00403B30 00497DA1 |. 8935 C8B94900 MOV DWORD PTR DS:[49B9C8],ESI 00497DA7 |. EB 04 JMP SHORT _nettv.00497DAD 00497DA9 |> C645 FB 00 MOV BYTE PTR SS:[EBP-5],0 00497DAD |> 33C0 XOR EAX,EAX 00497DAF |. 5A POP EDX 00497DB0 |. 59 POP ECX 00497DB1 |. 59 POP ECX 00497DB2 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX 00497DB5 |. 68 DA7D4900 PUSH _nettv.00497DDA 00497DBA |> 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] 00497DBD |. E8 1ABDF6FF CALL _nettv.00403ADC 00497DC2 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] 00497DC5 |. E8 12BDF6FF CALL _nettv.00403ADC 00497DCA |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] 00497DCD |. E8 0ABDF6FF CALL _nettv.00403ADC 00497DD2 \. C3 RETN 00497DD3 .^E9 9CB7F6FF JMP _nettv.00403574 00497DD8 .^EB E0 JMP SHORT _nettv.00497DBA 00497DDA . 8A45 FB MOV AL,BYTE PTR SS:[EBP-5] 00497DDD . 5E POP ESI 00497DDE . 5B POP EBX 00497DDF . 8BE5 MOV ESP,EBP 00497DE1 . 5D POP EBP 00497DE2 . C3 RETN 下面函数为写入注册表部分 00497B34 /$ 55 PUSH EBP 00497B35 |. 8BEC MOV EBP,ESP 00497B37 |. 33C9 XOR ECX,ECX 00497B39 |. 51 PUSH ECX 00497B3A |. 51 PUSH ECX 00497B3B |. 51 PUSH ECX 00497B3C |. 51 PUSH ECX 00497B3D |. 53 PUSH EBX 00497B3E |. 56 PUSH ESI 00497B3F |. 57 PUSH EDI 00497B40 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00497B43 |. 33C0 XOR EAX,EAX 00497B45 |. 55 PUSH EBP 00497B46 |. 68 497C4900 PUSH _nettv.00497C49 00497B4B |. 64:FF30 PUSH DWORD PTR FS:[EAX] 00497B4E |. 64:8920 MOV DWORD PTR FS:[EAX],ESP 00497B51 |. B2 01 MOV DL,1 00497B53 |. A1 B8BB4400 MOV EAX,DWORD PTR DS:[44BBB8] 00497B58 |. E8 5B41FBFF CALL _nettv.0044BCB8 00497B5D |. 8BF8 MOV EDI,EAX 00497B5F |. BA 01000080 MOV EDX,80000001 00497B64 |. 8BC7 MOV EAX,EDI 00497B66 |. E8 ED41FBFF CALL _nettv.0044BD58 00497B6B |. B1 01 MOV CL,1 00497B6D |. BA 607C4900 MOV EDX,_nettv.00497C60 ; ASCII "\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Sysdisk" 写入注册表位置 00497B72 |. 8BC7 MOV EAX,EDI 00497B74 |. E8 4342FBFF CALL _nettv.0044BDBC 00497B79 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 00497B7C |. E8 5BBFF6FF CALL _nettv.00403ADC 00497B81 |. A1 C4B94900 MOV EAX,DWORD PTR DS:[49B9C4] ;注册输入的名字赋给EAX 00497B86 |. E8 D1C1F6FF CALL _nettv.00403D5C ;取注册名字的长度 00497B8B |. 8BD8 MOV EBX,EAX 00497B8D |. 85DB TEST EBX,EBX ;判断注册名字的长度是否大于0 00497B8F |. 7E 40 JLE SHORT _nettv.00497BD1 00497B91 |. BE 01000000 MOV ESI,1 00497B96 |> 8D45 F0 /LEA EAX,DWORD PTR SS:[EBP-10] ;注册的名字在写入注册表前进行运算。 00497B99 |. 50 |PUSH EAX 00497B9A |. B9 01000000 |MOV ECX,1 00497B9F |. 8BD6 |MOV EDX,ESI 00497BA1 |. A1 C4B94900 |MOV EAX,DWORD PTR DS:[49B9C4] ;注册的名字赋给EAX 00497BA6 |. E8 B9C3F6FF |CALL _nettv.00403F64 00497BAB |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10] ;EAX内存位置存放名字第EDX个字符 00497BAE |. E8 6DC3F6FF |CALL _nettv.00403F20 00497BB3 |. 33D2 |XOR EDX,EDX 00497BB5 |. 8A10 |MOV DL,BYTE PTR DS:[EAX] ;将第EDX个字符赋给DL 00497BB7 |. 83C2 05 |ADD EDX,5 ;EDX+=5; 00497BBA |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C] 00497BBD |. E8 C2C0F6FF |CALL _nettv.00403C84 00497BC2 |. 8B55 F4 |MOV EDX,DWORD PTR SS:[EBP-C] 00497BC5 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8] 00497BC8 |. E8 97C1F6FF |CALL _nettv.00403D64 00497BCD |. 46 |INC ESI 00497BCE |. 4B |DEC EBX 00497BCF |.^75 C5 \JNZ SHORT _nettv.00497B96 00497BD1 |> B8 C4B94900 MOV EAX,_nettv.0049B9C4 00497BD6 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ;名字变换后的字串赋给EDX 00497BD9 |. E8 52BFF6FF CALL _nettv.00403B30 00497BDE |. 8B0D C4B94900 MOV ECX,DWORD PTR DS:[49B9C4] 00497BE4 |. BA A47C4900 MOV EDX,_nettv.00497CA4 ; ASCII "FN ame" 00497BE9 |. 8BC7 MOV EAX,EDI 00497BEB |. E8 6843FBFF CALL _nettv.0044BF58 00497BF0 |. 8B0D C8B94900 MOV ECX,DWORD PTR DS:[49B9C8] 00497BF6 |. 81F1 0AB30000 XOR ECX,0B30A ;注册码^0xB30A为写入的注册码 00497BFC |. BA B47C4900 MOV EDX,_nettv.00497CB4 ; ASCII "FP ass" 00497C01 |. 8BC7 MOV EAX,EDI 00497C03 |. E8 F443FBFF CALL _nettv.0044BFFC 00497C08 |. 8BC7 MOV EAX,EDI 00497C0A |. E8 05B2F6FF CALL _nettv.00402E14 ;写入注册表 00497C0F |. A1 50A84900 MOV EAX,DWORD PTR DS:[49A850] 00497C14 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] 00497C16 |. 8B80 D0020000 MOV EAX,DWORD PTR DS:[EAX+2D0] 00497C1C |. BA C47C4900 MOV EDX,_nettv.00497CC4 00497C21 |. E8 A266FDFF CALL _nettv.0046E2C8 00497C26 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00497C29 |. E8 B6010000 CALL _nettv.00497DE4 00497C2E |. 33C0 XOR EAX,EAX 00497C30 |. 5A POP EDX 00497C31 |. 59 POP ECX 00497C32 |. 59 POP ECX 00497C33 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX 00497C36 |. 68 507C4900 PUSH _nettv.00497C50 00497C3B |> 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] 00497C3E |. BA 03000000 MOV EDX,3 00497C43 |. E8 B8BEF6FF CALL _nettv.00403B00 00497C48 \. C3 RETN 00497C49 .^E9 26B9F6FF JMP _nettv.00403574 00497C4E .^EB EB JMP SHORT _nettv.00497C3B
该软件的注册部分至此已较明晰,该软件第次启动都会读取注册表的注册信息进行判断,以决定是否以注册版本运行该软件,不过我还有一个疑问还没有解决,有兴趣的网友可以帮忙解决一下,就是如上注册成功后,该软件显示为注册版本,可是还是没有将菜单中的灰极按钮变亮,当然,我们可以很轻松将菜单有灰变亮,但这也给我的破解留下了遗憾!
菜单有灰变亮,可以使用的过程如下:
代码:
00412672 BA BC264100 MOV EDX,_nettv.004126BC ; ASCII "False" 修改此处即可将菜单由灰变亮 00412677 |. E8 B414FFFF CALL _nettv.00403B30 0041267C |. EB 2F JMP SHORT _nettv.004126AD 0041267E |> 8BC6 MOV EAX,ESI ; Case 9 of switch 00412601 00412680 |. BA CC264100 MOV EDX,_nettv.004126CC ; ASCII "True" 00412685 |. E8 A614FFFF CALL _nettv.00403B30 0041268A |. EB 21 JMP SHORT _nettv.004126AD 0041268C |> 8BC6 MOV EAX,ESI ; Case D of switch 00412601 0041268E |. BA DC264100 MOV EDX,_nettv.004126DC ; ASCII "nil" 00412693 |. E8 9814FFFF CALL _nettv.00403B30 00412698 |. EB 13 JMP SHORT _nettv.004126AD 0041269A |> 8BC6 MOV EAX,ESI ; Case 0 of switch 00412601 0041269C |. BA E8264100 MOV EDX,_nettv.004126E8 ; ASCII "Null" 004126A1 |. E8 8A14FFFF CALL _nettv.00403B30 004126A6 |. EB 05 JMP SHORT _nettv.004126AD 004126A8 |> E8 13F2FFFF CALL _nettv.004118C0 ; Default case of switch 00412601 004126AD |> 5A POP EDX 004126AE |. 5E POP ESI 004126AF |. 5B POP EBX 004126B0 \. C3 RETN
注:将412672处的MOV EDX,_nettv.004126BC 改为MOV EDX,_nettv.004126CC即可,此时软件运行正常。
上面我们将该软件的注册过程及算法描述的很清楚,
具体算法如下:
1、依次取名字的每一个字符,每一字符的ASCII值设为 Vlaue[i],结果存贮为JG=0,名字长度Len,注册码为ZCM;
2、JG+=Vlaue[i];JG^=0xbfa05;i=[0,Len-1];
3、JG+=0x2977537+(0x2977537<<4);
4、JG+=0x13a3d4;
5、JG^=0x59ed8d;
6、JG^=0xC47324;
7、ZCM=JG;
下面给出该算法的C源代码,程序在VC环境下调试通过,且在多台机器上注册成功!
代码:
代码:
void CNettv50Dlg::OnButton1() { // TODO: Add your control notification handler code here m_Ctrledit1.GetWindowText(m_Vedit1); int i; unsigned long eax,ebx=0; for(i=0;i<m_Vedit1.GetLength();i++) { eax=m_Vedit1.GetAt(i); eax&=0xff; ebx+=eax; ebx^=0xbfa05; } unsigned long edx; //[49b9cc]=2977537 eax=edx=0x2977537; eax<<=4; eax+=edx; ebx+=eax; ebx+=0x13a3d4; ebx^=0x59ed8d; ebx^=0xC47324; m_Vedit2.Format("%lu",ebx); m_Ctrledit2.SetWindowText(m_Vedit2); } --------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整,并表明BCG字样,谢谢!
--------------------------------------------------------------------------------
【总结】注册成功后,该软件显示为注册版本,可是还是没有将菜单中的灰极按钮变亮,有兴趣的网友可以帮忙解决一下。
由于本人水平有限,不足之处还请批评指正!
--------------------------------------------------------------------------------