GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: herq le 22 Mai 2010, 16:59:22

Titre: C'est juste un conseil.
Posté par: herq le 22 Mai 2010, 16:59:22
Si vous avez un serveur, pensez a ne jamais mettre vos .pwn sur votre machine. ( Sa évitera les vol des hébergeur, ou en cas de hack ).

Et pensez a mettre un deAMX en cas de hackage de votre machine. Qui est dispo ici : http://forum.sa-mp.com/index.php?topic=84683.0 (http://forum.sa-mp.com/index.php?topic=84683.0) ( Source sa-mp.com  )
Titre: Re : C'est juste un conseil.
Posté par: Bayshore le 23 Mai 2010, 16:01:27
Pour l'anti DeAMX je trouve ça facilement contournable, la première idée plus vicieuse qui me vient dans la tête serait de voir si l'IP du serveur est bien celle où le script est censé être, si ce n'est pas le cas on fait crasher le serveur, par exemple en essayant d'afficher une chaîne vide.
Titre: Re : Re : C'est juste un conseil.
Posté par: S!m le 23 Mai 2010, 17:09:28
Pour l'anti DeAMX je trouve ça facilement contournable, la première idée plus vicieuse qui me vient dans la tête serait de voir si l'IP du serveur est bien celle où le script est censé être, si ce n'est pas le cas on fait crasher le serveur, par exemple en essayant d'afficher une chaîne vide.
ou encore comme le suggérait Y_LESS, tu met une boucle infinie dans le cas où ce n'est pas le bon serveur. En plus ca use plein de CPU^^
Titre: Re : C'est juste un conseil.
Posté par: Bayshore le 25 Mai 2010, 05:40:13
Oui, mais la méthode d'Y_Less à moins d'être correctement obfusqué est contournable en un Ctrl + F.
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 08:14:30
si on a le PWN que l'on doit jamais mettre sur le serveur
Titre: Re : C'est juste un conseil.
Posté par: Bayshore le 25 Mai 2010, 17:41:38
Non, un logiciel du nom de DeAMX peut décompiler les scripts, sa méthode n'a pas grand chose de redoutable.
Titre: Re : C'est juste un conseil.
Posté par: Bayshore le 25 Mai 2010, 17:47:11
Ah oui j'avais oublié ça, mais ça change pas grand chose au problème finalement, ce sera certainement fixé à la prochaine version.
Titre: Re : C'est juste un conseil.
Posté par: herq le 25 Mai 2010, 17:57:27
Moi je pense que ce genre de logiciel ne devrait pas être donné comme sa .. x)
Titre: Re : Re : C'est juste un conseil.
Posté par: BuBuNo le 25 Mai 2010, 18:59:22
Moi je pense que ce genre de logiciel ne devrait pas être donné comme sa .. x)

Bah j'ai bien été content de l'avoir sous la main quand j'ai suprimer le .pwn de mon XRaceV3 qui d'ailleur j'espert vas bientot sortir :D ::)
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 20:13:09
sinon le mieux scripter votre GM est une fois fini faite un nouveau .pwn qui contiendras ceci

#include <a_samp>
#include "../NOMDUGM.pwn"
En cas de vole est de decompilation il y auras que c'est deux lignes :)
Titre: Re : C'est juste un conseil.
Posté par: BuBuNo le 25 Mai 2010, 20:16:25
sa sert a rien car si on te vole un fichier en general tu prend tout ce qui a et pas juste un ^^
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 20:32:48
ue mais si on est pas assez c** on met que le AMX qui contient les deux ligne pas la peine de mettre de l'autre
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 21:29:01
non car enfaite l'or de la compilation il auras pris en compte le GM inclue mais a la decompilation tu le verras pas mise a part les #include :)


en gros

gm coder nom GMCODE.pwn il me genere un GMCODE.amx

desormer je fait un nouveau pwn INC.pwn j'y insert ceci

#include <a_samp>
#include "../GMCODE.pwn"
puis je presse f5 il me genre donc le INC.amx qui est de la meme taille du GMCODE.amx je up le INC.amx UNIQUEMENT sur le serveur

est la je me rend compte qu'il reagit comme si c'etait le GMCODE.amx

Maintenant en cas de vole de cette AMX le gars il veut le decompiler il auras uniquement

#include <a_samp>
#include "../GMCODE.pwn"
est pas le GM je pense que j'ai du etre assez claire
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 22:30:58
non sinon il decompilerais aussi les include a_samp est autre utiliser il n'est pas capable de retrenscrire une INC :)

desoler pour les fautes :s
Titre: Re : C'est juste un conseil.
Posté par: Syg le 25 Mai 2010, 23:13:57
DeAmx ne décompile pas les includes de SAMP pour la bonne et simple raison qu'ils ne contiennent pas de code.
Si on met tout le code dans un include, DeAmx le décompilera de la même façon que si il était dans le gamemode.
Ta méthode ne fonctionne donc pas cristab.
Il est très facile de s'en convaincre, il suffit de créer un gamemode qui en inclut un autre :
Voici test.pwn
#include <a_samp>

main ()
{
new Float:Drunk3;
Drunk3 = 61513/6060;
printf ("Drunk3 = %.2f", Drunk3);
Drunk3 = 61513/6060.0;
printf ("Drunk3 = %.2f", Drunk3);
}

public OnGameModeInit ()
{
return 1;
}

Voici toto.pwn (1 seule ligne puisque tous les includes sont déjà dans test.pwn) :
#include "test.pwn"
et voici le résultat de DeAmx sur toto.amx :
#include <a_samp>
#include <core>
#include <float>


function8(arg0, Float:arg1)
{
return arg0 / arg1;
}

main()
{
new var0 = 0;
var0 = 1092616192;
printf("Drunk3 = %.2f", var0);
var0 = function8(61513, 6060.0);
printf("Drunk3 = %.2f", var0);
return 0;
}

public OnGameModeInit()
{
return 1;
}
On retrouve presque le fichier test.pwn à part quelques calculs qui ont certainement été faits au moment de la compilation (var0=1092616192).
La fonction function8 est la fonction qui permet la division d'un entier par un Float mais je ne vois pas pourquoi elle est là. Certainement un autre bug de DeAmx.

La seule façon de se prémunir d'une décompilation par DeAmx est d'utiliser la faille de ce décompilateur (à savoir, mettre un tableau multidimensionnel quelque part dans le mode).
Personnellement, sur Lalu's Stunt, j'utilise ce bout de code dans la fonction main :
/* Ces deux lignes évitent l'utilisation de DeAmx (elles font planter le décompilateur) */
new a[][9] = {"G", "G", "F"};
#pragma unused a

NB : Attention, certains tableaux multidimensionnels ne font pas planter le décompilateur, je vous conseille de faire l'essai si vous voulez mettre votre propre tableau. D'après ce que j'ai pu voir, il faut que le tableau fasse plus qu'une certaine taille pour que ça marche mais je n'ai pas de valeur précise à donner.

NB2 : Le #pragma qui suit sert juste à éviter le warning du compilateur ("a is assigned to a value ...")

NB3 : GGF veut dire  "Go Get F..." = "va te faire f...."


Mais attention, le jour où un petit malin parviendra à corriger le bug du script Lua qui décompile le .amx, cette façon de faire de vaudra plus rien.

Par contre, je vous conseille vivement de prendre un vrai gamemode (de plusieurs milliers de lignes), de le compiler, de décompiler le fichier amx et de jeter un oeil dans le code produit par DeAmx. Je souhaite beaucoup de patience à celui qui réussi à faire quelque chose de ce résultat de décompilation, surtout si il n'a aucune idée de ce que contient le gamemode d'origine.
Tout ça pour dire que si quelqu'un vous pique votre .amx, il faut vraiment qu'il vous en veuille beaucoup pour perdre autant de temps à vouloir remettre d'aplomb un code décompilé.
Mais on est jamais trop prudent.

++
Syg

Titre: Re : Re : C'est juste un conseil.
Posté par: S!m le 25 Mai 2010, 23:20:52
non sinon il decompilerais aussi les include a_samp est autre utiliser il n'est pas capable de retrenscrire une INC :)

desoler pour les fautes :s

je n'ai jamais testé, mais s'il le faisait ce ne serait que de placer quelques native en haut du script. bref, ce ne serait pas très désagréable (donc possiblement présent).

à savoir qu'au moment de la compilation les includes sont inclus au script (eh oui lol), donc le code qu'ils contiennent est présent dans le .amx. Je pencherais donc que l'include sera présent dans le fichier décompilé.
NB. il ne faut pas trop se méfier de deamx, le script décompilé est très rarement compréhensible, les defines, les noms de variables, de fonctions non public

par contre, c'est sur que si tu ne fourni que le .pwn ça évite de prendre ton gm tel quel. Mais ça n'empêche pas de récupérer des bouts de script.

en gros:
 - il ne faut pas virer fou à cause de DeAmx, si vous faites attention les risques sont pratiquement nuls (en plus que le script devient très très laid)
 - la méthode de l'include est probablement inefficace
 - pour bloquer le DeAmx la fonction AntiDeAmx est la seule efficace
 - pour empêcher d'utiliser le .amx sur un autre serveur, la méthode du test d'IP est plutôt efficace.

EDIT: Syg plus rapide, et bravo très belles explications
EDIT2:
Syg,
je croyais que les constantes étaient calculées au moment de la compilation,
donc ton 61513/6060.0 aurait été transformé à 10,150660066006600....
mais d'après le résultat du DeAmx, ce genre d'expression est calculé à chaque exécution du code...j'imagine que certains cas sont calculés et d'autres non mais lesquels? je vais essayer de faire quelques tests...

++Sim++
Titre: Re : C'est juste un conseil.
Posté par: cristab le 25 Mai 2010, 23:26:14
j'avoue que je n'avais pas penser a la methode de Syg mais j'ai vais aucun test avec le Damx je regarderais sa un de c'est jour :P

Sinon quand je voit on m'as voler mon script de 52 000 ligne c'est que forcement il a etait mis sur le serveur grosse erreur a jamais faire

De plus il vaut mieux un passe de type Gh44dSg55gfd6X que Miaou j'en ai meme vu qui mettent leur Pseudo ... donc si vous voulais un generateur de mot de passe je pourrais vous en creer un mais attention il faudras le retenir car il ne seras pas recuperable
Titre: Re : C'est juste un conseil.
Posté par: CarCrasher le 25 Mai 2010, 23:48:20
La meilleur solution c'est :


Ne pas se faire d'ennemis :p

Titre: Re : Re : C'est juste un conseil.
Posté par: Syg le 26 Mai 2010, 10:34:55
Ne pas se faire d'ennemis :p
Malheureusement, la jalousie peut conduire certains à vouloir faire du mal à des gens qui ne leur ont rien fait.

EDIT2:
Syg,
je croyais que les constantes étaient calculées au moment de la compilation,
donc ton 61513/6060.0 aurait été transformé à 10,150660066006600....
mais d'après le résultat du DeAmx, ce genre d'expression est calculé à chaque exécution du code...j'imagine que certains cas sont calculés et d'autres non mais lesquels? je vais essayer de faire quelques tests...

++Sim++
Oui, c'est très bizarre, il remplace même ce calcul par un appel à une fonction (qui ne fait que le calcul d'ailleurs, d'où l'inutilité de la chose).
D'ailleurs, on remarquera que 61513/6060 n'est certainement pas égal à 1092616192 mais ce nombre est la représentation en Float de 61513/6060 (=10,1506600...).

++
Syg
Titre: Re : C'est juste un conseil.
Posté par: minimicro le 26 Mai 2010, 10:41:38
Je ne sais pas pourquoi, pour mon GM, j'ai essayé de le décompiler sur 2 machines, et DeAmx crash au bout d'un moment ... tant mieux  :D
Titre: Re : C'est juste un conseil.
Posté par: Ssk le 26 Mai 2010, 12:22:01
AntiDeamx mal certain Tableau ...


Voila comment il décompile

new CName[128];
new glob372D8;
Titre: Re : Re : C'est juste un conseil.
Posté par: Bayshore le 27 Mai 2010, 21:14:47
Par contre, je vous conseille vivement de prendre un vrai gamemode (de plusieurs milliers de lignes), de le compiler, de décompiler le fichier amx et de jeter un oeil dans le code produit par DeAmx. Je souhaite beaucoup de patience à celui qui réussi à faire quelque chose de ce résultat de décompilation, surtout si il n'a aucune idée de ce que contient le gamemode d'origine.
Tout ça pour dire que si quelqu'un vous pique votre .amx, il faut vraiment qu'il vous en veuille beaucoup pour perdre autant de temps à vouloir remettre d'aplomb un code décompilé.
Mais on est jamais trop prudent.

Ça doit être utile pour savoir comment un script fait telle chose lorsqu'il s'agit d'une boîte noire.