Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Point Blank (Piercing Blow) (https://forum.zone-game.info/forumdisplay.php?f=204)
-   -   [Piercing Blow] PointBlank\PiercingBlow. CreateMutex (https://forum.zone-game.info/showthread.php?t=41657)

Awiion 07.11.2016 15:58

PointBlank\PiercingBlow. CreateMutex
 
Всем привет,
Хочу показать, как избавиться от проверки PointBlank\PiercingBlow (CreateMutex)

http://rgho.st/64cgb28qC/image.png
________________________________

1. Понадобится PETools.
2. Понадобится Ida Pro\Free.
3. Понадобится Клиент игры.
_________________________
Инструкция:
Свернуть ↑Развернуть ↓

____________________________________
Теперь нужно написать, инжект кода.
Пример приведу на с#, дальше сами хоть с++.

Клац:
Свернуть ↑Развернуть ↓




Ну вот и все, теперь сколько душе угодно запустится клиентов.
Кому не нужен логин и пароль, Arguments за комментировать.

bola 07.11.2016 17:50

Re: PointBlank\PiercingBlow. CreateMutex
 
first of all thank you so much for spreading this knowledge.
for a moment i still have a issue with piercing blow, with dumped code or original .exe file
i cannot find the call for a mutex or a jnz instruction, in dump even i can find access to string


again, tyvm for this thread

obs: xigncode already bypassed

http://i.imgur.com/7N6JIFZ.png

http://i.imgur.com/cEDd9Li.png

n3k0nation 08.11.2016 07:51

Re: PointBlank\PiercingBlow. CreateMutex
 
Можно во много раз проще, без проблем с патчингом под изменение кода в клиенте. Достаточно убить глобальные мьютексы во всем клиенте, ибо они используются только для контроля запуска вторичных инстансов. Это можно сделать, например, так:
Код:

DWORD WINAPI SetupKernel(PVOID) {
        PVOID lib;
        while((lib = GetModuleHandleW(L"kernel32.dll")) == nullptr) {
                Sleep(10);
        }

        pHookCreateMutex = new Hook(wstring(L"kernel32.dll"), string("CreateMutexA"), &hCreateMutex);
        pHookCreateMutex->SetFlushCache(true);
        adrCreateMutex = reinterpret_cast<DWORD>(pHookCreateMutex->GetFunctionAddress());
        pHookCreateMutex->Apply();
        return 0;
}

Код:

HANDLE WINAPI hCreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName) {
        const char* filter = "Global";
        if(strncmp(lpName, filter, strlen(filter)) != 0) {
                //try call original kernel function from virtual dll stub (minwin kernel)
                typedef HANDLE (*TCreateMutexA)(LPSECURITY_ATTRIBUTES, BOOL, LPCSTR);
                TCreateMutexA oCreateMutex = (TCreateMutexA)GetProcAddress(GetModuleHandleA("api-ms-win-core-synch-l1-1-0.dll"), "CreateMutexA");
                return oCreateMutex;
        }

        return nullptr;
}


bola 09.11.2016 18:29

Re: PointBlank\PiercingBlow. CreateMutex
 
Цитата:

Сообщение от n3k0nation (Сообщение 420606)
Можно во много раз проще, без проблем с патчингом под изменение кода в клиенте. Достаточно убить глобальные мьютексы во всем клиенте, ибо они используются только для контроля запуска вторичных инстансов. Это можно сделать, например, так:
Код:

DWORD WINAPI SetupKernel(PVOID) {
        PVOID lib;
        while((lib = GetModuleHandleW(L"kernel32.dll")) == nullptr) {
                Sleep(10);
        }

        pHookCreateMutex = new Hook(wstring(L"kernel32.dll"), string("CreateMutexA"), &hCreateMutex);
        pHookCreateMutex->SetFlushCache(true);
        adrCreateMutex = reinterpret_cast<DWORD>(pHookCreateMutex->GetFunctionAddress());
        pHookCreateMutex->Apply();
        return 0;
}

Код:

HANDLE WINAPI hCreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName) {
        const char* filter = "Global";
        if(strncmp(lpName, filter, strlen(filter)) != 0) {
                //try call original kernel function from virtual dll stub (minwin kernel)
                typedef HANDLE (*TCreateMutexA)(LPSECURITY_ATTRIBUTES, BOOL, LPCSTR);
                TCreateMutexA oCreateMutex = (TCreateMutexA)GetProcAddress(GetModuleHandleA("api-ms-win-core-synch-l1-1-0.dll"), "CreateMutexA");
                return oCreateMutex;
        }

        return nullptr;
}



can i have a better explanation about this code usage, sorry i'm not a c++ Expert, even a c++ coder, i'm just a Java coder and know a bit of c#

Awiion 09.11.2016 20:18

Re: PointBlank\PiercingBlow. CreateMutex
 
bola,
Create a DLL, then inject into the process
(ddraw) startup.

bola 09.11.2016 20:49

Re: PointBlank\PiercingBlow. CreateMutex
 
Цитата:

Сообщение от bola (Сообщение 420670)
can i have a better explanation about this code usage, sorry i'm not a c++ Expert, even a c++ coder, i'm just a Java coder and know a bit of c#

Awiion i have created a DLL already, but as example, pHookCreateMutex is undefined,

new Hook ???

many things are unknown for me

and here comes the song...
Hello Darkness my Old friend

Anykia 20.11.2016 06:04

Re: PointBlank\PiercingBlow. CreateMutex
 
Цитата:

Сообщение от n3k0nation (Сообщение 420606)
Можно во много раз проще, без проблем с патчингом под изменение кода в клиенте. Достаточно убить глобальные мьютексы во всем клиенте, ибо они используются только для контроля запуска вторичных инстансов. Это можно сделать, например, так:
Код:

DWORD WINAPI SetupKernel(PVOID) {
        PVOID lib;
        while((lib = GetModuleHandleW(L"kernel32.dll")) == nullptr) {
                Sleep(10);
        }

        pHookCreateMutex = new Hook(wstring(L"kernel32.dll"), string("CreateMutexA"), &hCreateMutex);
        pHookCreateMutex->SetFlushCache(true);
        adrCreateMutex = reinterpret_cast<DWORD>(pHookCreateMutex->GetFunctionAddress());
        pHookCreateMutex->Apply();
        return 0;
}

Код:

HANDLE WINAPI hCreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName) {
        const char* filter = "Global";
        if(strncmp(lpName, filter, strlen(filter)) != 0) {
                //try call original kernel function from virtual dll stub (minwin kernel)
                typedef HANDLE (*TCreateMutexA)(LPSECURITY_ATTRIBUTES, BOOL, LPCSTR);
                TCreateMutexA oCreateMutex = (TCreateMutexA)GetProcAddress(GetModuleHandleA("api-ms-win-core-synch-l1-1-0.dll"), "CreateMutexA");
                return oCreateMutex;
        }

        return nullptr;
}


Thank you!

(XignCode && CreateMutexA Patched)

http://i.imgur.com/y9edY4t.jpg

bola 20.11.2016 06:19

Re: PointBlank\PiercingBlow. CreateMutex
 
Цитата:

Сообщение от Anykia (Сообщение 421027)
Thank you!

(XignCode && CreateMutexA Patched)

http://i.imgur.com/y9edY4t.jpg

How the hell have you done this

n3k0nation 20.11.2016 08:09

Re: PointBlank\PiercingBlow. CreateMutex
 
bola, i share only code snippet. Your can use any code with splice hook implement.
I compile my dll for point blank (wo host/port change and etc, only mutex processing), take it and dont worry:) My dll have public export function: EmptyExport, u can add it into game PE as imported dll.

P.S: my dll needs minwin windows update (started from Windows Vista) and of course ms redistributable.

bola 20.11.2016 08:47

Re: PointBlank\PiercingBlow. CreateMutex
 
Цитата:

Сообщение от n3k0nation (Сообщение 421031)
bola, i share only code snippet. Your can use any code with splice hook implement.
I compile my dll for point blank (wo host/port change and etc, only mutex processing), take it and dont worry:) My dll have public export function: EmptyExport, u can add it into game PE as imported dll.

P.S: my dll needs minwin windows update (started from Windows Vista) and of course ms redistributable.

Please God bless you, tyvm


Текущее время: 22:42. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot