рдШрд┐рдбреНрд░рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджрд░рд╛рд░ рдХреЛ рддреЛрдбрд╝рдирд╛ - рднрд╛рдЧ 2

рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ , Ghidra рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреНрд░реИрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо (рдЬрд┐рд╕реЗ рд╣рдордиреЗ crackmes.one рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ред рд╣рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓рд░ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ "рдЕрдпреЛрдЧреНрдп" рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдП, рдФрд░ "рдЯреЙрдк рд▓реЗрд╡рд▓" рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рднреА рд╕рдордЭрд╛, рдЕрд░реНрдерд╛рддред рдЬреЛ рдореБрдЦреНрдп () рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, рд╣рдо _construct_key () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЪрд░рдг 5 - _construct_key () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд╡рд▓реЛрдХрди


рдЖрдЗрдП рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рддреБрд░рдВрдд рджреЗрдЦреЗрдВ:

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ _construct_key ()
char ** __cdecl _construct_key(FILE *param_1) { int iVar1; size_t sVar2; uint uVar3; uint local_3c; byte local_36; char local_35; int local_34; char *local_30 [4]; char *local_20; undefined4 local_19; undefined local_15; char **local_14; int local_10; local_14 = (char **)__prepare_key(); if (local_14 == (char **)0x0) { local_14 = (char **)0x0; } else { local_19 = 0; local_15 = 0; _text(&local_19,1,4,param_1); iVar1 = _text((char *)&local_19,*(char **)local_14[1],4); if (iVar1 == 0) { _text(local_14[1] + 4,2,1,param_1); _text(local_14[1] + 6,2,1,param_1); if ((*(short *)(local_14[1] + 6) == 4) && (*(short *)(local_14[1] + 4) == 5)) { local_30[0] = *local_14; local_30[1] = *local_14 + 0x10c; local_30[2] = *local_14 + 0x218; local_30[3] = *local_14 + 0x324; local_20 = *local_14 + 0x430; local_10 = 0; while (local_10 < 5) { local_35 = 0; _text(&local_35,1,1,param_1); if (*local_30[local_10] != local_35) { _free_key(local_14); return (char **)0x0; } local_36 = 0; _text(&local_36,1,1,param_1); if (local_36 == 0) { _free_key(local_14); return (char **)0x0; } *(uint *)(local_30[local_10] + 0x104) = (uint)local_36; _text(local_30[local_10] + 1,1,*(size_t *)(local_30[local_10] + 0x104),param_1); sVar2 = _text(local_30[local_10] + 1); if (sVar2 != *(size_t *)(local_30[local_10] + 0x104)) { _free_key(local_14); return (char **)0x0; } local_3c = 0; _text(&local_3c,1,1,param_1); local_3c = local_3c + 7; uVar3 = _text(param_1); if (local_3c < uVar3) { _free_key(local_14); return (char **)0x0; } *(uint *)(local_30[local_10] + 0x108) = local_3c; _text(param_1,local_3c,0); local_10 = local_10 + 1; } local_34 = 0; _text(&local_34,4,1,param_1); if (*(int *)(*local_14 + 0x53c) == local_34) { _text("Markers seem to still exist"); } else { _free_key(local_14); local_14 = (char **)0x0; } } else { _free_key(local_14); local_14 = (char **)0x0; } } else { _free_key(local_14); local_14 = (char **)0x0; } } return local_14; } 


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╣рдо рдореБрдЦреНрдп () рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рдХрд░реЗрдВрдЧреЗ - рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдо "veiled" рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ рдЬрд╛рдПрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп рдорд╛рдирдХ рд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рд╣реИрдВред рдореИрдВ рдлрд┐рд░ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдирдХ рдХрд╛рд░реНрдп "рдкрд╛рдП рдЧрдП" рдереЗ:

  • рдлрд╝реНрд░реЗрдб ()
  • strncmp ()
  • рд╕реНрдЯреНрд░рд▓реЗрди ()
  • рдлреБрдЯреЗрд▓ ()
  • fseek ()
  • рдбрд╛рд▓рддрд╛ рд╣реИ ()

рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╡рд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдбрд┐рдХрдВрдкрд╛рдЗрд▓рд░ рдиреЗ _text рд╢рдмреНрдж рдХреЗ рдкреАрдЫреЗ рдЫрд┐рдкрд╛рдпрд╛ рд╣реИ) рд╕реВрдЪрдХрд╛рдВрдХ 2 рдХреЛ рдЬреЛрдбрд╝рдХрд░ (рддрд╛рдХрд┐ рдореВрд▓ рд╕реА-рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреНрд░рдо рди рд╣реЛ)ред рд▓рдЧрднрдЧ рдпреЗ рд╕рднреА рдХрд╛рд░реНрдп рдлрд╛рдЗрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ - рдХреЛрдб рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд╕реНрдерд╛рдиреАрдп_14 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд░реАрдб рдбреЗрдЯрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред

рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдХреБрдВрдЬреА рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реИред рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, key_array рдХрд╣реЗрдВ ред рдЪреВрдВрдХрд┐ рд╣рд╛рдЗрдбреНрд░рд╛ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЪрд░ рднреА рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреАрдп_14 рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп key_array рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рд╣реА рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ( рд╕реНрдерд╛рдиреАрдп рдирд╛рдо рдмрджрд▓реЗрдВ ) рдпрд╛ рдХреАрдмреЛрд░реНрдб рд╕реЗ рдПрд▓ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ред

рдЗрд╕рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдп _prepare_key () рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ :

 key_array = (char **)__prepare_key(); if (key_array == (char **)0x0) { key_array = (char **)0x0; } 

рд╣рдо _prepare_key () рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ , рдпрд╣ рд╣рдорд╛рд░реА рдХреЙрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рддреАрд╕рд░рд╛ рд╕реНрддрд░ рд╣реИ: рдореБрдЦреНрдп () -> _construct_key () -> _prepare_key () ред рдЗрд╕ рдмреАрдЪ, рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕ "рдкрд░реАрдХреНрд╖рдг" рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд░ рдпрд╣ рд╕рд░рдгреА рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдерд┐рддрд┐ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рддрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ key_array рд╕рд░рдгреА рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред (рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп_19 рдЪрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ , рдореИрдВрдиреЗ рдкрд╣рд▓реЗ_4bytes рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛ ред)

 first_4bytes = 0; /*   4    */ fread2(&first_4bytes,1,4,param_1); /*   key_array[1][0...3] */ iVar1 = strncmp2((char *)&first_4bytes,*(char **)key_array[1],4); if (iVar1 == 0) { ... } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдЧреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рдВрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рдпрд╛рдж рд░рдЦреЗрдВ)ред рддрдм рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ 2 2-рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдкрдврд╝рддреЗ рд╣реИрдВ (рдФрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА key_array рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):

 fread2(key_array[1] + 4,2,1,param_1); fread2(key_array[1] + 6,2,1,param_1); 

рдФрд░ рдлрд┐рд░ - рдЖрдЧреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рд╣реА рд╣реЛрдиреЗ рдкрд░ рд╣реА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

 if ((*(short *)(key_array[1] + 6) == 4) && (*(short *)(key_array[1] + 4) == 5)) { //   ... } 

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдКрдкрд░ рдкрдврд╝реЗ рдЧрдП 2-рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдирдВрдмрд░ 5 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ рдирдВрдмрд░ 4 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ)ред

рдЕрдЧрд▓рд╛ рдпрд╣ рд╣реИ:

 local_30[0] = *key_array; // .. key_array[0] local_30[1] = *key_array + 0x10c; local_30[2] = *key_array + 0x218; local_30[3] = *key_array + 0x324; local_20 = *key_array + 0x430; 

рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ local_30 рд╕рд░рдгреА (char * local_30 [4] рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд) рдореЗрдВ key_array рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдСрдлрд╝рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╕реНрдерд╛рдиреАрдп_30 рдорд╛рд░реНрдХрд░ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрднрд╡рддрдГ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд, рдореИрдВрдиреЗ рд╕реНрдерд╛рдиреАрдп_30 рдХреЛ рдорд╛рд░реНрдХрд░реЛрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ред рдХреЛрдб рдХреЗ рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдереЛрдбрд╝реА рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреА рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдСрдлрд╕реЗрдЯ рдХрд╛ рдХрд╛рдо (рд╕реВрдЪрдХрд╛рдВрдХ 0x430 рдкрд░, рдЕрд░реНрдерд╛рдд 1072) рдЕрдЧрд▓реЗ рдорд╛рд░реНрдХрд░ рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдп_20 рдЪрд░ ( рдЪрд╛рд░ * ) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдЕрднреА рддрдХ рд╕рдордЭ рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП - рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ!

рдЖрдЧреЗ рд╣рдо рдПрдХ рдЪрдХреНрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

  i = 0; // local_10   i while (i < 5) { // ... i = i + 1; } 

рдпрд╛рдиреА 0 рд╕реЗ 4 рд╕рдорд╛рд╡реЗрд╢реА рддрдХ рдХреЗрд╡рд▓ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВред рд▓реВрдк рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдХрд░ рд╕рд░рдгреА рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рддреБрд░рдВрдд рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:

 char c_marker = 0; //   local_35 /*  .    */ fread2(&c_marker, 1, 1, param_1); if (*markers[i] != c_marker) { /*    -      */ _free_key(key_array); return (char **)0x0; } 

рдпрд╣реА рд╣реИ, рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдЧрд▓рд╛ рдмрд╛рдЗрдЯ c_marker рдЪрд░ (рдореВрд▓ рд╡рд┐рдШрдЯрд┐рдд рдХреЛрдб - local_35 рдореЗрдВ ) рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ ith рдорд╛рд░реНрдХрд░ рддрддреНрд╡ рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдмреЗрдореЗрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, key_array рд╕рд░рдгреА рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдбрдмрд▓ рдкреЙрдЗрдВрдЯрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЧреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рддрдм рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд░реАрдб рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдХреБрддреНрддреЗ рдХреЛ рджрдлрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред" рдЖрдЗрдП рдЗрд╕ рдЪрдХреНрд░ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЛ рджреЗрдЦ рдХрд░ рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:





рджрд░рдЕрд╕рд▓, рд╕реАрдПрдордкреА рдХрдорд╛рдВрдб рд╕реНрдерд╛рдиреАрдп_10 рдЪрд░ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА i ) рдХреЗ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ 4 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдорд╛рди 4 (JLE рдХрдорд╛рдВрдб) рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ , рддреЛ LAB_004017eb рд▓реЗрдмрд▓ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЕрд░реНрдерд╛рдд рдЪрдХреНрд░ рдХреЗ рд╢рд░реАрд░ рдХреА рд╢реБрд░реБрдЖрддред рдпрд╛рдиреА рд╢рд░реНрдд I = 0, 1, 2, 3 рдФрд░ 4 рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╣реЛрдЧреА - рдХреЗрд╡рд▓ 5 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ! рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдорд╛рд░реНрдХрд░ рднреА рдПрдХ рд▓реВрдк рдореЗрдВ рдЗрд╕ рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ , рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рд╕рд░рдгреА рдХреЗрд╡рд▓ 4 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:

 char *markers [4]; 

рддреЛ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ :) рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рд░реЗрдЦрд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ?

 local_20 = *key_array + 0x430; 

рдмрд╕ рдРрд╕реЗ рд╣реА! рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдкреВрд░реНрдг рд╕реВрдЪреА рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп_20 рдЪрд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╡рд╣ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ! рд╣рдо рдЗрд╕рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ: рдЗрд╕ рдСрдлрд╕реЗрдЯ рдХреЛ рднреА рдорд╛рд░реНрдХрд░реЛрдВ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд░рдгреА рдореЗрдВ 5 рддрддреНрд╡ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рдЪрд░ рдШреЛрд╖рдгрд╛ рдкрд░ рдЬрд╛рдПрдВ, Ctrl + L (рд░рд┐рдЯрд╛рдЗрдк рдЪрд░) рджрдмрд╛рдПрдВ рдФрд░ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ 5 рдореЗрдВ рдмрджрд▓реЗрдВ:



рд╣реЛ рдЧрдпрд╛ред рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдСрдлрд╝рд╕реЗрдЯ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рдФрд░ - рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛! - рдПрдХ рдЕрд╕рдВрдЧрдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЬрдЧрд╣ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИ:

 markers[0] = *key_array; markers[1] = *key_array + 0x10c; markers[2] = *key_array + 0x218; markers[3] = *key_array + 0x324; markers[4] = *key_array + 0x430; //   ...   ! 

рд╣рдо рдЕрдкрдиреЗ рд▓реВрдк рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВ (рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ)ред рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрд╛рдЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ:

 byte n_strlen1 = 0; //   local_36 /*  .    */ fread2(&n_strlen1,1,1,param_1); if (n_strlen1 == 0) { /*      */ _free_key(key_array); return (char **)0x0; } 

рдареАрдХ рд╣реИ, рдпрд╣ n_strlen1 nonzero рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпреЛрдВ? рдЕрдм рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЖрдк рдпрд╣ рд╕рдордЭ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░ рдХреЛ рдирд┐рдореНрди рдирд╛рдо рдХреНрдпреЛрдВ рджрд┐рдпрд╛ рд╣реИ:

  /*   n_strlen1)  (markers[i] + 0x104) */ *(uint *)(markers[i] + 0x104) = (uint)n_strlen1; /*    (n_strlen1)  (-->  ?) */ fread2(markers[i] + 1,1,*(size_t *)(markers[i] + 0x104),param_1); n_strlen2 = strlen2(markers[i] + 1); //   sVar2 if (n_strlen2 != *(size_t *)(markers[i] + 0x104)) { /*    (n_strlen2)  == n_strlen1 */ _free_key(key_array); return (char **)0x0; } 

рдореИрдВрдиреЗ рдЙрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬрд┐рди рдкрд░ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред N_strlen1 рдмрд╛рдЗрдЯреНрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ (рдЕрд░реНрдерд╛рдд рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдорд╛рд░реНрдХрд░реЛрдВ рдореЗрдВ [i] рд╕рд░рдгреА - рдЕрд░реНрдерд╛рддреН, "рд╕реНрдЯреЙрдк-рд╕рд┐рдВрдмрд▓" рдХреЗ рдмрд╛рдж, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА key_array рд╕реЗ рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ ред рдЕрдВрдХ 0x104 (260) рдкрд░ рдорд╛рд░реНрдХрд░ [i] рдореЗрдВ рдорд╛рди n_strlen1 рд╕рд╣реЗрдЬрдирд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ (рдКрдкрд░ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИ):

 fread2(markers[i] + 1, 1, (size_t) n_strlen1, param_1); n_strlen2 = strlen2(markers[i] + 1); if (n_strlen2 != (size_t) n_strlen1) { ... } 

рдпрд╣ рднреА рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рд░реАрдб рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ n_strlen1 рд╣реИ ред рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдлрд╝реНрд░реЗрдб рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд╝реНрд░реЗрдб рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдВрдб-рдСрдлрд╝-рдлрд╝рд╛рдЗрд▓ рдорд╛рд░реНрдХрд░ (рдИрдУрдПрдл) рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рд╕реЗ рдХрдо рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рдЦреНрдд рд╣реИ: рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ) рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рд▓рд╛рдЗрди рдЦреБрдж рдЬрд╛рддреА рд╣реИ - рдФрд░ рдмрд┐рд▓реНрдХреБрд▓ 5 рдмрд╛рд░ред рд▓реЗрдХрд┐рди рд╣рдо рдЦреБрдж рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд░рд╣реЗ рд╣реИрдВред

рдЖрдЧреЗ рдкрд╛рдиреА рдЗрд╕ рдХреЛрдб (рдЬреЛ рдореИрдВрдиреЗ рднреА рддреБрд░рдВрдд рдЯрд┐рдкреНрдкрдгреА рдХреА):

 uint n_pos = 0; //   local_3c /*  .    */ fread2(&n_pos,1,1,param_1); /*   7 */ n_pos = n_pos + 7; /*     */ uint n_filepos = ftell2(param_1); //   uVar3 if (n_pos < n_filepos) { /* n_pos   >= n_filepos */ _free_key(key_array); return (char **)0x0; } 

рдпрд╣ рдЕрднреА рднреА рдпрд╣рд╛рдВ рд╕рд░рд▓ рд╣реИ: рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЕрдЧрд▓рд╛ рдмрд╛рдЗрдЯ рд▓реЗрддреЗ рд╣реИрдВ, 7 рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдорд╛рди рдХреА рддреБрд▓рдирд╛ рдлреЗрд▓ () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред N_pos рдХрд╛ рдорд╛рди рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдСрдлрд╕реЗрдЯ)ред

рд▓реВрдк рдореЗрдВ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐:

 fseek2(param_1,n_pos,0); 

рдпрд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдХрд░реНрд╕рд░ рдХреЛ (рд╢реБрд░реБрдЖрдд рд╕реЗ) рд╕реНрдерд┐рддрд┐ рдореЗрдВ fseek () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ n_pos рджреНрд╡рд╛рд░рд╛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред рдареАрдХ рд╣реИ, рд╣рдо рдЗрди рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ 5 рдмрд╛рд░ рд▓реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред _Construct_key () рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ :

 int i_lastmarker = 0; //   local_34 /*   4    (int32) */ fread2(&i_lastmarker,4,1,param_1); if (*(int *)(*key_array + 0x53c) == i_lastmarker) { /*    == key_array[0][1340] ...   :) */ puts2("Markers seem to still exist"); } else { _free_key(key_array); key_array = (char **)0x0; } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ 4-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ key_array [0] [1340] рдореЗрдВ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдмрдзрд╛рдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЕрдиреНрдпрдерд╛, рдЦрд╛рд▓реА рд╕рд░рдгреА рдЕрднреА рднреА рдХрд┐рд╕реА рднреА рдкреНрд░рд╢рдВрд╕рд╛ рдХреЗ рдмрд┐рдирд╛ рд▓реМрдЯрддреА рд╣реИ :)

рдЪрд░рдг 6 - __prepare_key () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрд╡рд▓реЛрдХрди


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЕрдирд╕реИрдмрд▓реНрдб рдлрдВрдХреНрд╢рди рдмрдЪрд╛ рд╣реИ - __prepare_key () ред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд╣реИ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ key_array рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _construct_key () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИ!

рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ рддреБрд░рдВрдд рдЪрд░ рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реА рд╕реВрдЪреА рджреВрдВрдЧрд╛:

__Prepare_key () рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреАрдХрд░рдг
 void ** __prepare_key(void) { void **key_array; void *pvVar1; /* key_array = new char*[2]; // 2 4-  (char*) */ key_array = (void **)calloc2(1,8); if (key_array == (void **)0x0) { key_array = (void **)0x0; } else { pvVar1 = calloc2(1,0x540); /* key_array[0] = new char[1340] */ *key_array = pvVar1; pvVar1 = calloc2(1,8); /* key_array[1] = new char[8] */ key_array[1] = pvVar1; /* "VOID" */ *(undefined4 *)key_array[1] = 0x404024; /* 5  4 (2- ) */ *(undefined2 *)((int)key_array[1] + 4) = 5; *(undefined2 *)((int)key_array[1] + 6) = 4; /* key_array[0][0] = 'b' */ *(undefined *)*key_array = 0x62; *(undefined4 *)((int)*key_array + 0x104) = 3; /* 'W' */ *(undefined *)((int)*key_array + 0x218) = 0x57; /* 'p' */ *(undefined *)((int)*key_array + 0x324) = 0x70; /* 'l' */ *(undefined *)((int)*key_array + 0x10c) = 0x6c; /* 152 ( ASCII) */ *(undefined *)((int)*key_array + 0x430) = 0x98; /*   = 1122 (int32) */ *(undefined4 *)((int)*key_array + 0x53c) = 0x462; } return key_array; } 


рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рдпрд╣ рд░реЗрдЦрд╛ рд╣реИ:

 *(undefined4 *)key_array[1] = 0x404024; 

рдореИрдВ рдХреИрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣рд╛рдБ "VOID" рд▓рд╛рдЗрди рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ 0x404024 рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рдПрдбреНрд░реЗрд╕ рд╣реИ ред рдЗрд╕ рдореВрд▓реНрдп рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИ:



рд╡реИрд╕реЗ, рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

004015da c7 00 24 MOV dword ptr [EAX], .rdata = 56h V
40 40 00

VOID рд▓рд╛рдЗрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ .rdata рд╕реЗрдХреНрд╢рди рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реИ (рд╕рдВрдмрдВрдзрд┐рдд рдкрддреЗ рд╕реЗ рд╢реВрдиреНрдп рдСрдлрд╕реЗрдЯ рдкрд░)ред

рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░, рдирд┐рдореНрди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

[0] [0]:'b' [268]:'l' [536]:'W' [804]:'p' [1072]:152 [1340]:1122
[1] [0-3]:"VOID" [4-5]:5 [6-7]:4

рдЪрд░рдг 7 - рджрд░рд╛рд░ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рдЖрдзрд╛рд░реА рддреИрдпрд╛рд░ рдХрд░реЗрдВ


рдЕрдм рд╣рдо рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╕рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛:
1) рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ ("рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд░реЛрдХреЗрдВ") рдФрд░ рд╕рддреНрдпрд╛рдкрди рд╕рд░рдгреА рдореЗрдВ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐;
2) рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреНрд░рдо

рдЖрдЗрдП рд╣рдо _construct_key () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рддреЛ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛
  1. 4 рдмрд╛рдЗрдЯреНрд╕ == key_array [1] [0 ... 3] == "VOID"
  2. 2 рдмрд╛рдЗрдЯреНрд╕ == key_array [1] [4] == 5
  3. 2 рдмрд╛рдЗрдЯреНрд╕ == key_array [1] [6] == 4
  4. 1 рдмрд╛рдЗрдЯ == key_array [0] [0] == 'b' (рдЯреЛрдХрди)
  5. 1 рдмрд╛рдЗрдЯ == (рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ) == n_strlen1
  6. n_strlen1 рдмрд╛рдЗрдЯреНрд╕ == (рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ) == n_strlen1
  7. 1 рдмрд╛рдЗрдЯ == (+7 == рдЕрдЧрд▓рд╛ рдЯреЛрдХрди) == n_pos
  8. 1 рдмрд╛рдЗрдЯ == key_array [0] [0] == 'l' (рдЯреЛрдХрди)
  9. 1 рдмрд╛рдЗрдЯ == (рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ) == n_strlen1
  10. n_strlen1 рдмрд╛рдЗрдЯреНрд╕ == (рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ) == n_strlen1
  11. 1 рдмрд╛рдЗрдЯ == (+7 == рдЕрдЧрд▓рд╛ рдЯреЛрдХрди) == n_pos
  12. 1 рдмрд╛рдЗрдЯ == key_array [0] [0] == 'W' (рдЯреЛрдХрди)
  13. 1 рдмрд╛рдЗрдЯ == (рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ) == n_strlen1
  14. n_strlen1 рдмрд╛рдЗрдЯреНрд╕ == (рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ) == n_strlen1
  15. 1 рдмрд╛рдЗрдЯ == (+7 == рдЕрдЧрд▓рд╛ рдЯреЛрдХрди) == n_pos
  16. 1 рдмрд╛рдЗрдЯ == key_array [0] [0] == 'p' (рдЯреЛрдХрди)
  17. 1 рдмрд╛рдЗрдЯ == (рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ) == n_strlen1
  18. n_strlen1 рдмрд╛рдЗрдЯреНрд╕ == (рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ) == n_strlen1
  19. 1 рдмрд╛рдЗрдЯ == (+7 == рдЕрдЧрд▓рд╛ рдЯреЛрдХрди) == n_pos
  20. 1 рдмрд╛рдЗрдЯ == key_array [0] [0] == 152 (рдЯреЛрдХрди)
  21. 1 рдмрд╛рдЗрдЯ == (рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ) == n_strlen1
  22. n_strlen1 рдмрд╛рдЗрдЯреНрд╕ == (рдХреЛрдИ рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ) == n_strlen1
  23. 1 рдмрд╛рдЗрдЯ == (+7 == рдЕрдЧрд▓рд╛ рдЯреЛрдХрди) == n_pos
  24. 4 рдмрд╛рдЗрдЯреНрд╕ == (key_array [1340]) == 1122


рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдЯреИрдмрд▓реЗрдЯ рдмрдирд╛рдпрд╛ рд╣реИ:



рдпрд╣рд╛рдВ 7 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ - рд╡рд░реНрдгреЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛, 6 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ - рдЙрдирдХреА рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдЕрднреНрдпрд╛рд╡реЗрджрди, 8 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ - рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ), 9 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ - рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдСрдлрд╕реЗрдЯред рдпрд╣ рджреГрд╢реНрдп рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рднрд╡рд┐рд╖реНрдп рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдПрдХ рдкреАрд▓реЗ рд░рдВрдЧ рдХреА рднрд░рдг рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд), рдЬрдмрдХрд┐ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдореВрд▓реНрдпреЛрдВ, рд╕рд╛рде рд╣реА рдЕрдЧрд▓реЗ рд╕реНрдЯреЙрдк рдкреНрд░рддреАрдХ рдХреЗ рд╕реНрдерд┐рддрд┐ рдСрдлрд╕реЗрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реВрддреНрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдКрдкрд░ (рд▓рд╛рдЗрдиреЛрдВ 1-4 рдореЗрдВ), key_array рдЪреЗрдХ рдРрд░реЗ рдХреА рд╕рдВрд░рдЪрдирд╛ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ ред

рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд▓ рд╣реА рдкреНрд▓рд╕ рдЕрдиреНрдп рд╕реНрд░реЛрдд рд╕рд╛рдордЧреНрд░реА рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдкреАрдврд╝реА рдФрд░ рд╕рддреНрдпрд╛рдкрди


рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реА рджрд░рд╛рд░ рдХреЗ рд╕рд╛рде рдЦрд┐рд▓рд╛рддреА рд╣реИред рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА:

рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ
 import sys, os import struct import subprocess out_str = ['!', 'I', ' solved', ' this', ' crackme!'] def write_file(file_path): try: with open(file_path, 'wb') as outfile: outfile.write('VOID'.encode('ascii')) outfile.write(struct.pack('2h', 5, 4)) outfile.write('b'.encode('ascii')) outfile.write(struct.pack('B', len(out_str[0]))) outfile.write(out_str[0].encode('ascii')) pos = 10 + len(out_str[0]) outfile.write(struct.pack('B', pos - 6)) outfile.write('l'.encode('ascii')) outfile.write(struct.pack('B', len(out_str[1]))) outfile.write(out_str[1].encode('ascii')) pos += 3 + len(out_str[1]) outfile.write(struct.pack('B', pos - 6)) outfile.write('W'.encode('ascii')) outfile.write(struct.pack('B', len(out_str[2]))) outfile.write(out_str[2].encode('ascii')) pos += 3 + len(out_str[2]) outfile.write(struct.pack('B', pos - 6)) outfile.write('p'.encode('ascii')) outfile.write(struct.pack('B', len(out_str[3]))) outfile.write(out_str[3].encode('ascii')) pos += 3 + len(out_str[3]) outfile.write(struct.pack('B', pos - 6)) outfile.write(struct.pack('B', 152)) outfile.write(struct.pack('B', len(out_str[4]))) outfile.write(out_str[4].encode('ascii')) pos += 3 + len(out_str[4]) outfile.write(struct.pack('B', pos - 6)) outfile.write(struct.pack('i', 1122)) except Exception as err: print(err) raise def main(): if len(sys.argv) != 2: print('USAGE: {this_script.py} path_to_crackme[.exe]') return if not os.path.isfile(sys.argv[1]): print('File "{}" unavailable!'.format(sys.argv[1])) return file_path = os.path.splitext(sys.argv[1])[0] + '.dat' try: write_file(file_path) except: return try: outputstr = subprocess.check_output('"{}" -f "{}"'.format(sys.argv[1], file_path), stderr=subprocess.STDOUT) print(outputstr.decode('utf-8')) except Exception as err: print(err) if __name__ == '__main__': main() 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░рд╛рд░реЗрдВ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рд▓реЗрддреА рд╣реИ, рдлрд┐рд░ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рджрд░рд╛рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдкрд╛рда рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкреИрдХ () рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ("рдмреА" = "рдмрд╛рдЗрдЯ", "рдЖрдИ" = рдЗрдВрдЯ, рдЖрджрд┐), рдФрд░ рдЖрдк рдЕрдиреБрдХреНрд░рдо рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (">" = "рдмрд┐рдЧ" -рдПрдВрдбрд┐рдпрди "," <"=" рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди ")ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрджреЗрд╢ рд▓рд┐рдЯрд┐рд▓-рдПрдВрдбрд┐рдпрди рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рд╣реИ, рдлрд┐рд░ рд╣рдо рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╛рдпрд╛ред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ "рдореИрдВрдиреЗ рдЗрд╕ рдХреНрд░реИрдХрдореЗ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ!" (рдЖрдк рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ)ред

рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:



рд╣реБрд░реНрд░реЗ, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЗрд╕рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рдкрд╕реАрдирд╛ рдЖрдиреЗ рдФрд░ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдФрд░ рдЗрд╕реЗ "рдХреНрд░реИрдХ" рдХрд░ рджрд┐рдпрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджрд░рд╛рд░ рд╣реИ, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджреВрд╕рд░реА рдХрдард┐рдирд╛рдИ рд╕реНрддрд░ (рдЙрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╕реНрддреБрдд 5 рдореЗрдВ рд╕реЗ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдХреЙрд▓ рдФрд░ рджрд░реНрдЬрдиреЛрдВ - рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рдЬрдЯрд┐рд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ - рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рдкреА-рдХреЛрдб рдХреЗ рдЙрдкрдпреЛрдЧ рддрдХ рдбреЗрдЯрд╛, рдХрдЪрд░рд╛ рдХреЛрдб рдФрд░ рдЕрдиреНрдп рдУрдлрд╝реНрд╕реНрдХреНрдпреВрд╢рди рддрдХрдиреАрдХреЛрдВ рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдЕрдиреБрднрд╛рдЧ ... рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИред рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреАред

рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реАред

Source: https://habr.com/ru/post/hi447488/


All Articles