pj2020 发表于 2017-3-1 21:44

Alive Video Converter v5.2.0.2 算法分析+注册机[新手思路]

本帖最后由 pj2020 于 2017-3-1 21:44 编辑

【文章标题】:Alive Video Converter v5.2.0.2 算法分析+注册机[新手思路]
【文章作者】:pj2020
【软件名称】:Alive Video Converter v5.2.0.2
【软件大小】:6.84M
【保护方式】:注册码
【下载地址】:见附件
【加壳方式】:无壳
【编写工具】:Borland Delphi 6.0 - 7.0
【逆向工具】:PEID、OD
【操作平台】:WinXP3
【作者声明】:只是感兴趣,没有其他目的
【软件简介】Alive Video Converter是一款专业的视频转换工具,支持的格式多,例如AVI、MPEG、WMV、ASF、MOV、QuickTime等。它可以把上述格式的视频转换成AVI(包括DivX、 XviD、 MS-MPEG4等)、MPEG(MPEG-1、MPEG-2、DVD、VCD、SVCD)、WMV、RM等。Alive Video Converter 也是一款音频抽取工具,可以从多中格式的视频中抽出音频,并且保存成MP3格式。它支持批量文件转换可以一次点击转换多个文件。
【思路方法】

======================上篇:内存注册机======================
一、查壳:Borland Delphi 6.0 - 7.0 无壳

二、试注册,有错误提示“Invalid Registration Code!”:


三、OD载入程序,F9运行,查找字符串“Invalid Registration Code!”关键字(只有一处),在这一行双击或回车进入,在段首F2下断:

重新载入程序后,输入假注册名和假码断下,然后F8单步跟踪:
Reg Name:abcde
Registration Code:123456789

可以看到,在F8到0047CA7A,出现真假码对照:
0047CA7A|.E8 35BDF8FF   call VideoCon.004087B4                   ;//寄存器出现真假码对比



四、做内存注册机:

中断地址:0047CA7A
中断次数:1
第一字节:E8
指令长度:5


Reg Name:abcde
Registration Code:1004A-E643F-24417

经验证,注册成功!

======================下篇:算法注册机(重头戏)======================
前面的步骤跟上面差不多,在0047CA6F|.E8 90010000   call VideoCon.0047CC04                   ;F7进入:

0047CC04/$55            push ebp                        来到这里:
0047CC05|.8BEC          mov ebp,esp
0047CC07|.6A 00         push 0x0
0047CC09|.6A 00         push 0x0
0047CC0B|.6A 00         push 0x0
0047CC0D|.6A 00         push 0x0
0047CC0F|.6A 00         push 0x0
0047CC11|.6A 00         push 0x0
0047CC13|.6A 00         push 0x0
0047CC15|.6A 00         push 0x0
0047CC17|.53            push ebx
0047CC18|.56            push esi
0047CC19|.57            push edi
0047CC1A|.8BD9          mov ebx,ecx
0047CC1C|.8955 FC       mov ,edx
0047CC1F|.8BF8          mov edi,eax
0047CC21|.8B45 FC       mov eax,                        ;注册名给EAX
0047CC24|.E8 F37DF8FF   call VideoCon.00404A1C
0047CC29|.33C0          xor eax,eax
0047CC2B|.55            push ebp
0047CC2C|.68 5FCD4700   push VideoCon.0047CD5F
0047CC31|.64:FF30       push dword ptr fs:
0047CC34|.64:8920       mov dword ptr fs:,esp
0047CC37|.8D45 FC       lea eax,
0047CC3A|.BA 78CD4700   mov edx,VideoCon.0047CD78                ;读取固定字串:Fk2yB$P30jH
0047CC3F|.E8 F87BF8FF   call VideoCon.0040483C
0047CC44|.8B45 FC       mov eax,                        ; 注册名与固定字串“Fk2yB$P30jH”相连,为"abcdeFk2yB$P30jH"
0047CC47|.E8 E87BF8FF   call VideoCon.00404834
0047CC4C|.8BF0          mov esi,eax                              ;相连后注册名的长度,这里为16位
0047CC4E|.D1FE          sar esi,1                              ;算术右移1位,即长度16/2=8,结果给esi=0x8
0047CC50|.79 03         jns short VideoCon.0047CC55
0047CC52|.83D6 00       adc esi,0x0
0047CC55|>8D45 F0       lea eax,
0047CC58|.50            push eax
0047CC59|.8BCE          mov ecx,esi
0047CC5B|.BA 01000000   mov edx,0x1
0047CC60|.8B45 FC       mov eax,                        ;注册名与字串“Fk2yB$P30jH”相连后的"abcdeFk2yB$P30jH"给EAX
0047CC63|.E8 247EF8FF   call VideoCon.00404A8C
0047CC68|.8B45 F0       mov eax,                        ;取新字串前8位,(ASCII "abcdeFk2")
0047CC6B|.50            push eax
0047CC6C|.8D45 EC       lea eax,
0047CC6F|.50            push eax
0047CC70|.8B45 FC       mov eax,
0047CC73|.E8 BC7BF8FF   call VideoCon.00404834
0047CC78|.8BC8          mov ecx,eax                              ;eax=00000010,新名长度
0047CC7A|.8D56 01       lea edx,dword ptr ds:         ; 地址=00000009
0047CC7D|.8B45 FC       mov eax,
0047CC80|.E8 077EF8FF   call VideoCon.00404A8C                   ;取新字串剩下的字符,即第9位到最后一位:(ASCII "yB$P30jH")
0047CC85|.8B55 EC       mov edx,
0047CC88|.8D45 FC       lea eax,
0047CC8B|.59            pop ecx                                  ;0012EBCC
0047CC8C|.E8 EF7BF8FF   call VideoCon.00404880
0047CC91|.8D45 F8       lea eax,
0047CC94|.50            push eax
0047CC95|.B9 0A000000   mov ecx,0xA
0047CC9A|.BA 01000000   mov edx,0x1
0047CC9F|.8B45 FC       mov eax,                        ; 后取字串+前取字串,组成新字串: (ASCII "yB$P30jHabcdeFk2")
0047CCA2|.E8 E57DF8FF   call VideoCon.00404A8C
0047CCA7|.8D45 F4       lea eax,
0047CCAA|.50            push eax
0047CCAB|.8B45 FC       mov eax,
0047CCAE|.E8 817BF8FF   call VideoCon.00404834
0047CCB3|.8BC8          mov ecx,eax
0047CCB5|.BA 06000000   mov edx,0x6                                  ;edx=0x6
0047CCBA|.8B45 FC       mov eax,
0047CCBD|.E8 CA7DF8FF   call VideoCon.00404A8C                   ;取第6位到最后一位作为第二段字串, (ASCII "0jHabcdeFk2")
0047CCC2|.837D F4 00    cmp ,0x0
0047CCC6|.75 10         jnz short VideoCon.0047CCD8
0047CCC8|.8D45 F4       lea eax,
0047CCCB|.BA 78CD4700   mov edx,VideoCon.0047CD78                ;Fk2yB$P30jH
0047CCD0|.8B4D F8       mov ecx,
0047CCD3|.E8 A87BF8FF   call VideoCon.00404880
0047CCD8|>53            push ebx
0047CCD9|.8B4D F4       mov ecx,                        ;第二段字串(第6到最后一位)给ECX,(ASCII "0jHabcdeFk2")
0047CCDC|.8B55 F8       mov edx,                        ;第一段字串(第1-10位)给EAX,(ASCII "yB$P30jHab")
0047CCDF|.8BC7          mov eax,edi
0047CCE1|.E8 1EF7FFFF   call VideoCon.0047C404                   ; //F7进入算法注册CALL
0047C404/$55            push ebp                                 ; 来到这里
。。。。。。
0047C459|.BB 00010000   mov ebx,0x100                            ;ebx=0x100,下面要用到
0047C45E|.8D45 F0       lea eax,
0047C461|.50            push eax
0047C462|.C745 E4 00010>mov ,0x100
0047C469|.C645 E8 00    mov byte ptr ss:,0x0
0047C46D|.8D55 E4       lea edx,
0047C470|.33C9          xor ecx,ecx                              ;ECX清零
0047C472|.B8 4CC54700   mov eax,VideoCon.0047C54C                ;%1.2x
0047C477|.E8 40D5F8FF   call VideoCon.004099BC
0047C47C|.8B45 FC       mov eax,
0047C47F|.E8 B083F8FF   call VideoCon.00404834
0047C484|.8BF8          mov edi,eax
0047C486|.85FF          test edi,edi
0047C488|.7E 60         jle short VideoCon.0047C4EA
0047C48A|.C745 EC 01000>mov ,0x1
0047C491|>8B45 FC       /mov eax,                     ;取第一段字串: "yB$P30jHab"
0047C494|.8B55 EC       |mov edx,                     ;从第一位开始
0047C497|.0FB64410 FF   |movzx eax,byte ptr ds:   ; 依次取第一段字串各字符的ASC码
0047C49C|.03C3          |add eax,ebx                           ;eax=eax+ebx=字串ASC码+0x100
0047C49E|.B9 FF000000   |mov ecx,0xFF                            ; ecx=0xFF
0047C4A3|.99            |cdq                                     ;将双字数据扩展为四字
0047C4A4|.F7F9          |idiv ecx                              ; EAX/ECX,商放EAX,余数入EDX
0047C4A6|.8BDA          |mov ebx,edx                           ;余数edx给ebx
0047C4A8|.3B75 F4       |cmp esi,
0047C4AB|.7D 03         |jge short VideoCon.0047C4B0
0047C4AD|.46            |inc esi
0047C4AE|.EB 05         |jmp short VideoCon.0047C4B5
0047C4B0|>BE 01000000   |mov esi,0x1
0047C4B5|>8B45 F8       |mov eax,                     ;取第二段字串:"0jHabcdeFk2"
0047C4B8|.0FB64430 FF   |movzx eax,byte ptr ds:   ;依次取第二段字串各字符的ASC码,给EAX
0047C4BD|.33D8          |xor ebx,eax                           ;ebx=ebx(余数) xor eax,即余数与第二段字串ASC码进行异或
0047C4BF|.8D45 E0       |lea eax,
0047C4C2|.50            |push eax
0047C4C3|.895D E4       |mov ,ebx
0047C4C6|.C645 E8 00    |mov byte ptr ss:,0x0
0047C4CA|.8D55 E4       |lea edx,
0047C4CD|.33C9          |xor ecx,ecx
0047C4CF|.B8 4CC54700   |mov eax,VideoCon.0047C54C               ;%1.2x
0047C4D4|.E8 E3D4F8FF   |call VideoCon.004099BC
0047C4D9|.8B55 E0       |mov edx,
0047C4DC|.8D45 F0       |lea eax,
0047C4DF|.E8 5883F8FF   |call VideoCon.0040483C
0047C4E4|.FF45 EC       |inc
0047C4E7|.4F            |dec edi
0047C4E8|.^ 75 A7         \jnz short VideoCon.0047C491   ;完了吗?没有取完继续
0047C4EA|>8B45 08       mov eax,
0047C4ED|.8B55 F0       mov edx,                        ;把所有异或结果连接,并在前面加上100
0047C4F0|.E8 DB80F8FF   call VideoCon.004045D0
0047C4F5|.33C0          xor eax,eax
0047C4F7|.5A            pop edx                                  ;VideoCon.0047C527
0047C4F8|.59            pop ecx                                  ;VideoCon.0047C527
0047C4F9|.59            pop ecx                                  ;VideoCon.0047C527
0047C4FA|.64:8910       mov dword ptr fs:,edx
0047C4FD|.68 27C54700   push VideoCon.0047C527
0047C502|>8D45 E0       lea eax,
0047C505|.E8 7280F8FF   call VideoCon.0040457C
0047C50A|.8D45 F0       lea eax,
0047C50D|.E8 6A80F8FF   call VideoCon.0040457C
0047C512|.8D45 F8       lea eax,
0047C515|.BA 02000000   mov edx,0x2
0047C51A|.E8 8180F8FF   call VideoCon.004045A0
0047C51F\.C3            retn

0047CCE6|.8D45 E8       lea eax,
0047CCE9|.50            push eax
0047CCEA|.8B03          mov eax,dword ptr ds:               ;取最后运算结果,"1004AE643F24417E54BEA26"
0047CCEC|.B9 05000000   mov ecx,0x5                              ;取5位
0047CCF1|.BA 01000000   mov edx,0x1                              ;从第1位开始
0047CCF6|.E8 917DF8FF   call VideoCon.00404A8C                   ;即取第1-5位, "1004A"
0047CCFB|.FF75 E8       push
0047CCFE|.68 8CCD4700   push VideoCon.0047CD8C                   ;用“-”连接
0047CD03|.8D45 E4       lea eax,
0047CD06|.50            push eax
0047CD07|.8B03          mov eax,dword ptr ds:               ;取最后运算结果,"1004AE643F24417E54BEA26"
0047CD09|.B9 05000000   mov ecx,0x5                              ;取5位
0047CD0E|.BA 06000000   mov edx,0x6                              ;从第6位开始取
0047CD13|.E8 747DF8FF   call VideoCon.00404A8C                   ; 即取第6-10位, "E643F"
0047CD18|.FF75 E4       push
0047CD1B|.68 8CCD4700   push VideoCon.0047CD8C                   ;用“-”连接
0047CD20|.8D45 E0       lea eax,
0047CD23|.50            push eax
0047CD24|.8B03          mov eax,dword ptr ds:               ;取最后运算结果,"1004AE643F24417E54BEA26"
0047CD26|.B9 05000000   mov ecx,0x5                              ;取5位
0047CD2B|.BA 0B000000   mov edx,0xB                              ;从第11位开始取
0047CD30|.E8 577DF8FF   call VideoCon.00404A8C                   ;即取第11-15位,"24417"

0047CA74|.8B55 F4       mov edx,                        ; 三段结果用“-”相连:"1004A-E643F-24417"
0047CA77|.8B45 F8       mov eax,                        ; 假码给EAX
0047CA7A|.E8 35BDF8FF   call VideoCon.004087B4                   ;//寄存器出现真假码对比
0047CA7F|.85C0          test eax,eax
0047CA81|.75 41         jnz short VideoCon.0047CAC4            ; //跳向失败


【算法总结】:以注册名”abcde“为例:
**** Hidden Message *****

【体会】:一、本程序为明码比较,适合吾等新手练习。算法部分也比较清晰,没有过多的干扰代码。二、有一点疑惑:当注册名为单个的英文字母时,可以追出注册码,但竟然注册不成功!用内存注册机注册单个英文字母时,可以得出注册码,但同样也注册不成功!不知为何?新手求解。三、在做算法注册机时,当注册名中含中文时,陆陆续续搞了两个多星期也没能做出注册名中含中文的算法注册机,外行+新手,搞得头晕,差点想要放弃了。后来从一高手一句话中得到启示,终于搞出来了。一句话:逆向,贵在坚持!
四、附上一组注册码:
Reg Name:吾爱汇编论坛 ____By:pj2020
Registration Code:1002D-3456F-16082
五、新手作品,如有不足,欢迎指正!


            



附上:
原程序:

内存注册机:

算法注册机:




jackwolail 发表于 2017-3-2 00:28

好好学习,天天向上

叩瞳白蓝 发表于 2017-3-2 09:19

觉得好恐怖啊,能把算法给分析了。

wakichen 发表于 2017-3-2 11:53

谢谢分享啊

datonglu 发表于 2017-3-2 13:20

要支持的哦

great陆幽风 发表于 2017-3-3 18:39

过来学习学习,感谢楼主

chenjinghappy 发表于 2017-3-4 00:36

谢谢楼主分享{:5_116:}

花落雨相依 发表于 2017-3-4 07:59

{:5_116:}很好的教程,过来学习一下。

55980591 发表于 2017-3-14 11:26

好高深,我现在看还为时过早,还去学习下基础吧

eye 发表于 2017-4-3 22:31

这才是大神 我服
页: [1] 2 3 4
查看完整版本: Alive Video Converter v5.2.0.2 算法分析+注册机[新手思路]