ASM : Problème d'appel d'api

Tout sur les langages de programmation.

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

Messagepar Chaosphere » 08 Mars 2018, 14:09

Oui c'est carrément cool ca
Du coup pourquoi pour calculer le delta offset généralement on fait ca :

Code: Tout sélectionner
   call delta
delta:
   pop ebx
   sub ebx, delta ; ebx contient le delta offset


Et pas un truc comme ca (avec l'adresse en dur) :

Code: Tout sélectionner
sub edx, 401000h ; ebx contient le delta offset


J'imagine qu'il doit y avoir des cas où ca ne marche pas non ?
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Chaosphere » 09 Mars 2018, 07:31

Je viens de remarquer que c'est pareil pour ESI et EDI.... ils contiennent aussi l'adresse de l'OEP....
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Hao » 09 Mars 2018, 08:37

Chaosphere a écrit:Oui c'est carrément cool ca
Du coup pourquoi pour calculer le delta offset généralement on fait ca :

Code: Tout sélectionner
   call delta
delta:
   pop ebx
   sub ebx, delta ; ebx contient le delta offset


Et pas un truc comme ca (avec l'adresse en dur) :

Code: Tout sélectionner
sub edx, 401000h ; ebx contient le delta offset


J'imagine qu'il doit y avoir des cas où ca ne marche pas non ?


Je dirais que la première solution est plus souple et plus générique dans la mesure ou tu peux faire ton calcul de delta un peu n'importe-ou et sans te soucier de l'image base du pe.
Dans le deuxième cas, tu risques d'avoir un souci lorsque tu recompiles ton programme avec une image base différente.
Avatar de l’utilisateur
Hao
Mega Crackeur !
Mega Crackeur !
 
Messages: 286
Inscription: 27 Novembre 2013, 22:24

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

Messagepar Chaosphere » 09 Mars 2018, 08:52

Oui mais pour le cas où je déciderais de changer l'imagebase de mon virus lors de la compilation, il suffirait simplement de modifier le sub...

Ma question était plutôt de savoir si ce serait prudent de calculer le delta offset en faisant ca :

Code: Tout sélectionner
sub edx, 401000h


Est-ce que ca marche sur toutes les versions de Windows ?
Pourquoi généralement on ne calcul pas le delta offset de cette façon ?
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Hao » 09 Mars 2018, 09:42

Il semblerait que EDX soit initialisé à l'adresse de l'OEP car la fonction Kernel32.BaseThreadInitThunk utilise ce registre pour appeler le code du programme :
Code: Tout sélectionner
CPU Disasm
Address   Hex dump          Command                                                        Comments
77393358  /$  8BFF          MOV EDI,EDI
7739335A  |.  55            PUSH EBP
7739335B  |.  8BEC          MOV EBP,ESP
7739335D  |.  85C9          TEST ECX,ECX
7739335F  |.- 0F85 752E0000 JNZ kernel32.773961DA
77393365  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]
77393368  |.  FFD2          CALL EDX                                                       ; <<< ICI : CALL OEP
7739336A  |.  50            PUSH EAX                                                       ; /Arg1
7739336B  |.  FF15 04073977 CALL DWORD PTR DS:[<&ntdll.RtlExitUserThread>]                 ; \ntdll.RtlExitUserThread


Après est-ce que ça peut varier selon l'OS... J'ai pas trouvé de ressources sur le sujet.
Si c'est standard, effectivement, dans ton cas, ta méthode de calcul du delta est plus simple.

Je pense que le vieux singe doit en savoir plus.
Avatar de l’utilisateur
Hao
Mega Crackeur !
Mega Crackeur !
 
Messages: 286
Inscription: 27 Novembre 2013, 22:24

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

Messagepar Chaosphere » 09 Mars 2018, 10:05

Tiens c'est marrant j'ai pas exactement la même chose que toi...

Code: Tout sélectionner
CPU Disasm
Address   Hex dump             Command                                                Comments
75BF8630  /$  8BFF             MOV EDI,EDI
75BF8632  |.  55               PUSH EBP
75BF8633  |.  8BEC             MOV EBP,ESP
75BF8635  |.  51               PUSH ECX
75BF8636  |.  A1 5401C875      MOV EAX,DWORD PTR DS:[75C80154]
75BF863B  |.  33C5             XOR EAX,EBP
75BF863D  |.  8945 FC          MOV DWORD PTR SS:[EBP-4],EAX
75BF8640  |.  56               PUSH ESI
75BF8641  |.  8BF2             MOV ESI,EDX
75BF8643  |.  85C9             TEST ECX,ECX
75BF8645  |.- 75 14            JNZ SHORT 75BF865B
75BF8647  |.  FF75 08          PUSH DWORD PTR SS:[EBP+8]
75BF864A  |.  8BCE             MOV ECX,ESI
75BF864C  |.  FF15 901EC575    CALL DWORD PTR DS:[75C51E90]
75BF8652  |.  FFD6             CALL ESI
75BF8654  |.  50               PUSH EAX                                               ; /Arg1
75BF8655  |.  FF15 FC19C575    CALL DWORD PTR DS:[<&ntdll.RtlExitUserThread>]         ; \ntdll.RtlExitUserThread
75BF865B  |>  FF15 601BC575    CALL DWORD PTR DS:[<&ntdll.RtlGetSuiteMask>]           ; [ntdll.RtlGetSuiteMask
75BF8661  |.  5E               POP ESI
75BF8662  |.  A8 10            TEST AL,10
75BF8664  |.- 74 09            JZ SHORT 75BF866F
75BF8666  |.  E8 5ED70300      CALL 75C35DC9
75BF866B  |.  85C0             TEST EAX,EAX
75BF866D  |.- 78 02            JS SHORT 75BF8671
75BF866F  |>  33C0             XOR EAX,EAX
75BF8671  |>  8B4D FC          MOV ECX,DWORD PTR SS:[EBP-4]
75BF8674  |.  33CD             XOR ECX,EBP
75BF8676  |.  E8 B44A0500      CALL 75C4D12F
75BF867B  |.  8BE5             MOV ESP,EBP
75BF867D  |.  5D               POP EBP
75BF867E  \.  C2 0400          RETN 4
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Hao » 09 Mars 2018, 10:26

Ha. Ça pourrait expliquer le fait que chez toi les registres ESI et ECX contiennent eux aussi l'adresse de l'OEP (ça n'est pas mon cas).
Avatar de l’utilisateur
Hao
Mega Crackeur !
Mega Crackeur !
 
Messages: 286
Inscription: 27 Novembre 2013, 22:24

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

Messagepar Hao » 09 Mars 2018, 11:47

Sous WinXP, EDX ne contient pas l'OEP.

L'appel du prog depuis Kernel32 :
Code: Tout sélectionner
CALL DWORD PTR SS:[EBP+8]

Il va chercher l'adresse directement dans la stack.

Alors que sous Win 7 64bits :
Code: Tout sélectionner
MOV EDX,DWORD PTR SS:[EBP+8]

L'OEP est placé dans EDX en amont (ntdll) juste avant l'appel à Kernel32.BaseThreadInitThunk.
Avatar de l’utilisateur
Hao
Mega Crackeur !
Mega Crackeur !
 
Messages: 286
Inscription: 27 Novembre 2013, 22:24

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

Messagepar baboon » 11 Mars 2018, 11:37

Ça dépend de la version de Windows en effet, tu ne peux pas te baser là dessus. Si tu veux une manière plus "discrète" et moins commune de calculer le delta offset, tu peux utiliser le PEB pour retrouver la liste des modules et ainsi la base address du main module, je ne sais pas si ça a déjà été utilisé dans ce cadre...
Tu peux aussi utiliser FSNTENV mais pour le coup cette instruction est très marquée "shellcode".
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3346
Inscription: 08 Juillet 2005, 17:49

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

Messagepar Chaosphere » 12 Mars 2018, 06:27

Cool merci, je vais regarder de ce coter là...
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Chaosphere » 14 Mars 2018, 06:58

Salut c'est encore moi :D

J'ai encore une question : avant sous dos on pouvait faire des programme TSR (terminate & stay resident)
Comment peut on faire ca maintenant sous windows ?

- Est-ce qu'il est possible de créer un process sans lancer de ligne de commande ?
(sans lancer un exe quoi) la fonction CreateProcess demande une ligne de commande...
Est t-il possible de créer un process et d'y mettre son code executable en le recopiant en mémoire directement sans lancer avoir à lancer un .exe ?

- J'ai pensé à une technique, j'imagine que ca devrait marcher mais j'aimerai bien avoir votre avis :
1) Un virus infecte un exe, il bidouille la table des importation de l'exe, redirige l'appel à ExitProcess vers l'une des fonctions du virus (ExitProcess2).
2) Lorsque l'exe est lancé, le virus se lance dans un nouveau thread et rend la main au programme infecté. Ce qui lui permet d'être actif pendant l'execution du programme.
3) lorsque l'utilisateur ferme le programme, la fonction ExitProcess2 est appellée. Le programme se ferme en apparence mais ExitProcess2 ne ferme pas le process...en fait le process est toujours actif en mémoire.
4) Une fois que le virus à terminé son travail il ferme le process...

Inconvénients : L'exe ne peut pas être supprimé tant que le process est toujours actif (c'est louche). Le process est visible dans le gestionnaire des tâches et peut être killé par l'utilisateur.
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar baboon » 20 Mars 2018, 13:51

Bonjour,

Tu as pas mal de méthodes qui permettent d'injecter du code dans un processus et beaucoup sont utilisées par des malwares. Cherche UnmapViewOfSection (permet d'unmapper le code original d'un exe), WriteProcessMemory (permet d'écrire la mémoire d'un autre processus pour, par exemple, mettre ton code), Process Hollowing (le terme à la mode pour désigner ce que tu veux faire, c'est à dire "voler" l'identité d'un processus qui ait l'air légitime), Ghost Writing (injection via Get/SetThreadContext, dans le temps plus furtif que WriteProcessMemory, maintenant que les AVs ne peuvent de toute façon plus hook la SSDT ça se discute...), Process Doppelgänging (technique récente qui a fait couler un peu d'encre).

Je ne vois pas trop l'interet de ton deuxième "truc" par contre. Quel intérêt de lancer la charge qu'une fois que le processus se termine ? Si tu as lancé un thread, autant lancer ta charge dans ce thread comme ça il s'exécute en parallèle du programme original.
Newbie mais ayant soif d'apprendre et étant motivé
Avatar de l’utilisateur
baboon
Modérateur
Modérateur
 
Messages: 3346
Inscription: 08 Juillet 2005, 17:49

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

Messagepar Chaosphere » 21 Mars 2018, 06:35

Cool, merci pour tes infos je vais regarder tout ca...

Je ne vois pas trop l'interet de ton deuxième "truc" par contre. Quel intérêt de lancer la charge qu'une fois que le processus se termine ? Si tu as lancé un thread, autant lancer ta charge dans ce thread comme ça il s'exécute en parallèle du programme original.


Non en fait la charge se lance dès le début dans un thread. Le fait de détourner l'appel à ExitProcess permet de ne pas fermer le processus pour que le virus reste actif en mémoire....
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

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

Messagepar Chaosphere » 21 Mars 2018, 06:50

Apparemment le Process Doppelgänging ne marche pas sous Win10 ? (Ecran bleu)
Chaosphere
Elève
Elève
 
Messages: 45
Inscription: 15 Janvier 2018, 13:53

Précédente

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron