Page 2 sur 3

Re: ASM : Problème d'appel d'api

MessagePosté: 06 Février 2018, 06:17
par Chaosphere
Oui c'est ce que j'ai cru comprendre aussi....
Bon bah j'ai réjouté un test : Si la taille de la dernière section n'est pas alignée, je ne traite pas le fichier...C'est con mais je ne sais pas trop comment faire autrement

Re: ASM : Problème d'appel d'api

MessagePosté: 06 Février 2018, 06:21
par Chaosphere
Tiens encore une question :

J'ai vu que dans la plupart des virus ils utilisent CreateFileMapping / MapViewOfFile pour écrire dans le fichier....
Actuellement j'utilise CreateFile et SetFilePointer pour me déplacer dans le fichier et ca marche très bien
Est-ce que ca serait mieux de mapper le fichier plutôt ?

Re: ASM : Problème d'appel d'api

MessagePosté: 09 Février 2018, 13:19
par baboon
Il suffit que tu agrandisse le fichier et que tu corrige le champ rawSize de la dernière section pour pouvoir infecter les binaires avec une rawSize non alignée.
Sinon non, tu fais ce que tu veux, les gens utilisent CreateFileMapping parce qu'ils sont fainéants et que c'est plus simple mais il n'y a pas vraiment de raison particulière d'utiliser cette API.

Re: ASM : Problème d'appel d'api

MessagePosté: 09 Février 2018, 16:44
par Chaosphere
Ok je pensais que c'était plus performant d'utiliser le mapping... Du coup je vais rester sur mon CreateFile/SetFilePointer...
Là j'arrive à infecter les exe et les dll, j'ai implémenté le cryptage du virus
J'aimerai bien aussi rendre polymorphe la boucle de décryptage....

Tiens d'ailleurs à ce sujet, est-ce que tu pense que c'est mieux que la clé de cryptage soit sur 32bits ou juste sur 8bits ca suffit ? Vu que l'objectif c'est juste de le rendre non visible des antivirus


Ma boucle de décryptage :

Code: Tout sélectionner
      mov ecx, offset BasProg - offset debut_crypt
      shr ecx, 2
      lea esi, [ebx + debut_crypt]
      @@:
         lodsd
         _xor db 035h
         cle_cryptage dd 0
         mov [esi - 4], eax
      loop @b         

Re: ASM : Problème d'appel d'api

MessagePosté: 09 Février 2018, 17:13
par Chaosphere
Il suffit que tu agrandisse le fichier et que tu corrige le champ rawSize de la dernière section pour pouvoir infecter les binaires avec une rawSize non alignée.


Oui il ne suffit pas de juste corriger le rawsize...Bon je vais regarder ca...

Re: ASM : Problème d'appel d'api

MessagePosté: 09 Février 2018, 17:25
par baboon
8 bit s'vraiment peu... 255 possibilités, c'est limite envisageable pour un AV de tenter de les bruteforcer. Pourquoi ne pas utiliser 32bits ?
Sinon avec un mapping tu auras moins de syscalls oui mais je ne pense pas que ce que tu gagnes en perf soit très ouf...

Re: ASM : Problème d'appel d'api

MessagePosté: 10 Février 2018, 17:16
par Chaosphere
Bon voilà maintenant je peux infecter ls exe dont la taille de la dernière section n'est pas alignée :D

Sinon pour le cryptage 32bits, ca marche mais il y a un truc un peu chiant... Je suis obligé d'aligner le début et la fin de la zon à crypter / décrypter sur une adresse mutiple de 4 sinon il y a toujours 1 ou deux octets à la fin qui ne sont pas décryptés :

Code: Tout sélectionner
; Boucle de décryptage
mov ecx, offset BasProg - offset debut_crypt
shr ecx, 2    ; Diviser par 4 car on traite les octets 4 par 4
lea esi, [ebx + debut_crypt]
@@:
   lodsd
   _xor db 035h
   cle_cryptage dd 0
   mov [esi - 4], eax
loop @b         

align 4
debut_crypt:
....
align 4
BasProg:

Re: ASM : Problème d'appel d'api

MessagePosté: 12 Février 2018, 14:58
par baboon
Je ne vois pas trop en quoi c'est chiant :)
Et tu peux utiliser une clé de 32bits (ou plus) tout en gardant un chiffrement byte à byte (regarde RC4 par exemple).

Re: ASM : Problème d'appel d'api

MessagePosté: 12 Février 2018, 15:51
par Chaosphere
En fait c'est chiant parceque ca génère des instructions qui ne servent à rien (à part à aligner)
Ce qui me dérange le plus c'est que le 1er align 4 me génère un mov edi,edi juste avant la partie à crypter.
Du coup ca fait des octets en plus qui peuvent servir comme signature pour les AV....

Et tu peux utiliser une clé de 32bits (ou plus) tout en gardant un chiffrement byte à byte (regarde RC4 par exemple).

Je ne comprend pas trop comment faire ca... Tu veux dire que pour chaque octets je le crypte avec un seul octet de la clé et à chaque itération je change d'octet de cryptage de la clé ?

genre un truc comme ca ?

Code: Tout sélectionner
; Boucle de décryptage
mov ecx, offset BasProg - offset debut_crypt
lea esi, [ebx + debut_crypt]
mov edx, 12345678h ; Clé de cryptage sur 32bits
@@:
    lodsb
    xor al, dl
    rol edx, 8     ; On change l'octet de la clé qui nous servira à crypter / décrypter
    mov [esi - 1], al
loop @b

Re: ASM : Problème d'appel d'api

MessagePosté: 18 Février 2018, 16:34
par baboon
De toute façon ta boucle de déchiffrement pourra servir de signature :)
Sinon oui c'est à ça que je pense, encore une fois tu peux regarder RC4 ou tout autre algo de génération d'aléa.

Re: ASM : Problème d'appel d'api

MessagePosté: 19 Février 2018, 06:50
par Chaosphere
De toute façon ta boucle de déchiffrement pourra servir de signature


Oui j'imagine.... Je suis en train de regarder comment générer une boucle de décryptage polymorphe justement....

Tiens ce week end, j'ai rajouté la fonctionnalité code cave :D
Si il trouve un code cave il l'infecte sinon il ajoute une nouvelle section :D

Re: ASM : Problème d'appel d'api

MessagePosté: 08 Mars 2018, 11:38
par Chaosphere
Salut Baboon,

J'ai une petite question....

A chaque fois que je débug un prog avec Olly (en tout cas les miens) je remarque que les registres ECX et EDX sont renseignés avec l'adresse de l'image base (401000).
Est-ce qua serait safe d'utiliser ca pour calculer le delta l'offset plutôt que de faire le classique call delta / pop truc sub truc, ...

Un truc dans ce genre là au début du prog ca serait plus simple non ?
sub ecx, 401000 ; Calcul du delta offset


Tiens sinon j'arrive à générer ma boucle de décryptage, à mélanger les instructions, et générer des jmp pour que les instructions s’exécutent dans le bon ordre quand même.... je vais bientôt m'attaquer au générateur de garbage :D (et ca va pas être de la tarte je crois)

Re: ASM : Problème d'appel d'api

MessagePosté: 08 Mars 2018, 13:47
par Hao
Chaosphere a écrit:A chaque fois que je débug un prog avec Olly (en tout cas les miens) je remarque que les registres ECX et EDX sont renseignés avec l'adresse de l'image base (401000).


Bizarre. Quand tu break sur OEP ?

Re: ASM : Problème d'appel d'api

MessagePosté: 08 Mars 2018, 13:55
par Chaosphere
Oui, j'ouvre mon .exe, et dès l'ouverture j'ai ecx = 401000 et edx = 401000

en fait c'est pas l'imagebase, c'est plutôt l'adresse du point d'entrée

Je viens de tester sur d'autres exe (pas les miens) et ca me le fait aussi, l'adresse est pas forcément 401000 et ecx et edx contiennent à chaque fois l'adresse du point d'entrée

(Pour info je suis sous Win10)

Re: ASM : Problème d'appel d'api

MessagePosté: 08 Mars 2018, 14:05
par Hao
J'ai testé de mon côté sur différents programmes (Win7 64bits), et EDX semble contenir l'adresse de l'OEP. Pour ECX, il est souvent à 0.
Concernant EDX, il contient l'adresse de OEP en fonction d’où le programme est chargé en mémoire, donc pas forcément à son imagebase.