【文章标题】: 【原创】对一个国外的视频转换软件的简单分析
【文章作者】: wyART
【作者邮箱】: 243261920@163.com
【作者主页】: http://hi.csdn.net/haart/profile
【作者QQ号】: 243261920
【软件名称】: Absolute Video Converter V2.8
【软件大小】: 完全安装好3.56 MB
【下载地址】: http://www.iaudiosoft.com/(官方主页)
【加壳方式】: 没加壳
【保护方式】: 没发现
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: PEID,OD
【操作平台】: WIN XP Sp3
【软件介绍】: 一个国外的优秀的视频转换软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!本文仅供学习交流参考!
--------------------------------------------------------------------------------
【详细过程】
谨以此献给和我一样的菜鸟们。高手略过。
这是我的破文的处女作,呵呵。上次要转换一视频文件,网上找了一下,有的视频处理软件太大,有的界面做得太丑,平时我都是在华军,天空,霏凡淘软件,那天突发奇想 想看一下国外的软件下载网站做得怎么样,于是到网上狂搜一通,找到了http://www.soft32.com/这个国外的软件下载网站,发现界面做得不错,大家也可以去国外的网站 看看,和中国的对比对比,开眼看世界,与之同步,这样能及时掌握一些新的东西,呵呵。后来就找到了Absolute Video Converter V2.8这个软件,界面很漂亮,转换效果也不 错 ,但是共享的,我决定操起OD对其分析一下。
用OD载入,F9运行,弹出软件主界面,点程序菜单的help下的Register...项,弹出注册窗口,输入
用户名:PEDIY
注册码:123456789
弹出错误提示框,用F12暂停法返回到OD汇编窗口的004ED685行
004ED674 |. B9 FCD64E00 MOV ECX,Absolute.004ED6FC ; ASCII "Sorry"
004ED679 |. BA 04D74E00 MOV EDX,Absolute.004ED704 ; ASCII "Invalid user name or registration code!"
004ED67E |. A1 F8804F00 MOV EAX,DWORD PTR DS:[4F80F8]
004ED683 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004ED685 |. E8 B6F6F9FF CALL Absolute.0048CD40
找到段首下断,重新输入用户名,注册码注册,程序被断在004ED5F8,F8单步,跟踪过程如下。
004ED5F8 /. 55 PUSH EBP
004ED5F9 |. 8BEC MOV EBP,ESP
004ED5FB |. 6A 00 PUSH 0
004ED5FD |. 6A 00 PUSH 0
004ED5FF |. 53 PUSH EBX
004ED600 |. 8BD8 MOV EBX,EAX
004ED602 |. 33C0 XOR EAX,EAX ; EAX清零
004ED604 |. 55 PUSH EBP
004ED605 |. 68 A5D64E00 PUSH Absolute.004ED6A5
004ED60A |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004ED60D |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004ED610 |. 8D55 FC LEA EDX,[LOCAL.1]
004ED613 |. 8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004ED619 |. E8 02F5F7FF CALL Absolute.0046CB20 ; 取注册码名
004ED61E |. 8D55 F8 LEA EDX,[LOCAL.2]
004ED621 |. 8B83 18030000 MOV EAX,DWORD PTR DS:[EBX+318]
004ED627 |. E8 F4F4F7FF CALL Absolute.0046CB20 ; 取注册码
004ED62C |. A1 2C7E4F00 MOV EAX,DWORD PTR DS:[4F7E2C]
004ED631 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004ED633 |. 8B4D F8 MOV ECX,[LOCAL.2] ; 注册码地址复制到ECX
004ED636 |. 8B55 FC MOV EDX,[LOCAL.1] ; 用户名地址复制到EDX
004ED639 |. E8 7A6B0000 CALL Absolute.004F41B8 ; 关键CALL,跟进去
004ED63E |. 84C0 TEST AL,AL ; 比较AL,等于零就跳
004ED640 |. 74 30 JE SHORT Absolute.004ED672 ; 不能跳,一跳就注册失败!
004ED642 |. A1 2C7E4F00 MOV EAX,DWORD PTR DS:[4F7E2C]
004ED647 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004ED649 |. 8B55 FC MOV EDX,[LOCAL.1]
004ED64C |. E8 DF6E0000 CALL Absolute.004F4530
004ED651 |. 6A 40 PUSH 40 ; 看下一行,注册成功的标志
004ED653 |. B9 B4D64E00 MOV ECX,Absolute.004ED6B4 ; ASCII "Congratulations!"
004ED658 |. BA C8D64E00 MOV EDX,Absolute.004ED6C8 ; ASCII "Register successfully! Thank you for
your support!"
004ED65D |. A1 F8804F00 MOV EAX,DWORD PTR DS:[4F80F8]
004ED662 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004ED664 |. E8 D7F6F9FF CALL Absolute.0048CD40
004ED669 |. 8BC3 MOV EAX,EBX
004ED66B |. E8 18BEF9FF CALL Absolute.00489488
004ED670 |. EB 18 JMP SHORT Absolute.004ED68A
004ED672 |> 6A 40 PUSH 40 ; 看下一行,注册成功的标志
004ED674 |. B9 FCD64E00 MOV ECX,Absolute.004ED6FC ; ASCII "Sorry"
004ED679 |. BA 04D74E00 MOV EDX,Absolute.004ED704 ; ASCII "Invalid user name or registration
code!"
004ED67E |. A1 F8804F00 MOV EAX,DWORD PTR DS:[4F80F8]
004ED683 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
004ED685 |. E8 B6F6F9FF CALL Absolute.0048CD40
004ED68A |> 33C0 XOR EAX,EAX
004ED68C |. 5A POP EDX
004ED68D |. 59 POP ECX
004ED68E |. 59 POP ECX
004ED68F |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004ED692 |. 68 ACD64E00 PUSH Absolute.004ED6AC
004ED697 |> 8D45 F8 LEA EAX,[LOCAL.2]
004ED69A |. BA 02000000 MOV EDX,2
004ED69F |. E8 2071F1FF CALL Absolute.004047C4
004ED6A4 \. C3 RETN
注意004ED639这一行 004ED639 |. E8 7A6B0000 CALL Absolute.004F41B8 算法的关键CALL,跟进去。
004F41B8 /$ 55 PUSH EBP
004F41B9 |. 8BEC MOV EBP,ESP
004F41BB |. 83C4 E4 ADD ESP,-1C
004F41BE |. 53 PUSH EBX
004F41BF |. 33DB XOR EBX,EBX ; EBX清零
004F41C1 |. 895D F4 MOV [LOCAL.3],EBX
004F41C4 |. 894D F8 MOV [LOCAL.2],ECX ; 把注册码复制到DWORD PTR SS:[EBP-8]
004F41C7 |. 8955 FC MOV [LOCAL.1],EDX ; 把用户名复制到DWORD PTR SS:[EBP-4]
004F41CA |. 8B45 FC MOV EAX,[LOCAL.1] ; 用户名地址复制到EAX
004F41CD |. E8 7E0AF1FF CALL Absolute.00404C50
004F41D2 |. 8B45 F8 MOV EAX,[LOCAL.2] ; 注册码地址放到EAX
004F41D5 |. E8 760AF1FF CALL Absolute.00404C50
004F41DA |. 8D45 EC LEA EAX,[LOCAL.5]
004F41DD |. 8B15 00DE4D00 MOV EDX,DWORD PTR DS:[4DDE00] ; Absolute.004DDE04
004F41E3 |. E8 4810F1FF CALL Absolute.00405230
004F41E8 |. 8D45 E4 LEA EAX,[LOCAL.7]
004F41EB |. 8B15 00DE4D00 MOV EDX,DWORD PTR DS:[4DDE00] ; Absolute.004DDE04
004F41F1 |. E8 3A10F1FF CALL Absolute.00405230
004F41F6 |. 33C0 XOR EAX,EAX ; EAX清零
004F41F8 |. 55 PUSH EBP
004F41F9 |. 68 7A424F00 PUSH Absolute.004F427A
004F41FE |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004F4201 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004F4204 |. 33DB XOR EBX,EBX
004F4206 |. 8D55 EC LEA EDX,[LOCAL.5]
004F4209 |. A1 8C7C4F00 MOV EAX,DWORD PTR DS:[4F7C8C] ; 65537
004F420E |. E8 7DA2FEFF CALL Absolute.004DE490
004F4213 |. 8D55 E4 LEA EDX,[LOCAL.7]
004F4216 |. A1 907C4F00 MOV EAX,DWORD PTR DS:[4F7C90] ; 一串30位的类似MD5的字符串
004F421B |. E8 70A2FEFF CALL Absolute.004DE490
004F4220 |. 8D45 FC LEA EAX,[LOCAL.1]
004F4223 |. 50 PUSH EAX
004F4224 |. 8D4D E4 LEA ECX,[LOCAL.7]
004F4227 |. 8D55 EC LEA EDX,[LOCAL.5]
004F422A |. 8B45 FC MOV EAX,[LOCAL.1] ; 用户名放到EAX
004F422D |. E8 4AC6FEFF CALL Absolute.004E087C
004F4232 |. 8D55 F4 LEA EDX,[LOCAL.3] ; 用户名放到EDX
004F4235 |. 8B45 FC MOV EAX,[LOCAL.1]
004F4238 |. E8 2B9EFEFF CALL Absolute.004DE068 ; 关键算法产生注册真码
004F423D |. 8B45 F8 MOV EAX,[LOCAL.2] ; 假码
004F4240 |. 8B55 F4 MOV EDX,[LOCAL.3] ; 真码出现
004F4243 |. E8 6409F1FF CALL Absolute.00404BAC ; 真假码比较
004F4248 |. 75 02 JNZ SHORT Absolute.004F424C ; 不等则AL置零,注册失败
004F424A |. B3 01 MOV BL,1
004F424C |> 33C0 XOR EAX,EAX
004F424E |. 5A POP EDX
004F424F |. 59 POP ECX
004F4250 |. 59 POP ECX
004F4251 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004F4254 |. 68 81424F00 PUSH Absolute.004F4281
004F4259 |> 8D45 E4 LEA EAX,[LOCAL.7]
004F425C |. 8B15 00DE4D00 MOV EDX,DWORD PTR DS:[4DDE00] ; Absolute.004DDE04
004F4262 |. B9 02000000 MOV ECX,2
004F4267 |. E8 E010F1FF CALL Absolute.0040534C
004F426C |. 8D45 F4 LEA EAX,[LOCAL.3]
004F426F |. BA 03000000 MOV EDX,3
004F4274 |. E8 4B05F1FF CALL Absolute.004047C4
004F4279 \. C3 RETN
该软件采用了采用了明码比较的方式,只要随意输入用户名和注册假码,到004F4243下断,在EDX可看到真码。用Keymake很容易写出内存注册机。
--------------------------------------------------------------------------------
【经验总结】
本来我还想分析一下该软件的注册算法,写出算法注册机的,但是发现关键CALL里有几个call有很复杂的算法处理过程,今天
是国庆长假的最后一天,明天又上课了,限于水平和时间,没能把注册算法研究出来,不过已经能根据任意用户名追到真码
了。另外我还在这软件的官方网站上载了其他产品,发现他们的注册算法几乎一模一样,连带着整个网站的软件产品都可以
轻易的追出注册码来。危害很大,因此做软件要善于运用不同的方法来保护自己的软件。
欢迎大家加我QQ,与我分享交流!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年10月05日 11:25:30
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课