Menu
Cart 0

Packet Logger - Nostale

Using packet loggers, injectors, or proxies on live game servers often violates the Terms of Service (ToS) and End User License Agreement (EULA). This can lead to your account being banned. The code above is for educational purposes to understand networking architectures in game development.


1. The Raw Packet (What the user usually sees):

recv: #c 0 3 EF 00 A1 04 00 00 09 00

2. The Translated Output (What your feature displays):

[RECV] Header: c (Character Move)
 ├─ Session ID: 1007 (0x03EF)
 ├─ Coordinate X: 1185 (0x04A1)
 ├─ Coordinate Y: 9 (0x0009)
 └─ Speed: 0

3. Another Example (Chat Packet): Raw: #f 2 0 5Hello Translated: nostale packet logger

[RECV] Header: f (Chat)
 ├─ Type: 2 (Whisper)
 ├─ SenderID: 0
 └─ Message: "Hello"

Intercepting or modifying network traffic can violate terms of service and local laws. Use packet loggers only on accounts, servers, and systems you own or have explicit permission to analyze. Do not use captured data to cheat, steal accounts, or distribute copyrighted assets.

Edit the config.ini file:

[Proxy]
ListenPort = 5555
RemoteHost = gameforge.nostale.com
RemotePort = 4000
DecryptXOR = true
XORKey = 0x7A  ; (example – actual key rotates per session in modern versions)

Search GitHub for "Nostale Packet Logger proxy" or "NsProxy". Compile from source if security is a concern. Using packet loggers, injectors, or proxies on live

Here is a skeleton code for a Proxy-based Logger using System.Net.Sockets.

Note: You will need to find the specific encryption/decryption algorithm for NosTale (publicly available in open-source emulators or previous bot projects) to make this fully functional.

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Collections.Generic;

namespace NosTalePacketLogger public class ProxyServer private TcpListener _listener; private TcpClient _gameClient; private TcpClient _remoteServer; int flags) int result = Original_recv(s

    // NosTale Login Server IP (Example, verify current one)
    private string _remoteIp = "79.110.84.75"; 
    private int _remotePort = 4006; // Login Port
public void Start(int localPort)
_listener = new TcpListener(IPAddress.Any, localPort);
        _listener.Start();
        Console.WriteLine($"[*] Logger listening on port localPort...");
while (true)
_gameClient = _listener.AcceptTcpClient();
            Console.WriteLine("[*] Game client connected.");
// Connect to real server
            _remoteServer = new TcpClient(_remoteIp, _remotePort);
// Start relaying
            var clientToServer = new StateObject(_gameClient, _remoteServer, "C->S");
            var serverToClient = new StateObject(_remoteServer, _gameClient, "S->C");
_gameClient.GetStream().BeginRead(clientToServer.Buffer, 0, clientToServer.Buffer.Length, OnReceive, clientToServer);
            _remoteServer.GetStream().BeginRead(serverToClient.Buffer, 0, serverToClient.Buffer.Length, OnReceive, serverToClient);
private void OnReceive(IAsyncResult ar)
var state = (StateObject)ar.AsyncState;
        try
int bytesRead = state.SourceSocket.GetStream().EndRead(ar);
            if (bytesRead > 0)
byte[] receivedData = new byte[bytesRead];
                Array.Copy(state.Buffer, receivedData, bytesRead);
// --- PACKET PROCESSING ---
                // 1. Decrypt the packet using NosTale Algorithm
                // string decryptedPacket = NosCrypto.Decrypt(receivedData, state.Direction);
// 2. Log the packet
                Console.WriteLine($"[state.Direction] Raw: BitConverter.ToString(receivedData)");
                // Console.WriteLine($"[state.Direction] Decrypted: decryptedPacket");
// 3. (Optional) Modify packet here
// 4. Forward to destination
                // If sending to server, might need re-encryption depending on flow
                state.DestSocket.GetStream().Write(receivedData, 0, bytesRead);
// Continue reading
                state.SourceSocket.GetStream().BeginRead(state.Buffer, 0, state.Buffer.Length, OnReceive, state);
catch (Exception ex)
Console.WriteLine($"Error: ex.Message");
// Helper class to hold connection state
public class StateObject
public TcpClient SourceSocket;
    public TcpClient DestSocket;
    public byte[] Buffer = new byte[8192];
    public string Direction;
public StateObject(TcpClient source, TcpClient dest, string dir)
SourceSocket = source;
        DestSocket = dest;
        Direction = dir;


This article is for educational and informational purposes only. The author does not endorse violating any game's Terms of Service.

int WINAPI Hooked_recv(SOCKET s, char* buf, int len, int flags) 
    int result = Original_recv(s, buf, len, flags);
    if (result > 0) 
        // Decrypt or log raw
        LogPacket(buf, result);
return result;