首页
社区
课程
招聘
[原创]Cute Flv Video Converter V1.40算法分析+Delphi注册机源码
发表于: 2009-1-6 07:35 8697

[原创]Cute Flv Video Converter V1.40算法分析+Delphi注册机源码

2009-1-6 07:35
8697

【破文标题】Cute Flv Video Converter V1.40算法分析+Delphi注册机源码
【破文作者】Playboysen
【作者邮箱】playboysen#126.com
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件大小】2.37 MB
【软件授权】国外软件/视频转换
【软件语言】英文
【原版下载】http://www.videotool.net/download/flvvideoconverter.exe
【保护方式】用户名 注册码
【软件简介】Cute FLV Video Converter is a easy-to-use video converter software. It can convert many video formats, e.g.DivX, XviD, MOV, MPEG, WMV, H.263,AVI,WMV,ASF to FLV Movie Video format.
【破解声明】一点心得,愿与大家分享 o(∩_∩)o 版权所有,转载注明作者!
【破解内容】
        
     好长时间没有动手了,前段时间心血来潮玩了半个月脚本。
     这两天牛年之初,决定重返软件安全版闹一闹,没别的,图个热闹喜庆(*^__^*) 嘻嘻……

     踩点可知,程序VC++编写,无壳,未注册启动有Nag框,注册后不再显示,输入假码有错误提示。OD载入,下断点bp MessageBoxW或者查找字符串很容易可找到关键处

0040EDFD   .  6A 01         push 1
0040EDFF   .  E8 340F0000   call <jmp.&MFC42.#6334_CWnd::UpdateData>       ;取注册码
......
0040EE61   .  E8 C2090000   call <jmp.&MFC42.#858_CString::operator=>
0040EE66   .  8B17          mov edx,dword ptr ds:[edi]                     ;用户名放入
0040EE68   .  8B42 F8       mov eax,dword ptr ds:[edx-8]                   ;用户名长度放入
0040EE6B   .  85C0          test eax,eax
0040EE6D   .  75 2B         jnz short FlvVideo.0040EE9A                    ;检验用户名长度
0040EE6F   .  6A 40         push 40
0040EE71   .  68 4C7D4100   push 00417D4C                                 ;warning
0040EE76   .  68 247E4100   push 00417E24                                  ;please enter registration name!
0040EE7B   .  8BCE          mov ecx,esi
0040EE7D   .  E8 D20D0000   call <jmp.&MFC42.#4224_CWnd::MessageBoxA>
0040EE82   .  68 03040000   push 403
0040EE87   .  8BCE          mov ecx,esi
0040EE89   .  E8 D00C0000   call <jmp.&MFC42.#3092_CWnd::GetDlgItem>
0040EE8E   .  8BC8          mov ecx,eax
0040EE90   .  E8 3F0C0000   call <jmp.&MFC42.#5981_CWnd::SetFocus>
0040EE95   .  E9 DE000000   jmp FlvVideo.0040EF78
0040EE9A   >  8B45 00       mov eax,dword ptr ss:[ebp]                     ;同上,检验注册码长度
0040EE9D   .  8B48 F8       mov ecx,dword ptr ds:[eax-8]
0040EEA0   .  85C9          test ecx,ecx
0040EEA2   .  75 2B         jnz short FlvVideo.0040EECF
0040EEA4   .  6A 40         push 40
0040EEA6   .  68 4C7D4100   push 00417D4C                                 ;warning
0040EEAB   .  68 047E4100   push 00417E04                                  ;please enter registration code!
......
0040EEEE   .  8D4C24 1C     lea ecx,dword ptr ss:[esp+1C]
0040EEF2   .  C64424 30 00  mov byte ptr ss:[esp+30],0
0040EEF7   .  E8 C4010000   call FlvVideo.0040F0C0                         ;看堆栈,用户名和注册码入栈可知此应为关键call,F7进入
0040EEFC   .  84C0          test al,al
0040EEFE   .  74 65         je short FlvVideo.0040EF65                     ;关键跳
0040EF00   .  8D4C24 14     lea ecx,dword ptr ss:[esp+14]
0040EF04   .  E8 A7010000   call FlvVideo.0040F0B0

跟入0040EEF7关键call,分析算法

0040F0C0  /$  6A FF         push -1
0040F0C2  |.  68 70144100   push FlvVideo.00411470                         ;SE 句柄安装
0040F0C7  |.  64:A1 0000000>mov eax,dword ptr fs:[0]
0040F0CD  |.  50            push eax
0040F0CE  |.  64:8925 00000>mov dword ptr fs:[0],esp
0040F0D5  |.  51            push ecx
0040F0D6  |.  53            push ebx
0040F0D7  |.  55            push ebp
0040F0D8  |.  56            push esi
0040F0D9  |.  57            push edi
0040F0DA  |.  8BE9          mov ebp,ecx
0040F0DC  |.  8B7C24 28     mov edi,dword ptr ss:[esp+28]                  ;注册码放入edi供下面检验使用
0040F0E0  |.  33DB          xor ebx,ebx
0040F0E2  |.  33C9          xor ecx,ecx
0040F0E4  |.  C74424 1C 010>mov dword ptr ss:[esp+1C],1
0040F0EC  |.  8B57 F8       mov edx,dword ptr ds:[edi-8]                   ;用户名放入edx
0040F0EF  |.  3BD3          cmp edx,ebx
0040F0F1  |.  7E 18         jle short FlvVideo.0040F10B
0040F0F3  |>  8A0439        /mov al,byte ptr ds:[ecx+edi]                  ;所输入注册码必须是数字
0040F0F6  |.  3C 30         |cmp al,30
0040F0F8  |.  0F8C 8F000000 |jl FlvVideo.0040F18D
0040F0FE  |.  3C 39         |cmp al,39
0040F100  |.  0F8F 87000000 |jg FlvVideo.0040F18D
0040F106  |.  41            |inc ecx
0040F107  |.  3BCA          |cmp ecx,edx
0040F109  |.^ 7C E8         \jl short FlvVideo.0040F0F3
0040F10B  |>  8B7424 24     mov esi,dword ptr ss:[esp+24]                  ;用户名放入
0040F10F  |.  8B56 F8       mov edx,dword ptr ds:[esi-8]                   ;用户名长度放入
0040F112  |.  3BD3          cmp edx,ebx
0040F114  |.  74 77         je short FlvVideo.0040F18D
0040F116  |.  33C0          xor eax,eax
0040F118  |.  33C9          xor ecx,ecx
0040F11A  |.  3BD3          cmp edx,ebx
0040F11C  |.  7E 0D         jle short FlvVideo.0040F12B
0040F11E  |>  0FBE1C31      /movsx ebx,byte ptr ds:[ecx+esi]               ;用户名逐位相加,值放入eax,设为K
0040F122  |.  03C3          |add eax,ebx
0040F124  |.  41            |inc ecx
0040F125  |.  3BCA          |cmp ecx,edx
0040F127  |.^ 7C F5         \jl short FlvVideo.0040F11E
0040F129  |.  33DB          xor ebx,ebx                                    ; 提醒:下面参与运算的所有数值都是十六进制数值
0040F12B  |>  8D0CC0        lea ecx,dword ptr ds:[eax+eax*8]               ; 9*K
0040F12E  |.  57            push edi                                       ; /atol函数,大概功能是StrtoInt,此处edi是其唯一的参数(注意下面几行运算并不是atol的参数)
0040F12F  |.  8D0C88        lea ecx,dword ptr ds:[eax+ecx*4]               ; |9K*4+K
0040F132  |.  8D0C49        lea ecx,dword ptr ds:[ecx+ecx*2]               ; |(9K*4+K)*3
0040F135  |.  8D1489        lea edx,dword ptr ds:[ecx+ecx*4]               ; |(((9K*4+K)*3)*5
0040F138  |.  8D0450        lea eax,dword ptr ds:[eax+edx*2]               ; |((((9K*4+K)*3)*5)*2+K
0040F13B  |.  8D34C5 040248>lea esi,dword ptr ds:[eax*8+5480204]           ; |((((9K*4+K)*3)*5)*2+K)*8+5480204 == ESI
0040F142  |.  FF15 9C254100 call dword ptr ds:[<&MSVCRT.atol>]             ; \atol
0040F148  |.  83C4 04       add esp,4
0040F14B  |.  3BC6          cmp eax,esi                                    ;比较假码和运算值(真码)
0040F14D  |.  75 3E         jnz short FlvVideo.0040F18D
0040F14F  |.  51            push ecx

这里我必须要提醒大家一下,上面参与运算的所有数值都是十六进制数值,一定要注意,举个例子:
9K*4+K=24K+K=25K(不是37K,你可以用计算器计算一下9h*4h是不是等于24h)

我在写注册机的时候就很不幸地陷入了自己粗心留下的陷阱,困惑了好长时间!
知道了这一点,其实算法就很简单了
((((9K*4+K)*3)*5)*2+K)*8+5480204
=22B8*K+5480204

我们来看一下Delphi注册机的源码实现部分,我就偷个懒,直接用我自己的注册机模板套一下( http://bbs.pediy.com/showthread.php?t=69440)
提醒大家,如果你遇到一些算法还原成高级语言时觉得比较繁琐,建议学会灵活运用嵌入汇编来编程:


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
沙发
支持啊
2009-1-6 10:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好高难度啊.这???????????
2009-1-6 11:09
0
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
4
Video Converter
iPod Video Converter
DVD to iPod Converter
Video Converter
PSP Video Covnerter
FLV Video Converter
3GP Video Converter
MP4 Video Converter
Audio Converter
Ease Audio Converter
CD to MP3 Maker
Ease MP3 Recorder
Video Formate

公司程序列表,我又研究了几个
发现上述所有软件算法基本不变,仅仅改动了一下参与运算的几个数值

汗哪,那样的话,只需半个小时,就能做出此公司全系列注册机了
不知道他们的程序是如何策划设计的:(

我们国产软件应该以此为戒,吸取教训啊
2009-1-6 11:56
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
他们的策划是,在半小时内完成一系列软件的加密设计
2009-1-6 12:10
0
雪    币: 1596
活跃值: (30)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
不算太难
就是把每个用户名的ASCII相加后,再*呀,+呀的,得出一个16位进制数,转成10进制就成了注册码了
2009-1-6 12:18
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持,太强了,学习算法.
2009-1-6 15:53
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=playboysen;560735]

Video Converter
iPod Video Converter
DVD to iPod Converter
Video Converter
PSP Video Covnerter
FLV Video Converter
3GP Video Converter
MP4 Video Converter
Audio Converter
Ease Audio Converter
CD to MP3 Maker
Ease MP3 Recorder
Video Formate

公司程序列表,我又研究了几个
发现上述所有软件算法基本不变,仅仅改动了一下参与运算的几个数值

汗哪,那样的话,只需半个小时,就能做出此公司全系列注册机了

[QUOTE]

下次我用到时不用到处找注册码了
2009-1-6 23:05
0
雪    币: 403
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
0040F11C  |.  7E 0D         jle short FlvVideo.0040F12B
0040F11E  |>  0FBE1C31      /movsx ebx,byte ptr ds:[ecx+esi]               ;用户名逐位相加,值放入eax,设为K
0040F122  |.  03C3          |add eax,ebx
0040F124  |.  41            |inc ecx

什么叫 用户名逐位相加?
2009-3-17 21:48
0
雪    币: 403
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
[QUOTE=plaodj;592889]0040F11C  |.  7E 0D         jle short FlvVideo.0040F12B
0040F11E  |>  0FBE1C31      /movsx ebx,byte ptr ds:[ecx+esi]               ;用户名逐位相加,值放入eax,设为...[/QUOTE]

哦 理解了一点点   就是把用户名的 各个字母的 ASCII码  相加

可楼主说汉字用户名也能注册   那此时的   用户名逐位相加   又是什么???
2009-3-17 21:57
0
雪    币: 590
活跃值: (177)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=plaodj;592889]0040F11C  |.  7E 0D         jle short FlvVideo.0040F12B
0040F11E  |>  0FBE1C31      /movsx ebx,byte ptr ds:[ecx+esi]               ;用户名逐位相加,值放入eax,设为...[/QUOTE]

动手跟一下,你就明白了
2009-3-18 00:21
0
雪    币: 403
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
说实在的     其实我现在什么也不会

连下断点也不会
2009-3-18 01:38
0
游客
登录 | 注册 方可回帖
返回
//