Printf Hook (Plugin)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Moin,


    ihr kennt doch sicherlich diese blöden ansangen wie:
    Incoming Connection: 127.0.0.1:58915
    [chat] [Momo] Wie gehts?
    [part] Momo has disconnect (0:1)
    [join] .... 127.0.0.1:5837


    in dem MSDOS fenster von SA:MP, die gehen mir so ziemlich aufm sack.
    Mit diesem Plugin werden diese 4 anzeigen gelöscht, diese werden dadurch nicht mehr angezeigt. (Ihr könnt im Filterscript / Gamemode eure eigenen printf-anzeigen erstellen unter den folgenden Callbacks: OnPlayerConnect, OnPlayerDisconnect und OnPlayerText.)


    So installiert ihr das Plugin:


    1) Öffnet die Server.cfg datei mit einem Text-Editor.
    2) Sucht den "Plugins" Parameter und schreibt"LogHook.dll" dahinter. ("plugins LogHook.dll") (Sollte der Parameter "Plugins" nicht vorhanden sein erstellt ihr eine Neue zeile und schreibt folgendes rein: "plugins LogHook.dll" ohne "")
    3) Kopiert die LogHook.dll aus dem Winrar Archiv und packt die dll im Plugins ordner. (Sollte der Ordner nicht vorhanden sein erstellt ihn einfach)
    4) Ihr seid Fertig 8)


    Dieses Plugin Funktioniert nur mit der SA:MP 0.3b R2 Version.



    Source:#include <Windows.h>
    int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved);
    void SAMPHook();


    int WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved)
    {
    switch(reason)
    {
    case DLL_PROCESS_ATTACH:
    CreateThread(0, 0, (LPTHREAD_START_ROUTINE) SAMPHook, 0, 0, 0);
    break;
    }
    return true;
    }


    BYTE LOG1OFF[] = {0x90, 0x90, 0x90, 0x90, 0x90};
    BYTE LOG2OFF[] = {0x90, 0x90, 0x90, 0x90, 0x90};
    BYTE LOG3OFF[] = {0x90, 0x90, 0x90, 0x90, 0x90};
    BYTE LOG4OFF[] = {0x90, 0x90, 0x90, 0x90, 0x90};


    void SAMPHook()
    {
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)0x49BB82, LOG1OFF, sizeof(LOG1OFF), 0);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)0x47C8F4, LOG2OFF, sizeof(LOG2OFF), 0);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)0x47CAD0, LOG3OFF, sizeof(LOG3OFF), 0);
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)0x49B0F6, LOG4OFF, sizeof(LOG4OFF), 0);
    }


    /* ==================================================================================
    0049BB82 E8 B9B5FFFF CALL samp-ser.00497140


    0049BB82 90 NOP
    0049BB83 90 NOP
    0049BB84 90 NOP
    0049BB85 90 NOP
    0049BB86 90 NOP


    ;======================================================


    0047C8F4 E8 47A80100 CALL samp-ser.00497140


    0047C8F4 90 NOP
    0047C8F5 90 NOP
    0047C8F6 90 NOP
    0047C8F7 90 NOP
    0047C8F8 90 NOP


    ;======================================================


    0047CAD0 |. E8 6BA60100 CALL samp-ser.00497140


    0047CAD0 90 NOP
    0047CAD1 90 NOP
    0047CAD2 90 NOP
    0047CAD3 90 NOP
    0047CAD4 90 NOP


    ;======================================================


    0049B0F6 |. E8 45C0FFFF |CALL samp-ser.00497140


    0049B0F6 90 NOP
    0049B0F7 90 NOP
    0049B0F8 90 NOP
    0049B0F9 90 NOP
    0049B0FA 90 NOP
    ================================================================================== */

    SA-MP Scripting Hilfe/Erklärungen bekommt ihr auf der SA-MP Wikipedia

    3 Mal editiert, zuletzt von .#~Momo ()

  • Cooles Plugin, jedoch Rühre ich es ohne Sourcecode nicht an, deshalb
    3/10

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Es ist nicht direkt verboten es geht viel mehr um diesen Teil der Information.


    Code
    If a plugin is coded to access specific memory addresses, backward  compatibility for server owners will be broken with every server update.


    Zu Deutsch:
    Wenn ein Plugin dazu erstellt wurde auf bestimmte Speicheradressen zuzugreifen kommt es bei jedem Server Update zu Kompatibilitätsproblemen.


    Des weiteren sollte man ja wissen das sicher die Speicheradressen immer wieder verschieben können sobald was abgeändert wird von daher ist der Code unter Umständen nach
    jedem Update Müll bzw. manipuliert somit Falsche Adressen, wenn Falsche Adressen manipuliert werden kann es dazu kommen das der Server nicht mehr Ordnungsgemäß arbeitet
    oder im schlimmsten Fall kommt es halt zu einem schweren Fehler im Speicher des Server Programms.


    Ansonsten netter Versuch.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Bis jetzt ist dieß nicht der fall, falls es sich doch beweist das bei einem Update etwas anders ist könnte ich das ganze ja auf einem Signatur Scan bearbeiten, somit bekommt ihr bei JEDER SA:MP Server version den richtigen Offset, Wie gesagt, bei mir läuft alles ohne Probleme.

  • Erstmal brauchst du Ollydbg, ist ein debugger.


    Danach startest du den Server, Ollydbg und wählst den SA:MP server aus.


    Klickst auf dem E in Ollydbg und wählst dort nochmals die Server.exe aus, da er immer die ntdll.dll anzeigt.


    Ist dies getahn suchst du die einfach nur die [join] [connect] [disconnect] strings, diese pusht er in einem register, meistens 1-4 zeilen dadrunter ist der call für die printf funktion. zb:


    PUSH EAX
    PUSH EBP ; Hier ist unser string "[join] [Momo5000] 127.0.0.1"
    MOV EBP...
    CALL samp-ser.00497140 ; Hier wird die printf Funktion aufgerufen mit allem parametern aus den registern.


    Diese Adresse NOP'st du einfach. (NOP = 0x90 = No Operation (Keine Funktion) und voila, der [join] part ist geschichte.

    PS: Das ist die Orginale addrese:
    0049BB82 E8 B9B5FFFF CALL samp-ser.00497140 ; (E8 B9B5FFFF = 5 Bytes) Pro Offset (0049BB82) kann ein BYTE eingetragen werden, in olly sieht das nur ein bisschen anders aus, hat keinen sinn wenn ich das jetzt alles hier erkläre, ich glaube du/ihr versteht das meiste eh nicht hiervon)
    Also müssten wir die Call Funktion NOP'en, fertig sieht das ganze dann so aus:


    0049BB82 90 NOP
    0049BB83 90 NOP
    0049BB84 90 NOP
    0049BB85 90 NOP
    0049BB86 90 NOP

  • Du hättest auch einfach ein jmp setzen können.
    Das wäre definitiv schneller als No Operation's durch zu führen. ;)

    Hätte ich auch machen können ^^ ist eigentlich auch besser & schneller, mal gucken wann ich n update rausbring. ^^ danke


    Nice gemacht, das errinert mich irrgendwie an alte Warrock Zeiten xD

    Jaja, die guten alten Cheater nicht wahr? :P