首页
社区
课程
招聘
超级简单的算法:录屏 v4.1 注册算法
发表于: 2005-7-5 16:10 5242

超级简单的算法:录屏 v4.1 注册算法

2005-7-5 16:10
5242
【软件】录屏 v4.1
【作者】forever[RCT]
【语言】borland c++ builder
【保护】注册码
【工具】dede,ida
【简介】
        《录屏》 是一款用于将屏幕操作过程及解说录制为演示文件的好工具。记录时采用音频与视频同步,并分开记录为*.AVI(音频),*.AVI.XXX(视频)。便于对文件*.AVI.XXX进行的编辑,可发布的格式为标准的AVI文件,或FLASH文件。  
【正文】
         这个软件的算法超级简单,但是做注册机却是让我头疼了一阵子.dede中载入,很容易找到下面的关键点。

.text:004E2AE4 _TForm9_SpeedButton2Click proc near     ; DATA XREF: .data:0054471Eo
.text:004E2AE4
.text:004E2AE4 Data            = byte ptr -8Ch
.text:004E2AE4 var_6C          = dword ptr -6Ch
.text:004E2AE4 var_68          = dword ptr -68h
.text:004E2AE4 var_64          = dword ptr -64h
.text:004E2AE4 var_60          = dword ptr -60h
.text:004E2AE4 var_5C          = dword ptr -5Ch
.text:004E2AE4 var_58          = dword ptr -58h
.text:004E2AE4 var_54          = dword ptr -54h
.text:004E2AE4 var_44          = word ptr -44h
.text:004E2AE4 var_38          = dword ptr -38h
.text:004E2AE4 var_30          = dword ptr -30h
.text:004E2AE4 var_2C          = dword ptr -2Ch
.text:004E2AE4 var_28          = dword ptr -28h
.text:004E2AE4 var_24          = dword ptr -24h
.text:004E2AE4 var_20          = dword ptr -20h
.text:004E2AE4 var_1C          = dword ptr -1Ch
.text:004E2AE4 var_18          = dword ptr -18h
.text:004E2AE4 var_14          = dword ptr -14h
.text:004E2AE4 var_10          = dword ptr -10h
.text:004E2AE4 var_C           = dword ptr -0Ch
.text:004E2AE4 var_8           = dword ptr -8
.text:004E2AE4 var_4           = dword ptr -4
.text:004E2AE4
.text:004E2AE4                 push    ebp
.text:004E2AE5                 mov     ebp, esp
.text:004E2AE7                 add     esp, 0FFFFFF74h
.text:004E2AED                 push    ebx
.text:004E2AEE                 mov     [ebp+var_5C], edx
.text:004E2AF1                 mov     [ebp+var_58], eax
.text:004E2AF4                 mov     eax, offset stru_5441B4
.text:004E2AF9                 call    @__InitExceptBlockLDTC
.text:004E2AFE                 mov     edx, [ebp+var_58]
.text:004E2B01                 add     edx, 318h
.text:004E2B07                 push    edx             ; phkResult
.text:004E2B08                 push    2001Fh          ; samDesired
.text:004E2B0D                 push    0               ; ulOptions
.text:004E2B0F                 push    offset aSoftwareTrac_7 ; lpSubKey
.text:004E2B14                 push    80000001h       ; hKey
.text:004E2B19                 call    RegOpenKeyExA
.text:004E2B1E                 test    eax, eax
.text:004E2B20                 jnz     loc_4E2F7F
.text:004E2B26                 mov     ecx, [ebp+var_58]
.text:004E2B29                 mov     dword ptr [ecx+328h], 6
.text:004E2B33                 mov     eax, [ebp+var_58]
.text:004E2B36                 add     eax, 328h
.text:004E2B3B                 push    eax             ; lpcbData
.text:004E2B3C                 lea     edx, [ebp+Data]
.text:004E2B42                 push    edx             ; lpData
.text:004E2B43                 mov     ecx, [ebp+var_58]
.text:004E2B46                 add     ecx, 324h
.text:004E2B4C                 push    ecx             ; lpType
.text:004E2B4D                 push    0               ; lpReserved
.text:004E2B4F                 push    offset aMm_0    ; lpValueName
.text:004E2B54                 mov     eax, [ebp+var_58]
.text:004E2B57                 push    dword ptr [eax+318h] ; hKey
.text:004E2B5D                 call    RegQueryValueExA ; 查询出副本序号
.text:004E2B62                 mov     [ebp+var_44], 8
.text:004E2B68                 lea     eax, [ebp+var_4]
.text:004E2B6B                 call    unknown_libname_196
.text:004E2B70                 inc     [ebp+var_38]
.text:004E2B73                 mov     [ebp+var_44], 14h
.text:004E2B79                 mov     [ebp+var_44], 20h
.text:004E2B7F                 lea     eax, [ebp+var_8]
.text:004E2B82                 call    unknown_libname_196
.text:004E2B87                 inc     [ebp+var_38]
.text:004E2B8A                 mov     [ebp+var_44], 14h
.text:004E2B90                 mov     [ebp+var_44], 2Ch
.text:004E2B96                 lea     edx, [ebp+Data]
.text:004E2B9C                 lea     eax, [ebp+var_C]
.text:004E2B9F                 call    sub_4F3190
.text:004E2BA4                 inc     [ebp+var_38]
.text:004E2BA7                 lea     edx, [ebp+var_C]
.text:004E2BAA                 lea     eax, [ebp+var_4] ; 赋值到这里
.text:004E2BAD                 call    System::AnsiString::operator=(System::AnsiString &)
.text:004E2BB2                 dec     [ebp+var_38]
.text:004E2BB5                 lea     eax, [ebp+var_C]
.text:004E2BB8                 mov     edx, 2
.text:004E2BBD                 call    System::AnsiString::~AnsiString(void)
.text:004E2BC2                 lea     eax, [ebp+var_4]
.text:004E2BC5                 call    System::AnsiString::Length(void)
.text:004E2BCA                 mov     ecx, eax
.text:004E2BCC                 add     ecx, -6
.text:004E2BCF                 lea     eax, [ebp+var_4]
.text:004E2BD2                 mov     edx, 7
.text:004E2BD7                 call    System::AnsiString::Delete(int,int)
.text:004E2BDC                 mov     edx, eax        ; 取前6个字符
.text:004E2BDE                 lea     eax, [ebp+var_8]
.text:004E2BE1                 call    System::AnsiString::operator=(System::AnsiString &)
.text:004E2BE6                 xor     ecx, ecx
.text:004E2BE8                 mov     [ebp+var_60], ecx ; var_60清零
.text:004E2BEB                 mov     [ebp+var_44], 14h
.text:004E2BF1                 jmp     loc_4E2F23

.text:004E2BF6 loc_4E2BF6:                           
.text:004E2BF6                 xor     eax, eax
.text:004E2BF8                 mov     [ebp+var_68], eax ; var_68 清零
.text:004E2BFB                 mov     [ebp+var_44], 14h
.text:004E2C01                 jmp     loc_4E2EF8

.text:004E2C06 loc_4E2C06:                             
.text:004E2C06                 mov     [ebp+var_44], 38h
.text:004E2C0C                 lea     eax, [ebp+var_10]
.text:004E2C0F                 call    unknown_libname_196
.text:004E2C14                 mov     edx, eax
.text:004E2C16                 inc     [ebp+var_38]
.text:004E2C19                 mov     ecx, [ebp+var_58]
.text:004E2C1C                 mov     eax, [ecx+2F8h]
.text:004E2C22                 call    TControl::GetText(void) ; 取第3组注册码
.text:004E2C27                 lea     edx, [ebp+var_10]
.text:004E2C2A                 push    edx
.text:004E2C2B                 lea     eax, [ebp+var_14]
.text:004E2C2E                 call    unknown_libname_196
.text:004E2C33                 mov     ecx, eax
.text:004E2C35                 inc     [ebp+var_38]
.text:004E2C38                 mov     eax, offset a0x ; "0x"
.text:004E2C3D                 pop     edx
.text:004E2C3E                 call    System::operator+(char *,System::AnsiString &)
.text:004E2C43                 lea     eax, [ebp+var_14]
.text:004E2C46                 mov     eax, [eax]
.text:004E2C48                 call    Sysutils::StrToInt(System::AnsiString)
.text:004E2C4D                 mov     ebx, eax        ; 转成16进制数字在ebx
.text:004E2C4F                 lea     eax, [ebp+var_18]
.text:004E2C52                 call    unknown_libname_196
.text:004E2C57                 mov     ecx, eax
.text:004E2C59                 inc     [ebp+var_38]
.text:004E2C5C                 lea     edx, [ebp+var_8] ; 副版本号
.text:004E2C5F                 mov     eax, offset a0x_0 ; "0x"
.text:004E2C64                 call    System::operator+(char *,System::AnsiString &)
.text:004E2C69                 lea     eax, [ebp+var_18]
.text:004E2C6C                 mov     eax, [eax]
.text:004E2C6E                 call    Sysutils::StrToInt(System::AnsiString)
.text:004E2C73                 sub     ebx, eax        ; 第3组注册码减去副版本号
.text:004E2C75                 mov     edx, [ebp+var_58]
.text:004E2C78                 mov     ecx, [edx+300h]
.text:004E2C7E                 mov     eax, [ecx+168h]
.text:004E2C84                 call    unknown_libname_633
.text:004E2C89                 call    Graphics::TBitmap::GetCanvas(void)
.text:004E2C8E                 mov     ecx, [ebp+var_68] ; var_68(高度)
.text:004E2C91                 mov     edx, [ebp+var_60] ; var_60(宽度)
.text:004E2C94                 call    Graphics::TCanvas::GetPixel(int,int)
.text:004E2C99                 cmp     ebx, eax        ; 取点颜色比较
.text:004E2C9B                 setz    al
.text:004E2C9E                 and     eax, 1
.text:004E2CA1                 push    eax
.text:004E2CA2                 dec     [ebp+var_38]
.text:004E2CA5                 lea     eax, [ebp+var_18]
.text:004E2CA8                 mov     edx, 2
.text:004E2CAD                 call    System::AnsiString::~AnsiString(void)
.text:004E2CB2                 dec     [ebp+var_38]
.text:004E2CB5                 lea     eax, [ebp+var_14]
.text:004E2CB8                 mov     edx, 2
.text:004E2CBD                 call    System::AnsiString::~AnsiString(void)
.text:004E2CC2                 dec     [ebp+var_38]
.text:004E2CC5                 lea     eax, [ebp+var_10]
.text:004E2CC8                 mov     edx, 2
.text:004E2CCD                 call    System::AnsiString::~AnsiString(void)
.text:004E2CD2                 pop     ecx
.text:004E2CD3                 test    cl, cl
.text:004E2CD5                 jz      loc_4E2EF5      ; 比较不等这里则跳走
.text:004E2CDB                 mov     [ebp+var_44], 44h
.text:004E2CE1                 lea     eax, [ebp+var_1C]
.text:004E2CE4                 call    unknown_libname_196
.text:004E2CE9                 inc     [ebp+var_38]
.text:004E2CEC                 mov     [ebp+var_44], 50h
.text:004E2CF2                 mov     [ebp+var_44], 5Ch
.text:004E2CF8                 lea     eax, [ebp+var_20]
.text:004E2CFB                 call    unknown_libname_196
.text:004E2D00                 inc     [ebp+var_38]
.text:004E2D03                 mov     [ebp+var_44], 50h
.text:004E2D09                 mov     [ebp+var_44], 68h
.text:004E2D0F                 lea     eax, [ebp+var_24]
.text:004E2D12                 call    unknown_libname_196
.text:004E2D17                 inc     [ebp+var_38]
.text:004E2D1A                 mov     [ebp+var_44], 50h
.text:004E2D20                 mov     [ebp+var_44], 74h
.text:004E2D26                 lea     eax, [ebp+var_28]
.text:004E2D29                 call    unknown_libname_196
.text:004E2D2E                 mov     edx, eax
.text:004E2D30                 inc     [ebp+var_38]
.text:004E2D33                 mov     eax, [ebp+var_60] ; 宽度索引
.text:004E2D36                 call    Sysutils::IntToStr(int)
.text:004E2D3B                 lea     edx, [ebp+var_28]
.text:004E2D3E                 lea     eax, [ebp+var_1C]
.text:004E2D41                 call    System::AnsiString::operator=(System::AnsiString &)
.text:004E2D46                 dec     [ebp+var_38]
.text:004E2D49                 lea     eax, [ebp+var_28]
.text:004E2D4C                 mov     edx, 2
.text:004E2D51                 call    System::AnsiString::~AnsiString(void)
.text:004E2D56                 mov     [ebp+var_44], 80h
.text:004E2D5C                 lea     eax, [ebp+var_2C]
.text:004E2D5F                 call    unknown_libname_196
.text:004E2D64                 mov     edx, eax
.text:004E2D66                 inc     [ebp+var_38]
.text:004E2D69                 mov     eax, [ebp+var_68] ; 高度索引
.text:004E2D6C                 call    Sysutils::IntToStr(int)
.text:004E2D71                 lea     edx, [ebp+var_2C]
.text:004E2D74                 lea     eax, [ebp+var_20]
.text:004E2D77                 call    System::AnsiString::operator=(System::AnsiString &)
.text:004E2D7C                 dec     [ebp+var_38]
.text:004E2D7F                 lea     eax, [ebp+var_2C]
.text:004E2D82                 mov     edx, 2
.text:004E2D87                 call    System::AnsiString::~AnsiString(void)
.text:004E2D8C                 mov     [ebp+var_44], 8Ch
.text:004E2D92                 mov     ecx, [ebp+var_58]
.text:004E2D95                 mov     eax, [ecx+300h]
.text:004E2D9B                 mov     eax, [eax+168h]
.text:004E2DA1                 call    unknown_libname_633
.text:004E2DA6                 call    Graphics::TBitmap::GetCanvas(void)
.text:004E2DAB                 mov     ecx, [ebp+var_68]
.text:004E2DAE                 mov     edx, [ebp+var_60]
.text:004E2DB1                 call    Graphics::TCanvas::GetPixel(int,int)
.text:004E2DB6                 push    eax             ; 取颜色值
.text:004E2DB7                 lea     eax, [ebp+var_30]
.text:004E2DBA                 call    unknown_libname_196
.text:004E2DBF                 mov     ecx, eax
.text:004E2DC1                 inc     [ebp+var_38]
.text:004E2DC4                 mov     edx, 6
.text:004E2DC9                 pop     eax
.text:004E2DCA                 call    Sysutils::IntToHex(int,int)
.text:004E2DCF                 lea     edx, [ebp+var_30]
.text:004E2DD2                 lea     eax, [ebp+var_24]
.text:004E2DD5                 call    System::AnsiString::operator=(System::AnsiString &)
.text:004E2DDA                 dec     [ebp+var_38]
.text:004E2DDD                 lea     eax, [ebp+var_30]
.text:004E2DE0                 mov     edx, 2
.text:004E2DE5                 call    System::AnsiString::~AnsiString(void)
.text:004E2DEA                 mov     ecx, [ebp+var_58]
.text:004E2DED                 add     ecx, 320h
.text:004E2DF3                 push    ecx             ; lpdwDisposition
.text:004E2DF4                 mov     eax, [ebp+var_58]
.text:004E2DF7                 add     eax, 31Ch
.text:004E2DFC                 push    eax             ; phkResult
.text:004E2DFD                 push    0               ; lpSecurityAttributes
.text:004E2DFF                 push    0F003Fh         ; samDesired
.text:004E2E04                 push    0               ; dwOptions
.text:004E2E06                 push    offset unk_543F8F ; lpClass
.text:004E2E0B                 push    0               ; Reserved
.text:004E2E0D                 push    offset aSoftwareTrac_8 ; lpSubKey
.text:004E2E12                 push    80000001h       ; hKey
.text:004E2E17                 call    RegCreateKeyExA
.text:004E2E1C                 lea     eax, [ebp+var_1C]
.text:004E2E1F                 call    System::AnsiString::Length(void)
.text:004E2E24                 push    eax             ; cbData
.text:004E2E25                 lea     eax, [ebp+var_1C]
.text:004E2E28                 call    System::AnsiString::c_str(void)
.text:004E2E2D                 push    eax             ; lpData
.text:004E2E2E                 push    1               ; dwType
.text:004E2E30                 push    0               ; Reserved
.text:004E2E32                 push    offset aXd      ; lpValueName
.text:004E2E37                 mov     edx, [ebp+var_58]
.text:004E2E3A                 push    dword ptr [edx+31Ch] ; hKey
.text:004E2E40                 call    RegSetValueExA
.text:004E2E45                 lea     eax, [ebp+var_20]
.text:004E2E48                 call    System::AnsiString::Length(void)
.text:004E2E4D                 push    eax             ; cbData
.text:004E2E4E                 lea     eax, [ebp+var_20]
.text:004E2E51                 call    System::AnsiString::c_str(void)
.text:004E2E56                 push    eax             ; lpData
.text:004E2E57                 push    1               ; dwType
.text:004E2E59                 push    0               ; Reserved
.text:004E2E5B                 push    offset aYd      ; lpValueName
.text:004E2E60                 mov     edx, [ebp+var_58]
.text:004E2E63                 push    dword ptr [edx+31Ch] ; hKey
.text:004E2E69                 call    RegSetValueExA
.text:004E2E6E                 lea     eax, [ebp+var_24]
.text:004E2E71                 call    System::AnsiString::Length(void)
.text:004E2E76                 push    eax             ; cbData
.text:004E2E77                 lea     eax, [ebp+var_24]
.text:004E2E7A                 call    System::AnsiString::c_str(void)
.text:004E2E7F                 push    eax             ; lpData
.text:004E2E80                 push    3               ; dwType
.text:004E2E82                 push    0               ; Reserved
.text:004E2E84                 push    offset aCd      ; lpValueName
.text:004E2E89                 mov     edx, [ebp+var_58]
.text:004E2E8C                 push    dword ptr [edx+31Ch] ; hKey
.text:004E2E92                 call    RegSetValueExA
.text:004E2E97                 mov     ecx, [ebp+var_58]
.text:004E2E9A                 push    dword ptr [ecx+31Ch] ; hKey
.text:004E2EA0                 call    RegCloseKey
.text:004E2EA5                 push    40h             ; uType
.text:004E2EA7                 push    offset aVSV     ; lpCaption  '注册信息'
.text:004E2EAC                 push    offset aVSJZGb  ; lpText '注册成功,感谢您的支持!'
.text:004E2EB1                 mov     eax, [ebp+var_58]
.text:004E2EB4                 call    Controls::TWinControl::GetHandle(void)
.text:004E2EB9                 push    eax             ; hWnd
.text:004E2EBA                 call    MessageBoxA
.text:004E2EBF                 dec     [ebp+var_38]
.text:004E2EC2                 lea     eax, [ebp+var_24]
.text:004E2EC5                 mov     edx, 2
.text:004E2ECA                 call    System::AnsiString::~AnsiString(void)
.text:004E2ECF                 dec     [ebp+var_38]
.text:004E2ED2                 lea     eax, [ebp+var_20]
.text:004E2ED5                 mov     edx, 2
.text:004E2EDA                 call    System::AnsiString::~AnsiString(void)
.text:004E2EDF                 dec     [ebp+var_38]
.text:004E2EE2                 lea     eax, [ebp+var_1C]
.text:004E2EE5                 mov     edx, 2
.text:004E2EEA                 call    System::AnsiString::~AnsiString(void)
.text:004E2EEF                 mov     [ebp+var_44], 14h
.text:004E2EF5
.text:004E2EF5 loc_4E2EF5:                             
.text:004E2EF5                 inc     [ebp+var_68]    ; 高度索引加1
.text:004E2EF8
.text:004E2EF8 loc_4E2EF8:                             
.text:004E2EF8                 mov     ecx, [ebp+var_58]
.text:004E2EFB                 mov     eax, [ecx+300h]
.text:004E2F01                 mov     eax, [eax+168h]
.text:004E2F07                 call    unknown_libname_633 ; 加载一个图片
.text:004E2F0C                 mov     [ebp+var_6C], eax
.text:004E2F0F                 mov     eax, [ebp+var_6C]
.text:004E2F12                 mov     edx, [eax]
.text:004E2F14                 call    dword ptr [edx+20h] ; Graphics::TBitmap::GetHeight(void)
.text:004E2F17                 cmp     eax, [ebp+var_68] ; var_68 小于等于 图片高度 则循环
.text:004E2F1A                 jge     loc_4E2C06
.text:004E2F20                 inc     [ebp+var_60]    ; 宽度索引加1
.text:004E2F23
.text:004E2F23 loc_4E2F23:                             
.text:004E2F23                 mov     ecx, [ebp+var_58]
.text:004E2F26                 mov     eax, [ecx+300h]
.text:004E2F2C                 mov     eax, [eax+168h]
.text:004E2F32                 call    unknown_libname_633 ; 加载一个图片
.text:004E2F37                 mov     [ebp+var_64], eax
.text:004E2F3A                 mov     eax, [ebp+var_64]
.text:004E2F3D                 mov     edx, [eax]
.text:004E2F3F                 call    dword ptr [edx+2Ch] ; Graphics::TBitmap::GetWidth(void)
.text:004E2F42                 cmp     eax, [ebp+var_60] ; var_60 小于等于 图片宽度 则循环
.text:004E2F45                 jge     loc_4E2BF6
.text:004E2F4B                 mov     ecx, [ebp+var_58]
.text:004E2F4E                 push    dword ptr [ecx+318h] ; hKey
.text:004E2F54                 call    RegCloseKey
.text:004E2F59                 dec     [ebp+var_38]
.text:004E2F5C                 lea     eax, [ebp+var_8]
.text:004E2F5F                 mov     edx, 2
.text:004E2F64                 call    System::AnsiString::~AnsiString(void)
.text:004E2F69                 dec     [ebp+var_38]
.text:004E2F6C                 lea     eax, [ebp+var_4]
.text:004E2F6F                 mov     edx, 2
.text:004E2F74                 call    System::AnsiString::~AnsiString(void)
.text:004E2F79                 mov     [ebp+var_44], 0
.text:004E2F7F
.text:004E2F7F loc_4E2F7F:                             
.text:004E2F7F                 mov     eax, [ebp+var_58]
.text:004E2F82                 call    Forms::TCustomForm::Close(void)
.text:004E2F87                 mov     edx, [ebp+var_54]
.text:004E2F8A                 mov     large fs:0, edx
.text:004E2F91                 pop     ebx
.text:004E2F92                 mov     esp, ebp
.text:004E2F94                 pop     ebp
.text:004E2F95                 retn
.text:004E2F95 _TForm9_SpeedButton2Click endp

     上面这段算法其实就是把注册码的第三段转换成十六进制数字然后减去副本序号前六位转换成的十六进制数字,结果作为颜色值.然后在一个图片中找是否有这个颜色值.如果有则注册成功,否则注册失败.可见注册码并不是唯一的.
     要想做注册机找到这个图片是必须的.跟踪一下程序可以知道这个图片的尺寸是88*64,在资源RCDdata -> TForm9中有两个image控件,,一个是image1,尺寸是122*216,另一个是image3,尺寸是88*64,显然就是image3了.但在资源中是文本格式的.用exescope导不出图片来.怎么办呢?
     想想既然是borland的东西,还是由他自己来对付比较好.用delphi建一个工程,新建一个尺寸大一点的窗体,然后把从object Image3: TImage 到 end 之间的文本全部拷贝出来,复制到窗体中.立刻就可以看到是一个人的头像(不会是作者吧?).编译一下,却提示错误.这个好办,在窗体中添加一个image控件,然后再删除就可以了.
     有了图片做注册机就好办了.这个注册算法太简单了就不写代码了.感兴趣的自己试试.

======================================================================
感谢: 所有RCT的成员,所有的朋友,还有您:)
======================================================================
           [全文完]

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
支持!!
2005-7-5 21:42
0
游客
登录 | 注册 方可回帖
返回
//