首页
社区
课程
招聘
网络电视专家5.0算法分析
2004-5-29 13:20 7636

网络电视专家5.0算法分析

2004-5-29 13:20
7636
【破解作者】 blue_devil_bomb[BCG]
【作者邮箱】 [email]ninesunnine@sina.com[/email]
【使用工具】 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字样,谢谢!
--------------------------------------------------------------------------------
【总结】注册成功后,该软件显示为注册版本,可是还是没有将菜单中的灰极按钮变亮,有兴趣的网友可以帮忙解决一下。
    由于本人水平有限,不足之处还请批评指正!
--------------------------------------------------------------------------------

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞10
打赏
分享
最新回复 (13)
雪    币: 209
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
睡猫 2004-5-29 13:40
2
0
像你学习~~能加我QQ吗?真的想问你好多问题~  34634908 我的QQ
雪    币: 295
活跃值: (461)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
blue_devil_bomb 5 2004-5-29 13:43
3
0
共同学习
雪    币: 295
活跃值: (461)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
blue_devil_bomb 5 2004-5-29 13:58
4
0
大家积极想办法帮助我!
雪    币: 317
活跃值: (866)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
aqtata 2 2004-5-30 09:27
5
0
有些软件也是注册成功,但实际还是未注册

应该还有什么“陷阱”吧。。。。。
雪    币: 182
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Aaah 2004-5-30 09:29
6
0
兄弟基础真好
雪    币: 239
活跃值: (220)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
mejy 3 2004-5-30 09:34
7
0
好长时间被搞破解拉!特来灌上一贴:o
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
daheyan 2004-5-30 19:44
8
0
<
雪    币: 235
活跃值: (160)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
XF[BCG] 1 2004-5-31 09:44
9
0
这个注册和没有注册只是少一个提示嘛,好象没有什么改变啊。
雪    币: 221
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
松鼠鱼 2004-5-31 20:32
10
0
5.5也出来了,好像不一样
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolgg 2004-5-31 21:53
11
0
向你学习!
雪    币: 295
活跃值: (461)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
blue_devil_bomb 5 2004-6-1 13:26
12
0
侃侃5.5
雪    币: 220
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
highbrow 1 2004-6-1 15:12
13
0
欢迎,顶一下:D
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冷静 2004-6-1 21:39
14
0
支持一下,先。:)
游客
登录 | 注册 方可回帖
返回