|
本帖最后由 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 [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
五、新手作品,如有不足,欢迎指正!
附上:
原程序:
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)
|
评分
-
参与人数 17 | HB +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 |
[快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品! |
查看全部评分
|