Tutoriel - Touts savoir sur la création de tools pour RTE (Real Time Editing)

xANTRHACKx

Membre
Inscription
28 Septembre 2012
Messages
105
Réactions
5
Points
608
Merci pour le calcul client avec sa jm et GOD mod aux autre joueurs
[tabs]

[tab=Les bases]
1. Langages de programmation

Il y plusieurs langage de programmation qui permettent de faire des "tools RTE" .
Dans ce tutoriel, on va en voir principalement deux, le C# (C Sharp) et le VB.NET .

Logiciel utilisé le plus souvent pour programmé en C# (C Sharp) :
-
Scan Virus :


Logiciel utilisé le plus souvent pour programmé en VB.NET :
-
Scan Virus :


2. Les offsets

2.1 . Trouvé la différence entre chaque client

Pour trouvé la différence entre chaque client, on va devoir faire un calcule... et on va l'effectué avec la calculatrice en mode programmeur ;)

Tu3gtkb.png


Puis vous devez réglé la calculatrice comme ceci :
tDUVe5m.png


Pour trouvé la différence entre deux client il suffit de faire des maths, et plus précisément une soustraction.

Exemple :
FCA41E = Offset GodMod du client 0
FCA69E = Offset GodMod du client 1

FCA69E - FCA41E = 280

FCA69E + 280 = Offset GodMod du client 2
FCA69E + 280 = FCA91E

2.2 . Les offsets quand on programme son " tools "

Quand vous programmerez vôtre tools, les offsets devront toujours être comme sa :

En C# (C Sharp) :
0x + TON OFFSET

Exemple : 0xFCA41E

En VB.NET :
&H + TON OFFSET

Exemple :
&HFCA41E​
[/tab]
[tab=Nôtre premier tools en VB.NET]
1. Création du projet et mise en forme + connexion
Requis :
- ps3tmapi_net : (scan virus : // j'ai rien modifier au DLL !)
- PS3Lib : (scan virus : )

On commence tout de suite par crée un nouveau projet :

51q4.png


Ensuite, une fois le projet crée, on va tout de suite importé les DLL requis au bon fonctionnement de notre futur tools :


1) Clique droit sur le nom de vôtre projet dans la liste de droite
2) Aller cliqué sur
" Ajouter une référence "
3) Chargé les 2 DLL téléchargé plus haut
m369.png



Ensuite on va déclaré les DLL dans le futur tools :

sSdoyaV.png

CODE :
Code:
Imports PS3Lib
Imports PS3TMAPI


Maintenant faut ajouté des lignes indispensable en-dessous de " Public Class Form1 " :
vmql.png

CODE :
Code:
Private processIDs As UInteger()
    Private ProcessID As UInteger


Passons au connexion, placé deux bouton sur vôtre form (peut importe comment) :
wrwf.png



Cliqué 2 fois sur vôtre bouton "Connect" et inséré lui ce code :
PRu4adc.png

CODE :
Code:
PS3TMAPI.InitTargetComms()
        PS3TMAPI.Connect(0, vbNullString) 'Connecte le tools à PS3

Résultat :
77aq.png



Maintenant au tour du bouton " Attach Process " :
cw5c.png

CODE :
Code:
Try
            PS3TMAPI.GetProcessList(0, processIDs) 'Obtient le 1er processus
            Dim uProcess As ULong = processIDs(0)
            ProcessID = Convert.ToUInt32(uProcess)
            PS3TMAPI.ProcessAttach(0, PS3TMAPI.UnitType.PPU, ProcessID)
            PS3TMAPI.ProcessContinue(0, ProcessID)
            Dim Info As String = "The Process 0x" & ProcessID.ToString("X8") & " Has Been Attached !"
            MessageBox.Show(Info, "Process Ready!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
        Catch Ex As Exception
            MessageBox.Show(Ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
        End Try

Pour rendre plus propre vôtre code, je vous conseil d'ajouté ceci au dessus du code de vôtre 1er bouton :
20HKsrR.png

CODE :
Code:
#Region "Connexion PS3"

Et ceci après vôtre 2ème bouton :
cv71.png



Après on peut refermé la catégorie "Connexion PS3" et sa donne sa :
pF9WUw8.png


Les connexions, c'est fait ! Déjà une bonne chose de faite :)

2. Nôtre première fonction (pour le tutoriel, pour MW3)

On commence par placé nos "objets" , pour ma part je vais mettre une " CheckBox " :
68g.png


Maintenant on va voir pour crée une fonction qui calcule les offsets pour " la vision " , on va placé cette fonction après la catégorie "Connexion PS3" :
rNDThbh.png

CODE :
Code:
Public VisionClient0 As Integer = &H110A293 'Cette offset correspond à la vision du client0

    Public Function Vision(ByVal clientNum As Integer) As Integer 'Cette fonction retournera le résultat d'un calcule (clienNUm correspond à un chiffre qui se trouvera dans le calcule)
        Return VisionClient0 + (clientNum * &H3980) 'Ce calcule se résume à :  &H110A293 + (clienNum X &H3980)  Ex : &H110A293 + (1 * &H3980)  correspond a    &H110A293 + &H3980 = &H110DC13
    End Function


Ensuite on va dans le code de nôtre CheckBox on y ajouté ceci :
byx2.png

CODE :
Code:
If REDBOXc0.Checked = True Then 'Si la CheckBox est coché ALORS
            Dim redboxclient0 As Byte() = New Byte() {&H55} 'On remplace les bytes actuelle par 55 à l'offset calculé par nôtre fonction (pour la vision)
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Vision(0), redboxclient0) 'La on a fait appel à la fonction que l'on a crée juste avant. 0 = client0

            'Exemple pour le client 1:
            '
            ' Dim redboxclient1 As Byte() = New Byte() {&H55}
            ' PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Vision(1), redboxclient1)
        Else 'SINON
            Dim redboxclient0 As Byte() = New Byte() {&H0} ' 0 = désactive le RedBox
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Vision(0), redboxclient0)
        End If

Voilà, nôtre première fonction est codé !
3. Récupéré le nom des joueurs en partie

On ajoute tout de suite un bouton et des 17 textBox sur nôtre form (le 1er en haut c'est le client 0 et le dernier c'est le client 17) :
vx23.png


Maintenant on va crée une fonction qui permet de trouvé les offsets pour les noms des joueurs en partie (je l'ai mise en dessous de l'autre fonction) :
ubXtxaq.png

CODE :
Code:
Public NameClient0 As Integer = &H110D694
    Public Function GetClientName(ByVal clientNum As Integer) As Integer
        Return NameClient0 + (clientNum * &H3980)
    End Function

Vous devrez déclaré une importation tout en autre de form :
wmut.png


Maintenant passons au code du bouton "Get Client" :
HQmPfXf.png

CODE :
Code:
' CECI c'est pour le nom du client 0
        Dim GetClientNameC0 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(0), GetClientNameC0)
        C0.Text = Encoding.ASCII.GetString(GetClientNameC0) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 1er textBox tout en haut

        ' CECI c'est pour le nom du client 1
        Dim GetClientNameC1 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(1), GetClientNameC1)
        C1.Text = Encoding.ASCII.GetString(GetClientNameC1) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 2eme textBox en partant du haut

        ' CECI c'est pour le nom du client 2
        Dim GetClientNameC2 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(2), GetClientNameC2)
        C2.Text = Encoding.ASCII.GetString(GetClientNameC2) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 3eme textBox en partant du haut

        ' CECI c'est pour le nom du client 3
        Dim GetClientNameC3 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(3), GetClientNameC3)
        C3.Text = Encoding.ASCII.GetString(GetClientNameC3) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 4eme textBox en partant du haut

        ' CECI c'est pour le nom du client 4
        Dim GetClientNameC4 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(4), GetClientNameC4)
        C4.Text = Encoding.ASCII.GetString(GetClientNameC4) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 5eme textBox en partant du haut

        ' CECI c'est pour le nom du client 5
        Dim GetClientNameC5 As Byte() = New Byte(&H25) {} 'Recupere 25 bytes en partant de l'offset (calculé par nôtre fonction)
        PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, GetClientName(5), GetClientNameC5)
        C5.Text = Encoding.ASCII.GetString(GetClientNameC5) 'On converti les 25 bytes récupéré en Texte et on l'affiche dans la 4er textBox en partant du haut

Voilà, à vous de continuez jusqu'au client 17 ;)

4. Les stats


On va voir pour crée un NumericUpDown qui changera le prestige.

On commence tout de suite par placé nôtre NumericUpDown etc :
yzc6.png


Passons au code du NumericUpDown :
Code:
If PRESTIGES.Value = 0 Then
            Dim PRESTIGE0 As Byte() = New Byte() {&H0}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE0)
        End If

        If PRESTIGES.Value = 1 Then
            Dim PRESTIGE1 As Byte() = New Byte() {&H1}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE1)
        End If

        If PRESTIGES.Value = 2 Then
            Dim PRESTIGE2 As Byte() = New Byte() {&H2}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE2)
        End If

        If PRESTIGES.Value = 3 Then
            Dim PRESTIGE3 As Byte() = New Byte() {&H3}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE3)
        End If

        If PRESTIGES.Value = 4 Then
            Dim PRESTIGE4 As Byte() = New Byte() {&H4}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE4)
        End If

        If PRESTIGES.Value = 5 Then
            Dim PRESTIGE5 As Byte() = New Byte() {&H5}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE5)
        End If

        If PRESTIGES.Value = 6 Then
            Dim PRESTIGE6 As Byte() = New Byte() {&H6}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE6)
        End If

        If PRESTIGES.Value = 7 Then
            Dim PRESTIGE7 As Byte() = New Byte() {&H7}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE7)
        End If

        If PRESTIGES.Value = 8 Then
            Dim PRESTIGE8 As Byte() = New Byte() {&H8}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE8)
        End If

        If PRESTIGES.Value = 9 Then
            Dim PRESTIGE9 As Byte() = New Byte() {&H9}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE9)
        End If

        If PRESTIGES.Value = 10 Then
            Dim PRESTIGE10 As Byte() = New Byte() {&HA}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE10)
        End If

        If PRESTIGES.Value = 11 Then
            Dim PRESTIGE11 As Byte() = New Byte() {&HB}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE11)
        End If

        If PRESTIGES.Value = 12 Then
            Dim PRESTIGE12 As Byte() = New Byte() {&HC}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE12)
        End If

        If PRESTIGES.Value = 13 Then
            Dim PRESTIGE13 As Byte() = New Byte() {&HD}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE13)
        End If

        If PRESTIGES.Value = 14 Then
            Dim PRESTIGE14 As Byte() = New Byte() {&HE}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE14)
        End If

        If PRESTIGES.Value = 15 Then
            Dim PRESTIGE15 As Byte() = New Byte() {&HF}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE15)
        End If

        If PRESTIGES.Value = 16 Then
            Dim PRESTIGE16 As Byte() = New Byte() {&H10}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE16)
        End If

        If PRESTIGES.Value = 17 Then
            Dim PRESTIGE17 As Byte() = New Byte() {&H11}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE17)
        End If

        If PRESTIGES.Value = 18 Then
            Dim PRESTIGE18 As Byte() = New Byte() {&H12}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE18)
        End If

        If PRESTIGES.Value = 19 Then
            Dim PRESTIGE19 As Byte() = New Byte() {&H13}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE19)
        End If

        If PRESTIGES.Value = 20 Then
            Dim PRESTIGE20 As Byte() = New Byte() {&H14}
            PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, &H1C1947C, PRESTIGE20)
        End If

Voilà voilà, sa sera tout je pense .
(Pour le C#, j'essayerai beaucoup plus tard car la j'ai pas assez de temps)
[/tab]
[tab=Credit]
thibault62118 (pour m'avoir apprit pleins de chose)

[/tab]
 

SlowModzHD

Premium
Inscription
5 Mars 2013
Messages
1 538
Réactions
619
Points
12 443
Bonsoir ! Super Tuto ! Mais est-ce que vous auriez l'Offset des Name Client sur Mw2 1.14? (pour faire un Get Name dans mon tool j'en ai vraiment besoin :( )
 

velkA

Graphiste possédant un grand coeur.
Premium
Inscription
25 Novembre 2012
Messages
3 114
Réactions
898
Points
12 503
Tuto de malade, je vais tester de suite ! :D Et le C++ on peut aussi ?
 
Haut