【破文标题】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)
提醒大家,如果你遇到一些算法还原成高级语言时觉得比较繁琐,建议学会灵活运用嵌入汇编来编程:

代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, jpeg, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    img1: TImage;
    grp1: TGroupBox;
    lbl1: TLabel;
    Edit1: TEdit;
    lbl3: TLabel;
    btn1: TBitBtn;
    btn2: TBitBtn;
    lbl2: TLabel;
    Edit2: TEdit;
    procedure Edit1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
const
   xm : array[1..7996] of Byte = (
     $45,$78,$74,$65,$6E,$64,$65,$64,$20,$4D,$6F,$64,$75,$6C,$65,$3A,
......
     $39,$38,$20,$3D,$5D,$02,$00,$00,$28,$00,$00,$00 );

implementation

uses Unit2, Unit3;
{$I XMobj\ufmod.inc *** uFMOD API: WINMM version}
{$R *.dfm}

procedure TForm1.Edit1Click(Sender: TObject);
begin
Edit1.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
uFMOD_PlaySong(@xm,Length(xm),XM_MEMORY);
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
form3.show;
end;

procedure TForm1.btn1Click(Sender: TObject);
var
User:string;
Len,RegCode:Integer;
begin
  User:=Form1.Edit1.Text;
  Len:=Length(User);
  asm
      pushad                 //保存各寄存器值,免得麻烦
      mov esi,User           //用户名放入esi
      mov edx,Len            //用户名长度放入edx
      xor eax,eax
      xor ecx,ecx            //ecx计数
    @loop:
        movsx   ebx, byte ptr [ecx+esi]
        add     eax, ebx
        inc     ecx
        cmp     ecx, edx
        jl      @loop
      mov RegCode,eax        //计算出用户名各字符之和
      popad
  end;
  Form1.Edit2.Text:=IntToStr($022B8*RegCode+$05480204);
end;

end.
经测试,完全支持中文用户名注册!
此网站还有其余十余款类似软件,大家可自行下载练习。

由本文,我们看到了一个简单算法可能给程序带来的致命打击,偷懒害死人哪~~~
上传的附件 注册机源码.rar

  • 标 题:答复
  • 作 者:playboysen
  • 时 间:2009-01-06 11:56

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 

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

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

我们国产软件应该以此为戒,吸取教训啊