Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Compiled files
*.dll
*.exe
*.obj
*.o
*.pdb
*.ilk
*.idb
*.pch
*.suo
*.user
*.sdf
*.opensdf
*.opendb
*.VC.db
*.VC.VC.opendb

# Build directories
Debug/
Release/
x64/
x86/
.vs/
ipch/

# Sensitive files - DO NOT COMMIT
Resources/config.ini
Resources/cert.pem
Resources/key.pem
Resources/*.pem

# Logs and temporary files
*.log
*.tmp
ex_log.txt
Tracef.txt
Tracenf.txt

# Python
*.pyc
__pycache__/
script.py

# IDE
.vscode/
.idea/

# OS files
.DS_Store
Thumbs.db
desktop.ini

# External dependencies
External/lib/
External/bin/
packages/
20 changes: 12 additions & 8 deletions MetinPythonLib/App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,9 @@ bool CApp::__AppProcess(ClassPointer p) {
}
}

CCommunication& c = CCommunication::Instance();
c.Process();
// DISABLED: Network communication removed per user request
//CCommunication& c = CCommunication::Instance();
//c.Process();

return memory.callProcess(p);
}
Expand All @@ -47,7 +48,8 @@ void CApp::init() {
SetupDebugFile();
#endif
static CBackground bck = CBackground();
static CCommunication coms; //Weird compile error with constructor
// DISABLED: Network communication removed per user request
//static CCommunication coms; //Weird compile error with constructor
static CInstanceManager mgr = CInstanceManager();
static CPlayer pl = CPlayer();
static CNetworkStream ns = CNetworkStream();
Expand All @@ -56,11 +58,13 @@ void CApp::init() {
DEBUG_INFO_LEVEL_1("Loaded Objects");

#ifdef GET_ADDRESS_FROM_SERVER
if (!coms.MainServerSetAuthKey()) {
MessageBoxA(NULL, "Error while connecting to the server.", "Authentication error", MB_OK);
return;
}
DEBUG_INFO_LEVEL_1("Authentication was sucessfull");
// DISABLED: This code will never execute because GET_ADDRESS_FROM_SERVER is disabled
//CCommunication& coms = CCommunication::Instance();
//if (!coms.MainServerSetAuthKey()) {
// MessageBoxA(NULL, "Error while connecting to the server.", "Authentication error", MB_OK);
// return;
//}
//DEBUG_INFO_LEVEL_1("Authentication was sucessfull");
#endif

memory.setupPatterns(hDll);
Expand Down
19 changes: 10 additions & 9 deletions MetinPythonLib/PythonModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -888,12 +888,13 @@ PyObject* pySetRecvDelGrndItem(PyObject* poSelf, PyObject* poArgs)


//This methods must be the last ones on the s_methods variable
// DISABLED: Network communication removed per user request
static std::set<std::string> premium_methods =
{
std::string("GetRequest"),
std::string("OpenWebsocket"),
std::string("SendWebsocket"),
std::string("CloseWebsocket"),
//std::string("GetRequest"),
//std::string("OpenWebsocket"),
//std::string("SendWebsocket"),
//std::string("CloseWebsocket"),
std::string("SkipRenderer"),
std::string("UnskipRenderer")
};
Expand Down Expand Up @@ -974,11 +975,11 @@ static PyMethodDef s_methods[] =
{ "SyncPlayerPosition", pySyncPlayerPosition , METH_VARARGS},
{ "SetRecvChatCallback", pySetRecvChatCallback , METH_VARARGS},

//Premium
{ "GetRequest", pyGetRequest, METH_VARARGS},
{ "OpenWebsocket", pyOpenWebsocket, METH_VARARGS},
{ "SendWebsocket", pySendWebsocket, METH_VARARGS},
{ "CloseWebsocket", pyCloseWebsocket, METH_VARARGS},
// DISABLED: Network communication removed per user request
//{ "GetRequest", pyGetRequest, METH_VARARGS},
//{ "OpenWebsocket", pyOpenWebsocket, METH_VARARGS},
//{ "SendWebsocket", pySendWebsocket, METH_VARARGS},
//{ "CloseWebsocket", pyCloseWebsocket, METH_VARARGS},
{ "SkipRenderer", pySkipRenderer , METH_VARARGS},
{ "UnskipRenderer", pyUnSkipRenderer , METH_VARARGS},

Expand Down
249 changes: 249 additions & 0 deletions RAPORT_BEZPIECZENSTWA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
# Raport Bezpieczeństwa - eXLib
**Data analizy:** 2026-01-25

---

## PODSUMOWANIE (dla użytkowników polskich)

### ✅ GŁÓWNY WNIOSEK: PROJEKT NIE ZAWIERA WIRUSÓW

Po szczegółowej analizie bezpieczeństwa projektu eXLib mogę potwierdzić, że:

**NIE ZNALEZIONO:**
- ❌ Wirusów
- ❌ Ransomware
- ❌ Keyloggerów (programów przechwytujących klawiaturę)
- ❌ Trojanów kradnących dane
- ❌ Backdoorów (ukrytych tylnych wejść)
- ❌ Minerów kryptowalut
- ❌ Tradycyjnego malware

---

## ⚠️ WAŻNE OSTRZEŻENIA BEZPIECZEŃSTWA

Chociaż projekt **nie jest wirusem**, wykryto następujące problemy bezpieczeństwa:

### 🔴 KRYTYCZNE PROBLEMY

#### 1. Certyfikaty SSL w kodzie źródłowym
**Problem:** Klucze prywatne certyfikatów SSL są zakodowane bezpośrednio w kodzie źródłowym.

**Ryzyko:**
- Każdy z dostępem do kodu ma klucz prywatny
- Możliwość podszycia się pod serwer
- Możliwość odszyfrowywania komunikacji SSL
- Certyfikat jest już publicznie ujawniony i SKOMPROMITOWANY
- Certyfikat WYGASŁ (2023-01-06)

**Rekomendacja:** Natychmiastowa zmiana certyfikatów i przechowywanie ich poza kodem źródłowym.

---

#### 2. Połączenie z nieznanym serwerem
**Problem:** Program łączy się z serwerem `https://136.244.118.103/` bez wiedzy użytkownika.

**Co jest wysyłane:**
- Hardware ID komputera (numer seryjny dysku C:)
- Token autoryzacyjny JWT
- Dane o pamięci gry

**Ryzyko:**
- Brak kontroli użytkownika nad tym, co jest wysyłane
- Nieznana lokalizacja i właściciel serwera
- Możliwość śledzenia użytkowników
- Brak możliwości rezygnacji

---

#### 3. Zbieranie identyfikatora sprzętu (HWID)
**Problem:** Aplikacja zbiera unikalny identyfikator komputera i wysyła go na serwer.

**Ryzyko:**
- Naruszenie prywatności
- Unikalna identyfikacja maszyny
- Możliwość śledzenia użytkowników
- Brak zgody użytkownika

---

### 🟡 ŚREDNIE RYZYKO

#### 4. Wyłączona weryfikacja SSL
**Problem:** Weryfikacja certyfikatów SSL jest całkowicie wyłączona.

**Ryzyko:**
- Podatność na ataki man-in-the-middle
- Brak możliwości weryfikacji tożsamości serwera
- SSL nie zapewnia żadnej ochrony

---

#### 5. Automatyczne wykonywanie skryptów
**Problem:** DLL automatycznie wykonuje plik `script.py` z bieżącego katalogu.

**Ryzyko:**
- Wykonanie dowolnego kodu
- Brak walidacji zawartości skryptu
- Możliwość wykorzystania przez atakującego

---

## CO TO JEST TEN PROJEKT?

**eXLib to narzędzie do modyfikacji gry Metin2**, które:

### Funkcje:
- Wstrzykuje kod do procesu gry (DLL injection)
- Przechwytuje i modyfikuje pakiety sieciowe
- Dodaje funkcje do API Pythona gry
- Umożliwia automatyzację i tworzenie botów

### Techniki używane (podobne do malware, ale to nie wirus):
- Wstrzykiwanie DLL
- Hookowanie funkcji w pamięci
- Modyfikowanie pamięci procesu
- Skanowanie wzorców w pamięci
- Przechwytywanie pakietów

### ⚠️ UWAGA:
- To narzędzie **łamie regulamin gry Metin2**
- Użycie może skutkować **permanentnym banem konta**
- Antycheat wykryje to jako oszustwo
- Niektóre antywirus mogą wykryć to jako malware (fałszywy alarm)

---

## FUNKCJE OSZUSTÓW/BOTÓW

Projekt zapewnia możliwości:
- ✓ Teleportacja pozycji
- ✓ Wallhack (przechodzenie przez ściany)
- ✓ Auto-fishing (automatyczne łowienie ryb)
- ✓ Automatyczne podnoszenie przedmiotów
- ✓ Manipulacja pakietami ataku
- ✓ Przyspieszenie ruchu
- ✓ Używanie umiejętności bez animacji
- ✓ Wykrywanie i wyświetlanie sklepów graczy

---

## DANE WYSYŁANE NA SERWER

### Co jest zbierane i wysyłane:

1. **Hardware ID (HWID)**
- Numer seryjny woluminu dysku C:
- Unikalny identyfikator komputera

2. **Token JWT**
- Przechowywany w `Resources/config.ini`
- Używany do autoryzacji

3. **Nazwa serwera gry**
- Domyślnie "GF" (GameForge)

4. **Offsety pamięci**
- Adresy funkcji w pamięci gry
- Używane do synchronizacji

### Dokąd jest wysyłane:
- **Serwer:** https://136.244.118.103/
- **Organizacja certyfikatu:** OpenBot, Madryt, Hiszpania
- **Endpointy API:**
- `/api/private/offsets` - pobieranie offsetów
- `/api/private/premium` - weryfikacja statusu premium
- `/api/private/update_offsets` - wysyłanie offsetów

---

## OCENA RYZYKA

| Kategoria | Poziom ryzyka | Szczegóły |
|-----------|--------------|-----------|
| **Wirusy** | ✅ BRAK | Nie wykryto malware |
| **Backdoory** | ⚠️ NISKI | Brak celowych backdoorów, ale istnieje połączenie z serwerem |
| **Prywatność danych** | 🔴 WYSOKIE | Zbieranie HWID bez jasnego ujawnienia |
| **Bezpieczeństwo kodu** | 🔴 WYSOKIE | Zakodowane dane uwierzytelniające, wyłączona weryfikacja SSL |
| **Zgoda użytkownika** | 🟡 ŚREDNIE | Automatyczne wykonywanie skryptów, połączenia zdalne |
| **Naruszenie ToS gry** | 🔴 KRYTYCZNE | Łamie regulamin Metin2 |

---

## REKOMENDACJE

### Dla użytkowników:

1. **Przed użyciem:**
- ⚠️ Zrozum, że to narzędzie do oszukiwania w grze
- ⚠️ Będzie wykryte przez systemy antycheat
- ⚠️ Grozi permanentnym banem konta
- ⚠️ Twój HWID jest zbierany i wysyłany na serwer

2. **Środki ostrożności:**
- Używaj tylko w izolowanym środowisku testowym
- Nie używaj z wartościowymi kontami gier
- Sprawdź zawartość plików `script.py` przed uruchomieniem
- Monitoruj ruch sieciowy jeśli masz obawy
- Przejrzyj `Resources/config.ini` dla swojego tokena JWT

3. **Prywatność:**
- Twój numer seryjny dysku C: jest wysyłany na serwer 136.244.118.103
- Brak mechanizmu rezygnacji
- Rozważ użycie w maszynie wirtualnej

### Dla twórców projektu:

1. **Natychmiastowe działania:**
- Usuń zakodowane certyfikaty SSL i klucze prywatne
- Włącz weryfikację certyfikatów SSL
- Dodaj jasne ujawnienie dotyczące prywatności o zbieraniu HWID
- Udokumentuj cel i wykorzystanie danych przez serwer zdalny

2. **Ulepszenia bezpieczeństwa:**
- Implementuj właściwe zarządzanie sekretami
- Dodaj mechanizmy zgody użytkownika
- Waliduj zewnętrzne skrypty przed wykonaniem
- Zapewnij opcję trybu offline

---

## WNIOSEK KOŃCOWY

### ✅ PROJEKT NIE JEST WIRUSEM

eXLib **NIE zawiera wirusów ani tradycyjnego malware**.

### ⚠️ ALE...

Jest to **narzędzie do modyfikacji/oszukiwania w grze**, które:
- Używa technik podobnych do malware (injection, hooking)
- Łączy się z nieznanym serwerem
- Zbiera HWID bez wyraźnej zgody użytkownika
- Zawiera poważne luki w zabezpieczeniach
- Łamie regulamin gry Metin2

### 📊 WERDYKT KOŃCOWY:

✅ **NIE JEST WIRUSEM**
⚠️ **OBECNE LUKI W ZABEZPIECZENIACH**
🔴 **NARZĘDZIE DO OSZUKIWANIA W GRZE** (używaj na własne ryzyko)

---

## SZCZEGÓŁOWE RAPORTY

Dla więcej szczegółów technicznych zobacz:
- **[SECURITY_AUDIT.md](SECURITY_AUDIT.md)** - Pełny raport audytu bezpieczeństwa (po angielsku)
- **[SECURITY_FIXES.md](SECURITY_FIXES.md)** - Rekomendacje napraw (po angielsku)

---

## KONTAKT

W przypadku pytań o bezpieczeństwo lub raportów o lukach, skontaktuj się z opiekunem projektu.

---

*Raport bezpieczeństwa wykonany poprzez statyczną analizę kodu źródłowego repozytorium eXLib.*
*Data: 2026-01-25*
Loading