-
Автор темы
- #1
Создатель крупнейшего обхода VAC модуля,
Как это работает: (Этот уголок для тех кто знает Disassembly)
Код под Python:
Другой метод обхода anti-loadlibrary это восстановление первых 5 байтов оригинального NtOpenFile. Example под C:
Код под C:
P.S Update 02.07.2020 <"
Пожалуйста, авторизуйтесь для просмотра ссылки.
, зделал обход новой "ТОПОВЫЙ АНТИ-ЧИТ СИСТЕМЫ ОТ ВАЛВЕ" при помощью патчинга одного байта(1byte) игровой памяти. Скрипт написан на Python и на C.Как это работает: (Этот уголок для тех кто знает Disassembly)
push ebp
mov ebp, esp
push esi
mov esi, [ebp+arg_8]
mov eax, [esi+8]
mov eax, [eax+4]
test eax, eax ; is ObjectAttributes->ObjectName->Buffer not null
jz short loc_4095BB ; we patch this to skip loc_4095A1
loc_4095A1:
test byte ptr [ebp+arg_4], 20h ; check if DesiredAccess is equal FILE_EXECUTE
jz short loc_4095BB
push eax ; ObjectAttributes->ObjectName->Buffer
call sub_40D460
test al, al ; check if dll is allowed to load
jnz short loc_4095BB
mov eax, 0C0000034h ; return STATUS_OBJECT_NAME_NOT_FOUND
pop esi
pop ebp
retn 18h
loc_4095BB:
push [ebp+arg_14]
push [ebp+arg_10]
push [ebp+arg_C]
push esi
push [ebp+arg_4]
push [ebp+arg_0]
call originalNtOpenFile
pop esi
pop ebp
retn 18h
mov ebp, esp
push esi
mov esi, [ebp+arg_8]
mov eax, [esi+8]
mov eax, [eax+4]
test eax, eax ; is ObjectAttributes->ObjectName->Buffer not null
jz short loc_4095BB ; we patch this to skip loc_4095A1
loc_4095A1:
test byte ptr [ebp+arg_4], 20h ; check if DesiredAccess is equal FILE_EXECUTE
jz short loc_4095BB
push eax ; ObjectAttributes->ObjectName->Buffer
call sub_40D460
test al, al ; check if dll is allowed to load
jnz short loc_4095BB
mov eax, 0C0000034h ; return STATUS_OBJECT_NAME_NOT_FOUND
pop esi
pop ebp
retn 18h
loc_4095BB:
push [ebp+arg_14]
push [ebp+arg_10]
push [ebp+arg_C]
push esi
push [ebp+arg_4]
push [ebp+arg_0]
call originalNtOpenFile
pop esi
pop ebp
retn 18h
Код под Python:
Python:
import pymem
import re
pm = pymem.Pymem('csgo.exe')
# bypass NtOpenFile hook in csgo.exe
csgo = pymem.process.module_from_name(pm.process_handle,
'csgo.exe')
csgoModule = pm.read_bytes(csgo.lpBaseOfDll, csgo.SizeOfImage)
address = csgo.lpBaseOfDll + re.search(rb'.\x1A\xF6\x45\x0C\x20',
csgoModule).start()
pm.write_uchar(address, 0xEB if pm.read_uchar(address) == 0x74 else 0x74)
# bypass thread creation detection in DllMain of client.dll
client = pymem.process.module_from_name(pm.process_handle,
'client.dll')
clientModule = pm.read_bytes(client.lpBaseOfDll, client.SizeOfImage)
address = client.lpBaseOfDll + re.search(rb'.\x55\x6A\x00\x6A\x04',
clientModule).start()
pm.write_uchar(address, 0xEB if pm.read_uchar(address) == 0x74 else 0x74)
pm.close_process()
Другой метод обхода anti-loadlibrary это восстановление первых 5 байтов оригинального NtOpenFile. Example под C:
Код под C:
C:
// Restore original NtOpenFile from external process
LPVOID ntOpenFile = GetProcAddress(LoadLibraryW(L"ntdll"), "NtOpenFile");
if (ntOpenFile) {
char originalBytes[5];
memcpy(originalBytes, ntOpenFile, 5);
WriteProcessMemory(csgoProcessHandle, ntOpenFile, originalBytes, 5, NULL);
}
Пожалуйста, авторизуйтесь для просмотра ссылки.
">
Последнее редактирование: