[RELEASE] Anti PS3Lib Dumper

iMCSx

Reverse Engineer
Ancien staff
Inscription
26 Février 2011
Messages
1 077
Réactions
2 258
Points
13 894
RGCoins
35
Hey,

Je me suis rendu compte que des personnes (Anglophones) avait fait un "PS3Lib Dumper" qui permet de récupérer les offsets des applications utilisant mon PS3Lib par une dll modifié. Actuellement il est possible d'empêcher ça en injectant le code source de la dll disponible sur GitHub au programme en question en tant que classe, mais il faut qu'a chaque mise à jour vous adaptez mes sources c'est pas le plus pratique pour certains, et surtout beaucoup ne préfère pas toucher la dll.

Donc je publie cette fonction qui détecte si la dll chargé est bien la bonne, à mettre dans votre application ou vous voulez:

Code:
private bool HasCorrectPS3Lib()
{
    bool result = false;

    string dllname = "ps3lib";
    string dllhash = "F0E04EFE7B2AA47711535915E2B1A1AB"; // PS3Lib v4.4

    System.Reflection.AssemblyName libRef = (from assembly in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
            where assembly.Name.ToLower().Equals(dllname.ToLower())
            select assembly).FirstOrDefault();

    if (libRef != null)
    {
        string lib = System.Reflection.Assembly.ReflectionOnlyLoad(libRef.FullName).Location;

        if (lib != String.Empty)
        {
            if (File.Exists(lib))
            {
                byte[] data = File.ReadAllBytes(lib);

                string hash = BitConverter.ToString(
                    System.Security.Cryptography.MD5CryptoServiceProvider.Create().ComputeHash(data))
                    .Replace("-","")
                    .ToUpper();

                if (hash.Equals(dllhash.ToUpper()))
                    result = true;
            }
        }
    }
    return result;
}

Le MD5 utilisé dans la fonction est pour la version officielle PS3Lib v4.4, si vous utilisez votre propre PS3Lib modifié vous devrez mettre le hash de votre dll (md5.fr).

Il faudras juste changer le hash lors de la PS3Lib v4.5.

Cette méthode peut aussi fonctionner sur d'autre dll en changeant le nom de la cible.

La fonction s'utilise comme ceci:
Code:
if (!HasCorrectPS3Lib())
{
       // Vous pouvez mettre/faire ce que vous voulez ici, la fonction à détecter une fausse dll (différente de la votre)
       Environment.Exit(0);
}

Le check est à mettre ou vous voulez dans votre application.
N'oubliez pas d'obfusquer votre application, car sans protection du source ce check peut être viré en quelques secondes.

Libre à vous d'adapter cette fonction, ou de l'amélioré j'ai juste fait un simple test, je n'ai pas vérifier si il y a des failles étant donné que je développe presque pas de programmes RTE en C# (ou bien c'est privé) donc j'ai fait cette fonction rapidement pour vous.

Enjoy ;-)
 
Dernière édition:
Bonne initiative :D
 
Merci de l'info je go la tester sur un de mes tool RTE ;)
 
Faudrait me dire en quoi cela dérange de se faire dump les offset xD (90% des tool) on récupéré sur les tool cracked, ou open source donc serre a rien xD
 
Faudrait me dire en quoi cela dérange de se faire dump les offset xD (90% des tool) on récupéré sur les tool *****ed, ou open source donc serre a rien xD
Et bien ça sert au 10 autres pourcent :crazy:.


Hey,

Je me suis rendu compte que des personnes (Anglophones) avait fait un "PS3Lib Dumper" qui permet de récupérer les offsets des applications utilisant mon PS3Lib par une dll modifié. Actuellement il est possible d'empêcher ça en injectant le code source de la dll disponible sur GitHub au programme en question en tant que classe, mais il faut qu'a chaque mise à jour vous adaptez mes sources c'est pas le plus pratique pour certains, et surtout beaucoup ne préfère pas toucher la dll.

Donc je publie cette fonction qui détecte si la dll chargé est bien la bonne, à mettre dans votre application ou vous voulez:

Code:
private bool HasCorrectPS3Lib()
{
    bool result = false;

    string dllname = "ps3lib";
    string dllhash = "F0E04EFE7B2AA47711535915E2B1A1AB"; // PS3Lib v4.4

    AssemblyName libRef = (from assembly in Assembly.GetExecutingAssembly().GetReferencedAssemblies()
            where assembly.Name.ToLower().Equals(dllname.ToLower())
            select assembly).FirstOrDefault();

    if (libRef != null)
    {
        string lib = Assembly.ReflectionOnlyLoad(libRef.FullName).Location;

        if (lib != String.Empty)
        {
            if (File.Exists(lib))
            {
                byte[] data = File.ReadAllBytes(lib);

                string hash = BitConverter.ToString(
                    System.Security.Cryptography.MD5CryptoServiceProvider.Create().ComputeHash(data))
                    .Replace("-","")
                    .ToUpper();

                if (hash.Equals(dllhash.ToUpper()))
                    result = true;
            }
        }
    }
    return result;
}

Le MD5 utilisé dans la fonction est pour la version officielle PS3Lib v4.4, si vous utilisez votre propre PS3Lib modifié vous devrez mettre le hash de votre dll (md5.fr).

Il faudras juste changer le hash lors de la PS3Lib v4.5.

Cette méthode peut aussi fonctionner sur d'autre dll en changeant le nom de la cible.

La fonction s'utilise comme ceci:
Code:
if (!HasCorrectPS3Lib())
{
       // Vous pouvez mettre/faire ce que vous voulez ici, la fonction à détecter une fausse dll (différente de la votre)
       Environment.Exit(0);
}

Le check est à mettre ou vous voulez dans votre application.
N'oubliez pas d'obfusquer votre application, car sans protection du source ce check peut être viré en quelques secondes.

Libre à vous d'adapter cette fonction, ou de l'amélioré j'ai juste fait un simple test, je n'ai pas vérifier si il y a des failles étant donné que je développe presque pas de programmes RTE en C# (ou bien c'est privé) donc j'ai fait cette fonction rapidement pour vous.

Enjoy ;-)
GG, j'avais déjà penser à un truc de ce style je suis étonner que se soit sortie que maintenant ^^.
 
Tu devrais mettre les constantes dllname ainsi que dllhash sur un serveur distant pour plusieurs raisons :
  1. Il est possible d'éditer une string via la mémoire, même obfu dans le programme, avec n'importe quel debugger
  2. Pour les MàJ tu n'auras pas à te soucier de cette classe, juste à mettre à jours les valeurs sur le serveur distant
Sinon tu utilises, Assembly.ReflectionOnlyLoad(libRef.FullName).Location; donc impossible de protéger convenablement la ps3lib, tout ce qui est MetaData ou tout ce qui touche au stackframe (certains cflow + les méthodes de virtualisation)
 
Ce code n'est utile que si l'application est bien obfusqué. Dans l'autre cas, suffit de modifier la méthode pour qu'elle retourne true dans tout les cas ou même de modifier le LDSTR du hash puis voilà :ok:
 
Hey,

Je me suis rendu compte que des personnes (Anglophones) avait fait un "PS3Lib Dumper" qui permet de récupérer les offsets des applications utilisant mon PS3Lib par une dll modifié. Actuellement il est possible d'empêcher ça en injectant le code source de la dll disponible sur GitHub au programme en question en tant que classe, mais il faut qu'a chaque mise à jour vous adaptez mes sources c'est pas le plus pratique pour certains, et surtout beaucoup ne préfère pas toucher la dll.

Donc je publie cette fonction qui détecte si la dll chargé est bien la bonne, à mettre dans votre application ou vous voulez:

Code:
private bool HasCorrectPS3Lib()
{
    bool result = false;

    string dllname = "ps3lib";
    string dllhash = "F0E04EFE7B2AA47711535915E2B1A1AB"; // PS3Lib v4.4

    System.Reflection.AssemblyName libRef = (from assembly in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
            where assembly.Name.ToLower().Equals(dllname.ToLower())
            select assembly).FirstOrDefault();

    if (libRef != null)
    {
        string lib = System.Reflection.Assembly.ReflectionOnlyLoad(libRef.FullName).Location;

        if (lib != String.Empty)
        {
            if (File.Exists(lib))
            {
                byte[] data = File.ReadAllBytes(lib);

                string hash = BitConverter.ToString(
                    System.Security.Cryptography.MD5CryptoServiceProvider.Create().ComputeHash(data))
                    .Replace("-","")
                    .ToUpper();

                if (hash.Equals(dllhash.ToUpper()))
                    result = true;
            }
        }
    }
    return result;
}

Le MD5 utilisé dans la fonction est pour la version officielle PS3Lib v4.4, si vous utilisez votre propre PS3Lib modifié vous devrez mettre le hash de votre dll (md5.fr).

Il faudras juste changer le hash lors de la PS3Lib v4.5.

Cette méthode peut aussi fonctionner sur d'autre dll en changeant le nom de la cible.

La fonction s'utilise comme ceci:
Code:
if (!HasCorrectPS3Lib())
{
       // Vous pouvez mettre/faire ce que vous voulez ici, la fonction à détecter une fausse dll (différente de la votre)
       Environment.Exit(0);
}

Le check est à mettre ou vous voulez dans votre application.
N'oubliez pas d'obfusquer votre application, car sans protection du source ce check peut être viré en quelques secondes.

Libre à vous d'adapter cette fonction, ou de l'amélioré j'ai juste fait un simple test, je n'ai pas vérifier si il y a des failles étant donné que je développe presque pas de programmes RTE en C# (ou bien c'est privé) donc j'ai fait cette fonction rapidement pour vous.

Enjoy ;-)

Le pb c'est que CCAPI.dll utilise des librairie externe pour cryptée le tous, c'est facilement identifiable
 
Et bien ça sert au 10 autres pourcent :crazy:.



GG, j'avais déjà penser à un truc de ce style je suis étonner que se soit sortie que maintenant ^^.
L'antiDump exister déjà depuis quelque temps , StackOverFlow avait prévenus la communauté sur Ngu , il avait poster le Codage pour résoudre cela Puis a fait un PS3lib Checker :crazy: ,

Connecte toi sur Skype un de ces jours :bave:
 
L'antiDump exister déjà depuis quelque temps , StackOverFlow avait prévenus la communauté sur Ngu , il avait poster le Codage pour résoudre cela Puis a fait un PS3lib Checker :crazy: ,

Connecte toi sur Skype un de ces jours :bave:
D'acc, je te voit plus sur Skype le soir :crazy:.
 
Tu devrais mettre les constantes dllname ainsi que dllhash sur un serveur distant pour plusieurs raisons :
  1. Il est possible d'éditer une string via la mémoire, même obfu dans le programme, avec n'importe quel debugger
  2. Pour les MàJ tu n'auras pas à te soucier de cette classe, juste à mettre à jours les valeurs sur le serveur distant
Sinon tu utilises, Assembly.ReflectionOnlyLoad(libRef.FullName).Location; donc impossible de protéger convenablement la ps3lib, tout ce qui est MetaData ou tout ce qui touche au stackframe (certains cflow + les méthodes de virtualisation)

Libre à celui qui utilise l'application de faire un check serveur ou de crypter/améliorer la fonction je laissé ça compréhensible pour ceux qui veulent l'utiliser, perso ce code ne sera pas utile pour ma part.
Et personnellement, mieux vaut des informations cryptées côté application plutôt que les récupérées du web, c'est facilement interceptable.
Ce code n'est utile que si l'application est bien obfusqué. Dans l'autre cas, suffit de modifier la méthode pour qu'elle retourne true dans tout les cas ou même de modifier le LDSTR du hash puis voilà :ok:
Je l'ai déjà dit sur le topic: "N'oubliez pas d'obfusquer votre application, car sans protection du source ce check peut être viré en quelques secondes."
 
Hey,

Je me suis rendu compte que des personnes (Anglophones) avait fait un "PS3Lib Dumper" qui permet de récupérer les offsets des applications utilisant mon PS3Lib par une dll modifié. Actuellement il est possible d'empêcher ça en injectant le code source de la dll disponible sur GitHub au programme en question en tant que classe, mais il faut qu'a chaque mise à jour vous adaptez mes sources c'est pas le plus pratique pour certains, et surtout beaucoup ne préfère pas toucher la dll.

Donc je publie cette fonction qui détecte si la dll chargé est bien la bonne, à mettre dans votre application ou vous voulez:

Code:
private bool HasCorrectPS3Lib()
{
    bool result = false;

    string dllname = "ps3lib";
    string dllhash = "F0E04EFE7B2AA47711535915E2B1A1AB"; // PS3Lib v4.4

    System.Reflection.AssemblyName libRef = (from assembly in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
            where assembly.Name.ToLower().Equals(dllname.ToLower())
            select assembly).FirstOrDefault();

    if (libRef != null)
    {
        string lib = System.Reflection.Assembly.ReflectionOnlyLoad(libRef.FullName).Location;

        if (lib != String.Empty)
        {
            if (File.Exists(lib))
            {
                byte[] data = File.ReadAllBytes(lib);

                string hash = BitConverter.ToString(
                    System.Security.Cryptography.MD5CryptoServiceProvider.Create().ComputeHash(data))
                    .Replace("-","")
                    .ToUpper();

                if (hash.Equals(dllhash.ToUpper()))
                    result = true;
            }
        }
    }
    return result;
}

Le MD5 utilisé dans la fonction est pour la version officielle PS3Lib v4.4, si vous utilisez votre propre PS3Lib modifié vous devrez mettre le hash de votre dll (md5.fr).

Il faudras juste changer le hash lors de la PS3Lib v4.5.

Cette méthode peut aussi fonctionner sur d'autre dll en changeant le nom de la cible.

La fonction s'utilise comme ceci:
Code:
if (!HasCorrectPS3Lib())
{
       // Vous pouvez mettre/faire ce que vous voulez ici, la fonction à détecter une fausse dll (différente de la votre)
       Environment.Exit(0);
}

Le check est à mettre ou vous voulez dans votre application.
N'oubliez pas d'obfusquer votre application, car sans protection du source ce check peut être viré en quelques secondes.

Libre à vous d'adapter cette fonction, ou de l'amélioré j'ai juste fait un simple test, je n'ai pas vérifier si il y a des failles étant donné que je développe presque pas de programmes RTE en C# (ou bien c'est privé) donc j'ai fait cette fonction rapidement pour vous.

Enjoy ;-)
Et si on intégre directement la dll dans le .exe il n'y a pas besoin de faire ca ? :mmh::idk:
 
on peut dump ton .exe donc dump ta dll pour ensuite la remplacer le mieux est de prendre les class.cs de la lib et de la mettre dans ta form :ok:
J'ai essayer de faire comme tu dit mais l'obfu nike les class et du coup tu peut plus connecter à controle console api.
 
on peut dump ton .exe donc dump ta dll pour ensuite la remplacer le mieux est de prendre les class.cs de la lib et de la mettre dans ta form :ok:


Tout dépend de comment tu intègre la .dll dans l'exe , si tu fait un Boxed tu pourra la récupérer en dumpant l'application ,
mais si tu lui colle en Merging avec ilMerge Par exemple tu ne récupérera pas la .dll Puisque elle sera intégrer directement au Projet
 
Tout dépend de comment tu intègre la .dll dans l'exe , si tu fait un Boxed tu pourra la récupérer en dumpant l'application ,
mais si tu lui colle en Merging avec ilMerge Par exemple tu ne récupérera pas la .dll Puisque elle sera intégrer directement au Projet
oui c'est vrai mais tout le monde ne sait pas ça ^^
 
Retour
Haut