Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

VBS POLYMORPHIC ENGINE V1.4.0


Information sur la source

Catégorie :Optimisation du code Niveau : Expert Date de création : 06/09/2003 Date de mise à jour : 06/09/2003 00:32:05 Vu : 5 653

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

Voila un code qui, greffé sur vos vbscripts, les rendra polymorphes. Cela va bien plus loin que les moteurs polymorphiques traditionnels qui ne changent que la casse du script et rajoutent des lignes de commentaires. celui ci va modifier directement vos lignes de commandes et ainsi changer le code du fichier, sa structure, sa taille et sa casse. il est loin d'etre sans bug. j'essairai de le transformer en une classe cela sera bcp plus simple d'utilisation pour vous.

Pour l'utiliser:
-Copier coller le code source du moteur polymorphique a n'importe qu'elle endroit de votre script, de preference en dehors d'une procedure :)

Pour optimiser l'efficacité:
-Appliquer "option explicit" de maniere... implicite le moteur fonctionnera au maximum de ses capacités. Supprimez cette ligne de votre code source si elle est presente, elle ferait bugguer l'execution a coup sure.
-Modifier les expressions regulieres de recherches de declarations/fonctions si vous avez des regles de codages strictes. Pour ceux qui n'aiment pas les regexp,  celle definit par defaut fonctionneront dans la grande majorité des cas.

Voila, faute de temps je dois vous laissez :)

Bon décodage, Bye!
 

Source

  • 'WONESEK POLYMORPHIC ENGINE v.1.4.0
  • dim sIntIteration1 , sIntIteration2
  • dim sStrVariables
  • dim sArVariables
  • dim sVarFlag1 , sVarFlag2 , sVarFlag3
  • dim sArResultPosition()
  • dim sArCodeStructure()
  • dim sStrArIProcedure
  • dim sStrArOProcedure
  • dim sIntPointeurOProcedure, sIntPointeurIProcedure
  • dim sIntVariableLength
  • dim sObjFSO,sObjScriptPath,sObjScript,sObjRegExp
  • dim sColResultat
  • dim sIntResultat
  • dim sStrCode
  • dim sIntPositionPointeurCaractere
  • dim sStrLigne2Code
  • dim sIntPositionVBCRLF
  • call initialiser()
  • call rechercher_declaration("dim","(\( *\d* *\))|\(|\)| ")
  • call rechercher_declaration("const","= *(\d*)| *")
  • call rechercher_procedure("function")
  • call rechercher_procedure("sub")
  • call changer_position()
  • call changer_variable()
  • call changer_casse()
  • call appliquer()
  • sub initialiser()
  • redim sArCodeStructure(1,0)
  • set sObjRegExp = new regexp
  • sObjRegExp.ignorecase = true
  • sObjRegExp.global = true
  • set sObjFSO = createobject("scripting.filesystemobject")
  • set sObjScriptPath = sObjFSO.getfile(wscript.scriptfullname)
  • set sObjScript = sObjFSO.opentextfile(sObjScriptPath, 1)
  • sStrCode = sObjScript.readall
  • sObjScript.close
  • sStrCode = remplacer(sStrCode,"\n\r","")
  • end sub
  • sub appliquer()
  • set sObjScript = sObjFSO.opentextfile(sObjScriptPath, 2)
  • sObjScript.write sStrCode
  • sObjScript.close
  • end sub
  • sub changer_variable()
  • sStrVariables = remplacer("," & sStrVariables & ",",",+",",")
  • sArVariables = split(sStrVariables,",")
  • for sIntIteration1 = 1 to ubound(sArVariables)-1
  • sStrCode = remplacer(sStrCode,"\b" & sArVariables(sIntIteration1) & "\b",creer_variable & sIntIteration1)
  • next
  • end sub
  • sub changer_casse()
  • sVarFlag3 = empty
  • for sIntIteration1 = 1 to len(sStrCode)
  • sVarFlag1 = mid(sStrCode, sIntIteration1, 1)
  • if (asc(sVarFlag1) = 92) then
  • sVarFlag2 = true
  • else
  • if sVarFlag2 then
  • sVarFlag2 = false
  • else
  • randomize
  • if cint(rnd * 1) = 1 then
  • sVarFlag1 = lcase(sVarFlag1)
  • else
  • sVarFlag1 = ucase(sVarFlag1)
  • end if
  • end if
  • end if
  • sVarFlag3 = sVarFlag3 & sVarFlag1
  • next
  • sStrCode = sVarFlag3
  • end sub
  • function remplacer(pStrStr,pStrMotif2Recherche,pStrMotif2Remplacement)
  • sObjRegExp.pattern = pStrMotif2Recherche
  • remplacer = sObjRegExp.replace(pStrStr,pStrMotif2Remplacement)
  • end function
  • sub rechercher_procedure(procedure_type)
  • call get_all_position_after_str(procedure_type)
  • for sIntIteration1=1 to ubound(sArResultPosition)
  • redim preserve sArCodeStructure(1,ubound(sArCodeStructure,2) + 1)
  • sIntPositionPointeurCaractere = sArResultPosition(sIntIteration1)
  • sArCodeStructure(1,ubound(sArCodeStructure,2)) = sIntPositionPointeurCaractere - len(procedure_type)
  • sIntPositionVBCRLF = instr(sIntPositionPointeurCaractere,sStrCode,vbcr,1)
  • sStrLigne2Code = mid(sStrCode,sIntPositionPointeurCaractere, sIntPositionVBCRLF - sIntPositionPointeurCaractere)
  • sStrLigne2Code = remplacer( sStrLigne2Code , "(\( *\d* *\))|\(|\)| " , "," )
  • sStrVariables = sStrVariables & "," & sStrLigne2Code
  • sIntIteration1 = sIntIteration1+1
  • sArCodeStructure(0,ubound(sArCodeStructure,2)) = sArResultPosition(sIntIteration1) + 4
  • next
  • end sub
  • function creer_variable()
  • randomize
  • sIntVariableLength = int((20 * rnd) + 10)
  • creer_variable = chr(int((25 * rnd) + 97))
  • for sIntIteration2 = 1 to sIntVariableLength
  • randomize
  • if cint(rnd * 1) = 1 then
  • creer_variable = creer_variable & chr(int((25 * rnd) + 97))
  • else
  • creer_variable = creer_variable & chr(int((10 * rnd) + 48))
  • end if
  • next
  • end function
  • sub rechercher_declaration(pStrType2Declaration,pStrMotif2Recherche)
  • call get_all_position_after_str(pStrType2Declaration)
  • for sIntIteration1=1 to ubound(sArResultPosition)
  • sIntPositionPointeurCaractere = sArResultPosition(sIntIteration1)
  • sIntPositionVBCRLF = instr(sIntPositionPointeurCaractere,sStrCode,vbcr,1)
  • sStrLigne2Code = mid(sStrCode,sIntPositionPointeurCaractere, sIntPositionVBCRLF - sIntPositionPointeurCaractere)
  • sStrLigne2Code = remplacer(sStrLigne2Code,pStrMotif2Recherche,",")
  • sStrVariables = sStrVariables & "," & sStrLigne2Code
  • next
  • end sub
  • sub get_all_position_after_str(pStrSrch)
  • redim sArResultPosition(0)
  • sObjRegExp.Pattern ="(\b" & pStrSrch & " +\w)|(end " & pStrSrch & ")"
  • Set sColResultat = sObjRegExp.Execute(sStrCode)
  • For each sIntResultat in sColResultat
  • redim preserve sArResultPosition((ubound(sArResultPosition))+1)
  • sArResultPosition(ubound(sArResultPosition)) = sIntResultat.FirstIndex + len(pStrSrch) + 1
  • next
  • end sub
  • sub changer_position()
  • redim sStrArIProcedure(ubound(sArCodeStructure,2)-1,1)
  • for sIntIteration1 = 0 to ubound(sStrArIProcedure,1)
  • sStrArIProcedure(sIntIteration1,0) = mid(sStrCode,sArCodeStructure(1,sIntIteration1+1),sArCodeStructure(0,sIntIteration1+1)-sArCodeStructure(1,sIntIteration1+1))
  • randomize
  • sStrArIProcedure(sIntIteration1,1) = rnd
  • next
  • for sIntIteration1 = 0 to ubound(sStrArIProcedure,1)
  • for sIntIteration2 = sIntIteration1 to ubound(sStrArIProcedure,1)
  • if (sStrArIProcedure(sIntIteration2,1) < sStrArIProcedure(sIntIteration1,1)) then
  • sVarFlag1 = sStrArIProcedure(sIntIteration2,0)
  • sVarFlag2 = sStrArIProcedure(sIntIteration2,1)
  • sStrArIProcedure(sIntIteration2,0) = sStrArIProcedure(sIntIteration1,0)
  • sStrArIProcedure(sIntIteration2,1) = sStrArIProcedure(sIntIteration1,1)
  • sStrArIProcedure(sIntIteration1,0) = sVarFlag1
  • sStrArIProcedure(sIntIteration1,1) = sVarFlag2
  • end if
  • next
  • next
  • sStrArOProcedure=sStrCode
  • for sIntIteration1 = 0 to ubound(sStrArIProcedure,1)
  • sStrArOProcedure = replace(sStrArOProcedure,sStrArIProcedure(sIntIteration1,0),"")
  • next
  • sStrArOProcedure = split(sStrArOProcedure,vbcrlf)
  • sIntPointeurOProcedure = -1
  • sIntPointeurIProcedure = -1
  • sVarFlag1 = empty
  • while ((sIntPointeurOProcedure <> ubound(sStrArOProcedure)) or (sIntPointeurIProcedure <> ubound(sStrArIProcedure,1)))
  • randomize
  • if (cint(rnd * 1) = 1) then
  • if (sIntPointeurOProcedure <> ubound(sStrArOProcedure)) then
  • sIntPointeurOProcedure = sIntPointeurOProcedure + 1
  • sVarFlag1 = sVarFlag1 & sStrArOProcedure(sIntPointeurOProcedure) & vbcrlf
  • end if
  • else
  • if (sIntPointeurIProcedure <> ubound(sStrArIProcedure)) then
  • sIntPointeurIProcedure = sIntPointeurIProcedure + 1
  • sVarFlag1 = sVarFlag1 & sStrArIProcedure(sIntPointeurIProcedure,0) & vbcrlf
  • end if
  • end if
  • wend
  • sStrCode = sVarFlag1
  • end sub
'WONESEK POLYMORPHIC ENGINE v.1.4.0

dim sIntIteration1 , sIntIteration2
dim sStrVariables
dim sArVariables
dim sVarFlag1 , sVarFlag2 , sVarFlag3
dim sArResultPosition()
dim sArCodeStructure()
dim sStrArIProcedure
dim sStrArOProcedure
dim sIntPointeurOProcedure, sIntPointeurIProcedure
dim sIntVariableLength
dim sObjFSO,sObjScriptPath,sObjScript,sObjRegExp
dim sColResultat
dim sIntResultat
dim sStrCode
dim sIntPositionPointeurCaractere
dim sStrLigne2Code
dim sIntPositionVBCRLF

call initialiser()
call rechercher_declaration("dim","(\( *\d* *\))|\(|\)| ")
call rechercher_declaration("const","= *(\d*)| *")
call rechercher_procedure("function")
call rechercher_procedure("sub")
call changer_position()
call changer_variable()
call changer_casse()
call appliquer()


sub initialiser()
redim sArCodeStructure(1,0)
set sObjRegExp = new regexp
sObjRegExp.ignorecase = true
sObjRegExp.global = true
set sObjFSO = createobject("scripting.filesystemobject")
set sObjScriptPath = sObjFSO.getfile(wscript.scriptfullname)
set sObjScript = sObjFSO.opentextfile(sObjScriptPath, 1)
sStrCode = sObjScript.readall
sObjScript.close
sStrCode = remplacer(sStrCode,"\n\r","")
end sub

sub appliquer()
set sObjScript = sObjFSO.opentextfile(sObjScriptPath, 2)
sObjScript.write sStrCode
sObjScript.close
end sub

sub changer_variable()
sStrVariables = remplacer("," & sStrVariables & ",",",+",",")
sArVariables = split(sStrVariables,",")
for sIntIteration1 = 1 to ubound(sArVariables)-1
	sStrCode = remplacer(sStrCode,"\b" & sArVariables(sIntIteration1) & "\b",creer_variable & sIntIteration1)
next
end sub

sub changer_casse()
sVarFlag3 = empty
for sIntIteration1 = 1 to len(sStrCode)
	sVarFlag1 = mid(sStrCode, sIntIteration1, 1)
	if (asc(sVarFlag1) = 92) then
		sVarFlag2 = true
	else
		if sVarFlag2 then
			sVarFlag2 = false	
		else
			randomize
			if cint(rnd * 1) = 1 then
				sVarFlag1 = lcase(sVarFlag1)
			else
				sVarFlag1 = ucase(sVarFlag1)
			end if
		end if
	end if
sVarFlag3 = sVarFlag3 & sVarFlag1
next
sStrCode = sVarFlag3
end sub

function remplacer(pStrStr,pStrMotif2Recherche,pStrMotif2Remplacement)
sObjRegExp.pattern = pStrMotif2Recherche
remplacer = sObjRegExp.replace(pStrStr,pStrMotif2Remplacement)
end function

sub rechercher_procedure(procedure_type)
call get_all_position_after_str(procedure_type)
for sIntIteration1=1 to ubound(sArResultPosition)
	redim preserve sArCodeStructure(1,ubound(sArCodeStructure,2) + 1)
	sIntPositionPointeurCaractere = sArResultPosition(sIntIteration1)
	sArCodeStructure(1,ubound(sArCodeStructure,2)) = sIntPositionPointeurCaractere - len(procedure_type)
	sIntPositionVBCRLF = instr(sIntPositionPointeurCaractere,sStrCode,vbcr,1)
	sStrLigne2Code = mid(sStrCode,sIntPositionPointeurCaractere, sIntPositionVBCRLF - sIntPositionPointeurCaractere)
	sStrLigne2Code = remplacer( sStrLigne2Code , "(\( *\d* *\))|\(|\)| " , "," )
	sStrVariables = sStrVariables & "," & sStrLigne2Code
	sIntIteration1 = sIntIteration1+1
	sArCodeStructure(0,ubound(sArCodeStructure,2)) =  sArResultPosition(sIntIteration1) + 4
next
end sub

function creer_variable()
randomize
sIntVariableLength = int((20 * rnd) + 10)
creer_variable = chr(int((25 * rnd) + 97))
for sIntIteration2 = 1 to sIntVariableLength
	randomize
	if cint(rnd * 1) = 1 then
		creer_variable = creer_variable & chr(int((25 * rnd) + 97))
	else
		creer_variable = creer_variable & chr(int((10 * rnd) + 48))
	end if
next
end function

sub rechercher_declaration(pStrType2Declaration,pStrMotif2Recherche)
call get_all_position_after_str(pStrType2Declaration)
for sIntIteration1=1 to ubound(sArResultPosition)
	sIntPositionPointeurCaractere = sArResultPosition(sIntIteration1) 
	sIntPositionVBCRLF = instr(sIntPositionPointeurCaractere,sStrCode,vbcr,1)
	sStrLigne2Code = mid(sStrCode,sIntPositionPointeurCaractere, sIntPositionVBCRLF - sIntPositionPointeurCaractere)
	sStrLigne2Code = remplacer(sStrLigne2Code,pStrMotif2Recherche,",")
	sStrVariables = sStrVariables & "," & sStrLigne2Code
next
end sub

sub get_all_position_after_str(pStrSrch)
redim sArResultPosition(0)
sObjRegExp.Pattern ="(\b" & pStrSrch & " +\w)|(end " & pStrSrch & ")"
Set sColResultat = sObjRegExp.Execute(sStrCode)
For each sIntResultat in sColResultat
	redim preserve sArResultPosition((ubound(sArResultPosition))+1)
	sArResultPosition(ubound(sArResultPosition)) = sIntResultat.FirstIndex + len(pStrSrch) + 1
next
end sub

sub changer_position()
redim sStrArIProcedure(ubound(sArCodeStructure,2)-1,1)
for  sIntIteration1 = 0 to ubound(sStrArIProcedure,1)
	sStrArIProcedure(sIntIteration1,0) = mid(sStrCode,sArCodeStructure(1,sIntIteration1+1),sArCodeStructure(0,sIntIteration1+1)-sArCodeStructure(1,sIntIteration1+1))
	randomize
	sStrArIProcedure(sIntIteration1,1) = rnd
next
for sIntIteration1 = 0 to ubound(sStrArIProcedure,1)
	for sIntIteration2 = sIntIteration1  to ubound(sStrArIProcedure,1)
		if (sStrArIProcedure(sIntIteration2,1) < sStrArIProcedure(sIntIteration1,1)) then
			sVarFlag1 = sStrArIProcedure(sIntIteration2,0)
			sVarFlag2 = sStrArIProcedure(sIntIteration2,1)
			sStrArIProcedure(sIntIteration2,0) = sStrArIProcedure(sIntIteration1,0)
			sStrArIProcedure(sIntIteration2,1) = sStrArIProcedure(sIntIteration1,1)
			sStrArIProcedure(sIntIteration1,0) = sVarFlag1
			sStrArIProcedure(sIntIteration1,1) = sVarFlag2
		end if
	next
next
sStrArOProcedure=sStrCode
for sIntIteration1 = 0  to ubound(sStrArIProcedure,1)
	sStrArOProcedure = replace(sStrArOProcedure,sStrArIProcedure(sIntIteration1,0),"")
next
sStrArOProcedure = split(sStrArOProcedure,vbcrlf)
sIntPointeurOProcedure = -1
sIntPointeurIProcedure = -1
sVarFlag1 = empty
while ((sIntPointeurOProcedure <> ubound(sStrArOProcedure)) or (sIntPointeurIProcedure <>  ubound(sStrArIProcedure,1)))
	randomize
	if (cint(rnd * 1) = 1) then
		if (sIntPointeurOProcedure <> ubound(sStrArOProcedure)) then
			sIntPointeurOProcedure = sIntPointeurOProcedure +  1
			sVarFlag1 = sVarFlag1 & sStrArOProcedure(sIntPointeurOProcedure) & vbcrlf
		end if
	else
		if (sIntPointeurIProcedure <> ubound(sStrArIProcedure)) then
			sIntPointeurIProcedure = sIntPointeurIProcedure +  1
			sVarFlag1 = sVarFlag1 & sStrArIProcedure(sIntPointeurIProcedure,0) & vbcrlf
		end if
	end if
wend
sStrCode = sVarFlag1
end sub   

Commentaires et avis

signaler à un administrateur
Commentaire de The man whit the long hair le 22/09/2003 07:58:12

c'est une belle merde
9/10

signaler à un administrateur
Commentaire de kiminox le 07/10/2003 22:26:03

Je n'ai pas tout compris l'intérêt de ton code?
En tout cas une chose est sure : cela n'a aucun rapport avec le polymorphisme en langage objet tel que Java.
Tu devrais apprendre un peu la prog objet à mon avis :
1) tu apprendrais à coder correctement : nom des variables, déclaration des fonctions, commentaire...
2)penser objet est très bon
3) en plus, c'est très en vogue en ce moment.

0/10
Désolé mais ce que je pense : aucun intérêt (ni ludique, ni pédagogique)

Kim

signaler à un administrateur
Commentaire de wonesek le 08/10/2003 15:00:24

Reponse aux critiques de Kiminox:
1) je pense que je code correctement, j'utilise les conventions de codage de microsoft en ce qui concerne l'attribution des noms de variables. Ce code ayant été publié avec des commentaires, je n'ai pas le droit de le commenté si je ne veux pas m'attirer les foudres de mon editeur. quand a la declaration des fonctiones je pense qu'elle est assez claire pour que son contenu soit exposé.
2)la notion d'objet dans un langage sequentielle comme vbs est limitée. je prevois de transformer ce script en une classe.
3)Peut etre est ce en vogue pour ce que tu fais en programmation, mais ne generalise pas pour tous les secteurs: les langages fonctionnels et les maths par exemple.

Quand j'ai ecrit ce code, je n'est pas pensé à l'aspect "ludique et pedagogique" j'ai voulu faire original, j'espere que tu voudras bien m'escuser.

Quand à l'interet de mon code, il n'a evidement rien avoir avec les classes polymorphes en POO etc... enfin je te renvoie a plusieurs articles qui t'expliquerons ce qu'est le polymorphisme au sens ou je l'entends.

http://securityfocus.com/infocus/1635
http://securityfocus.com/infocus/1638

"Tu devrais apprendre un peu la prog objet à mon avis" &gt; rien a répondre.

signaler à un administrateur
Commentaire de kiminox le 08/10/2003 15:15:57

d'après mon expérience, lire 10 lignes de code à la suite sans commentaire c'est très chiant : en général, je zappe ce code
Le tien n'en a aucun.
Question aux autres lecteurs : qui a lu ce code jusqu'au bout?

Quand aux conventions, ce n'est pas obligatoire mais seulement indispensable...

sans rancune j'espère

Kim

signaler à un administrateur
Commentaire de etilegr le 01/11/2003 17:13:29

je ne vois pas ce que tu reproche à ce code pour les conventions kiminox, elles y sont si utilisées qu'on dirait un header distribué par microsoft

en revanche, j'ai pas encore compris à quoi sert ce code
c'est quoi le polymorph en très bref? ( si c'est possible à expliquer rapidement)

signaler à un administrateur
Commentaire de Kike le 28/11/2003 15:52:35

1) 2 sources 23 messages j aime les gens qui sont la que pour critiquer
2) un prog ca sait quand même dechiffrer du code si tu as besoin de francais pour comprendre une source dev sur ordi mini ca devrait te convenir , ca parle=)
3) communiquer c est respecter le travail des autres et essayer de comprendre, nous détournons tous le langage , c'est ce qui le rends vivant. Et puis outre la forme , c 'est le sens qui nous interresse.
Je remercie donc Kiminox de son intervention qui lui vaut un beau 1/10 dans mon estime.

signaler à un administrateur
Commentaire de Maxilie le 09/06/2004 23:43:29

Extra !!!
Seul petit problème : le moteur modifie la case de tout le prog, or il ce peut que la case de certaines chaines soit importante --&gt; messagebox, inputbox, ...
Mais il est vrai qu'en général ce genre de moteur est utilisé ds des virus, donc pas de string.
9/10

signaler à un administrateur
Commentaire de tekila_bandita le 28/07/2005 13:21:17

bon moteur mais avec commentaire, il serai encore mieux !
mérite 9/10 a cause des commentaires...

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.