首页
社区
课程
招聘
某群中的一个VBCrackkme,主要是学习Loams的Delphi内联汇编
发表于: 2006-10-19 15:18 6251

某群中的一个VBCrackkme,主要是学习Loams的Delphi内联汇编

2006-10-19 15:18
6251

应该不能算原创了。
来自某Crackme群中的一个VB Crackme。

主要是学习Loamas的Delphi内联汇编。

0042030A   .  E8 7F0FFEFF      call <jmp.&MSVBVM60.__vbaLe>;  取注册名:wofan长度
0042030F   .  8985 CCFEFFFF    mov dword ptr ss:[ebp-134],>;  EAX=5
……
004203E4   .  50               push eax
004203E5   .  E8 920EFEFF      call <jmp.&MSVBVM60.#516>
004203EA   .  66:8985 DCFEFFFF mov word ptr ss:[ebp-124],a>;  AX:wofan的第一个字符ASCII码:77 6F 66 61 6E ,看它是不是Space
004203F1   .  C785 D4FEFFFF 02>mov dword ptr ss:[ebp-12C],>
……
0042047E   .  0FBFC0           movsx eax,ax
00420481   .  85C0             test eax,eax
00420483   .  0F84 AF000000    je CRACKME5.00420538        ;  不是Space,则有效,跳下去
00420489   .  C785 3CFFFFFF 04>mov dword ptr ss:[ebp-C4],8>
00420493   .  C785 34FFFFFF 0A>mov dword ptr ss:[ebp-CC],0>
0042049D   .  C785 4CFFFFFF 04>mov dword ptr ss:[ebp-B4],8>
004204A7   .  C785 44FFFFFF 0A>mov dword ptr ss:[ebp-BC],0>
004204B1   .  C785 5CFFFFFF 04>mov dword ptr ss:[ebp-A4],8>
004204BB   .  C785 54FFFFFF 0A>mov dword ptr ss:[ebp-AC],0>
004204C5   .  C785 DCFEFFFF 70>mov dword ptr ss:[ebp-124],>;  UNICODE "Your name cannot start with a space"
……
00420533   .  E9 34040000      jmp CRACKME5.0042096C
00420538   >  8D45 AC          lea eax,dword ptr ss:[ebp-5>
0042053B   .  50               push eax
0042053C   .  8D45 AC          lea eax,dword ptr ss:[ebp-5>
0042053F   .  50               push eax
00420540   .  8D85 64FFFFFF    lea eax,dword ptr ss:[ebp-9>
00420546   .  50               push eax
00420547   .  E8 F40CFEFF      call <jmp.&MSVBVM60.__vbaVa>;  mul:ASCII的平方。例如:77*77
0042054C   .  50               push eax
0042054D   .  8D85 78FFFFFF    lea eax,dword ptr ss:[ebp-8>
00420553   .  50               push eax
00420554   .  E8 1D0DFEFF      call <jmp.&MSVBVM60.__vbaSt>
00420559   .  50               push eax                    ;  77H的平方的结果:14161D
0042055A   .  E8 E70CFEFF      call <jmp.&MSVBVM60.#581>
0042055F   .  DD9D DCFEFFFF    fstp qword ptr ss:[ebp-124] ;  
00420565   .  C785 D4FEFFFF 05>mov dword ptr ss:[ebp-12C],>
0042056F   .  8D95 D4FEFFFF    lea edx,dword ptr ss:[ebp-1>
00420575   .  8D4D CC          lea ecx,dword ptr ss:[ebp-3>
00420578   .  E8 8D0CFEFF      call <jmp.&MSVBVM60.__vbaVa>
0042057D   .  8D8D 78FFFFFF    lea ecx,dword ptr ss:[ebp-8>
00420583   .  E8 E80CFEFF      call <jmp.&MSVBVM60.__vbaFr>
00420588   .  8D45 8C          lea eax,dword ptr ss:[ebp-7>
0042058B   .  50               push eax
0042058C   .  8D45 AC          lea eax,dword ptr ss:[ebp-5>
0042058F   .  50               push eax
00420590   .  8D45 AC          lea eax,dword ptr ss:[ebp-5>
00420593   .  50               push eax
00420594   .  8D85 64FFFFFF    lea eax,dword ptr ss:[ebp-9>
0042059A   .  50               push eax
0042059B   .  E8 A00CFEFF      call <jmp.&MSVBVM60.__vbaVa>;  还是MUL:自已 mul 自已,重复了上面的操作
004205A0   .  50               push eax
004205A1   .  8D85 54FFFFFF    lea eax,dword ptr ss:[ebp-A>
004205A7   .  50               push eax
004205A8   .  E8 570CFEFF      call <jmp.&MSVBVM60.__vbaVa>;  累加,MUL的结果累加
004205AD   .  8BD0             mov edx,eax
……
00420608   .  E8 2D0CFEFF      call <jmp.&MSVBVM60.__vbaVa>
0042060D   .  8985 4CFEFFFF    mov dword ptr ss:[ebp-1B4],>
00420613   >  83BD 4CFEFFFF 00 cmp dword ptr ss:[ebp-1B4],>
0042061A   .^ 0F85 4AFDFFFF    jnz CRACKME5.0042036A       ;  计算注册名的循环,在这个循环里:注册名的ASCII码依次平方并累加结果,这里是:58395D
00420620   .  8D45 8C          lea eax,dword ptr ss:[ebp-7>
00420623   .  50               push eax
00420624   .  8D45 8C          lea eax,dword ptr ss:[ebp-7>
00420627   .  50               push eax
00420628   .  8D45 8C          lea eax,dword ptr ss:[ebp-7>
0042062B   .  50               push eax
0042062C   .  8D85 64FFFFFF    lea eax,dword ptr ss:[ebp-9>
00420632   .  50               push eax
00420633   .  E8 080CFEFF      call <jmp.&MSVBVM60.__vbaVa>;  Mul:累加结果E41B再平方一次:E41B * E41B=CB401AD9
00420638   .  50               push eax
00420639   .  8D85 54FFFFFF    lea eax,dword ptr ss:[ebp-A>
0042063F   .  50               push eax
00420640   .  E8 BF0BFEFF      call <jmp.&MSVBVM60.__vbaVa>;  与注册名ASCII累加值相加,得到真注册码
00420645   .  8BD0             mov edx,eax
……
00420701   >  83A5 44FEFFFF 00 and dword ptr ss:[ebp-1BC],>
00420708   >  8B85 78FFFFFF    mov eax,dword ptr ss:[ebp-8>;  假注册码:123456
0042070E   .  8985 48FEFFFF    mov dword ptr ss:[ebp-1B8],>
00420714   .  83A5 78FFFFFF 00 and dword ptr ss:[ebp-88],0
0042071B   .  8B85 48FEFFFF    mov eax,dword ptr ss:[ebp-1>
00420721   .  8985 6CFFFFFF    mov dword ptr ss:[ebp-94],e>
00420727   .  C785 64FFFFFF 08>mov dword ptr ss:[ebp-9C],8>
00420731   .  8D85 64FFFFFF    lea eax,dword ptr ss:[ebp-9>
00420737   .  50               push eax
00420738   .  8D45 BC          lea eax,dword ptr ss:[ebp-4>
0042073B   .  50               push eax
0042073C   .  E8 B70AFEFF      call <jmp.&MSVBVM60.__vbaVa>;  比较
00420741   .  66:8985 78FEFFFF mov word ptr ss:[ebp-188],a>
00420748   .  8D8D 74FFFFFF    lea ecx,dword ptr ss:[ebp-8>
0042074E   .  E8 8D0AFEFF      call <jmp.&MSVBVM60.__vbaFr>
00420753   .  8D8D 64FFFFFF    lea ecx,dword ptr ss:[ebp-9>
00420759   .  E8 A00AFEFF      call <jmp.&MSVBVM60.__vbaFr>
0042075E   .  0FBF85 78FEFFFF  movsx eax,word ptr ss:[ebp->
00420765   .  85C0             test eax,eax
00420767   .  0F84 55010000    je CRACKME5.004208C2        ;  不相等则跳走,注册失败

总结:
name:wofan
相应的ASCII码:
77 6F 66 61 6E

注册机:
unit M_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,StdCtrls; //加上stdCtrls 让它支持添加控件

type
  TM_Form = class(TForm)
  private
  Procedure wofanCreate(var Tmessage);Message WM_CREATE;
  procedure wofanDestroy(var Tmessage); Message WM_DESTROY;
  Procedure wofanTime(var Tmessage);Message WM_TIMER;
  procedure wofanInit;      //M_Form init
  procedure wofanConGen;    //生成控件
  Procedure Btn_OKClick(sender:TObject);
  procedure Btn_AboutClick(sender:TObject);
  Procedure Btn_CancelClick(sender:TObject);
  procedure Edt_NameChange(sender:TOBject);
  procedure RegGen;
//  Procedure Edt_CodeChange(sender:TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  M_Form: TM_Form;
/////////////////////////////////////////////
  Btn_OK,Btn_Cancel,Btn_About:TButton;
  Edt_Name,Edt_Code:TEdit;
  Lbl_Name,Lbl_Code,Lbl_wofan:TLabel;
/////////////////////////////////////////////
const
  MB_Hint='wofan[OCN]Crackme_Keygen';
  Time=6000;  //记时器控件ID
implementation

{$R *.dfm}

{ TM_Form }

procedure TM_Form.Btn_AboutClick(sender: TObject);
begin
  MessageBox(0,MB_Hint,'wofan[OCN]欢迎你',MB_ICONINFORMATION or MB_OK);
end;

procedure TM_Form.Btn_CancelClick(sender: TObject);
begin
  self.Close;
end;

procedure TM_Form.Btn_OKClick(sender: TObject);
begin
  RegGen;
end;

procedure TM_Form.Edt_NameChange(sender: TOBject);
Begin
  RegGen;
end;

procedure TM_Form.RegGen;
var
  title:string;
  text:string;

  HiCode:longword;
  LoCode:longword;
  name:string;
begin
  Title:='提示';
  Text:='注册名不能为空格!';
  name:=Edt_Name.Text;
  HiCode:=0;
  LoCode:=0;
  asm
    push ESI
    mov ESI,DWORD PTR SS:[name]
    JNE @Err
    XOR EAX,EAX
    XOR EDI,EDI
@Cal:
    mov AL,BYTE PTR DS:[ESI]
    AND EAX,0FFH
    TEST EAX,EAX
    JE @OK
    MUL AL
    ADD EDI,EAX    //ASCII的平方结果的累加
    INC ESI
    JMP @Cal
@OK:
    XOR EAX,EAX
    MOV EAX,EDI
    XOR EDX,EDX
    IMUL EAX       //累加值的结果再平方
    ADD EAX,EDI
    ADC EDX,0
    mov HiCode,EDX
    mov LoCode,EAX
    JMP @End
@Err:
    push 0
    MOV EAX,DWORD PTR SS:[Title]
    PUSH EAX
    MOV EAX,DWORD PTR SS:[Text]
    PUSH EAX
    PUSH MB_OK
    Call MessageBox      //提示:注册名开始字符为空,这是不允许的
@End:
  End;
  Edt_Code.text:=inttostr(HiCode*$100000000+LoCode);
end;

procedure TM_Form.wofanConGen;
begin
Lbl_Name:=Tlabel.Create(self);
Lbl_Code:=Tlabel.Create(self);
Lbl_wofan:=Tlabel.Create(self);
Btn_OK:=TButton.Create(self);
Btn_Cancel:=TButton.Create(self);
Btn_About:=TButton.Create(self);
Edt_Name:=TEdit.Create(self);
Edt_Code:=TEdit.Create(self);
  with Lbl_Name do
  Begin
    Parent:=self;
    left:=5;
    top:=10;
    caption:='注册名:';
    height:=25;
    width:=60;
  End;
  with Lbl_Code do
  Begin
    Parent:=self;
    left:=5;
    top:=35;
    caption:='注册码:';
    height:=25;
    width:=60;
  End;
  with Lbl_wofan do
  Begin
    Parent:=self;
    left:=150;
    top:=90;
    caption:='wofan[OCN]';
    height:=25;
    width:=80;
    Font.color:=clred;
  End;
  with Edt_Name do
  Begin
    Parent:=self;
    left:=65;
    top:=5;
    height:=25;
    width:=160;
    Text:='wofan';
    AutoSelect :=false;
    OnChange:=Edt_NameChange;
  End;
  with Edt_Code do
  Begin
    Parent:=self;
    left:=65;
    top:=30;
    height:=25;
    width:=160;
  End;

  with Btn_OK do
  Begin
    Parent:=self;
    left:=20;
    top:=60;
    height:=20;
    width:=60;
    caption:='确定';
    onClick:=Btn_OKClick;
  End;
  with Btn_Cancel do
  Begin
    Parent:=self;
    left:=150;
    top:=60;
    height:=20;
    width:=60;
    caption:='退出';
    Onclick:=Btn_CancelClick;
  End;
  with Btn_About do
  Begin
    Parent:=self;
    left:=85;
    top:=60;
    height:=20;
    width:=60;
    caption:='关于';
    Onclick:=Btn_AboutClick;
  End;
end;

procedure TM_Form.wofanCreate(var Tmessage);
begin
  wofanInit;
  wofanConGen;
  SetTimer(self.Handle ,6000,60,nil); //启动计时器
end;

procedure TM_Form.wofanDestroy(var Tmessage);
begin
  KillTimer(0,6000);
end;

procedure TM_Form.wofanInit;
begin
  self.Width :=240;
  self.Height :=140;
  self.Caption :=MB_Hint;
end;

procedure TM_Form.wofanTime(var Tmessage);
begin
  if Lbl_wofan.Left<0-Lbl_wofan.Width   then
  Begin
    Lbl_wofan.Left:=160 ; //这里只能自行设定一个值了
  End
  else
  Begin
    Lbl_wofan.Left:=Lbl_wofan.Left-2;
  End;
end;

end.


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
支持一下!~~~~~~~~``
2006-10-19 15:25
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
3
注册机delphi工程文件等打包发来,学习了。
2006-10-19 16:35
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
支持  
2006-10-19 16:40
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
5
内联汇编,学习了~~
2006-10-19 17:56
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
6
最初由 china 发布
注册机delphi工程文件等打包发来,学习了。

惭愧,没什么好东东,依你所说,打包上来吧。
上传的附件:
2006-10-19 18:30
0
雪    币: 3688
活跃值: (4242)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
7
怎么画出控件部分了,作出来的程序还这么大啊
2006-10-19 20:45
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
最初由 china 发布
怎么画出控件部分了,作出来的程序还这么大啊


做这个程序时,我其实就只启动Delphi,新建一个Application,然后就写代码,并未拖放任何一个控件。
画出控件,为了在DeDe中看不到控件信息。及有关事件过程。这个程序用DeDe载入,什么也看不到。但是它倒底还是在IDE中编写的,那个Form上不写任何东西,也会有这么大的。
2006-10-19 21:58
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
9
明码比较,而且算法也比较简单哦,好少见这么好将的VB了。嘻嘻

.版本 2

name = 编辑框1.内容
len = 取文本长度 (name)
code = 0
如果 (取代码 (name, 1) ≠ 32)
.计次循环首 (len, i)
    sum = 取代码 (name, i)
    sum = sum × sum
    code = code + sum
.计次循环尾 ()
编辑框2.内容 = 到文本 (code × code + code)
2006-10-20 00:07
0
雪    币: 560
活跃值: (359)
能力值: ( LV13,RANK:1370 )
在线值:
发帖
回帖
粉丝
10
支持,有时候写注册机时用内联汇编确实带来不少方便之处.
2006-10-20 10:52
0
游客
登录 | 注册 方可回帖
返回
//