Script VB.Net Ajouté !
Comme vous avez vu les titre du topic, ce topic va vous expliquez comment lié votre Application C++/C# a votre PS3.
Avec ceci , vous pouvez envoyé au joueurs en partie en jeu vos mods trés facilement , et commencé a developpé votre propre application.
J'ai travaillé 2 semaine avec ENZO-F , l'administrateur de NGU pour un projet NGU Elite & FMT Elite. Moi pour faire l'application et lui pour amélioré leur sécurité ELITE. Mais j'ai vu que quelques personne ont release leur pitoyable tool (Trahisons pour BuC & Moi) ce projet est donc mort , il est bon a jetter a la poubelle 1 semaine de codage sur une application.
D'abord je voudrais remercier :
- BuC-ShoTz pour son aide InitTargetComms() & la méthode Out ProcessID.
- FM|T Enstone pour avoir contribué au topic avec la partie C++.
Comment utilisé cette méthode ?:
- C'est avec l'API du Target Manager , Tout est dans un dll , le ps3tmapi_net.dll est dans un dossier C:\Program Files (x86)\SN Systems\PS3\bin , vous devrez trouvé ceci vous même je partage pas ce DLL ici.
La Partie C# :
Connectique :
Code:
PS3TMAPI.InitTargetComms();
PS3TMAPI.Connect(0, null);
Avec ces codes , le dll sera initialisé avec votre application , et être prêt a utilisé les fonctions SN System.
Obtenir et Attacher le Process :
Code:
PS3TMAPI.GetProcessList(0, out processIDs);
ulong uProcess = processIDs[0];
ProcessID = Convert.ToUInt32(uProcess);
PS3TMAPI.ProcessAttach(0, PS3TMAPI.UnitType.PPU, ProcessID);
PS3TMAPI.ProcessContinue(0, ProcessID);
Avec ces codes , votre application va trouvé et attacher le Process automatiquement.
Set Memory :
Code:
PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Address, bytes);
Cette fonction va écrire les octets dans la mémoire du jeu , Remplacez Address & Bytes par vos propres valeur. Exemple :
Code:
byte[] iMCSx = new byte[] { 0x69, 0x4D, 0x43, 0x53, 0x78, 0x00 };
PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, 0x01BBBC2C, iMCSx);
Get Memory :
Code:
byte[] iMCSx = new byte[0x20];
PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Address, ref iMCSx);
Cette fonction va obtenir tout les octets en partant de l'adresse indiqué. Dans ce cas , tout les octets stocké seront dans byte[] iMCSx. le 0x20 entre parenthèse et la longueur max que votre byte[] contiendras.
La Partie Visual Basic :
C'est Pareille que le C# sauf que le language change , il faut ajouté le dll en réference ect ect. Voici mes lignes convertie fonctionnelle :
Connection :
Code:
PS3TMAPI.InitTargetComms()
PS3TMAPI.Connect(0, vbNullString)
Obtenir et Attacher le Process :
Code:
Try
PS3TMAPI.GetProcessList(0, processIDs)
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
Et en en-tête de la form , déclarez les uint & ulong comme ceci :
Code:
Private processIDs As UInteger()
Private ProcessID As UInteger
Set Memory :
Code:
Dim Test As Byte() = New Byte() {&H5} // it's 0x05 in byte C#
PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Address (Example &H00FCA280, iMCSx)
Les offsets doivent être également convertie , exemple 0x3980 devient &H3980 :
Code:
Private Function MW3ClientState(clientNum As UInteger) As UInteger
Return (&H110A280 + (clientNum * &H3980))
End Function
Exemple d'utilisation des scripts du PS3Lib en VB :
Code:
PS3.SetMemory(Address, Byte)
La partie C++ :
Etape 1 :
Premièrement , si vous êtes un developper vous devez chargé le ps3tmapi_net.dll dans votre code comme ceci :
Code:
const WCHAR * dllName = L"ps3tmapi.dll";
HINSTANCE hlib = LoadLibrary(dllName);
Le dll doit être dans le même repertoire que votre exécutable.
Etape 2 :
Vous devriez utilisé quelque typedef pour simplifier les fonctions , comme ceci :
Code:
typedef int (__cdecl *InitTargetCommsFunction)(void);
typedef int (__cdecl *ConnectFunction)(int,LPWSTR);
typedef int (__cdecl *ProcessListFunction)(int, UINT32*, UINT32*);
typedef int (__cdecl *ProcessAttachFunction)(int, UINT32 ,UINT32);
typedef int (__cdecl *ProcessContinueFunction) (int, UINT32);
typedef int (__cdecl *ProcessInfoFunction)(int, UINT32 ,UINT32*,SNPS3PROCESSINFO*);
typedef int (__cdecl *ProcessSetMemoryFunction)(int, UINT32 ,UINT32 ,UINT64 , UINT64, int, BYTE*);
typedef int (__cdecl *ProcessGetMemoryFunction)(int, UINT32 ,UINT32 ,UINT64 , UINT64, int, BYTE*);
Vous avez besoin de toutes ces fonctions pour démarré toute edition de mémoire avec votre soft. Ne pas oublié de crée la fonction la structure pour le SNPS3PROCESSINFO*.
Etape 3:
Maintenant c'est important de localisé les fonctions dans le dll , Nous allons utilisé le fameux "GetProcAddress" :
Code:
InitTargetCommsFunction InitTargetComms = (InitTargetCommsFunction) GetProcAddress(hlib, "SNPS3InitTargetComms");
ConnectFunction Connect = (ConnectFunction) GetProcAddress(hlib, "SNPS3Connect");
DisconnectFunction Disconnect = (DisconnectFunction) GetProcAddress(hlib, "SNPS3Disconnect");
ProcessListFunction ProcessList = (ProcessListFunction) GetProcAddress(hlib, "SNPS3ProcessList");
ProcessAttachFunction ProcessAttach = (ProcessAttachFunction) GetProcAddress(hlib, "SNPS3ProcessAttach");
ProcessContinueFunction ProcessContinue = (ProcessContinueFunction) GetProcAddress(hlib,"SNPS3ProcessContinue");
ProcessInfoFunction ProcessInfo = (ProcessInfoFunction) GetProcAddress(hlib, "SNPS3ProcessInfo");
ProcessGetMemoryFunction GetMemory = (ProcessGetMemoryFunction) GetProcAddress(hlib, "SNPS3ProcessGetMemory");
ProcessSetMemoryFunction SetMemory = (ProcessSetMemoryFunction) GetProcAddress(hlib, "SNPS3ProcessSetMemory");
Etape 4 : Vous êtes maintenant prêt a utilisé les fonctions SN System dans votre soft.
Connectique :
Code:
//Connection////////////////////////////
int target=0xfffffffe; //target default
InitTargetComms();
Connect(target,NULL);
Attacher le Process :
Code:
//Attach/////////////////////////////////
ProcessList(target,&puCount,puProcessID);
ProcProcessAttach(target, 0,*puProcessID);
ProcProcessContinue(target, *puProcessID);
ProcProcessInfo(target,*puProcessID,&puBufferSize,pProcessInfo);
Get Memory & Set Memory :
Code:
//Get/SetMemory/////////////////////////
GetMemory(target,0,*puProcessID,(pProcessInfo->ThreadIDs)[0],uAddress,nCount,pBuffer);
SetMemory(target,0,*puProcessID,(pProcessInfo->ThreadIDs)[0],uAddress,nCount,pBuffer);
Conseils :
- Vous avez besoin d'appeler InitTargetComms() dans tout vos threads , même si votre ps3 est connecté.
- Vous pouvez crée d'autre GetMemory & SetMemory pour réduire le nombre d'argument.
- Toutes ces fonctions retourne un int , Ceci peux vous dire si c'est un succés ou non , un succés va être une valeur positive , un échec une négative.
Dernière choses pour les developpeur C# & VB.Net :
- J'ai codé une Bibliothèque de classe pour écrire les fonctions facilement avec moins d'argument dans votre application :
- Téléchargez mon DLL ici =>
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
- Ajoutez-le comme référence , et ajoutez dans votre form la liason : using PS3Lib;
- Comme ça vous pourrez l'utilisez dans votre application avec des fonctions refaite par moi même , exemple PS3.SetMemory(Address, Bytes);
Code Source :
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Copyright © iMCSProduction 2013.
// Thanks to BuC-ShoTz to have contributed to this.
// Visit
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
if you're English.// Visit
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
if you're French.// Follow me
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
-
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
namespace PS3Lib
{
public class PS3
{
public static uint ProcessID;
public static uint[] processIDs;
public static string snresult;
private static string usage;
public static string Info;
public static PS3TMAPI.ConnectStatus connectStatus;
public static string Status;
public static string MemStatus;
public static void ConnectDebug()
{
PS3TMAPI.InitTargetComms();
PS3TMAPI.Connect(0, null);
}
public static void GetStatus()
{
Status = Convert.ToString(PS3TMAPI.GetConnectStatus(0, out connectStatus, out usage));
}
public static void ProcessAttach()
{
PS3TMAPI.GetProcessList(0, out processIDs);
ulong uProcess = processIDs[0];
ProcessID = Convert.ToUInt32(uProcess);
PS3TMAPI.ProcessAttach(0, PS3TMAPI.UnitType.PPU, ProcessID);
PS3TMAPI.ProcessContinue(0, ProcessID);
Info = "The Process 0x" + ProcessID.ToString("X8") + " Has Been Attached !";
}
public static void SetMemory(uint Address, byte[] Bytes)
{
PS3TMAPI.ProcessSetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Address, Bytes);
}
public static void GetMemory(uint Address, byte[] Bytes)
{
PS3TMAPI.ProcessGetMemory(0, PS3TMAPI.UnitType.PPU, ProcessID, 0, Address, ref Bytes);
}
}
}
Liens de la release :
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Merci A BuC-ShoTz FM|T Enstone Et
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
