• 标 题:饼干Flash播放器 V1.92-算法+注册机源码  
  • 作 者:2003/04/16 00:20am
  • 时 间: HMILYBCG
  • 链 接:http://bbs.pediy.com

破解者:HMILY[CCG][BCG]
软件名称:饼干Flash播放器 V1.92
该软件是用asprotect v1.23加的壳,是重启验证注册码
脱壳后反汇编有以下内容:
有两部分机器码,在此设第一部分为x1,第二部分为x2

* Possible StringData Ref from Code Obj ->"Code"
                                 |
:0048D38C B9A0D54800              mov ecx, 0048D5A0

* Possible StringData Ref from Code Obj ->"Registy"
                                 |
:0048D391 BAB0D54800              mov edx, 0048D5B0
:0048D396 8B18                    mov ebx, dword ptr [eax]
:0048D398 FF13                    call dword ptr [ebx]
:0048D39A 8B9550FFFFFF            mov edx, dword ptr [ebp+FFFFFF50]
:0048D3A0 8B860C030000            mov eax, dword ptr [esi+0000030C]
:0048D3A6 E8A1F0FAFF              call 0043C44C
:0048D3AB 8D954CFFFFFF            lea edx, dword ptr [ebp+FFFFFF4C]
:0048D3B1 8B860C030000            mov eax, dword ptr [esi+0000030C]
:0048D3B7 E860F0FAFF              call 0043C41C
:0048D3BC 8B854CFFFFFF            mov eax, dword ptr [ebp+FFFFFF4C]
:0048D3C2 50                      push eax
:0048D3C3 8D9544FFFFFF            lea edx, dword ptr [ebp+FFFFFF44]
:0048D3C9 8B8604030000            mov eax, dword ptr [esi+00000304]
:0048D3CF E848F0FAFF              call 0043C41C
:0048D3D4 8B8544FFFFFF            mov eax, dword ptr [ebp+FFFFFF44]
:0048D3DA E851B7F7FF              call 00408B30 ->把x1转换为十六进制
:0048D3DF 8BD8                    mov ebx, eax  ->保存x1到ebx
:0048D3E1 C1E305                  shl ebx, 05   ->ebx=ebx<<5
:0048D3E4 2BD8                    sub ebx, eax  ->ebx=ebx-x1
:0048D3E6 81EB41010000            sub ebx, 00000141 ->ebx=ebx-0x141
:0048D3EC 8D9540FFFFFF            lea edx, dword ptr [ebp+FFFFFF40]
:0048D3F2 8B8604030000            mov eax, dword ptr [esi+00000304]
:0048D3F8 E81FF0FAFF              call 0043C41C
:0048D3FD 8B8540FFFFFF            mov eax, dword ptr [ebp+FFFFFF40]
:0048D403 E828B7F7FF              call 00408B30 ->再取一次x1到eax
:0048D408 03D8                    add ebx, eax  ->ebx=ebx+eax
:0048D40A 8D953CFFFFFF            lea edx, dword ptr [ebp+FFFFFF3C]
:0048D410 8B8608030000            mov eax, dword ptr [esi+00000308]
:0048D416 E801F0FAFF              call 0043C41C ->取x2
:0048D41B 8B853CFFFFFF            mov eax, dword ptr [ebp+FFFFFF3C] ->x2传入eax
:0048D421 E80AB7F7FF              call 00408B30                     ->转换x2为十六进制
:0048D426 C1E002                  shl eax, 02                       ->eax=x2<<2
:0048D429 03D8                    add ebx, eax                      ->累加 ebx=ebx+eax
:0048D42B 8D9538FFFFFF            lea edx, dword ptr [ebp+FFFFFF38]
:0048D431 8B8608030000            mov eax, dword ptr [esi+00000308]
:0048D437 E8E0EFFAFF              call 0043C41C
:0048D43C 8B8538FFFFFF            mov eax, dword ptr [ebp+FFFFFF38] ->再取一次x2
:0048D442 E8E9B6F7FF              call 00408B30                     ->转换x2为十六进制
:0048D447 8D0480                  lea eax, dword ptr [eax+4*eax] ->取eax+eax*4的地址到eax
:0048D44A 2D86000000              sub eax, 00000086              ->eax=eax-0x86
:0048D44F 03D8                    add ebx, eax              ->ebx的值一直是累加 ebx=ebx+eax
:0048D451 8D045B                  lea eax, dword ptr [ebx+2*ebx] ->取ebx+ebx*2的地址到eax
:0048D454 2DE74D0000              sub eax, 00004DE7 ->eax=eax-0x4de7 过这里下 ? eax得真码
:0048D459 8D9548FFFFFF            lea edx, dword ptr [ebp+FFFFFF48]
:0048D45F E868B6F7FF              call 00408ACC
:0048D464 8B9548FFFFFF            mov edx, dword ptr [ebp+FFFFFF48] ->真码进edx
:0048D46A 58                      pop eax                           ->假码栈
:0048D46B E8CC75F7FF              call 00404A3C                     ->比较注册码
:0048D470 754F                    jne 0048D4C1                      ->不相等跳
:0048D472 A168B94900              mov eax, dword ptr [0049B968]
:0048D477 8B00                    mov eax, dword ptr [eax]
:0048D479 8B80D4030000            mov eax, dword ptr [eax+000003D4]
:0048D47F B201                    mov dl, 01
:0048D481 8B08                    mov ecx, dword ptr [eax]
:0048D483 FF51FC                  call [ecx-04]
:0048D486 C70560CD490001000000    mov dword ptr [0049CD60], 00000001 ->注册标记
:0048D490 A190BC4900              mov eax, dword ptr [0049BC90]
:0048D495 8B00                    mov eax, dword ptr [eax]
:0048D497 8B80F8020000            mov eax, dword ptr [eax+000002F8]

* Possible StringData Ref from Code Obj ->"已注册版本"
                                 |
:0048D49D BAC0D54800              mov edx, 0048D5C0
:0048D4A2 E8A5EFFAFF              call 0043C44C
:0048D4A7 A190BC4900              mov eax, dword ptr [0049BC90]
:0048D4AC 8B00                    mov eax, dword ptr [eax]
:0048D4AE 8B80F8020000            mov eax, dword ptr [eax+000002F8]
:0048D4B4 8B4068                  mov eax, dword ptr [eax+68]
:0048D4B7 BA00800000              mov edx, 00008000
:0048D4BC E8B73EF9FF              call 00421378

该软件是用:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
下的:RegisteredOwner值做为机器码的计算基数,即你计算机的安装名称!
注册码保存到BGFplayer.ini下的[Registy]
                            Code=884947

注册机源码:
//---------------------------------------------------------------------------
void __fastcall Tform1::OKBtnClick(TObject *Sender)
{
int a1=0,a2=0;unsigned long e=0,f=0,g=0,h=0;
if(UEdit->Text!=""&&UEdit1->Text!="")
  {
   a1=StrToInt(UEdit->Text);a2=StrToInt(UEdit1->Text);
   e=(a1<<5)-a1-0x141+a1;
   f=(a2<<2)+e;
   g=a2+a2*4-0x86+f;
   h=g+g*2-0x4de7;
   CEdit->Text=h;
  }
}