cob_258

ProtectIt 0.1 (antiDecompiler autoit) + source C#

21 posts in this topic

JE REND CE PROGRAMME PUBLIC APRES AVOIR DECOUVERT QU'IL ETAIT VENDU DANS UN AUTRE SITE PAR UN CERTAIN CRAW SOUS LE NOM DE "SECUREIT" ET BIENSUR SANS CITE LE VRAI PROGRAMMEUR

 

Après plusieurs versions de protecteur AutoIt (anti décompilateur) écrits en ASM (certain sont distribués sur des forums privés) , j’ai décidé de faire un essaie en C# vu que je suis nouveau sur ce langage, j’ai trouvé quelque défis comme la gestion du header d’un exécutable (vérifier que c’est pas un UPX, trouver/crypter l’EOF, fusionner l’EOF avec la dernière section etc.) comme j’ai trouvé des facilité offerte par le langage (l’XML, GUI plus facile à gérer).

 

Présentation du programme :

Ce programme peut crypter* et/ou fusionner l’EOF avec la dernière section, ajouter un faux script pour tromper les kikooCodeStealers (j’utilise toujours cet adjectif ^^), et bien sur des patchs (puisque on crypte l’EOF, il faut bien un code qui le décrypte sur la mémoire).

Les patchs et leurs adresse sont enregistrés dans des fichiers Profile.xml ainsi que leur compatibilité avec UPX et si le programme doit crypte l’EOF ou pas, (si vous voulez savoir plus regardez l’Editeur de profile, la structure est semblable a « Offset Finder - v 0.4 - By RivaL » d’ailleurs j’étais aidé par le code de ce programme).

(*) le cryptage est fait par un xor avec chaque octet de l’EOF (la clé est aléatoire et généré lors de la protection puis remplace le caractère ** dans le(s) patch)

 

Qu’est ce que l’EOF et pourquoi tant d’importance :

Chaque section du programme, son nom sa taille et son adresse sont stocké dans le PE header (des IMAGE_SECTION_HEADER après les IMAGE_NT_HEADERS ), si on trouve des donnés après la dernière section (qui ne sont pas présent dans les header) on les appelle EOF ,End Of File (appelé aussi Overlay ou Extra data).

Les script AutoIt ne sont pas vraiment compilés, juste compressés et cryptés en suite ajoutés comme EOF au stub (exe) d’exécution, c’est pour ça que le décompilateur retrouve la totalité du code source et pour cela qu’on cherche a protéger l’EOF .

Remarque : Il y a d’autre méthode pour le protéger comme l’EOF virtuelle (Armadillo).

 

Mise à jour 24/04/2012

J’ai trouvé pas mal de difficulté pour écrire l’obfuscator, le cryptage des chaine bug s’il s’agit d’une chaine dans la déclaration d’une fonction, le rename des fonction devais aussi renommer les celle qui sont utilisé avec Hotkeyset, AdlibRegister et Call, pour le flow obfuscation pas la paine de parler ^^

>
ProtectIt :
+ AuFusCOB 0.1 (Obfuscator de script) : 
Cryptage des chaines (la decryption des chaine utilise une valeur dans le header du programme compilé, méthode très basic pour bloquer les débutant)
Renom des variables/fonctions
Flow obfuscation : réordonner les lignes de code afin de rendre le code plus difficile a comprendre

ProfileEditor :
! Bugfix comparateur de fichier (effacer la liste avant d'ajouter des éléments)
+ Optimiser la comparaison (deux patch de distance inferieur à 5 sont considéré comme un seul)

Profiles :
! Bugfix profile 3.3.8.1 (Votre programme crash si vous utilisez ce profile puis packer avec UPX, fixé)

 

---------------------------------------------

 

Remarque :

L'obfuscator contient quelque bug (certain commentaire ne sont pas supprimé..) mais je l'ai testé sur une la script du THHH 3.3.3 et ça a marché

L’obfuscator ne prend pas en charge que les script codé en ANSI (Encoding.Default)

Le rename des variables et des fonction est lent (des idées?)

 

Exemple :

>
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.6.1
Author:         COB

Script Function:
TEST AUFUSCOB

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
test()
test2()
Func test()
If (1 = 1) Then
	If (0 = 0) Then
		Local $Atrue = 'Condition toujour vrai'
	Else
		$Atrue = "Erreur"
	EndIf
	MsgBox(0, Default, $Atrue)
EndIf
Local $msg
$msg = "Test"
$msg &= " Msg"
$msg &= "Box"
MsgBox(0, Default, $msg)
EndFunc   ;==>test
Func test2()
$autrevar = "Autre fonction";
MsgBox(0, "", $autrevar)
EndFunc   ;==>test2

 

Flow obfuscation, function/var rename

>
$13470001 = 1363015899
While 1
Switch $13470001
	Case 311482959
		F30343235363833313939()
		ExitLoop
	Case 1363015899
		F31353334373932303838()
		$13470001 = 311482959
EndSwitch
WEnd
Func F31353334373932303838()
If (1 = 1) Then
	If (0 = 0) Then
		Local $13470002 = 'Condition toujour vrai'
	Else
		$13470002 = "Erreur"
	EndIf
	MsgBox(0, Default, $13470002)
EndIf
$13470000 = 1363015899
While 1
	Switch $13470000
		Case 311482959
			$13470004 = "Test"
			$13470000 = 1994086612
		Case 1330278011
			MsgBox(0, Default, $13470004)
			ExitLoop
		Case 1363015899
			Local $13470004
			$13470000 = 311482959
		Case 1994086612
			$13470004 &= " Msg"
			$13470000 = 2018228120
		Case 2018228120
			$13470004 &= "Box"
			$13470000 = 1330278011
	EndSwitch
WEnd
EndFunc   ;==>F31353334373932303838
Func F30343235363833313939()
$13470001 = 1363015899
While 1
	Switch $13470001
		Case 311482959
			MsgBox(0, "", $13470003)
			ExitLoop
		Case 1363015899
			$13470003 = "Autre fonction"
			$13470001 = 311482959
	EndSwitch
WEnd
EndFunc   ;==>F30343235363833313939

Ce script n'est pas très dur a comprendre mais il serai pénible si c'étais plus long => il faut écrire un déobfusctor pour pouvoir cracker ce code et cela pourra le protéger contre les débutants

 

Téléchargement :

ProtectIt project - Solidfiles

Share this post


Link to post
Share on other sites

Salam,

 

super petit programme j'utilisais une version publique depuis longtemps mais je me suis rendu compte que ça ne fonctionnait pas :)

J'ai trouvé cette version mais j'ai pas l'impression qu'elle fonctionne.

Je crée une simple msgbox, je la compile sans upx (je précise que je suis en autoit 3.3.8.1) je sélectionne un profil (3.3.8.1, j'ai même essayé défaut) dès que j'appuie sur protéger (option coché EOF fusionné et faux script) ça me dit fin de l'opération avec succès mais ça n'a rien protéger ni modifié mon exe (même hashage md5). Ca ne crée pas de fichier protégé non plus rien. Est-ce normal et qu'est ce que je ne fais pas bien ?

 

Merci pour votre aide

Share this post


Link to post
Share on other sites

j'ai trouvé le problème l'antivirus le détruit à la création...dommage qu'il faille a chaque fois autorisé le programme dans l'antivirus.

je sais que c'est une fausse alerte.

j'ai essayé de décocher faux script l'antivirus n'en veux pas non plus. Y'a t-il un moyen de patcher l'exe sans que l'antivirus crie à l'alerte ?

 

Merci.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now