рдбрд┐рдмрдЧрд░ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдЦ рдХреЗ
рдкрд╣рд▓реЗ рдФрд░
рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдЦ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреАрдмрдЧрд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рд╡рд┐рд░реЛрдзреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗрдЯ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдпрд╣ рд╕рдм рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдХреБрдЫ рд╕рд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЬрд╣рд╛рдВ рд╕реЗ рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВрдВрдЧрд╛ ... рдЬрдм рддрдХ рдореИрдВ рдердХ рди рдЬрд╛рдКрдВ :)
рддреБрд░рдВрдд, рдореИрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВрдЧрд╛, рдЖрд╡реЗрджрди / рдбрд┐рдмрдЧрд░ рдХреЗ рд╡рд┐рд░реЛрдз рдореЗрдВ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рд╣рдореЗрд╢рд╛ рдЬреАрдд рдЬрд╛рдПрдЧрд╛ :)
рд▓реЗрдХрд┐рди, рдХреЗрд╡рд▓ рдЕрдЧрд░ рдПрдХ рд╕рдХреНрд╖рдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░ рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИ (рдареАрдХ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рд╕рдорд╛рди рдпреЛрдЧреНрдпрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
рдпрд╣ рд╕рдЪ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╕рдХреНрд╖рдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЙрдирдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдмрд╛рдз рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓рдЯрдлреЗрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреА рджрдпрд╛ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдиреЗ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рдЧреНрд░реЗрдирд╛рдЗрдЯ рдХреЛ рдирд╣реАрдВ рдХрд╛рдЯ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд░реВрдк рдореЗрдВред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╢реЗрдпрд░рд╡реЗрдпрд░:
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдмреЗрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЦрд╛рд▓реА рдлреЙрд░реНрдо рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд VCL рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛрдиреЗ рджреЗрдВ (рдареАрдХ рд╣реИ, рднрд▓реЗ рд╣реА рдЦрд╛рд▓реА рди рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде) рдФрд░ рд╣рдо рдЗрд╕реЗ рдмреЗрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓ рдЬрд┐рд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рддрд╕реНрд╡реАрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╣реИ? рдЕрдзрд┐рдХ рд╕рдЯреАрдХ - рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрд╛рдиреВрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдХреБрдВрдЬреА рд╣реИред рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдиреВрдиреА рд╡реНрдпрдХреНрддрд┐, рдЬрд┐рд╕рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреИрд╕реЗ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╣реИ, рдЖрд╡реЗрджрди рдХреА рдПрдХ рдХрд╛рдиреВрдиреА рдкреНрд░рддрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдВрдЬреА рддреЛ рдХреБрдВрдЬреА рд╣реИред
рд╣рдо рдПрдХ рдирдпрд╛ рд╡реАрд╕реАрдПрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде TImage рдлреЙрд░реНрдо рдкрд░ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рджреГрд╢реНрдпрдорд╛рди рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдлреЙрд░реНрдо рдкрд░ рджреЛ рдЯреАрдИрдбрд┐рдЯ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдпреВрдЬрд░рдиреЗрдо рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рдПрдХреНрдЯрд┐рд╡реЗрд╢рди рдХреЛрдб рдХреЗ рд▓рд┐рдПред рдЦреИрд░, рджреЛ рдмрдЯрди - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред
рдЦреИрд░, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо "рд╢реАрд░реНрд╖ рдЧреБрдкреНрдд" рд╕рдХреНрд░рд┐рдпрдг рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
function TForm1.GenerateSerial(const AppUserName: string): string; const MagicSerialMask: int64 = $C5315E6121543992; var I: Integer; SN: int64; RawSN: string; begin SN := 0; Result := ''; for I := 1 to Length(AppUserName) do begin Inc(SN, Word(AppUserName[I])); SN := SN * 123456; end; Sn := SN xor MagicSerialMask; RawSN := IntToHex(SN, 16); for I := 1 to 16 do if ((I - 1) mod 4 = 0) and (I > 1) then Result := Result + '-' + RawSN[I] else Result := Result + RawSN[I]; end; procedure TForm1.btnCheckSerialClick(Sender: TObject); begin if edSerial.Text <> GenerateSerial(edAppUserName.Text) then Application.MessageBox(' ', PChar(Application.Title), MB_OK or MB_ICONERROR) else begin Image1.Visible := True; Label1.Visible := False; Label2.Visible := False; Label3.Visible := False; edAppUserName.Visible := False; edSerial.Visible := False; btnCancel.Visible := False; btnCheckSerial.Visible := False; end; end;
рдХреЛрдб рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рд╕рдХреНрд░рд┐рдпрдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕рднреА рдирд┐рдпрдВрддреНрд░рдг рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдЪрд┐рддреНрд░ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдерд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ:

(рдареАрдХ рд╣реИ ... рдкрд╣рд▓реА рдмрд╛рдд рдореБрдЭреЗ рдорд┐рд▓реА :)
рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, "рдпрд╣" рд╡рд┐рднрд┐рдиреНрди рд╢реЗрдпрд░рд╡реЗрдпрд░ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрднреА-рдХрднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдордВрдЪреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдлреЙрд░реНрдо рдХреЗ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: "рдЯреЗрд╕реНрдЯ рдкреНрд▓рд╛рдЬрд╝ рд╕рдВрд░рдХреНрд╖рдг"ред
рдФрд░ рдкрдЯрд╛рдЦрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?
рд╡рд╣ рдПрдХ рдбрд┐рдмрдЧрд░ рд▓реЗрддрд╛ рд╣реИ (рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╡рд╣реА рдСрд▓реА рдбреЗрдмрдЧ рд▓реЗрддреЗ рд╣реИрдВ) рдФрд░ рдЗрд╕ рддрд╕реНрд╡реАрд░ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ:

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

рдЪрд┐рддреНрд░ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд░реНрдгрдп рдмрд┐рдВрджреБ рдХреЛ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рджреНрд╡рд╛рд░рд╛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рд╣реИ, рд╡рд╣ рдЬреЗрдПрдордкреА рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЬреЗрдПрдордкреА рдкрд░ рд╕рд╣реА рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реАрд░рд┐рдпрд▓ рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рдФрд░ рдХреЛрдб рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╡реИрдз рд╕рдВрдХреНрд░рдордг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдкрд░ рд╣реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?
рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ рдбреЗрд▓реНрдлреА рдбреАрдмрдЧрд░ рд╕реЗ рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ:

рдпрд╣рд╛рдВ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ рдкрддреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдкрдврд╝рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдкрддреЗ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 0x475729, рдЬрд┐рд╕ рдкрд░ рдирд┐рд░реНрдгрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЯреАрдИрдбрд┐рдЯреНрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЗрдирд░реЗрдЯрд╕реЗрд░рд┐рдпрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкрдЯрд╛рдЦрд╛ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рдЫрд╡рд┐ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рдХреЛ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рд╕рднреА рдХреЙрд▓ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЦреИрд░, рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдореИрдВ рдереЛрдбрд╝рд╛ рдЕрддрд┐рд░рдВрдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореИрдк рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдХрд░рдг рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди ... рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓реЛрдЧ рдХрднреА-рдХрднреА рдбреЙрд▓реНрдлрд┐рди рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреА рджреГрдврд╝рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд╛рди рдФрд░ рдкреНрд░рд╢рдВрд╕рд╛ :)
рдЦреИрд░, рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ 0x475729 рдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВ - рдЬреЗрдбрдЬреЗрдб рдФрд░ рдЬреЗрдИ, рдпреЗ рдбрд┐рд╕реНрдХреНрд▓реЗрдорд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рд╡реЗ рд╕рдорд╛рди рд╣реИрдВред
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рдмрд╛рд░ рдореБрдЭреЗ рдЖрд╡рд╛рдЬ рджреА рдЧрдИ рд╣реИред
рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╣реИ, рдореИрдВрдиреЗ рдШреЛрд╖рдгрд╛ рдХреА рдХрд┐ рдореИрдВ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕рдП рдкрд░ рдмреАрдкреА рдбрд╛рд▓реВрдВрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рд╡реЗ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдХреЙрд▓ рдХреЛ рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдпрд╣ рдХрдерди рдПрдХ рдареЛрд╕ рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рд╕ рдХреЗ рд╕рд╛рде рд╣реИ, рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпреВрдирд┐рдХреЛрдб рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмреНрд░реЗрдХрдбрд╛рдЙрди рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рдЪреВрдХ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред рдЖрдЗрдП рдкреВрд░реЗ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдпреЛрдЬрдирд╛ рд╣реИ:
MessageBoxA -> MessageBoxExA -> MessageBoxTimeOutA -> MessageBoxTimeOutW-> SoftModalMessageBox ()
рддреЛ рд╣рд╛рдБ, рд╣рдо рдХрд┐рд╕реА рднреА рд╕реВрдЪреАрдмрджреНрдз рдлрд╝рдВрдХреНрд╢рди (рдЖрдорддреМрд░ рдкрд░ MessageBoxTimeOutW рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ) рдХреЗ рдХреЙрд▓ рдкрд░ рдмреАрдкреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдХреЙрд▓ рдХреЛ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдЙрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдбрдмреНрд▓реНрдпреВ рдлрд╝рдВрдХреНрд╢рди рднреА рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред
рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ, рдбреЗрд▓реНрдлреА рдореЗрдВ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВред
рдЦреИрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ShowMessage ()ред рдпрд╣ рд╡рд┐рдзрд┐ MessageBox API рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдпрд╣ рддрд░реНрдХ рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд░реВрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдЯрди рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпреЗ рд╡реАрд╕реАрдПрд▓ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдбреАрдмрдЧрд░ рдореЗрдВ рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреЙрд▓ ShowWindow API рдкрд░ рдЖрд░рд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рднреА рдирд┐рдХрд▓ рдЬрд╛рдПрдВрдЧреЗред
рдЕрднреА рднреА рдмрд╛рддрдЪреАрдд рдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╡реНрдпрдВрдЬрди рд╣реЛрдВрдЧреЗред рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рдордп рдХреЗ рдмрд┐рдирд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреА рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдкрд╣рд▓рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдВ:
рдЗрд╕ рдЪреЗрдХ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдПрдХ рдЕрд╕рдлрд▓ рдХреЛрдб рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЙрд▓ рдХрд░рдирд╛ рдЦрд░рд╛рдм рд╕реНрд╡рд╛рдж рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред
рдкрд░рд┐рдЪрдп рдЖрд╡реЗрджрди рдЕрдЦрдВрдбрддрд╛ рдирд┐рдпрдВрддреНрд░рдг:
рддрдм рдареАрдХ рд╣реИ - рдЙрдиреНрд╣реЛрдВрдиреЗ рд╣рдореЗрдВ рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛, рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдПрдХ рд╣реА рдмрд╛рдЗрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ред рдЕрдм рд╣рдорд╛рд░реА рдордЬреЗрджрд╛рд░ рддрд╕реНрд╡реАрд░ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдореБрдлреНрдд рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ - рд╣рдо рд▓рдбрд╝реЗрдВрдЧреЗ ...
рд╣реИрдХрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЙрдбреА рдХреЗ рд╕реАрдзреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реБрдИред
рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ: рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣ menacing рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ :)
рд╣рдо рдЗрд╕ рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдмрд╣реБрдд рд╕рд╛рд░реЗ buzzwords рд╣реИрдВ: рдбрд┐рдЬрд┐рдЯрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрди, рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЫрд╡рд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ, рдХреЛрдб рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЪреЗрдХрд╕рдо рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪреЗрдВред рд╕рдм рдХреБрдЫ рдЦрд╛рд▓реА рд╣реИ - рдЕрдВрдд рдореЗрдВ, рд╡реИрд╕реЗ рднреА, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ...
рдЦреИрд░, рд╣рдо рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдЙрд╕рдиреЗ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ред рджреВрд╕рд░реЗ, рдпрд╣ WinVerifyTrust рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрд╡рд░реЛрдзрди рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рддреАрд╕рд░рд╛, рдпрд╣ ImageRemoveCertificate рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ рдпрд╣ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЫрд╡рд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдпрд╣рд╛рдБ рднреА, рд╕рдм рдХреБрдЫ рджреБрдЦреА рд╣реИред рджреЗрдЦреЛ, рд╣рдорд╛рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реА ParamStr (0) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрде рдорд┐рд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рдлрд┐рд░ рдЗрд╕ рдкрде рдкрд░ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЬрд╛рдБрдЪ рд╢реБрд░реВ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди ...
рд▓реЗрдХрд┐рди OpenFile / CreateFile рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, рдкрдЯрд╛рдЦрд╛ рдореВрд▓ рдкреИрд░рд╛рдореАрдЯрд░, рдЕрдирдореЙрдбрд┐рдлрд╛рдЗрдб рдЫрд╡рд┐ рдХреЗ рдкрде рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрде рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдЪреЗрдХ рдЬрдВрдЧрд▓ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЛрдбрд░ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реЛрддреА рд╣реИред рдЙрдирдХрд╛ рд╕рд╛рд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рд╡реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЙрдбреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдбрд┐рдмрдЧрд░ рдХреЛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд▓реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рджреВ рдХреА рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ, рдФрд░ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ:
procedure TTestDebugger.OnBreakPoint(Sender: TObject; ThreadIndex: Integer; ExceptionRecord: Windows.TExceptionRecord; BreakPointIndex: Integer; var ReleaseBreakpoint: Boolean); var JmpOpcode: Byte; begin if ExceptionRecord.ExceptionAddress = Pointer(FCore.DebugProcessData.EntryPoint) then begin JmpOpcode := $EB; FCore.WriteData(Pointer($475729), @JmpOpcode, 1);
рдбрд┐рд╕реНрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреЗрдИ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп, рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рдЬреЗрдПрдордкреА рдЕрдиреБрджреЗрд╢ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕реАрдзрд╛ рдХреВрдж рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рджреБрдЦреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВред
рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд░рд╣рддрд╛ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЙрдбреА рдореЗрдВ рд╕реАрдзреЗ рдХреЛрдб рд╕реЗрдХреНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред
рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЬрд╛рдп рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рд╡рд┐рдХрд▓реНрдк рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдореЗрд╢рд╛ рд╕рдлрд▓рддрд╛ рдХреА рдУрд░ рдЕрдЧреНрд░рд╕рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЪреЗрдХрд╕рдо рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯред рдпрджрд┐ рд╡реЗ рдЖрд╡реЗрджрди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкрдЯрд╛рдЦрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рд╡рд╛рд▓реЗ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред (рдЖрдкрдХреА рдиреЛрдЯрдмреБрдХ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЛрдб рдмреНрд▓реЙрдХ рдХреЗ рд╕реАрдЖрд░рд╕реА рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ, рдПрдХ рдмреБрд░рд╛ рд╕реНрд╡рд░ рд╣реИ)ред
рджреВрд╕рд░реЗ, рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВрдиреЗ MIA рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА - рдореЗрдореЛрд░реА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯред рдХреЛрдб рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЖрджрд░реНрд╢ рддрдВрддреНрд░ рд╣реИ (рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо HBP - рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ)ред
рдпрд╣ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдпрджрд┐ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЦрдВрдб рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдорд╡реАрдЖрд░ рдпрд╛ рдПрдЪрдмреАрдкреА рдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕ рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХреЛрдб рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдВрдЪ рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рдд рд╣реИред
рдпрджрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдВрдЪ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреИрдЪ рджреНрд╡рд╛рд░рд╛ рднреА рдЕрдХреНрд╖рдо рд╣реИред
рдЦреИрд░, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрддрд┐рд░реЛрдз рдХреЗ рд▓рд┐рдП рд░рд╡рд╛рдирд╛ рд╣реБрдП: рдЧреНрд░рд╛рд╣рдХ рдЧреНрд░рд╛рд╣рдХ рдирд╣реАрдВ рд╣реИ :)
рд╣рд╛рд▓рд╛рдВрдХрд┐ ...

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди ...
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдЙрд╕ рдХреЛрдб рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдерд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореЗрдореЛрд░реА рдореЗрдВ рдЙрд╕рдХреА рд▓реЛрдХреЗрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдмрд▓ рд╣рдорд╛рд░реЗ "рд╕рдм рдХреБрдЫ" рд╣реИрдВред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЯрд┐рдХрд╛ рд╣реБрдЖ рд░рдХреНрд╖рдХ рд▓реЗрдмрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рджреВрд╕рд░реА рдмрд╛рдЗрдХ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд▓реЗрдмрд▓ рдХреНрдпрд╛ рд╣реИ - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдРрд╕рд╛ рд▓реЗрдмрд▓ рд╣реИ рдЬреЛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реИ, рдЧреЛрдЯреЛ () рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЖрд▓рд╕реА рдиреЗ рдЕрдкрдиреЗ рдЙрдЪреНрдЪ рдпреЛрдЧреНрдп "рдПрдлрдЖрдИ" рдХреЛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐ ... рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ - рд╣рдорд╛рд░реЗ рдЯреИрдЧ рд╕рднреА рд╣реИрдВ :)
рд╕рдЪ рд╣реИ, рдПрдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ (рдХреНрд░реЙрд╕-рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП - рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ), рдЕрдм рд╣рдо рдХреБрд▓ рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рд▓реЗрдмрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд▓реЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрддрд╛ рд╣рдо рдЕрдЦрдВрдбрддрд╛ рдЪреЗрдХ рдХреЛрдб рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд░реЗрдВрдЧреЗред
рдЦреИрд░, рдЕрдЦрдВрдбрддрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдвреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдКрдкрд░ рдХреА рдЧрдИ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛) рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд┐рд░рдВрддрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЗ рд╕реАрдЖрд░рд╕реА рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред
рдареАрдХ рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдмрдВрдж рдХрд░реЛ, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
const CheckedCodeValidCheckSum: DWORD = 248268;
рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реИ:
рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ CheckedCodeBegin рдФрд░ CheckedCodeEnd, рдЗрди рджреЛ рд▓реЗрдмрд▓ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ "рдЪреЗрдХрд╕рдо" рдХреА рдЧрдгрдирд╛, CheckCodeProtect рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдЪреЗрдХрд╕рдо рдЦреБрдж, рдЪреЗрдХ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХреЛрдб рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ CheckedCodeValidCheckSum рдирд┐рд░рдВрддрд░ (рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ) рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ, рдХреНрдпреЛрдВрдХрд┐:
- рдпрд╣ рдХреЛрдб рдбрд┐рд╕реНрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреЙрдбреА рдХреЗ рдПрдХ рдкреИрдЪ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдЗрдЯреНрд╕ рдмрджрд▓ рдЪреБрдХрд╛ рд╣реЛрддрд╛ рд╣реИ)ред
- рдпрд╣ рдХреЛрдб рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рдирд┐рдХрд╛рдп рдХреЗ рдПрдХ рдкреИрдЪ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред
- рдФрд░ рдпрд╣ рдХреЛрдб рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ ... рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдЪрд┐рддреНрд░ рдпрд╛рдж рд╣реИ?

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

рдЪреЗрдХрд╕рдо рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдбрд┐рдмрдЧрд░ рдХреЛ 0x467069 рдкрддреЗ рдкрд░ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╕ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдпрд╛рд╕ рдореЗрдВред
рдареАрдХ рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рдзреЛрдЦрд╛ рджрд┐рдпрд╛, рдЕрдЧрд░ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рдХреНрд╖реЗрддреНрд░ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдереА, рддреЛ рд╕реНрдЯреЙрдк рдмрд╕ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╣реБрдЖ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдкрд╣рд▓реЗ "PUSH EBX" рдкрд░ рд░реБрдХ рдЧрдпрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рдЧреАрдд рд╣реИ, рд╕рд╡рд╛рд▓ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдЕрдм рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреА рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреЗрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрддрд╛ рдЪрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдкреИрдЪ рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХреНрд░реЙрд╕-рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд░реЛрдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рднреА рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдареАрдХ рд╣реИ, рдПрдХ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИ?
рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рд╕реАрдзреЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдЖрд╡реЗрджрди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдкрд╛рдж рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдХреЛрдИ рдирд╛рдо рдирд╣реАрдВ)ред рд╡реАрдПрдо рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рддреБрд░рдВрдд рдЗрд╕рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдХреНрд░рд┐рдкреНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдмрд╛рдЗрдЯ рдкреИрдЪ рдХрд┐рдпрд╛, рдЪреЗрдХрд╕рдо рд╕рддреНрдпрд╛рдкрди рддрдВрддреНрд░ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЗрд╕реЗ рдмрд╛рдврд╝ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдмрд╛рдврд╝ рдХреЛрдб рдХреЛ рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкрдЯрдХрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдкреНрд░рддреНрдпреЗрдХ рдкреИрдЪ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХреЛрдб рдХреЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдордЭрд╛ рдЬреЛ рдПрдХ рд╣рд┐рдорд╕реНрдЦрд▓рди рдХреА рддрд░рд╣ рдХреЛрдб рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдореИрдВ рд╕рд┐рд░реНрдл рдореИрдиреБрдЕрд▓ рдкреИрдЪ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреВрдм рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛ / рдбрд┐рдмрдЧрд░ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд▓рдЧрднрдЧ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╕рдВрд░рдХреНрд╖рдг рдХреЛрд░ рдХреЗ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдм рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрде рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдкрдЯрд╛рдЦреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд┐рд░рджрд░реНрдж рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪреЗрдХрд╕рдо рдХреЗ рдПрдХ рддреБрдЪреНрдЫ рд╕рддреНрдпрд╛рдкрди рдкрд░ рднреАред
рдЦреИрд░, рдЕрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЛред
рдЕрдЦрдВрдбрддрд╛ рдЬрд╛рдВрдЪ рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрдЯрд╛рдЦрд╛ рдиреЗ рдПрдордмреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдФрд░ рдЕрдм рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдкрд░ PAGE_GUARD рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рд╕рд╣реА рдврдВрдЧ рд╕реЗред рдЗрд╕рд▓рд┐рдП, рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдбреАрдмрдЧрд░ рдЙрд╕ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╡рд╣ рдХрдерд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╕рдЪ рд╣реИ, рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ, рд╣рдо рд╡рд░реНрдЪреБрдЕрд▓рдкреНрд░реЛрдЯреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрдордЬреЛрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдмрдЧрд░ рдЗрд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдХреЙрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдПрдХ рдмреЛрд▓реНрдЯ рднреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд╕рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рд╣рдо рдкрдврд╝рддреЗ рд╣реИрдВ ред
рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐, рд╣рдо рдбреЗрдореЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ PAGE_GUARD рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛, рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рджред
рдареАрдХ рд╣реИ, рдЕрдм рд╕реЗ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдЦрдВрдбрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рд╣реИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП) ...
рдбрд┐рдмрдЧрд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рдЦреИрд░, рдЕрдм рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде, рдФрд░ рдПрдХ рдбрд┐рдмрдЧрд░ рдХреА рдорджрдж рд╕реЗ рдЕрдкрдирд╛ рд░реВрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдкрддрд╛ рдХреИрд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрд╕реНрдбрдмрдЧрд░рдкрд░реНрд╕реЗрдВрдЯ рдлрдВрдХреНрд╢рди рдкрд░ рдЪрд▓реЗрдВ, рдпрд╣ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рд╣рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
function IsDebuggerPresent: BOOL; stdcall; external kernel32; procedure TForm1.FormCreate(Sender: TObject); begin if IsDebuggerPresent then begin MessageBox(Handle, ' .', PChar(Application.Title), MB_ICONERROR); TerminateProcess(GetCurrentProcess, 0); end; end;
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдбрд┐рдмрдЧрд░ рдХреЗ рдЕрдзреАрди рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЯреНрд░реВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреИрдЪ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдПрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрдЯрд╛рдЦрд╛ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рдХрд╛рдп рдХреЛ рдкреИрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдмреАрдкреА рдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рдкрд░ рд░рдЦреЗрдВ, рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред
- рдЗрд╕ рдлрдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рдкреИрдЪ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдлрд╛рд▓реНрд╕ рд▓реМрдЯреЗ
- рдбреАрдмрдЧ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ Peb.BeingDebugged рдЪрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВред
рддреАрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ (рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ), рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓реЗ рджреЛ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╣рдо рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реА рдореЗрдВ, 0xCC рдУрдкрдХреЛрдб рдХреЗ рд╕рд╛рде BP рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдкреИрдЪ рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбрд┐рдмрдЧ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рдлреЙрд░реНрдордХреНрд░рд┐рдПрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
procedure TForm1.FormCreate(Sender: TObject); var P: PCardinal; begin P := GetProcAddress(GetModuleHandle(kernel32), 'IsDebuggerPresent'); ShowMessage(IntToHex(P^, 8));
рдпрд╣ IsDebuggerPresent рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдЖрдк рдРрд╕рд╛ рдХреЛрдб рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ:
function IsDebuggerPresent: BOOL; stdcall; external kernel32; procedure TForm1.FormCreate(Sender: TObject); var P: PCardinal; begin P := @IsDebuggerPresent; ShowMessage(IntToHex(P^, 8));
рджреВрд╕рд░реЗ рдЕрд╡рддрд╛рд░ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдЬрд╣рд╛рдВ рдЬреЗрдПрдордкреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рд╣реИред
рдЖрдЗрдП рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдореВрд▓реНрдп рдпрд╛рдж рд░рдЦреЗрдВред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рддрд╣рдд, рдпрд╣ рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдкреА рдореЗрдВ рдпрд╣ рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рд╣реЛрдЧрд╛, рд╕рд╛рдд рдореЗрдВ рдХрд░реНрдиреЗрд▓рдмреЗрд╕ рд╕реЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдореВрд▓реНрдп 9090F3EB рдорд┐рд▓рд╛, рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:

рдЕрдм, рд╣рдорд╛рд░реЗ рдбрд┐рдмрдЧрд░ рдХреЛ рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдСрдирдмреНрд░реЗрдХреНрд░рд╛рдлреНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЛ рдкреИрдЪ рдХрд░реЗрдВрдЧреЗ:
procedure TTestDebugger.HideDebugger; const PachBuff: array [0..2] of Byte = ( $31, $C0,
рдпрд╣рд╛рдБ рдПрдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИ, kern32.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкрддрд╛ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреАрдмрдЧрд░рд░рдкрд░реНрд╕реЗрдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдбреАрдмрдЧрд░ рдФрд░ рдбреАрдмрдЧ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред
рдкреИрдЪ рдХрд╛ рдЕрд░реНрде EAX рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдХреЛрдб рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдбрд┐рдмрдЧрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдбрд┐рдмрдЧрд░ рдХреЗ рдлреЙрд░реНрдордХреНрд░рд┐рдПрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдЪ рд╣реИ, рдЕрдм рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб 9090F3EB рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 90C3C031 рдирдВрдмрд░ рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬреЛ рдкреИрдЪ рдХреЗ рдСрдкрдХреЛрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╢рд░реАрд░ рдкреИрдЪ рд╣реИ? рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдо рдбрд┐рд╕реНрдХ рдкрд░ рд╕реНрдерд┐рдд рдХрд░реНрдиреЗрд▓ 32.dll рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмреЙрдбреА рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрд╕реА рдкреИрдЪ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрде рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЪреЗрдХ рдпрд╣ рдХрд╣реЗрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореБрдЭреЗ рдорд┐рд▓рд╛ рд╣реИ, рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рдХреЗрд╡рд▓ 1 рдмрд╛рд░) рдФрд░ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЪреВрдБрдХрд┐ рд╣рдо рдбрд┐рд╕реНрдХ рд╕реЗ рд╕рд╣реА рдорд╛рди рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдореГрддрд┐ рд╕реЗ рдкреНрд░рд╛рдкреНрдд 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрдврд╝рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред , - - , .
:
function IsDebuggerPresent: BOOL; stdcall; external kernel32; procedure TForm1.CheckIsDebugerPresent; var Snapshot: THandle; ProcessEntry: TProcessEntry32; ProcessHandle: THandle; pIsDebuggerPresent: PDWORD; OriginalBytes: DWORD; lpNumberOfBytesRead: DWORD; begin pIsDebuggerPresent := GetProcAddress(GetModuleHandle(kernel32), 'IsDebuggerPresent'); Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if Snapshot <> INVALID_HANDLE_VALUE then try ProcessEntry.dwSize := SizeOf(TProcessEntry32); if Process32First(Snapshot, ProcessEntry) then begin repeat if ProcessEntry.th32ProcessID = GetCurrentProcessId then Continue; ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessEntry.th32ProcessID); if ProcessHandle <> 0 then try if ReadProcessMemory(ProcessHandle, pIsDebuggerPresent, @OriginalBytes, 4, lpNumberOfBytesRead) then begin if OriginalBytes <> pIsDebuggerPresent^ then begin MessageBox(Handle, ' IsDebuggerPresent .', PChar(Application.Title), MB_ICONERROR); TerminateProcess(GetCurrentProcess, 0); end; if IsDebuggerPresent then begin MessageBox(Handle, ' .', PChar(Application.Title), MB_ICONERROR); TerminateProcess(GetCurrentProcess, 0); end; end; finally CloseHandle(ProcessHandle); end; until not Process32Next(Snapshot, ProcessEntry) end; finally CloseHandle(Snapshot); end; end; procedure TForm1.FormCreate(Sender: TObject); begin CheckIsDebugerPresent; CheckCodeProtect; end;
TlHelp32 , .
тАФ API , , , .
, , IsDebuggerPresent kernel32.dll kernelbase.dll, , .
. , , .
.
, , , ?
, , , .
, , CheckIsDebugerPresent, -, . DebugActiveProcess, DbgUiRemoteBreakin. .
, DbgUiRemoteBreakin, TerminateProcess, , , .
:
type TDbgUiRemoteBreakinPath = packed record push0: Word; push: Byte; CurrProc: DWORD; moveax: byte; TerminateProcAddr: DWORD; calleax: Word; end; procedure TForm1.BlockDebugActiveProcess; var pDbgUiRemoteBreakin: Pointer; Path: TDbgUiRemoteBreakinPath; OldProtect: DWORD; begin pDbgUiRemoteBreakin := GetProcAddress(GetModuleHandle('ntdll.dll'), 'DbgUiRemoteBreakin'); if pDbgUiRemoteBreakin = nil then Exit; Path.push0 := $006A; Path.push := $68; Path.CurrProc := $FFFFFFFF; Path.moveax := $B8; Path.TerminateProcAddr := DWORD(GetProcAddress(GetModuleHandle(kernel32), 'TerminateProcess')); Path.calleax := $D0FF; if VirtualProtect(pDbgUiRemoteBreakin, SizeOf(TDbgUiRemoteBreakinPath), PAGE_READWRITE, OldProtect) then try Move(Path, pDbgUiRemoteBreakin^, SizeOf(TDbgUiRemoteBreakinPath)); finally VirtualProtect(pDbgUiRemoteBreakin, SizeOf(TDbgUiRemoteBreakinPath), OldProtect, OldProtect); end; end; procedure TForm1.FormCreate(Sender: TObject); begin BlockDebugActiveProcess; CheckIsDebugerPresent; CheckCodeProtect; end;
DbgUiRemoteBreakin :

TerminateProcess ( ), uExitCode hProcess, DWORD(-1) . EAX TerminateProcess .
, тАФ CREATE_PROCESS_DEBUG_EVENT, , , ..
.
, , , , DebugActiveProcess. ( , ...)
Memory Breakpoint
, PAGE_GUARD. VirtualQuery, VirtualProtect.
ReadProcessMemory. , . , PAGE_GUARD , , EXCEPTION_GUARD_PAGE . ┬л ┬╗. , . , , Hardware Breakpoint , / .
CalcCheckSum :
function TForm1.CalcCheckSum(Addr: Pointer; Size: Integer): DWORD; var pRealData, pCursor: PByte; I: Integer; Dumee: DWORD; begin pRealData := GetMemory(Size); try ReadProcessMemory(GetCurrentProcess, Addr, pRealData, Size, Dumee); Result := 0; pCursor := pRealData; for I := 0 to Size - 1 do begin if pCursor^ <> 0 then Inc(Result, pCursor^) else Dec(Result); Inc(pCursor); end; finally FreeMemory(pRealData); end; end;
, , .
?
, , .
, , , .
. :
constructor TTestDebugger.Create(const Path: string); begin FCore := TFWDebugerCore.Create; if not FCore.DebugNewProcess(Path, True) then RaiseLastOSError; FCore.OnCreateProcess := OnCreateProcess; FCore.OnLoadDll := OnLoadDll; FCore.OnDebugString := OnDebugString; FCore.OnBreakPoint := OnBreakPoint; FCore.OnHardwareBreakpoint := OnHardwareBreakpoint; FCore.OnUnknownBreakPoint := OnUnknownBreakPoint; FCore.OnUnknownException := OnUnknownException; end; destructor TTestDebugger.Destroy; begin FCore.Free; inherited; end;
, , , .
. IsDebuggerPresent, ( ) тАФ Peb.BeingDebugged.
:
procedure TTestDebugger.HideDebugger(hProcess: THandle); var pProcBasicInfo: PROCESS_BASIC_INFORMATION; pPeb: PEB; ReturnLength: DWORD; begin if NtQueryInformationProcess(hProcess, 0, @pProcBasicInfo, SizeOf(PROCESS_BASIC_INFORMATION), @ReturnLength) <> STATUS_SUCCESS then RaiseLastOSError; if not ReadProcessMemory(hProcess, pProcBasicInfo.PebBaseAddress, @pPeb, SizeOf(PEB), ReturnLength) then RaiseLastOSError; pPeb.BeingDebugged := False; if not WriteProcessMemory(hProcess, pProcBasicInfo.PebBaseAddress, @pPeb, SizeOf(PEB), ReturnLength) then RaiseLastOSError; end;
, , BeingDebugged . IsDebuggerPresent . .
, тАФ - .
:
( ). - . JE, if value then..else, , .. value : then else.
JE , ZF. . JE .
JE, .. , . . crackme.exe, - , , . 0467840.
:
procedure TTestDebugger.OnBreakPoint(Sender: TObject; ThreadIndex: Integer; ExceptionRecord: Windows.TExceptionRecord; BreakPointIndex: Integer; var ReleaseBreakpoint: Boolean); begin if ExceptionRecord.ExceptionAddress = Pointer(FCore.DebugProcessData.EntryPoint) then begin Writeln; Writeln(Format('!!! --> Process Entry Point found. Address: %p', [Pointer(FCore.DebugProcessData.EntryPoint)])); Writeln; HideDebugger(FCore.DebugProcessData.AttachedProcessHandle); FCore.SetHardwareBreakpoint(ThreadIndex, Pointer($467840), hsByte, hmExecute, 0, 'wait JE'); end else begin Writeln; Writeln(Format('!!! --> BreakPoint at addr 0X%p - "%s"', [ExceptionRecord.ExceptionAddress, FCore.BreakpointItem(BreakPointIndex).Description])); Writeln; end; end;
:
procedure TTestDebugger.OnHardwareBreakPoint(Sender: TObject; ThreadIndex: Integer; ExceptionRecord: Windows.TExceptionRecord; BreakPointIndex: THWBPIndex; var ReleaseBreakpoint: Boolean); var ThreadData: TThreadData; begin Writeln; ThreadData := FCore.GetThreadData(ThreadIndex); Writeln(Format('!!! --> Hardware BreakPoint at addr 0X%p - "%s"', [ExceptionRecord.ExceptionAddress, ThreadData.Breakpoint.Description[BreakPointIndex]])); FCore.SetFlag(ThreadIndex, EFLAGS_ZF, True); Writeln; end;
, , .
рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

, , , , :)
Hardware BreakPoint:
, , , . , .
, GetThreadContext DR7 ( тАФ ), , API , .
procedure TForm1.CheckHardwareBreakPoint; var Context: TContext; begin Context.ContextFlags := CONTEXT_DEBUG_REGISTERS; GetThreadContext(GetCurrentThread, Context); if Context.Dr7 <> 0 then begin MessageBox(Handle, ' HardwareBreaakPoint.', PChar(Application.Title), MB_ICONERROR); TerminateProcess(GetCurrentProcess, 0); end; end;
, _except_handler.
type
. , . except, try..finally..except SEH :)
рд╕рд╛рд░рд╛рдВрд╢
, , , .
:
http://rouse.drkb.ru/blog/dbg_part3.zip.
, . , :)
, .
┬й (Rouse_)
, 2012