mgvq
Активный
- 420
- 71
что делать если вылезает надпись "Для обхода предупреждения создайте Mordor_Bypass.txt"?Бупасс для Мордора, который я навоял за 1 день.
Финальная версия бупасса, скрипт больше обновляться не будет.
Установка:
Скачать и перекинуть скрипт в папку moonloader.
IP-адреса:
Mordor RP 01: s1.mordor-rp.ru:7777
Mordor RP 02: s2.mordor-rp.ru:7777
Mordor RP 03: s3.mordor-rp.ru:7777
Mordor Fun: s1.mordorfun.ru:7777
Видео:ChangeLog:инфа: записано на 1.0Требования:Hotfix: Накрыл скрипт от взгляда одменов, попытался убрать привередливость к SAMP.Lua и самой сборке, поставил ноп на анимку (feat. Aniki)
v1.1: Сделал так, чтобы смена айпишников не заставляла обновлять версию скрипта.
v2.0: Добавил возможность обхода защиты от дурака. Обновил обход: добавил питоновский скрипт для того чтобы обходить защиту WebSocket.
v2.1: Добавил (или попытался добавить) поддержку нескольких клиентов в питоновском скрипте и пофиксил (ну или опять же, попытался) Ctrl+R. Убрал обфускацию питоновского скрипта (на изи вскрывается + мне лень так с каждой версией делать).
v2.2: Финальная версия. Открыл исходник скрипта, обновил айпишники. убрал вебсокет-клиент.
Moonloader 0.26
SAMPFUNCS
SAMP.lua
плати деньги не работает обходчто делать если вылезает надпись "Для обхода предупреждения создайте Mordor_Bypass.txt"?
так кому платить топлати деньги не работает обход
У меня уже обход естьНикому Пон я его скоро возможно солью
Я уже декрипт их разобрал и конет
Я пока ещё не разобрался как их декрипт работает мб я вообще не то нашёлУ меня уже обход есть
Вот, с монетки зашел даже. С пк тоже заходит
int __fastcall DataBlockEncryptor::Decrypt(int a1, int *a2, int a3, int *a4, size_t *a5)
{
int result = 0;
_BYTE *v8 = (_BYTE *)(a1 + 282);
unsigned int8 *v9 = (unsigned int8 *)(a1 + 564);
int v10 = 32;
int *v11;
int v12;
char v13, v14, v15, v16;
bool v17;
int v18;
int v19;
size_t v20;
char *v21;
int v24 = -831661711;
__int16 v25 = 22719;
int v26 = 0;
if (a2 && a3 >= 16 && (a3 & 0xF) == 0)
{
if (a3 >= 32)
{
do
{
v11 = &a2[v10 / 4u];
blockDecrypt(v9, v8, &a2[v10 / 4u - 4], 16, &a2[v10 / 4u - 4]);
v12 = v10;
if (a3 == v10)
v12 = 0;
v13 = *((_BYTE *)v11 - 15);
v14 = *((_BYTE *)v11 - 14);
v15 = *((_BYTE *)v11 - 13);
*((_BYTE *)v11 - 16) ^= *((_BYTE *)a2 + v12);
*((_BYTE *)v11 - 15) = *((_BYTE *)a2 + (v12 | 1)) ^ v13;
*((_BYTE *)v11 - 14) = *((_BYTE *)a2 + (v12 | 2)) ^ v14;
v16 = *((_BYTE *)v11 - 12);
*((_BYTE *)v11 - 13) = *((_BYTE *)a2 + (v12 | 3)) ^ v15;
*((_BYTE *)v11 - 12) = *((_BYTE *)a2 + (v12 | 4)) ^ v16;
*((_BYTE *)v11 - 11) ^= *((_BYTE *)a2 + (v12 | 5));
*((_BYTE *)v11 - 10) ^= *((_BYTE *)a2 + (v12 | 6));
*((_BYTE *)v11 - 9) ^= *((_BYTE *)a2 + (v12 | 7));
*((_BYTE *)v11 - 8) ^= *((_BYTE *)a2 + (v12 | 8));
*((_BYTE *)v11 - 7) ^= *((_BYTE *)a2 + (v12 | 9));
*((_BYTE *)v11 - 6) ^= *((_BYTE *)a2 + (v12 | 0xA));
*((_BYTE *)v11 - 5) ^= *((_BYTE *)a2 + (v12 | 0xB));
*((_BYTE *)v11 - 4) ^= *((_BYTE *)a2 + (v12 | 0xC));
*((_BYTE *)v11 - 3) ^= *((_BYTE *)a2 + (v12 | 0xD));
*((_BYTE *)v11 - 2) ^= *((_BYTE *)a2 + (v12 | 0xE));
*((_BYTE *)v11 - 1) ^= *((_BYTE *)a2 + (v12 | 0xF));
v17 = v10 <= a3 - 16;
v10 += 16;
} while (v17);
}
blockDecrypt(v9, v8, a2, 16, a2);
v18 = *((_BYTE *)a2 + 5) & 0xF;
v19 = *a2;
*a5 = a3 - 6 - v18;
CheckSum::Add((unsigned int16 *)&v24, (unsigned int8 *)a2 + 4, a3 - 4);
if (v19 == v26)
{
v20 = *a5;
v21 = (char *)a2 + v18 + 6;
if (a2 == a4)
memmove(a2, v21, v20);
else
qmemcpy(a4, v21, v20);
return 1;
}
else
{
return 0;
}
}
return result;
}
int __fastcall HandleConnectionSuccess(int packetData)
{
int activeNetwork;
int playerId;
int sessionId;
unsigned __int8 usernameLength, tokenLength, versionLength;
char authToken[65];
unsigned __int8 *processedUsername;
unsigned __int8 packetBuffer[0x248];
unsigned __int8 tempBuffer[0x134];
if (GUI::pChat) {
Chat::AddDebugMessage(GUI::pChat, "Connected! Joining the game..");
}
activeNetwork = MultiPlayer::GetActiveNetwork();
Network::SetNetworkState(activeNetwork, 15);
RakNet::BitStream inputStream((int)tempBuffer, *(const void **)(packetData + 16), *(_DWORD *)(packetData + 8), 0);
inputStream.IgnoreBits(8);
inputStream.IgnoreBits(32);
inputStream.IgnoreBits(16);
inputStream.ReadBits((int)tempBuffer, &playerId, 16, 1);
inputStream.ReadBits((int)tempBuffer, &sessionId, 32, 1);
*(_WORD *)(*(_DWORD *)(MultiPlayer::GetActiveNetwork() + 884) + 4) = playerId;
tokenLength = MPSTRLEN("E02262CF28BC542486C558D4BE9EFB716592AFAF8B");
usernameLength = MPSTRLEN((_BYTE *)(MultiPlayer::GetActiveNetwork() + 337));
versionLength = MPSTRLEN("0.3.7");
DecryptData(authToken, byte_11BD770, 0x41, 0x4C);
processedUsername = ProcessUsernameData(LauncherWrapper::GetUsername());
RakNet::BitStream outputStream((int)packetBuffer);
outputStream.WriteBits((unsigned __int8 *)&sessionId, 32, 1);
outputStream.WriteBits(&usernameLength, 8, 1);
outputStream.Write((unsigned __int8 *)(MultiPlayer::GetActiveNetwork() + 337), usernameLength);
int encryptedSessionId = sessionId ^ 0xFD9;
outputStream.WriteBits((unsigned __int8 *)&encryptedSessionId, 32, 1);
outputStream.WriteBits(&tokenLength, 8, 1);
outputStream.Write(authToken, tokenLength);
outputStream.WriteBits(&versionLength, 8, 1);
outputStream.Write(processedUsername, versionLength);
SendPacket(activeNetwork, outputStream);
CleanupMemory(processedUsername);
return 0;
}
понЯ пока ещё не разобрался как их декрипт работает мб я вообще не то нашёл
Код:int __fastcall DataBlockEncryptor::Decrypt(int a1, int *a2, int a3, int *a4, size_t *a5) { int result = 0; _BYTE *v8 = (_BYTE *)(a1 + 282); unsigned int8 *v9 = (unsigned int8 *)(a1 + 564); int v10 = 32; int *v11; int v12; char v13, v14, v15, v16; bool v17; int v18; int v19; size_t v20; char *v21; int v24 = -831661711; __int16 v25 = 22719; int v26 = 0; if (a2 && a3 >= 16 && (a3 & 0xF) == 0) { if (a3 >= 32) { do { v11 = &a2[v10 / 4u]; blockDecrypt(v9, v8, &a2[v10 / 4u - 4], 16, &a2[v10 / 4u - 4]); v12 = v10; if (a3 == v10) v12 = 0; v13 = *((_BYTE *)v11 - 15); v14 = *((_BYTE *)v11 - 14); v15 = *((_BYTE *)v11 - 13); *((_BYTE *)v11 - 16) ^= *((_BYTE *)a2 + v12); *((_BYTE *)v11 - 15) = *((_BYTE *)a2 + (v12 | 1)) ^ v13; *((_BYTE *)v11 - 14) = *((_BYTE *)a2 + (v12 | 2)) ^ v14; v16 = *((_BYTE *)v11 - 12); *((_BYTE *)v11 - 13) = *((_BYTE *)a2 + (v12 | 3)) ^ v15; *((_BYTE *)v11 - 12) = *((_BYTE *)a2 + (v12 | 4)) ^ v16; *((_BYTE *)v11 - 11) ^= *((_BYTE *)a2 + (v12 | 5)); *((_BYTE *)v11 - 10) ^= *((_BYTE *)a2 + (v12 | 6)); *((_BYTE *)v11 - 9) ^= *((_BYTE *)a2 + (v12 | 7)); *((_BYTE *)v11 - 8) ^= *((_BYTE *)a2 + (v12 | 8)); *((_BYTE *)v11 - 7) ^= *((_BYTE *)a2 + (v12 | 9)); *((_BYTE *)v11 - 6) ^= *((_BYTE *)a2 + (v12 | 0xA)); *((_BYTE *)v11 - 5) ^= *((_BYTE *)a2 + (v12 | 0xB)); *((_BYTE *)v11 - 4) ^= *((_BYTE *)a2 + (v12 | 0xC)); *((_BYTE *)v11 - 3) ^= *((_BYTE *)a2 + (v12 | 0xD)); *((_BYTE *)v11 - 2) ^= *((_BYTE *)a2 + (v12 | 0xE)); *((_BYTE *)v11 - 1) ^= *((_BYTE *)a2 + (v12 | 0xF)); v17 = v10 <= a3 - 16; v10 += 16; } while (v17); } blockDecrypt(v9, v8, a2, 16, a2); v18 = *((_BYTE *)a2 + 5) & 0xF; v19 = *a2; *a5 = a3 - 6 - v18; CheckSum::Add((unsigned int16 *)&v24, (unsigned int8 *)a2 + 4, a3 - 4); if (v19 == v26) { v20 = *a5; v21 = (char *)a2 + v18 + 6; if (a2 == a4) memmove(a2, v21, v20); else qmemcpy(a4, v21, v20); return 1; } else { return 0; } } return result; }
Единственное что я нормально портировал -
Код:int __fastcall HandleConnectionSuccess(int packetData) { int activeNetwork; int playerId; int sessionId; unsigned __int8 usernameLength, tokenLength, versionLength; char authToken[65]; unsigned __int8 *processedUsername; unsigned __int8 packetBuffer[0x248]; unsigned __int8 tempBuffer[0x134]; if (GUI::pChat) { Chat::AddDebugMessage(GUI::pChat, "Connected! Joining the game.."); } activeNetwork = MultiPlayer::GetActiveNetwork(); Network::SetNetworkState(activeNetwork, 15); RakNet::BitStream inputStream((int)tempBuffer, *(const void **)(packetData + 16), *(_DWORD *)(packetData + 8), 0); inputStream.IgnoreBits(8); inputStream.IgnoreBits(32); inputStream.IgnoreBits(16); inputStream.ReadBits((int)tempBuffer, &playerId, 16, 1); inputStream.ReadBits((int)tempBuffer, &sessionId, 32, 1); *(_WORD *)(*(_DWORD *)(MultiPlayer::GetActiveNetwork() + 884) + 4) = playerId; tokenLength = MPSTRLEN("E02262CF28BC542486C558D4BE9EFB716592AFAF8B"); usernameLength = MPSTRLEN((_BYTE *)(MultiPlayer::GetActiveNetwork() + 337)); versionLength = MPSTRLEN("0.3.7"); DecryptData(authToken, byte_11BD770, 0x41, 0x4C); processedUsername = ProcessUsernameData(LauncherWrapper::GetUsername()); RakNet::BitStream outputStream((int)packetBuffer); outputStream.WriteBits((unsigned __int8 *)&sessionId, 32, 1); outputStream.WriteBits(&usernameLength, 8, 1); outputStream.Write((unsigned __int8 *)(MultiPlayer::GetActiveNetwork() + 337), usernameLength); int encryptedSessionId = sessionId ^ 0xFD9; outputStream.WriteBits((unsigned __int8 *)&encryptedSessionId, 32, 1); outputStream.WriteBits(&tokenLength, 8, 1); outputStream.Write(authToken, tokenLength); outputStream.WriteBits(&versionLength, 8, 1); outputStream.Write(processedUsername, versionLength); SendPacket(activeNetwork, outputStream); CleanupMemory(processedUsername); return 0; }