{"id":259147,"date":"2015-06-11T14:23:02","date_gmt":"2015-06-11T10:23:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=259147"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=259147","title":{"rendered":"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0433\u0440\u044b Charm Solitaire"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a2e\/de4\/11e\/a2ede411e8ee4616943e1558635a4bef.jpg\" alt=\"Charm Solitaire\" align=\"left\"\/><br \/>  \u041b\u0435\u0442 7-8 \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u0438\u0433\u0440\u0430 CharmSolitaire, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0438\u0433\u0440\u0430\u043c\u0438 \u0441 \u0447\u0443\u0436\u043e\u0433\u043e \u0432\u0438\u043d\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439. \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u0430\u0441\u044c\u044f\u043d\u0441. \u0412 \u043d\u0435\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u0438\u0433\u0440\u0443 \u043e\u0442\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0447\u0430\u0441, \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u0412 \u0442\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0432\u0440\u0435\u043c\u044f \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c. \u0414\u0435\u043d\u0435\u0433 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044f \u0431\u044b \u0435\u0435 \u0443\u0434\u0430\u043b\u0438\u043b. \u041d\u043e \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u043b\u0441\u044f \u0432\u0437\u043b\u043e\u043c\u043e\u043c \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041e\u043f\u044b\u0442 \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0437\u0430\u0449\u0438\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a security through obscurity \u043c\u043e\u0436\u0435\u0442 \u0435\u0435 \u043e\u0441\u043b\u0430\u0431\u0438\u0442\u044c.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041a\u043b\u044e\u0447\u0430 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u0442, \u043d\u043e \u043a\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0441\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  <b>\u0412\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a.<\/b><\/p>\n<p>  <\/p>\n<h4>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0442\u044b<\/h4>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0432 IDA, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0433\u0440\u0443 \u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u041a\u043b\u044e\u0447\u00bb. \u0412\u0432\u043e\u0434\u0438\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 123321, \u0438 \u0438\u0449\u0435\u043c \u0447\u0435\u0440\u0435\u0437 ArtMoney.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/013\/55a\/150\/01355a15049e410ab6814a06b93323a0.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0421\u0442\u0430\u0432\u0438\u043c hardware breakpoint \u043d\u0430 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043e\u043a\u043d\u043e \u0438\u0433\u0440\u044b, \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u043e\u043a\u043d\u043e \u0438\u0433\u0440\u044b \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0416\u043c\u0435\u043c OK, \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  \u0416\u043c\u0435\u043c Ctrl + F7 (Run until return), \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0435\u043c \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 dll \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Controls::TWinControl::DefaultHandler(). \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0435\u043c \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 Controls::TControl::GetText(void):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>004C2700:                 call    @Controls@TControl@GetText$qqrv ; Controls::TControl::GetText(void) EIP-&gt;           mov     edx, [ebp+var_8]                 mov     eax, [ebp+var_4]                 call    sub_4C23A8                 test    al, al                 jnz     short loc_4C277C                                  ...                 mov     edx, offset _str_WKeyError.Text                 call    sub_4AF2F8                 ...                 jmp     short loc_4C27D2  loc_4C277C:                 ...                 mov     edx, offset _str_WRegistrationTh.Text                 call    sub_4AF2F8 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 [ebp+var_8] \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u0414\u0430\u043b\u0435\u0435 \u0432\u0438\u0434\u0438\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_4C23A8() \u0438 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434. \u041f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c _str_WKeyError \u0438 _str_WRegistrationThanks \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e sub_4C23A8() \u0438 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043b\u044e\u0447\u0430.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>check_key_4C23A8 proc near                  ...                 mov     [ebp+key_8], edx                 mov     [ebp+this_4], eax                 ...                 mov     [ebp+is_right_key_9], 0                 cmp     [ebp+key_8], 0                 jz      loc_4C257B                                  lea     edx, [ebp+key_copy_28]                 mov     eax, [ebp+key_8]                 call    copy_digits_492734                                  mov     edx, [ebp+key_copy_28]                 mov     eax, ds:pp_key_4F305C                 call    @System@@LStrAsg$qqrv ; System::__linkproc__ LStrAsg(void)                 ...                                  mov     eax, ds:pp_dirname_4F2F54                 push    dword ptr [eax]                 push    offset _str_slash.Text                 push    offset _str_CharmSolitaire.Text                 push    offset _str__udf.Text                 lea     eax, [ebp+udf_filename_2C]                 mov     edx, 4                 call    str_cat_40522C                                  mov     edx, [ebp+udf_filename_2C]          ; %GAME_DIR%\\CharmSolitaire.udf                 mov     eax, [ebp+mem_stream_encrypted_10]                 call    @Classes@TMemoryStream@LoadFromFile$qqrx17System@AnsiString_0 ; Classes::TMemoryStream::LoadFromFile(System::AnsiString)                                  mov     eax, ds:pp_key_4F305C                 cmp     dword ptr [eax], 0                 jz      short loc_4C2496                                  mov     eax, ds:pp_key_4F305C                 mov     eax, [eax]                 call    strlen_40516C                  004C2473:       cmp     eax, 18h                 jnz     short loc_4C2496                  004C2478:       ...   loc_4C25A5:                 mov     al, [ebp+is_right_key_9]                 ...                 retn check_key_4C23A8 endp <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 004C2473 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c 18h, \u0442\u043e \u0435\u0441\u0442\u044c 24 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041e\u041a, \u0441\u0442\u0430\u0432\u0438\u043c \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0432\u0432\u043e\u0434\u0438\u043c \u043a\u043b\u044e\u0447 123456789012345678901234.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>004C2478:       lea     edx, [ebp+var_30]                 mov     eax, ds:pp_key_4F305C                 mov     eax, [eax]                 call    sub_4924D0                                  mov     edx, [ebp+var_30]                 mov     eax, ds:off_4F2C24                 call    @System@@LStrAsg$qqrv ; System::__linkproc__ LStrAsg(void)                 jmp     short loc_4C24A5 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 sub_4924D0 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 int64  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>key_to_hex_4924D0 proc near                 ...                 mov     [ebp+p_res_10], edx                 mov     [ebp+key_C], eax                 ...                 lea     edx, [ebp+key_copy_24]                 mov     eax, [ebp+key_C]                 call    copy_digits_492734                                  mov     eax, [ebp+key_copy_24]                 lea     edx, [ebp+mixed_str_14]                 call    mix_symbols_492688                                  lea     eax, [ebp+mixed_str_14]                 mov     ecx, 3                 mov     edx, 1                 call    delete_symbols_40540C                 jmp     short loc_492539  loc_492527:                 lea     eax, [ebp+mixed_str_14]                 mov     ecx, 1                 mov     edx, 1                 call    delete_symbols_40540C loc_492539:                 mov     eax, [ebp+mixed_str_14]                 cmp     byte ptr [eax], 30h ; '0'                 jz      short loc_492527            ; delete leading zeros                                  push    0       ; default value                 push    0       ; default value                 mov     eax, [ebp+mixed_str_14]                 call    @Sysutils@StrToInt64Def$qqrx17System@AnsiStringj ; Sysutils::StrToInt64Def(System::AnsiString,__int64)                 mov     [ebp+v64lo_8], eax                 mov     [ebp+v64hi_4], edx                                  mov     eax, [ebp+p_res_10]                 call    @System@@LStrClr$qqrr17System@AnsiString ; System::__linkproc__ LStrClr(System::AnsiString &)                 mov     [ebp+i_18], 1  loc_492562:                 mov     eax, [ebp+i_18]                 test    byte ptr [ebp+eax-1+v64lo_8], 7Fh                 jbe     short loc_49258C                                  lea     eax, [ebp+char_str_28]                 mov     edx, [ebp+i_18]                 mov     dl, byte ptr [ebp+edx-1+v64lo_8]                 and     dl, 7Fh                 call    str_from_pchar_405084 ; Borland Visual Component Library & Packages                                  mov     edx, [ebp+char_str_28]                 mov     eax, [ebp+p_res_10]                 call    @System@@LStrCat$qqrv ; System::__linkproc__ LStrCat(void)                 mov     eax, [ebp+p_res_10]  loc_49258C:                 inc     [ebp+i_18]                 cmp     [ebp+i_18], 9                 jnz     short loc_492562  loc_4925A2:                 ...                 retn key_to_hex_4924D0 endp <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0441\u0435\u0434\u043e\u043a\u043e\u0434:  <\/p>\n<pre><code>mixed_str_14 = mix_symbols_492688(key); v64_4 = StrToInt64Def(mixed_str_14, 0); while (v64_4[i] & 0x7F &gt; 0) (string)p_res_10 += (char)v64_4[i] & 0x7F, i++; <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f mix_symbols_492688 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 (\u0435\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442 0), \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u0447\u0435\u0442\u043d\u044b\u0435. \u041d\u0430\u0448\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 314253647586970819203142.<\/p>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 StrToInt64Def \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f ValInt64. \u0423 \u043d\u0435\u0435 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e (code) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f, \u0438\u043d\u0430\u0447\u0435 0. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 0x0CCCCCCCCCCCCCCC (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e 0x0CCCCCCCCCCCCCCC = 0x7FFFFFFFFFFFFFFF \/ 0x0A; 0x0A \u2014 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f). \u0412 StrToInt64Def \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e, \u0438 \u0435\u0441\u043b\u0438 \u0432 code \u0432\u0435\u0440\u043d\u0443\u043b\u043e\u0441\u044c \u043d\u0435 0, \u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 0).<\/p>\n<p>  314253647586970819203142 \u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0434\u0430 \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0442\u043e \u0436\u0435 0x0CCCCCCCCCCCCCCC. \u041f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 mix_symbols_492688 \u2014 \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443, \u0447\u0435\u0442\u043d\u044b\u0435 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e:  <\/p>\n<pre><code>0x0CCCCCCCCCCCCCCC = 922337203685477580  000000922337203685477580  0 0 0 2 3 7 0 6 5 7 5 0 0 0 0 9 2 3 2 3 8 4 7 8  000237065750000923238478 <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043d\u043e\u0432\u0430, \u0432\u0432\u043e\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 check_key_4C23A8.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>004C2478:       lea     edx, [ebp+p_key64_30]                 mov     eax, ds:pp_key_4F305C                 mov     eax, [eax]                 call    key_to_hex_4924D0                                  mov     edx, [ebp+p_key64_30]                 mov     eax, ds:p_key_bytes_4F2C24                 call    @System@@LStrAsg$qqrv ; System::__linkproc__ LStrAsg(void)                 jmp     short loc_4C24A5                 ... loc_4C24A5:                 mov     ecx, ds:p_key_bytes_4F2C24                 mov     ecx, [ecx]                 mov     edx, [ebp+mem_stream_decrypted_14]                 mov     eax, [ebp+mem_stream_encrypted_10]                 call    sub_492B48                                  mov     eax, [ebp+mem_stream_decrypted_14]                 call    sub_492C94                                  test    al, al                 jz      loc_4C255F                 ... loc_4C255F:                 mov     [ebp+is_right_key_9], 0                 ... loc_4C25A5:                 mov     al, [ebp+is_right_key_9]                 ...                 ret check_key_4C23A8 endp <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e sub_492C94. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b 20h, 09h, 0Dh, 0Ah, \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 mem_stream_decrypted_14 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0435 is_text_492C94.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_492B48. \u0422\u0430\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0430 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 mem_stream_encrypted_10, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 CharmSolitaire.udf. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 HEX-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0435\u0441\u0442\u044c \u0431\u043b\u043e\u043a, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 8 \u0431\u0430\u0439\u0442 \u0440\u0430\u0432\u0435\u043d 0x33. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0418\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>decrypt_492B48  proc near                 ...                 mov     [ebp+key_bytes_28], ecx                 mov     [ebp+mem_stream_decrypted_24], edx                 mov     [ebp+mem_stream_encrypted_20], eax                 ...                 mov     eax, [ebp+key_bytes_28]                 call    strlen_40516C                 test    eax, eax                 jnz     short loc_492B87                 ... loc_492B87:                 ...     ; key_bytes_28 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432                 ...     ; key_bytes8_34 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435\u043c key_bytes_28                 ...     ; \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0432\u043d\u044b  loc_492BD4:                 lea     edx, [ebp+buf_14]                 mov     ecx, 8                 mov     eax, [ebp+mem_stream_encrypted_20]                 mov     ebx, [eax]                 call    dword ptr [ebx+0Ch]         ; read bytes                 mov     [ebp+bytes_read_C], eax                                  xor     eax, eax                 mov     [ebp+i_2C], eax  loc_492BEC:                 mov     eax, [ebp+i_2C]                 mov     al, [ebp+eax+key_bytes8_34]                 mov     edx, [ebp+i_2C]                 xor     byte ptr [ebp+edx+buf_14], al                 inc     [ebp+i_2C]                 cmp     [ebp+i_2C], 8                 jnz     short loc_492BEC                                  cmp     [ebp+bytes_read_C], 8                 jnz     short loc_492C3C                                  push    ebp                 call    sub_492A6C                 pop     ecx                 xor     eax, eax                 mov     [ebp+i_2C], eax loc_492C15:                 mov     eax, [ebp+i_2C]                 mov     al, [ebp+eax+key_bytes8_34]                 mov     edx, [ebp+i_2C]                 xor     byte ptr [ebp+edx+decrypted_buf_1C], al                 inc     [ebp+i_2C]                 cmp     [ebp+i_2C], 8                 jnz     short loc_492C15                                  lea     edx, [ebp+decrypted_buf_1C]                 mov     ecx, [ebp+bytes_read_C]                 mov     eax, [ebp+mem_stream_decrypted_24]                 mov     ebx, [eax]                 call    dword ptr [ebx+10h]     ; write bytes                 jmp     short loc_492C4A  loc_492C3C:                 lea     edx, [ebp+buf_14]                 mov     ecx, [ebp+bytes_read_C]                 mov     eax, [ebp+mem_stream_decrypted_24]                 mov     ebx, [eax]                 call    dword ptr [ebx+10h]     ; write bytes  loc_492C4A:                 cmp     [ebp+bytes_read_C], 8                 jz      short loc_492BD4                                  ...                 retn decrypt_492B48  endp <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434:  <\/p>\n<pre><code>bytes_read = mem_stream_encrypted-&gt;read(buf, 8); for (i = 0; i &lt; 8; i++) buf ^= key[i];  if (bytes_read == 8) {     sub_492A6C(buf, out decrypted_buf);     for (i = 0; i &lt; 8; i++) decrypted_buf ^= key[i];     mem_stream_decrypted-&gt;write(decrypted_buf, bytes_read); } else {     mem_stream_decrypted-&gt;write(buf, bytes_read); } <\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c.<br \/>  \u0417\u0430\u0442\u0435\u043c, \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442 \u0440\u0430\u0432\u043d\u043e 8, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 sub_492A6C, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0431\u0438\u0442\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<br \/>  \u0417\u0430\u0442\u0435\u043c \u0435\u0449\u0435 \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440.<br \/>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430), \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 XOR \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  sub_492A6C \u044d\u0442\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0442\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f ebp \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043f\u0440\u043e\u0449\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u043c\u0438. \u041e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 8 \u0431\u0430\u0439\u0442, \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0438\u0437 \u0432\u0442\u043e\u0440\u044b\u0445 \u0431\u0438\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442.\u0434.<\/p>\n<pre><code>(\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0447\u0438\u0441\u043b\u0430 \u0441\u043b\u0435\u0432\u0430)  11111111      10000000 00000000      10000000 00000000      10000000 00000000  -&gt;  10000000 00000000      10000000 00000000      10000000 00000000      10000000 00000000      10000000 <\/code><\/pre>\n<p>  \u041c\u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u0430\u043b\u043e\u0433:<br \/>   \u2014 \u0414\u0430\u0432\u0430\u0439 \u0447\u0435\u0440\u0435\u0437 XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u0443\u0435\u043c.<br \/>   \u2014 \u041d\u0435, \u0434\u0430\u0432\u0430\u0439 XOR, \u043f\u043e\u0442\u043e\u043c \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0435\u043c, \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 XOR. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e.<br \/>   \u2014 \u0422\u043e\u0447\u043d\u043e, \u0434\u0430\u0432\u0430\u0439.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u0430\u0442\u0440\u0438\u0446\u0430 8&#215;8 \u0431\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 (\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c. \u0412 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  <\/p>\n<h4>\u0412\u0437\u043b\u043e\u043c<\/h4>\n<p>  \u0427\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c? \u041c\u044b \u043a\u0441\u043e\u0440\u0438\u043c \u0431\u043b\u043e\u043a 8&#215;8 \u0431\u0438\u0442 \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u043a\u043b\u044e\u0447\u0430, \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u0442\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u0443, \u0438 \u043a\u0441\u043e\u0440\u0438\u043c \u0435\u0449\u0435 \u0440\u0430\u0437 \u0441 \u044d\u0442\u0438\u043c \u0436\u0435 \u043a\u043b\u044e\u0447\u043e\u043c. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0431\u0438\u0442\u044b \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438 \u043d\u0435 \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:  <\/p>\n<pre><code>C[x][y] ^ K[x][y] ^ K[y][x] = D[y][x] C[y][x] ^ K[y][x] ^ K[x][y] = D[x][y]  \u0433\u0434\u0435 C - \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a, D - \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a, K - \u043a\u043b\u044e\u0447, x \u0438 y - \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. <\/code><\/pre>\n<p>  \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b K[x][y] ^ K[y][x] \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 T[x][y]:  <\/p>\n<pre><code>T[x][y] = T[y][x]  C[x][y] ^ T[x][y] = D[y][x] C[y][x] ^ T[x][y] = D[x][y] <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0431\u0438\u0442\u044b \u043a\u043b\u044e\u0447\u0430. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043a\u043b\u044e\u0447\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043d\u0443\u043b\u0438. \u0422\u043e\u0433\u0434\u0430 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0438 \u043d\u0438\u0436\u043d\u0438\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b T \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0432 2 \u0440\u0430\u0437\u0430 \u2014 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u044b + \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0438\u0442: (7 + 6 + 5 + 4 + 3 + 2 + 1) = 28. \u0418\u0442\u043e\u0433\u043e 2^28 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430:<br \/>   \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a 8 \u0431\u0430\u0439\u0442<br \/>   \u2014 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 \u043a\u043b\u044e\u0447\u0430<br \/>   \u2014 \u0434\u0435\u043b\u0430\u0435\u043c XOR \u0441 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u043e\u043c<br \/>   \u2014 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443<br \/>   \u2014 \u0434\u0435\u043b\u0430\u0435\u043c XOR \u0435\u0449\u0435 \u0440\u0430\u0437<br \/>   \u2014 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c<br \/>   \u2014 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0442\u0435\u043a\u0441\u0442; \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f, \u0442\u043e \u043a\u043b\u044e\u0447 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439<br \/>   \u2014 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a<\/p>\n<p>  \u0422\u0438\u043f\u044b \u0431\u0438\u0442\u043e\u0432 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 (\u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0441\u043b\u0435\u0432\u0430):  <\/p>\n<pre><code>#define FIXED_0 0 #define FIXED_1 1 #define UNKNOWN 2  const unsigned char bitTypes[8][8] = { \t{0, 0, 0, 0, 0, 0, 0, 0}, \t{2, 0, 0, 0, 0, 0, 0, 0}, \t{2, 2, 0, 0, 0, 0, 0, 0}, \t{2, 2, 2, 0, 0, 0, 0, 0}, \t{2, 2, 2, 2, 0, 0, 0, 0}, \t{2, 2, 2, 2, 2, 0, 0, 0}, \t{2, 2, 2, 2, 2, 2, 0, 0}, \t{2, 2, 2, 2, 2, 2, 2, 0} }; <\/code><\/pre>\n<p>\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0431\u0438\u0442\u0430\u043c UNKNOWN (\u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u0434).<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u0421\u0434\u0435\u043b\u0430\u0432 XOR \u0447\u0430\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0442 \u0437\u043d\u0430\u043a\u0430 &#8216; = &#8216;, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:  <\/p>\n<pre><code>C[x][y] ^ K[x][y] ^ K[y][x] ^ C[y][x] ^ K[y][x] ^ K[x][y] = D[y][x] ^ D[x][y] C[x][y] ^ C[y][x] ^ (K[x][y] ^ K[x][y]) ^ (K[y][x] ^ K[y][x]) = D[y][x] ^ D[x][y] C[x][y] ^ C[y][x] = D[y][x] ^ D[x][y] <\/code><\/pre>\n<p>  XOR \u0434\u0432\u0443\u0445 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0440\u0430\u0432\u0435\u043d XOR \u044d\u0442\u0438\u0445 \u0431\u0438\u0442\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e.<\/p>\n<p>  <\/p>\n<h4>\u041d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e<\/h4>\n<p>  1. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f 65 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>  \u041d\u0430 \u043c\u043e\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u044d\u0442\u043e \u0437\u0430\u043d\u044f\u043b\u043e \u043c\u0438\u043d\u0443\u0442 15-20. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439. \u041d\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u2014 \u043a\u0430\u0436\u0434\u044b\u0439 8-\u0439 \u0431\u0430\u0439\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0440\u0430\u0432\u0435\u043d 0x33. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u2014 \u044d\u0442\u043e (\u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u0431\u043b\u043e\u043a\u0430 \u0438\u0437 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432) XOR (8-\u0439 \u0431\u0430\u0439\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u044b T). \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u0435, \u0442\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u0432\u0435\u0437\u0434\u0435 0, \u0438 0x33 \u2014 \u044d\u0442\u043e 8-\u0439 \u0431\u0430\u0439\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u0432 256 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c 2^20:  <\/p>\n<pre><code> #define FIXED_0 0 #define FIXED_1 1 #define UNKNOWN 2  const unsigned char bitTypes[8][8] = { \t{0, 0, 0, 0, 0, 0, 0, 0}, \t{2, 0, 0, 0, 0, 0, 0, 0}, \t{2, 2, 0, 0, 0, 0, 0, 0}, \t{2, 2, 2, 0, 0, 0, 0, 0}, \t{2, 2, 2, 2, 0, 0, 0, 0}, \t{2, 2, 2, 2, 2, 0, 0, 0}, \t{2, 2, 2, 2, 2, 2, 0, 0}, \t{1, 1, 0, 0, 1, 1, 0, 0} }; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043d\u0430\u0439\u0434\u0435\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447. \u041d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  2. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e 8, \u0442\u043e \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u043c XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c.<\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u2014 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u044b, \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0438\u0445 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u0430 CharmSolitaire.udf \u0440\u0430\u0432\u043d\u0430 0x823, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0431\u0430\u0439\u0442\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u0431\u044b\u0447\u043d\u044b\u043c XOR \u0441 \u043a\u043b\u044e\u0447\u043e\u043c.<br \/>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c 0x820 \u0431\u0430\u0439\u0442.<br \/>  \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c 3 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0431\u0430\u0439\u0442\u0430.<br \/>  \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0439\u0442\u0438 XOR \u043c\u0435\u0436\u0434\u0443 3 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u044d\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0431\u0430\u0439\u0442\u044b \u043a\u043b\u044e\u0447\u0430.<\/p>\n<p>  \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e \u0431\u0430\u0439\u0442\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430.<br \/>  \u041f\u043e\u0432\u0435\u0440\u0445 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0431\u0438\u0442\u044b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0431\u0430\u0439\u0442\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u0438\u0442\u044b \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u043d\u0443\u0436\u043d\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u0431\u0438\u0442 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b.<br \/>  \u0415\u0441\u043b\u0438 \u0431\u0438\u0442 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430: \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u00ab\u044f\u0442\u044c.\u00bb \ud83d\ude42  <\/div>\n<\/div>\n<p>  \u0423\u0440\u043e\u0432\u043d\u0438 \u043f\u043e\u0441\u043b\u0435 30-\u0433\u043e \u0442\u043e\u0436\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b. \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 XML-\u0444\u0430\u0439\u043b. \u0415\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0439, \u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2014 \u043e\u0442 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0434\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0435 XML. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u0430\u0439\u043b\u0430 CharmSolitaire.udf \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 3 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0438 \u0441 \u0442\u0430\u043a\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0434\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0434\u043e 39 \u0443\u0440\u043e\u0432\u043d\u044f. \u0415\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 0x246F, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 7 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0430\u0439\u0442.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\"> \u2014 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0438\u0433\u0440\u0443 \u0432 \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.<br \/>   \u2014 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442 \u043d\u0430 loc_492C3C \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 decrypt_492B48 (\u044d\u0442\u043e \u043a\u043e\u0434 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442)<br \/>   \u2014 \u0432\u0437\u044f\u0442\u044c \u0431\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 buf_14<br \/>   \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c XOR \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c<br \/>   \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c XOR \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c<\/p>\n<p>  \u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430: \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0433\u043e\u043c <\/p>\n<pre>&lt;\/Level&gt;0x0D,0x0A<\/pre>\n<p>  <\/div>\n<\/div>\n<h4>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h4>\n<p>  8 \u0431\u0430\u0439\u0442 \u043a\u043b\u044e\u0447\u0430:<br \/>  Bre6Vqd3<\/p>\n<p>  \u0422\u0435\u043a\u0441\u0442 \u043d\u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430:<br \/>  Some years ago the small pussy cat came to his house and ask the bug lived there about dinner.<\/p>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>#include &lt;vcl.h&gt; #pragma hdrstop  #include &quot;MainUnit.h&quot; #include &lt;vector&gt; \/\/--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource &quot;*.dfm&quot; TMainForm *MainForm; \/\/--------------------------------------------------------------------------- __fastcall TMainForm::TMainForm(TComponent* Owner) \t: TForm(Owner) { } \/\/---------------------------------------------------------------------------  inline unsigned int getBit(unsigned char byte, unsigned int bitNumber) { \treturn (byte & ((unsigned char)1 &lt;&lt; bitNumber) ? 1 : 0); }  inline void setBit(unsigned char &byte, unsigned int bitNumber, unsigned int bitValue) { \tif (bitValue) \t\tbyte |= ((unsigned char)1 &lt;&lt; bitNumber); \telse \t\tbyte &= ~((unsigned char)1 &lt;&lt; bitNumber); }  int isText(unsigned char *pData, int streamSize) { \tint isText = 1; \tif (streamSize &lt; 1) return isText;  \tchar prevChar = 0; \tdo \t{ \t\tif (*pData &lt; 0x20 && *pData != 9) \t\t{ \t\t\tif ((*pData == 0x0D || *pData == 0x0A)) \t\t\t{ \t\t\t\t\/\/ \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \t\t\t\t\/\/ \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 0x0A, \u0442\u043e \u044d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \t\t\t\t   \t\t\t\t\/\/if (*pData == 0x0A && prevChar != 0x0D) \t\t\t\t\/\/{ \t\t\t\t\/\/\tisText = 0; \t\t\t\t\/\/\tbreak; \t\t\t\t\/\/} \t\t\t} \t\t\telse \t\t\t{ \t\t\t\tisText = 0; \t\t\t\tbreak; \t\t\t} \t\t} \t\t \t\tprevChar = *pData; \t\tpData++; \t} \twhile (--streamSize);  \treturn isText; }     #define FIXED_0 0 #define FIXED_1 1 #define UNKNOWN 2  const unsigned char bitTypes[8][8] = { \t\/\/ \u043c\u043b\u0430\u0434\u0448\u0438\u0439 \u0431\u0438\u0442 \u0441\u043b\u0435\u0432\u0430 \t{0, 0, 0, 0, 0, 0, 0, 0}, \t{2, 0, 0, 0, 0, 0, 0, 0}, \t{2, 2, 0, 0, 0, 0, 0, 0}, \t{2, 2, 2, 0, 0, 0, 0, 0}, \t{2, 2, 2, 2, 0, 0, 0, 0}, \t{2, 2, 2, 2, 2, 0, 0, 0}, \t{2, 2, 2, 2, 2, 2, 0, 0}, \t{1, 1, 0, 0, 1, 1, 0, 0} };  void getKeyMatrix(unsigned int keyBits, unsigned char matrix[8]) { \tint x, y; \tunsigned int bitValue = 0, bitNumber = 0;  \tmemset(matrix, 8, 0); \tfor(y = 0; y &lt; 8; y++) \t{ \t\tfor(x = 0; x &lt; 8; x++) \t\t{ \t\t\t\/\/ \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0434\u0443\u0442 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \t\t\tif (bitTypes[y][x] == UNKNOWN) \t\t\t{ \t\t\t\tbitValue = getBit(((unsigned char*)&keyBits)[bitNumber \/ 8], bitNumber % 8); \t\t\t\tbitNumber++; \t\t\t} \t\t\telse if (bitTypes[y][x] == FIXED_1) \t\t\t\tbitValue = 1; \t\t\telse \t\t\t\tbitValue = 0;  \t\t\tsetBit(matrix[y], x, bitValue); \t\t} \t} }  void reverseMatrix(unsigned char block[8]) { \tunsigned int x, y, bitValue; \tunsigned char tmpBlock[8]; \tfor (y = 0; y &lt; 8; y++) \t{ \t\tfor (x = 0; x &lt; 8; x++) \t\t{ \t\t\tbitValue = getBit(block[x], y); \t\t\tsetBit(tmpBlock[y], x, bitValue); \t\t} \t}  \tmemcpy(block, tmpBlock, 8); }  void decryptBlock(unsigned int keyBits, unsigned char *encryptedBlock, unsigned char *decryptedBlock, unsigned int blockSize) { \tunsigned char key[8]; \tunsigned int i; \tgetKeyMatrix(keyBits, key);  \tfor(i = 0; i &lt; blockSize; i++) \t\tdecryptedBlock[i] = encryptedBlock[i] ^ key[i];  \tif (blockSize == 8) \t{ \t\treverseMatrix(decryptedBlock);  \t\tfor(i = 0; i &lt; 8; i++) \t\t\tdecryptedBlock[i] = decryptedBlock[i] ^ key[i]; \t} }  void decryptText(unsigned char *encryptedText, unsigned char *decryptedText, unsigned int textSize, unsigned int keyBits) { \tunsigned int position = 0, blockSize = 8, bytesToRead = 0; \tunsigned int i, j;  \twhile(position &lt; textSize) \t{ \t\tif (position + blockSize &lt;= textSize) \t\t\tbytesToRead = blockSize; \t\telse \t\t\tbytesToRead = textSize - position;  \t\tdecryptBlock(keyBits, encryptedText + position, decryptedText + position, bytesToRead); \t\t\/\/ \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \t\tif (bytesToRead == 8 && !isText(decryptedText + position, 8)) \t\t\tbreak;  \t\tposition += bytesToRead; \t} }  void getKeyVariants(unsigned char *encryptedText, unsigned int textSize, std::vector&lt;unsigned int&gt; &keyList) { \tunsigned int variantsCount = 0; \tunsigned int possibleBits = 0;  \tunsigned char *decryptedText = new unsigned char[textSize]; \t\/\/for (possibleBits = 0; possibleBits &lt; (1 &lt;&lt; 20); possibleBits++) \tfor (possibleBits = 0; possibleBits &lt; (1 &lt;&lt; 6); possibleBits++) \t{ \t\tdecryptText(encryptedText, decryptedText, textSize, possibleBits);  \t\tif (isText(decryptedText, textSize - textSize % 8)) \t\t{ \t\t\tkeyList.push_back(possibleBits); \t\t\tvariantsCount++; \t\t} \t} \tvariantsCount = variantsCount;\t\/\/ \u0434\u043b\u044f \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0439\u043d\u0442\u0430 \t  \tdelete []decryptedText; }  AnsiString getKeyText(unsigned char keyMatrix[8]) { \tAnsiString str = &quot;000000000000000000000000&quot; + IntToStr(*(__int64*)keyMatrix); \tstr = str.SubString(str.Length() - 24 + 1, 24);  \/\/ \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u044f \u0441 1   \tAnsiString keyText = &quot;&quot;; \tfor(int i = 0; i &lt; 24; i += 2) \t\tkeyText.cat_printf(&quot;%c&quot;, str.c_str()[i + 1]); \tfor(int i = 0; i &lt; 24; i += 2) \t\tkeyText.cat_printf(&quot;%c&quot;, str.c_str()[i]); \t \treturn keyText; }  \/\/---------------------------------------------------------------------------  std::vector&lt;unsigned int&gt; keyList; void __fastcall TMainForm::btnStartClick(TObject *Sender) { \tAnsiString filename = &quot;F:\\\\Games\\\\Charm Solitaire\\\\CharmSolitaire.udf&quot;; \tTMemoryStream *encryptedStream = new TMemoryStream(); \tencryptedStream-&gt;LoadFromFile(filename);  \tgetKeyVariants((unsigned char *)encryptedStream-&gt;Memory, encryptedStream-&gt;Size, keyList);  \tunsigned char keyMatrix[8]; \tgetKeyMatrix(keyList[0], keyMatrix); \tgetKeyText(keyMatrix); }   void __fastcall TMainForm::btnDecryptClick(TObject *Sender) { \tAnsiString filename = &quot;F:\\\\Games\\\\Charm Solitaire\\\\CharmSolitaire.udf&quot;; \tTMemoryStream *encryptedStream = new TMemoryStream(); \tencryptedStream-&gt;LoadFromFile(filename);  \tunsigned int keyBits = keyList[0]; \tunsigned int textSize = encryptedStream-&gt;Size; \tunsigned char *decryptedText = new unsigned char[textSize + 1]; \tdecryptedText[textSize] = 0;  \tdecryptText((unsigned char *)encryptedStream-&gt;Memory, decryptedText, textSize, keyBits); \tmDecryptedText-&gt;Text = AnsiString((char*)decryptedText); } \/\/--------------------------------------------------------------------------- <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/260071\/\"> http:\/\/habrahabr.ru\/post\/260071\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a2e\/de4\/11e\/a2ede411e8ee4616943e1558635a4bef.jpg\" alt=\"Charm Solitaire\" align=\"left\"\/><br \/>  \u041b\u0435\u0442 7-8 \u043d\u0430\u0437\u0430\u0434 \u043c\u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u0438\u0433\u0440\u0430 CharmSolitaire, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0438\u0433\u0440\u0430\u043c\u0438 \u0441 \u0447\u0443\u0436\u043e\u0433\u043e \u0432\u0438\u043d\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439. \u042d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u0430\u0441\u044c\u044f\u043d\u0441. \u0412 \u043d\u0435\u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u0438\u0433\u0440\u0443 \u043e\u0442\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0447\u0430\u0441, \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439. \u0412 \u0442\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u0432\u0440\u0435\u043c\u044f \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c. \u0414\u0435\u043d\u0435\u0433 \u043d\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044f \u0431\u044b \u0435\u0435 \u0443\u0434\u0430\u043b\u0438\u043b. \u041d\u043e \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u043b\u0435\u043a\u0430\u043b\u0441\u044f \u0432\u0437\u043b\u043e\u043c\u043e\u043c \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041e\u043f\u044b\u0442 \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0437\u0430\u0449\u0438\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a security through obscurity \u043c\u043e\u0436\u0435\u0442 \u0435\u0435 \u043e\u0441\u043b\u0430\u0431\u0438\u0442\u044c.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-259147","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=259147"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/259147\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=259147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=259147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=259147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}