吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3871|回复: 34

[原创逆向图文] Alive Video Converter v5.2.0.2 算法分析+注册机[新手思路]

  [复制链接]
pj2020 发表于 2017-3-1 21:44 | 显示全部楼层 |阅读模式

本帖最后由 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 无壳
1.png
二、试注册,有错误提示“Invalid Registration Code!”:
2.png

三、OD载入程序,F9运行,查找字符串“Invalid Registration Code!”关键字(只有一处),在这一行双击或回车进入,在段首F2下断:
3.png
重新载入程序后,输入假注册名和假码断下,然后F8单步跟踪:
Reg Name:abcde
Registration Code:123456789

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

4.png

四、做内存注册机:

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

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

经验证,注册成功!

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

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 [local.1],edx
0047CC1F  |.  8BF8          mov edi,eax
0047CC21  |.  8B45 FC       mov eax,[local.1]                        ;  注册名给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:[eax]
0047CC34  |.  64:8920       mov dword ptr fs:[eax],esp
0047CC37  |.  8D45 FC       lea eax,[local.1]
0047CC3A  |.  BA 78CD4700   mov edx,VideoCon.0047CD78                ;  读取固定字串:Fk2yB$P30jH
0047CC3F  |.  E8 F87BF8FF   call VideoCon.0040483C
0047CC44  |.  8B45 FC       mov eax,[local.1]                        ; 注册名与固定字串“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,[local.4]
0047CC58  |.  50            push eax
0047CC59  |.  8BCE          mov ecx,esi
0047CC5B  |.  BA 01000000   mov edx,0x1
0047CC60  |.  8B45 FC       mov eax,[local.1]                        ;  注册名与字串“Fk2yB$P30jH”相连后的"abcdeFk2yB$P30jH"给EAX
0047CC63  |.  E8 247EF8FF   call VideoCon.00404A8C
0047CC68  |.  8B45 F0       mov eax,[local.4]                        ;  取新字串前8位,(ASCII "abcdeFk2")
0047CC6B  |.  50            push eax
0047CC6C  |.  8D45 EC       lea eax,[local.5]
0047CC6F  |.  50            push eax
0047CC70  |.  8B45 FC       mov eax,[local.1]
0047CC73  |.  E8 BC7BF8FF   call VideoCon.00404834
0047CC78  |.  8BC8          mov ecx,eax                              ;  eax=00000010,新名长度
0047CC7A  |.  8D56 01       lea edx,dword ptr ds:[esi+0x1]           ; 地址=00000009
0047CC7D  |.  8B45 FC       mov eax,[local.1]
0047CC80  |.  E8 077EF8FF   call VideoCon.00404A8C                   ;  取新字串剩下的字符,即第9位到最后一位:(ASCII "yB$P30jH")
0047CC85  |.  8B55 EC       mov edx,[local.5]
0047CC88  |.  8D45 FC       lea eax,[local.1]
0047CC8B  |.  59            pop ecx                                  ;  0012EBCC
0047CC8C  |.  E8 EF7BF8FF   call VideoCon.00404880
0047CC91  |.  8D45 F8       lea eax,[local.2]
0047CC94  |.  50            push eax
0047CC95  |.  B9 0A000000   mov ecx,0xA
0047CC9A  |.  BA 01000000   mov edx,0x1
0047CC9F  |.  8B45 FC       mov eax,[local.1]                        ; 后取字串+前取字串,组成新字串: (ASCII "yB$P30jHabcdeFk2")
0047CCA2  |.  E8 E57DF8FF   call VideoCon.00404A8C
0047CCA7  |.  8D45 F4       lea eax,[local.3]
0047CCAA  |.  50            push eax
0047CCAB  |.  8B45 FC       mov eax,[local.1]
0047CCAE  |.  E8 817BF8FF   call VideoCon.00404834
0047CCB3  |.  8BC8          mov ecx,eax
0047CCB5  |.  BA 06000000   mov edx,0x6                                  ;  edx=0x6
0047CCBA  |.  8B45 FC       mov eax,[local.1]
0047CCBD  |.  E8 CA7DF8FF   call VideoCon.00404A8C                   ;  取第6位到最后一位作为第二段字串, (ASCII "0jHabcdeFk2")
0047CCC2  |.  837D F4 00    cmp [local.3],0x0
0047CCC6  |.  75 10         jnz short VideoCon.0047CCD8
0047CCC8  |.  8D45 F4       lea eax,[local.3]
0047CCCB  |.  BA 78CD4700   mov edx,VideoCon.0047CD78                ;  Fk2yB$P30jH
0047CCD0  |.  8B4D F8       mov ecx,[local.2]
0047CCD3  |.  E8 A87BF8FF   call VideoCon.00404880
0047CCD8  |>  53            push ebx
0047CCD9  |.  8B4D F4       mov ecx,[local.3]                        ;  第二段字串(第6到最后一位)给ECX,(ASCII "0jHabcdeFk2")
0047CCDC  |.  8B55 F8       mov edx,[local.2]                        ;  第一段字串(第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,[local.4]
0047C461  |.  50            push eax
0047C462  |.  C745 E4 00010>mov [local.7],0x100
0047C469  |.  C645 E8 00    mov byte ptr ss:[ebp-0x18],0x0
0047C46D  |.  8D55 E4       lea edx,[local.7]
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,[local.1]
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 [local.5],0x1
0047C491  |>  8B45 FC       /mov eax,[local.1]                       ;  取第一段字串: "yB$P30jHab"
0047C494  |.  8B55 EC       |mov edx,[local.5]                       ;  从第一位开始
0047C497  |.  0FB64410 FF   |movzx eax,byte ptr ds:[eax+edx-0x1]     ; 依次取第一段字串各字符的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,[local.3]
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,[local.2]                       ;  取第二段字串:"0jHabcdeFk2"
0047C4B8  |.  0FB64430 FF   |movzx eax,byte ptr ds:[eax+esi-0x1]     ;  依次取第二段字串各字符的ASC码,给EAX
0047C4BD  |.  33D8          |xor ebx,eax                             ;  ebx=ebx(余数) xor eax,即余数与第二段字串ASC码进行异或
0047C4BF  |.  8D45 E0       |lea eax,[local.8]
0047C4C2  |.  50            |push eax
0047C4C3  |.  895D E4       |mov [local.7],ebx
0047C4C6  |.  C645 E8 00    |mov byte ptr ss:[ebp-0x18],0x0
0047C4CA  |.  8D55 E4       |lea edx,[local.7]
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,[local.8]
0047C4DC  |.  8D45 F0       |lea eax,[local.4]
0047C4DF  |.  E8 5883F8FF   |call VideoCon.0040483C
0047C4E4  |.  FF45 EC       |inc [local.5]
0047C4E7  |.  4F            |dec edi
0047C4E8  |.^ 75 A7         \jnz short VideoCon.0047C491     ;完了吗?没有取完继续
0047C4EA  |>  8B45 08       mov eax,[arg.1]
0047C4ED  |.  8B55 F0       mov edx,[local.4]                        ;  把所有异或结果连接,并在前面加上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:[eax],edx
0047C4FD  |.  68 27C54700   push VideoCon.0047C527
0047C502  |>  8D45 E0       lea eax,[local.8]
0047C505  |.  E8 7280F8FF   call VideoCon.0040457C
0047C50A  |.  8D45 F0       lea eax,[local.4]
0047C50D  |.  E8 6A80F8FF   call VideoCon.0040457C
0047C512  |.  8D45 F8       lea eax,[local.2]
0047C515  |.  BA 02000000   mov edx,0x2
0047C51A  |.  E8 8180F8FF   call VideoCon.004045A0
0047C51F  \.  C3            retn

0047CCE6  |.  8D45 E8       lea eax,[local.6]
0047CCE9  |.  50            push eax
0047CCEA  |.  8B03          mov eax,dword ptr ds:[ebx]               ;  取最后运算结果,  "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 [local.6]
0047CCFE  |.  68 8CCD4700   push VideoCon.0047CD8C                   ;  用“-”连接
0047CD03  |.  8D45 E4       lea eax,[local.7]
0047CD06  |.  50            push eax
0047CD07  |.  8B03          mov eax,dword ptr ds:[ebx]               ;  取最后运算结果,  "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 [local.7]
0047CD1B  |.  68 8CCD4700   push VideoCon.0047CD8C                   ;  用“-”连接
0047CD20  |.  8D45 E0       lea eax,[local.8]
0047CD23  |.  50            push eax
0047CD24  |.  8B03          mov eax,dword ptr ds:[ebx]               ;  取最后运算结果,  "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,[local.3]                        ; 三段结果用“-”相连:"1004A-E643F-24417"
0047CA77  |.  8B45 F8       mov eax,[local.2]                        ; 假码给EAX
0047CA7A  |.  E8 35BDF8FF   call VideoCon.004087B4                   ;  //寄存器出现真假码对比
0047CA7F  |.  85C0          test eax,eax
0047CA81  |.  75 41         jnz short VideoCon.0047CAC4              ; //跳向失败


【算法总结】:以注册名”abcde“为例:
游客,如果您要查看本帖隐藏内容请回复


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


    1.png           2.png



附上:
原程序: Alive Video Converter v5.2.0.2.part1.rar (3.5 MB, 下载次数: 17) Alive Video Converter v5.2.0.2.part2.rar (3.34 MB, 下载次数: 14)

内存注册机: 内存注册机.rar (4.7 KB, 下载次数: 7)

算法注册机: Alive Video Converter v5.2.0.2 算法注册机.rar (5.92 KB, 下载次数: 12)




评分

参与人数 17HB +18 THX +8 收起 理由
禽大师 + 1
sjtkxy + 1 + 1
我是我是一体 + 1
文字君 + 1 <span class="text2Link">[吾爱汇编论坛<a target="_blank">52HB.COM</a>]-感谢楼主热心分享,小小评分不成敬意!</span>.
一路走来不容易 + 1
消逝的过去 + 2
冷亦飞 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
叶落花开 + 2
lies + 1
锻炼身体好吗 + 1
上帝的恩赐 + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
kll545012 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
datonglu + 1 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
叩瞳白蓝 + 1 + 1 [快捷评语] - 2017,让我们17学破解!
peter_king88 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
一个good而已 + 3 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
jackwolail 发表于 2017-3-2 00:28 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
叩瞳白蓝 发表于 2017-3-2 09:19 | 显示全部楼层

觉得好恐怖啊,能把算法给分析了。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
wakichen 发表于 2017-3-2 11:53 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
datonglu 发表于 2017-3-2 13:20 | 显示全部楼层

要支持的哦
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
great陆幽风 发表于 2017-3-3 18:39 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
chenjinghappy 发表于 2017-3-4 00:36 | 显示全部楼层

谢谢楼主分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
花落雨相依 发表于 2017-3-4 07:59 | 显示全部楼层

很好的教程,过来学习一下。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
55980591 发表于 2017-3-14 11:26 | 显示全部楼层

好高深,我现在看还为时过早,还去学习下基础吧
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
eye 发表于 2017-4-3 22:31 | 显示全部楼层

这才是大神 我服
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表