рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рд░реЛрдзреА рдзреЛрдЦрд╛ рдмреИрдЯрд▓рдИ рдХреА рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ


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

  • BEService
    • рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛, рдЬреЛ рдмреИрдЯрд▓рдПрдИ рдмреЗрд╕реЗрд╡рд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдмреАрдбрд╛рд╕реА рдФрд░ рдмреЗрд╕рд┐рдХ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ ред
  • BEDaisy
    • рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдХрд░реНрдиреЗрд▓ рдбреНрд░рд╛рдЗрд╡рд░ рдЬреЛ рдЧреЗрдо рдХреЛ рдЕрд╡реИрдз рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рд┐рдиреЗрдорд╛рдШрд░реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╡рд╛рд░рдХ рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрдВрддреНрд░ рдФрд░ рдорд┐рдиреА рдлрд┐рд▓реНрдЯрд░ рдХреЛ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ
  • BEClient
    • рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╡рд┐рдВрдбреЛрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд▓реЛрдЧреЛрдВ рд╕рд╣рд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдбрд┐рдЯреЗрдХреНрд╢рди рд╡реИрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдпрд╣ рдЦреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред
  • BEServer
    • рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░, рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдЪреЗрдЯрд░реНрд╕ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрд╛рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

shellcode


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

рдХреИрд╕реЗ?


рдмреИрдЯрд▓рдПрдИрдИ рдиреЗ рдХрдерд┐рдд рддреМрд░ рдкрд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╢реЗрд▓ рд╕реЗрд╡рд╛ рдХреЛ рдмреАрдИрдПрд╕рдИрдЖрд░рдПрд╕ рдирд╛рдордХ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рд╕реЗрд╡рд╛ рдЦреЗрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд BEClient рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддреА рд╣реИред рдбреЗрдЯрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди \.namedpipeBattleye рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 2018 рддрдХ рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╕рднреА рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдмрд╣реБрдд рдЫреЛрдЯреА рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ xor-рдПрдиреНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкреНрд░рд╕рд┐рджреНрдз рдкреНрд▓реЗрдирдЯреЗрдХреНрд╕реНрдЯ рд╣рдорд▓реЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЬрдм рд╢реЗрд▓ рдХреЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рднреА рдЬреНрдЮрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдерд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╢реЗрд▓рдХреЛрдб рдбрдВрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╛ рддреЛ рдорд╛рдирдХ Windows API рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ рдХрд┐ CreateFile, ReadFile, рдЖрджрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдХреЙрд▓рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдбрдВрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд▓реМрдЯреЗ рдкрддреЗ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз) рдЬреЛ рд╕рднреА рдЬреНрдЮрд╛рдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВ, рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рд╕рднреА рдЬреНрдЮрд╛рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЗрдореЛрд░реА рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЧреЗрдо рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдХреЛ рд╕реНрдХреИрди рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдбрдВрдк рдХрд░реЗрдВред рдЗрд╕реА рд╕рдордп, рдЖрдкрдХреЛ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрдВрдк рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЛ рдХрдИ рд╕рдорд╛рди рдбрдВрдк рдирд╣реАрдВ рдорд┐рд▓реЗрдВрдЧреЗред

рд╡реНрдпрд╛рдЦреНрдпрд╛


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

рд╕реНрдореГрддрд┐ рдЫрдБрдЯрд╛рдИ


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

рдмреИрдЯрд▓рдпреЗ рдЦреЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░реЗ рдкрддрд╛ рд╕реНрдерд╛рди (рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдкреГрд╖реНрда рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рдореЗрдореЛрд░реА рд╕реНрдкреЗрд╕ рдХреЗ рдмрд╛рд╣рд░ рд╢реЗрд▓ рдХреЛрдб рдвреВрдВрдврддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдмреИрдЯрд▓ рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 // MEMORY ENUMERATION for (current_address = 0 // QUERY MEMORY_BASIC_INFORMATION NtQueryVirtualMemory(GetCurrentProcess(), current_address, 0, &memory_information, 0x30, &return_length) >= 0 current_address = memory_information.base_address + memory_information.region_size) { const auto outside_of_shellcode = memory_information.base_address > shellcode_entry || memory_information.base_address + memory_information.region_size <= shellcode_entry const auto executable_memory = memory_information.state == MEM_COMMIT && (memory_information.protect == PAGE_EXECUTE || memory_information.protect == PAGE_EXECUTE_READ || memory_information.protect == PAGE_EXECUTE_READWRITE const auto unknown_whitelist = memory_information.protect != PAGE_EXECUTE_READWRITE || memory_information.region_size != 100000000 if (!executable_memory || !outside_of_shellcode || !unknown_whitelist) continue // RUN CHECKS memory::anomaly_check(memory_information memory::pattern_check(current_address, memory_information memory::module_specific_check_microsoft(memory_information memory::guard_check(current_address, memory_information memory::module_specific_check_unknown(memory_information } 

рд╕реНрдореГрддрд┐ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ


BattlEye рдореЗрдореЛрд░реА рдПрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ рд╕рднреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдореЙрдбреНрдпреВрд▓ рдХреА рдореЗрдореЛрд░реА рдЬреЛ рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ:

 void memory::anomaly_check(MEMORY_BASIC_INFORMATION memory_information) { // REPORT ANY EXECUTABLE PAGE OUTSIDE OF KNOWN MODULES if (memory_information.type == MEM_PRIVATE || memory_information.type == MEM_MAPPED) { if ((memory_information.base_address & 0xFF0000000000) != 0x7F0000000000 && // UPPER EQUALS 0x7F (memory_information.base_address & 0xFFF000000000) != 0x7F000000000 && // UPPER EQUALS 0x7F0 (memory_information.base_address & 0xFFFFF0000000) != 0x70000000 && // UPPER EQUALS 0x70000 memory_information.base_address != 0x3E0000)) { memory_report.unknown = 0 memory_report.report_id = 0x2F memory_report.base_address = memory_information.base_address memory_report.region_size = memory_information.region_size memory_report.memory_info = memory_information.type | memory_information.protect | memory_information.state battleye::report(&memory_report, sizeof(memory_report), 0 } } } 

рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕реНрдХреИрдирд┐рдВрдЧ


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдмреИрдЯрд▓рдИрдИрдИ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреИрдЯрд░реНрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реНрдореГрддрд┐ рдХреЛ рднреА рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

 [05 18] ojectsPUBGChinese [05 17] BattleGroundsPrivate_CheatESP [05 17] [%.0fm] %s [05 3E] 0000Neck0000Chest0000000Mouse 10 [05 3F] PlayerESPColor [05 40] Aimbot: %d02D3E2041 [05 36] HackMachine [05 4A] VisualHacks.net [05 50] 3E232F653E31314E4E563D4276282A3A2E463F757523286752552E6F30584748 [05 4F] DLLInjection-master\x64\Release\ [05 52] NameESP [05 48] Skullhack [05 55] .rdata$zzzdbg [05 39] AimBot [05 39] EB4941803C123F755C623FEB388D41D0FBEC93C977583E930EB683E1DF [05 5F] 55E9 [05 5F] 57E9 [05 5F] 60E9 [05 68] D3D11Present initialised [05 6E] [ %.0fM ] [05 74] [hp:%d]%dm [05 36] 48836424380488D4C2458488B5424504C8BC848894C24304C8BC7488D4C2460 [05 36] 741FBA80000FF15607E0085C07510F2F1087801008B8788100EB [05 36] 40F2AA156F8D2894E9AB4489535D34F9CPOSITION0000COL [05 7A] FFE090 [05 79] %s00%d00POSITION0000COLOR0000000 [05 36] 8E85765DCDDA452E75BA12B4C7B94872116DB948A1DAA6B948A7676BB948902C [05 8A] n<assembly xmlsn='urn:schemas-mi 

рдЗрди рдореЗрдореЛрд░реА рдкреИрдЯрд░реНрди рдореЗрдВ рджреЛ-рдмрд╛рдЗрдЯ рд╣реЗрдбрд░ рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдЕрдЬреНрдЮрд╛рдд рд╕реНрдерд┐рд░ рдореВрд▓реНрдп 05 рдФрд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред

рд╣рдо рдЬреЛ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдмреИрдЯрд▓рдИ рднреА рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ BEServer рд╕реЗ рдкреИрдЯрд░реНрди рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ BEClient рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рд╡реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░реВрдк рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдП рдЧрдП рд╣реИрдВ:

 void memory::pattern_check(void* current_address, MEMORY_BASIC_INFORMATION memory_information) { const auto is_user32 = memory_information.allocation_base == GetModuleHandleA("user32.dll" // ONLY SCAN PRIVATE MEMORY AND USER32 CODE SECTION if (memory_information.type != MEM_PRIVATE && !is_user32) continue for (address = current_address address != memory_information.base_address + memory_information.region_size address += PAGE_SIZE) // PAGE_SIZE { // READ ENTIRE PAGE FROM LOCAL PROCESS INTO BUFFER if (NtReadVirtualMemory(GetCurrentProcess(), address, buffer, PAGE_SIZE, 0) < 0) continue for (pattern_index = 0 pattern_index < 0x1C/*PATTERN COUNT*/ ++pattern_index) { if (pattern[pattern_index].header == 0x57A && !is_user32) // ONLY DO FFE090 SEARCHES WHEN IN USER32 continue for (offset = 0 pattern[pattern_index].length + offset <= PAGE_SIZE ++offset) { const auto pattern_matches = memory::pattern_match(&address[offset], pattern[pattern_index // BASIC PATTERN MATCH if (pattern_matches) { // PATTERN FOUND IN MEMORY pattern_report.unknown = 0 pattern_report.report_id = 0x35 pattern_report.type = pattern[index].header pattern_report.data = &address[offset pattern_report.base_address = memory_information.base_address pattern_report.region_size = memory_information.region_size pattern_report.memory_info = memory_information.type | memory_information.protect | memory_information.state battleye::report(&pattern_report, sizeof(pattern_report), 0 } } } } } 

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреА рдорд╛рдиреНрдпрддрд╛ (Microsoft)


рдореЙрдбреНрдпреВрд▓ рдЪреЗрдХ рдЦреЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 void memory::module_specific_check_microsoft(MEMORY_BASIC_INFORMATION memory_information) { auto executable = memory_information.protect == PAGE_EXECUTE || memory_information.protect == PAGE_EXECUTE_READ || memory_information.protect == PAGE_EXECUTE_READWRITE auto allocated = memory_information.state == MEM_COMMIT if (!allocated || !executable) continue auto mmres_handle = GetModuleHandleA("mmres.dll" auto mshtml_handle = GetModuleHandleA("mshtml.dll" if (mmres_handle && mmres_handle == memory_information.allocation_base) { battleye_module_anomaly_report module_anomaly_report module_anomaly_report.unknown = 0 module_anomaly_report.report_id = 0x5B module_anomaly_report.identifier = 0x3480 module_anomaly_report.region_size = memory_information.region_size battleye::report(&module_anomaly_report, sizeof(module_anomaly_report), 0 } else if (mshtml_handle && mshtml_handle == memory_information.allocation_base) { battleye_module_anomaly_report module_anomaly_report module_anomaly_report.unknown = 0 module_anomaly_report.report_id = 0x5B module_anomaly_report.identifier = 0xB480 module_anomaly_report.region_size = memory_information.region_size battleye::report(&module_anomaly_report, sizeof(module_anomaly_report), 0 } } 

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреА рдЬрд╛рдБрдЪ (рдЕрдЬреНрдЮрд╛рдд)


рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ рдЬреЛ рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 void memory::module_specific_check_unknown(MEMORY_BASIC_INFORMATION memory_information) { const auto dos_header = (DOS_HEADER*)module_handle const auto pe_header = (PE_HEADER*)(module_handle + dos_header->e_lfanew const auto is_image = memory_information.state == MEM_COMMIT && memory_information.type == MEM_IMAGE if (!is_image) return const auto is_base = memory_information.base_address == memory_information.allocation_base if (!is_base) return const auto match_1 = time_date_stamp == 0x5B12C900 && *(__int8*)(memory_information.base_address + 0x1000) == 0x00 && *(__int32*)(memory_information.base_address + 0x501000) != 0x353E900 const auto match_2 = time_date_stamp == 0x5A180C35 && *(__int8*)(memory_information.base_address + 0x1000) != 0x00 const auto match_2 = time_date_stamp == 0xFC9B9325 && *(__int8*)(memory_information.base_address + 0x6D3000) != 0x00 if (!match_1 && !match_2 && !match_3) return const auto buffer_offset = 0x00 // OFFSET DEPENDS ON WHICH MODULE MATCHES, RESPECTIVELY 0x501000, 0x1000 AND 0x6D3000 unknown_module_report.unknown1 = 0 unknown_module_report.report_id = 0x46 unknown_module_report.unknown2 = 1 unknown_module_report.data = *(__int128*)(memory_information.base_address + buffer_offset battleye::report(&unknown_module_report, sizeof(unknown_module_report), 0 } 

рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдзреЛрдЦрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ: @ how02 рдиреЗ рд╣рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ action_x64.dll рдореЙрдбреНрдпреВрд▓ рдореЗрдВ action_x64.dll рдХрд╛ рдЯрд╛рдЗрдо 0x5B12C900 рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдХреЛрдб рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ; рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реЛрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдореГрддрд┐ рдХреА рд╕реБрд░рдХреНрд╖рд╛


рдмреИрдЯрд▓рдПрдИрдИ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рдкрд╣рдЪрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ, рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, PAGE_GUARD рдзреНрд╡рдЬ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ , рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рдирд╛ рдЬрд╛рдВрдЪреЗ рдХрд┐ рдХреНрдпрд╛ PAGE_GUARD рдзреНрд╡рдЬ рд╕реЗрдЯ рд╣реИ :

 void memory::guard_check(void* current_address, MEMORY_BASIC_INFORMATION memory_information) { if (memory_information.protect != PAGE_NOACCESS) { auto bad_ptr = IsBadReadPtr(current_address, sizeof(temporary_buffer auto read = NtReadVirtualMemory( GetCurrentProcess(), current_address, temporary_buffer, sizeof(temporary_buffer), 0 if (read < 0 || bad_ptr) { auto query = NtQueryVirtualMemory( GetCurrentProcess(), current_address, 0, &new_memory_information, sizeof(new_memory_information), &return_length memory_guard_report.guard = query < 0 || new_memory_information.state != memory_information.state || new_memory_information.protect != memory_information.protect if (memory_guard_report.guard) { memory_guard_report.unknown = 0 memory_guard_report.report_id = 0x21 memory_guard_report.base_address = memory_information.base_address memory_guard_report.region_size = (int)memory_information.region_size memory_guard_report.memory_info = memory_information.type | memory_information.protect | memory_information.state battleye::report(&memory_guard_report, sizeof(memory_guard_report), 0 } } } } 

рд╡рд┐рдВрдбреЛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ


рд╢реЗрд▓ рдХреЛрдб BattlEye рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧреЗрдо рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ (z- рдорд╛рди рджреНрд╡рд╛рд░рд╛) рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЧреЗрдо рдХреЗ рдЕрдВрджрд░ рд╡рд┐рдВрдбреЛ GetWindowThreadProcessId рдХреЛ рдЗрд╕ рдПрдиреНрдпреВрдорд░реЗрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ GetWindowThreadProcessId рдХреЙрд▓ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╡рд┐рдВрдбреЛ рдХреЗ рдЭреВрдареЗ рдорд╛рд▓рд┐рдХ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рдБрдз рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмреИрдЯрд▓рдПрдИ рдЖрдкрдХреА рд╡рд┐рдВрдбреЛ рдХреА рдЬрд╛рдВрдЪ рди рдХрд░реЗрдВ ред

 void window_handler::enumerate() { for (auto window_handle = GetTopWindow window_handle window_handle = GetWindow(window_handle, GW_HWNDNEXT), // GET WINDOW BELOW ++window_handler::windows_enumerated) // INCREMENT GLOBAL COUNT FOR LATER USAGE { auto window_process_pid = 0 GetWindowThreadProcessId(window_handle, &window_process_pid if (window_process_pid == GetCurrentProcessId()) continue // APPEND INFORMATION TO THE MISC. REPORT, THIS IS EXPLAINED LATER IN THE ARTICLE window_handler::handle_summary(window_handle constexpr auto max_character_count = 0x80 const auto length = GetWindowTextA(window_handle, window_title_report.window_title, max_character_count // DOES WINDOW TITLE MATCH ANY OF THE BLACKLISTED TITLES? if (!contains(window_title_report.window_title, "CheatAut") && !contains(window_title_report.window_title, "pubg_kh") && !contains(window_title_report.window_title, "conl -") && !contains(window_title_report.window_title, "PerfectA") && !contains(window_title_report.window_title, "AIMWA") && !contains(window_title_report.window_title, "PUBG AIM") && !contains(window_title_report.window_title, "HyperChe")) continue // REPORT WINDOW window_title_report.unknown_1 = 0 window_title_report.report_id = 0x33 battleye::report(&window_title_report, sizeof(window_title_report) + length, 0 } } 

рд╡рд┐рд╕рдВрдЧрддрд┐ рдЦреЛрдЬреЗрдВ


рдпрджрд┐ рджреЛ рд╕реЗ рдХрдо рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреИрдЪрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╡рд┐рдВрдбреЛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП BattlEye рд╢реЗрд▓ рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ:

 void window_handler::check_count() { if (window_handler::windows_enumerated > 1) return // WINDOW ENUMERATION FAILED, MOST LIKELY DUE TO HOOK window_anomaly_report.unknown_1 = 0 window_anomaly_report.report_id = 0x44 window_anomaly_report.enumerated_windows = windows_enumerated battleye::report(&window_anomaly_report, sizeof(window_anomaly_report), 0 } 

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЫрдБрдЯрд╛рдИ


CreateToolhelp32Snapshot рдХреЙрд▓ рдХрд░рдХреЗ рд╕рднреА рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдмрдЪ рдЬрд╛рддрд╛ рд╣реИ:

рдкрде рдХреА рдЬрд╛рдБрдЪ


рдпрджрд┐ рдЫрд╡рд┐ рдХрдо рд╕реЗ рдХрдо рджреЛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ (рдбрд┐рд╕реНрдХ рдХреА рдЬрдбрд╝ рд╕реЗ рдЧрд┐рдирддреА) рдХреЗ рдЕрдВрджрд░ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдЫрд╡рд┐ рдХреЗ рдкрде рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 Desktop Temp FileRec Documents Downloads Roaming tmp.ex notepad. ...\. cmd.ex 

рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ (рдХреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдзреНрд╡рдЬ рдмрд┐рдЯ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ):

 steam.exe [0x01] explorer.exe [0x02] lsass.exe [0x08] cmd.exe [0x10] 

рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдЙрдкрдпреБрдХреНрдд QueryLimitedInformation рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлреНрд▓реИрдЧ рдмрд┐рдЯ QueryLimitedInformation рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдпрджрд┐ OpenProcess рдХреЙрд▓ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг ERROR_ACCESS_DENIED рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдзреНрд╡рдЬ рдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рдХрдВрдЯреЗрдирд░ рджреЗрддрд╛ рд╣реИ:

 enum BATTLEYE_PROCESS_FLAG { STEAM = 0x1, EXPLORER = 0x2, ERROR = 0x4, LSASS = 0x8, CMD = 0x10 } 

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

рдЫрд╡рд┐ рдХрд╛ рдирд╛рдо


рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрдИ рдорд╛рдирджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рд╕реЗ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдЖрдк рддреБрд░рдВрдд рдПрдХ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрдирд╛ рдЖрдИрдбреА 0x38 рд╕рд╛рде рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ

    "Loadlibr"    "Rng "    "A0E7FFFFFF81"    "RNG "    "90E54355"    "2.6.ex"    "TempFile.exe" 

рд╕реНрдЯреАрдо рдЧреЗрдо рдУрд╡рд░рд▓реЗ


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

 file size != 0 && image name contains (case insensitive) gameoverlayu 

рд╕реНрдЯреАрдо рдЧреЗрдо рдХреЗ рдУрд╡рд░рд▓реЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреЗрдХ рдЧреЗрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдП рдЧрдП рд╣реИрдВред

рд╕реНрдЯреАрдо рдУрд╡рд░рд▓реЗ рдореЗрдореЛрд░реА рд╕реНрдХреИрди


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

 void gameoverlay::pattern_scan(MEMORY_BASIC_INFORMATION memory_information) { // PATTERNS: // Home // F1 // FFFF83C48C30000000000 // \.pipe%s // C760000C64730 // 60C01810033D2 // ... // PATTERN SCAN, ALMOST IDENTICAL CODE TO THE AFOREMENTIONED PATTERN SCANNING ROUTINE gameoverlay_memory_report.unknown_1 = 0 gameoverlay_memory_report.report_id = 0x35 gameoverlay_memory_report.identifier = 0x56C gameoverlay_memory_report.data = &buffer[offset gameoverlay_memory_report.base_address = memory_information.base_address gameoverlay_memory_report.region_size = (int)memory_information.region_size gameoverlay_memory_report.memory_info = memory_information.type | memory_information.protect | memory_information.state battleye::report(&gameoverlay_memory_report, sizeof(gameoverlay_memory_report), 0 } 

рд╕реНрдХреИрдирд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреА рд╣реИ, рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдХрд┐ рдкрдЯрд╛рдЦреЗ рдУрд╡рд░рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:

 void gameoverlay::memory_anomaly_scan(MEMORY_BASIC_INFORMATION memory_information) { // ... // ALMOST IDENTICAL ANOMALY SCAN COMPARED TO MEMORY ENUMERATION ROUTINE OF GAME PROCESS gameoverlay_report.unknown = 0 gameoverlay_report.report_id = 0x3B gameoverlay_report.base_address = memory_information.base_address gameoverlay_report.region_size = memory_information.region_size gameoverlay_report.memory_info = memory_information.type | memory_information.protect | memory_information.state battleye::report(&gameoverlay_report, sizeof(gameoverlay_report), 0 } 

рд╕реНрдЯреАрдо рдЧреЗрдо рдУрд╡рд░рд▓реЗ рд╕реБрд░рдХреНрд╖рд╛


рдпрджрд┐ рд╕реНрдЯреАрдо рдЧреЗрдо рдХреЛ рдУрд╡рд░рд▓реЗ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреА рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдЬреИрд╕реЗ рд▓рд╛рдЗрдЯ (рд╡рд┐рдирдЯреЗрдХ) рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред

 void gameoverlay::protection_check(HANDLE process_handle) { auto process_protection = 0 NtQueryInformationProcess( process_handle, ProcessProtectionInformation, &process_protection, sizeof(process_protection), nullptr if (process_protection == 0) // NO PROTECTION return gameoverlay_protected_report.unknown = 0 gameoverlay_protected_report.report_id = 0x35 gameoverlay_protected_report.identifier = 0x5B1 gameoverlay_protected_report.data = process_protection battleye::report(&gameoverlay_protected_report, sizeof(gameoverlay_protected_report), 0 } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рдУрдкрдирдкреНрд░реЛрд╕реЗрд╕ рдХреЙрд▓, ERROR_ACCESS_DENIED рдХреЛ рдУрд╡рд░рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдИрдбреА 3B рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред

рдХреНрд░рдордмрджреНрдз рдореЙрдбреНрдпреВрд▓


рд╕реНрдЯреАрдо рдЧреЗрдо рдУрд╡рд░рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕ рдореЙрдбреНрдпреВрд▓ рднреА рдЦреЛрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, vgui2_s.dll рдФрд░ gameoverlayui.dll ред рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХрдИ рдЬрд╛рдБрдЪреЗрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ gameoverlayui.dll рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред

рдпрджрд┐ рдпрд╣ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ: [gameoverlayui.dll+6C779] == 08BE55DC3CCCCB8????????C3CCCCCC , рддреЛ [gameoverlayui.dll+6C779] == 08BE55DC3CCCCB8????????C3CCCCCC рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрддреЗ рдкрд░ vtable рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ ???????? ред рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рддрддреНрд╡ рд╕реНрд░реЛрдд рдореЙрдбреНрдпреВрд▓ gameoverlayui.dll рдХреЗ рдмрд╛рд╣рд░ рд╣реИ рдпрд╛ рдПрдХ int 3 рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ 3B рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 void gameoverlay::scan_vtable(HANDLE process_handle, char* buffer, MODULEENTRY32 module_entry) { char function_buffer[16 for (vtable_index = 0 vtable_index < 20 vtable_index += 4) { NtReadVirtualMemory( process_handle, *(int*)&buffer[vtable_index], &function_buffer, sizeof(function_buffer), 0 if (*(int*)&buffer[vtable_index] < module_entry.modBaseAddr || *(int*)&buffer[vtable_index] >= module_entry.modBaseAddr + module_entry.modBaseSize || function_buffer[0] == 0xCC ) // FUNCTION PADDING { gameoverlay_vtable_report.report_id = 0x3B gameoverlay_vtable_report.vtable_index = vtable_index gameoverlay_vtable_report.address = buffer[vtable_index battleye::report(&gameoverlay_vtable_report, sizeof(gameoverlay_vtable_report), 0 } } } 

vgui2_s.dll рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рднреА рдХреА vgui2_s.dll рд╣реИ:

 void vgui::scan() { if (!equals(vgui_buffer, "6A08B31FF561C8BD??????????FF96????????8BD????????8B1FF90")) { auto could_read = NtReadVirtualMemory( process_handle, module_entry.modBaseAddr + 0x48338, vgui_buffer, 8, 0) >= 0 constexpr auto pattern_offset = 0x48378 // IF READ DID NOT FAIL AND PATTERN IS FOUND if (could_read && equals(vgui_buffer, "6A46A06A26A")) { vgui_report.unknown_1 = 0 vgui_report.report_id = 0x3B vgui_report.unknown_2 = 0 vgui_report.address = LODWORD(module_entry.modBaseAddr) + pattern_offset // READ TARGET BUFFER INTO REPORT NtReadVirtualMemory( process_handle, module_entry.modBaseAddr + pattern_offset, vgui_report.buffer, sizeof(vgui_report.buffer), 0 battleye::report(&vgui_report, sizeof(vgui_report), 0 } } else if ( // READ ADDRESS FROM CODE NtReadVirtualMemory(process_handle, *(int*)&vgui_buffer[9], vgui_buffer, 4, 0) >= 0 && // READ POINTER TO CLASS NtReadVirtualMemory(process_handle, *(int*)vgui_buffer, vgui_buffer, 4, 0) >= 0 && // READ POINTER TO VIRTUAL TABLE NtReadVirtualMemory(process_handle, *(int*)vgui_buffer, vgui_buffer, sizeof(vgui_buffer), 0) >= 0) { for (vtable_index = 0 vtable_index < 984 vtable_index += 4 ) // 984/4 VTABLE ENTRY COUNT { NtReadVirtualMemory(process_handle, *(int*)&vgui_buffer[vtable_index], &vtable_entry, sizeof(vtable_entry), 0 if (*(int*)&vgui_buffer[vtable_index] < module_entry.modBaseAddr || *(int*)&vgui_buffer[vtable_index] >= module_entry.modBaseAddr + module_entry.modBaseSize || vtable_entry == 0xCC ) { vgui_vtable_report.unknown = 0 vgui_vtable_report.report_id = 0x3B vgui_vtable_report.vtable_index = vtable_index vgui_vtable_report.address = *(int*)&vgui_buffer[vtable_index battleye::report(&vgui_vtable_report, sizeof(vgui_vtable_report), 0 } } } 

48378 , :

 push 04 push offset aCBuildslaveSte_4 ; "c:\buildslave\steam_rel_client_win32"... push offset aAssertionFaile_7 ; "Assertion Failed: IsValidIndex(elem)" 

:

 push 04 push 00 push 02 push ?? 

vgui2_s.dll, , , vtable .

Steam


Steam :

 void gameoverlay::check_thread(THREADENTRY32 thread_entry) { const auto tread_handle = OpenThread(THREAD_SUSPEND_RESUME|THREAD_GET_CONTEXT, 0, thread_entry.th32ThreadID if (thread_handle) { suspend_count = ResumeThread(thread_handle if (suspend_count > 0) { SuspendThread(thread_handle gameoverlay_thread_report.unknown = 0 gameoverlay_thread_report.report_id = 0x3B gameoverlay_thread_report.suspend_count = suspend_count battleye::report(&gameoverlay_thread_report, sizeof(gameoverlay_thread_report), 0 } if (GetThreadContext(thread_handle, &context) && context.Dr7) { gameoverlay_debug_report.unknown = 0 gameoverlay_debug_report.report_id = 0x3B gameoverlay_debug_report.debug_register = context.Dr0 battleye::report(&gameoverlay_debug_report, sizeof(gameoverlay_debug_report), 0 } } } 

LSASS


Windows lsass.exe , Local Security Authority, , :

 if (equals(process_entry.executable_path, "lsass.exe")) { auto lsass_handle = OpenProcess(QueryInformation, 0, (unsigned int)process_entry.th32ProcessID if (lsass_handle) { for (address = 0 NtQueryVirtualMemory(lsass_handle, address, 0, &lsass_memory_info, 0x30, &bytes_needed) >= 0 address = lsass_memory_info.base_address + lsass_memory_info.region_size) { if (lsass_memory_info.state == MEM_COMMIT && lsass_memory_info.type == MEM_PRIVATE && (lsass_memory_info.protect == PAGE_EXECUTE || lsass_memory_info.protect == PAGE_EXECUTE_READ || lsass_memory_info.protect == PAGE_EXECUTE_READWRITE)) { // FOUND EXECUTABLE MEMORY OUTSIDE OF MODULES lsass_report.unknown = 0 lsass_report.report_id = 0x42 lsass_report.base_address = lsass_memory_info.base_address lsass_report.region_size = lsass_memory_info.region_size lsass_report.memory_info = lsass_memory_info.type | lsass_memory_info.protect | lsass_memory_info.state battleye::report(&lsass_report, sizeof(lsass_report), 0 } } CloseHandle(lsass_handle } } 

LSASS , , -, LSASS. BattlEye , /, ReadProcessMemory / WriteProcessMemory , BEDaisy. BEDaisy , . , , , .


BattlEye id 3C . :

  • WS_EX_TOPMOST :
    • (Unicode)
    • (Unicode)
    • Window style
    • Window extended style
    • -
    • -
  • (VM_WRITE|VM_READ)
  • :
    • тАж.ContentPaksTslGame-WindowsNoEditor_assets_world.pak
    • тАж.ContentPaksTslGame-WindowsNoEditor_ui.pak
    • тАж.ContentPaksTslGame-WindowsNoEditor_sound.pak

  • :
    • тАж.BLGameCookedContentScriptBLGame.u
  • NtGetContextThread
    • (E9),

NoEye


BattlEye NoEye: GetFileAttributesExA BE_DLL.dll , .

 void noeye::detect() { WIN32_FILE_ATTRIBUTE_DATA file_information if (GetFileAttributesExA("BE_DLL.dll", 0, &file_information)) { noeye_report.unknown = 0 noeye_report.report_id = 0x3D noeye_report.file_size = file_information.nFileSizeLow battleye::report(&noeye_report, sizeof(noeye_report), 0 } } 


Beep Null; . , , - . driver device hijacking. , IOCTL .

 void driver::check_beep() { auto handle = CreateFileA("\\.\Beep", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 if (handle != INVALID_HANDLE_VALUE) { beep_report.unknown = 0 beep_report.report_id = 0x3E battleye::report(&beep_report, sizeof(beep_report), 0 CloseHandle(handle } } 

 void driver::check_null() { auto handle = CreateFileA("\\.\Null", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 if (handle != INVALID_HANDLE_VALUE) { null_report.unknown = 0 null_report.report_id = 0x3E battleye::report(&null_report, sizeof(null_report), 0 CloseHandle(handle } } 

Sleep delta


, BattlEye (sleep):

 void sleep::check_delta() { const auto tick_count = GetTickCount Sleep(1000 const auto tick_delta = GetTickCount() - tick_count if (tick_delta >= 1200) { sleep_report.unknown = 0 sleep_report.report_id = 0x45 sleep_report.delta = tick_delta battleye::report(&sleep_report, sizeof(sleep_report), 0 } } 

7zip


BattlEye , 7zip . , . BattlEye 7zip.

 void module::check_7zip() { constexpr auto sz_7zipdll = "..\..\Plugins\ZipUtility\ThirdParty\7zpp\dll\Win64\7z.dll" const auto module_handle = GetModuleHandleA(sz_7zipdll if (module_handle && *(int*)(module_handle + 0x1000) != 0xFF1441C7) { sevenzip_report.unknown_1 = 0 sevenzip_report.report_id = 0x46 sevenzip_report.unknown_2 = 0 sevenzip_report.data1 = *(__int64*)(module_handle + 0x1000 sevenzip_report.data2 = *(__int64*)(module_handle + 0x1008 battleye::report(&sevenzip_report, sizeof(sevenzip_report), 0 } } 


BattlEye Windows (hal.dll), , .

 void module::check_hal() { const auto module_handle = GetModuleHandleA("hal.dll" if (module_handle) { hal_report.unknown_1 = 0 hal_report.report_id = 0x46 hal_report.unknown_2 = 2 hal_report.data1 = *(__int64*)(module_handle + 0x1000 hal_report.data2 = *(__int64*)(module_handle + 0x1008 battleye::report(&hal_report, sizeof(hal_report), 0 } } 


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

nvToolsExt64_1


 void module::check_nvtoolsext64_1 { const auto module_handle = GetModuleHandleA("nvToolsExt64_1.dll" if (module_handle) { nvtools_report.unknown = 0 nvtools_report.report_id = 0x48 nvtools_report.module_id = 0x5A8 nvtools_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)->e_lfanew))->SizeOfImage battleye::report(&nvtools_report, sizeof(nvtools_report), 0 } } 

ws2detour_x96


 void module::check_ws2detour_x96 { const auto module_handle = GetModuleHandleA("ws2detour_x96.dll" if (module_handle) { ws2detour_report.unknown = 0 ws2detour_report.report_id = 0x48 ws2detour_report.module_id = 0x5B5 ws2detour_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)->e_lfanew))->SizeOfImage battleye::report(&ws2detour_report, sizeof(ws2detour_report), 0 } } 

networkdllx64


 void module::check_networkdllx64 { const auto module_handle = GetModuleHandleA("networkdllx64.dll" if (module_handle) { const auto dos_header = (DOS_HEADER*)module_handle const auto pe_header = (PE_HEADER*)(module_handle + dos_header->e_lfanew const auto size_of_image = pe_header->SizeOfImage if (size_of_image < 0x200000 || size_of_image >= 0x400000) { if (pe_header->sections[DEBUG_DIRECTORY].size == 0x1B20) { networkdll64_report.unknown = 0 networkdll64_report.report_id = 0x48 networkdll64_report.module_id = 0x5B7 networkdll64_report.data = pe_header->TimeDatestamp battleye::report(&networkdll64_report, sizeof(networkdll64_report), 0 } } else { networkdll64_report.unknown = 0 networkdll64_report.report_id = 0x48 networkdll64_report.module_id = 0x5B7 networkdll64_report.data = pe_header->sections[DEBUG_DIRECTORY].size battleye::report(&networkdll64_report, sizeof(networkdll64_report), 0 } } } 

nxdetours_64


 void module::check_nxdetours_64 { const auto module_handle = GetModuleHandleA("nxdetours_64.dll" if (module_handle) { nxdetours64_report.unknown = 0 nxdetours64_report.report_id = 0x48 nxdetours64_report.module_id = 0x5B8 nxdetours64_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)->e_lfanew))->SizeOfImage battleye::report(&nxdetours64_report, sizeof(nxdetours64_report), 0 } } 

nvcompiler


 void module::check_nvcompiler { const auto module_handle = GetModuleHandleA("nvcompiler.dll" if (module_handle) { nvcompiler_report.unknown = 0 nvcompiler_report.report_id = 0x48 nvcompiler_report.module_id = 0x5BC nvcompiler_report.data = *(int*)(module_handle + 0x1000 battleye::report(&nvcompiler_report, sizeof(nvcompiler_report), 0 } } 

wmp


 void module::check_wmp { const auto module_handle = GetModuleHandleA("wmp.dll" if (module_handle) { wmp_report.unknown = 0 wmp_report.report_id = 0x48 wmp_report.module_id = 0x5BE wmp_report.data = *(int*)(module_handle + 0x1000 battleye::report(&wmp_report, sizeof(wmp_report), 0 } } 

рдореЙрдбреНрдпреВрд▓ рдЕрднрд┐рдЬреНрдЮрд╛рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛


рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдЖрдИрдбреА рджреЗрддреЗ рд╣реИрдВ:

 enum module_id { nvtoolsext64 = 0x5A8, ws2detour_x96 = 0x5B5, networkdll64 = 0x5B7, nxdetours_64 = 0x5B8, nvcompiler = 0x5BC, wmp = 0x5BE 

рдЯреАрд╕реАрдкреА рдЯреЗрдмрд▓ рд╕реНрдХреИрди рдХрд░реЗрдВ


- BattlEye TCP- ( ┬л TCP┬╗, TCP table) , IP- Cloudflare-, - pay-to-cheat xera.ph . - , launcher, . , IP- Cloudflare- . , , .

pay-to-cheat xera.ph , , . xera.ph , , , , . , , , , -, , .

 void network::scan_tcp_table { memset(local_port_buffer, 0, sizeof(local_port_buffer for (iteration_index = 0 iteration_index < 500 ++iteration_index) { // GET NECESSARY SIZE OF TCP TABLE auto table_size = 0 GetExtendedTcpTable(0, &table_size, false, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0 // ALLOCATE BUFFER OF PROPER SIZE FOR TCP TABLE auto allocated_ip_table = (MIB_TCPTABLE_OWNER_MODULE*)malloc(table_size if (GetExtendedTcpTable(allocated_ip_table, &table_size, false, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0) != NO_ERROR) goto cleanup for (entry_index = 0 entry_index < allocated_ip_table->dwNumEntries ++entry_index) { const auto ip_address_match_1 = allocated_ip_table->table[entry_index].dwRemoteAddr == 0x656B1468 // 104.20.107.101 const auto ip_address_match_2 = allocated_ip_table->table[entry_index].dwRemoteAddr == 0x656C1468 // 104.20.108.101 const auto port_match = allocated_ip_table->table[entry_index].dwRemotePort == 20480 if ( (!ip_address_match_1 && !ip_address_match_2) || !port_match) continue for (port_index = 0 port_index < 10 && allocated_ip_table->table[entry_index].dwLocalPort != local_port_buffer[port_index ++port_index) { if (local_port_buffer[port_index]) continue tcp_table_report.unknown = 0 tcp_table_report.report_id = 0x48 tcp_table_report.module_id = 0x5B9 tcp_table_report.data = BYTE1(allocated_ip_table->table[entry_index].dwLocalPort) | (LOBYTE(allocated_ip_table->table[entry_index.dwLocalPort) << 8 battleye::report(&tcp_table_report, sizeof(tcp_table_report), 0 local_port_buffer[port_index] = allocated_ip_table->table[entry_index].dwLocalPort break } } cleanup: // FREE TABLE AND SLEEP free(allocated_ip_table Sleep(10 } } 


-:

 enum BATTLEYE_REPORT_ID { MEMORY_GUARD = 0x21, MEMORY_SUSPICIOUS = 0x2F, WINDOW_TITLE = 0x33, MEMORY = 0x35, PROCESS_ANOMALY = 0x38, DRIVER_BEEP_PRESENCE = 0x3E, DRIVER_NULL_PRESENCE = 0x3F, MISCELLANEOUS_ANOMALY = 0x3B, PROCESS_SUSPICIOUS = 0x40, LSASS_MEMORY = 0x42, SLEEP_ANOMALY = 0x45, MEMORY_MODULE_SPECIFIC = 0x46, GENERIC_ANOMALY = 0x48, MEMORY_MODULE_SPECIFIC2 = 0x5B, } 

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


All Articles