begin process at 2010 03 20 04:39:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Système d'exploitation

 > 

Windows

 > 

traduction c++ ---> asm


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

traduction c++ ---> asm

mercredi 6 septembre 2006 à 21:45:50 | traduction c++ ---> asm

tezca_system

Bonjour,

j'adore l'asm, sa fluidité, son agilité a pacourir les registres, sa rudesse et sa capacité à obeir au doigt et a l'oeil. Je connais le c++, plus moins que plus. mais mieux que l'asm.
Passons au chose passionante, par rapidité et souci de voir un résultat prompt et correct j'ai codé un bout de code en c++, le voici:

#include <windows.h>

int main(void)
{


 
 // On crée la structure startupinfo
 STARTUPINFO startupinfo;
 // On la rempli avec des 0
 memset (&startupinfo, 0, sizeof (STARTUPINFO)) ;
 // on indique a la structure sa taille
 startupinfo.cb = sizeof(startupinfo);
 
 // On crée la structure process
 PROCESS_INFORMATION process;
 // On la rempli avec des 0
 memset (&process, 0, sizeof (PROCESS_INFORMATION)) ;

 // La ou on va placer la portion de memoire lu
 char memread[1];
 // Si on passe des arguments
 char* cmdline;
 
 // on recupere les arguments
 cmdline = GetCommandLine();
 
 // on crée le proces
 if (CreateProcess("LogTarget.exe", cmdline, NULL, NULL,FALSE, NORMAL_PRIORITY_CLASS,NULL, NULL, &startupinfo, &process))
 {
  // On ecrit dans la memoide du grog
  WriteProcessMemory (process.hProcess, (LPVOID)0x401016, "\x90", 1, NULL);
  WriteProcessMemory (process.hProcess, (LPVOID)0x401017, "\x90", 1, NULL);

  // On a plus besoin de rien faire on ferme l'handle
  // pas le prog juste l'handle
  CloseHandle (process.hProcess);
  CloseHandle (process.hThread);

 }
 else
 {
  // on a pas pu l'ouvrir
  MessageBox(NULL, "Erreur Imposible d'ouvrir Crackme.exe", "Erreur", MB_OK|MB_ICONERROR);
  exit(-1);
 }

 return 1;

}

Je me suis inspiré evidement pour ceux qui reconnaisse, donc ce que je souhait par dessus tout c'est reecrire ce code en assembleur Win32. Pourriez vous m'aider svp c'est important pour moi.
Je pense qu'après cela je serais plus complet.
Je commence evidement dès ce soir.
Merci par avance

P.S: ce qui m'embete c'est pas trop les appels de fonction evidement et le passage en pile de leur argument, c'est entre autre quelques details, la traduction du de la fonction memset.

jeudi 7 septembre 2006 à 00:45:26 | Re : traduction c++ ---> asm

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !

typedef struct _STARTUPINFO {
  DWORD cb;
  LPTSTR lpReserved;
  LPTSTR lpDesktop;
  LPTSTR lpTitle;
  DWORD dwX;
  DWORD dwY;
  DWORD dwXSize;
  DWORD dwYSize;
  DWORD dwXCountChars;
  DWORD dwYCountChars;
  DWORD dwFillAttribute;
  DWORD dwFlags;
  WORD wShowWindow;
  WORD cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;
  HANDLE hStdOutput;
  HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;

memset dit de mettre chaque octet à 0.
MAIS serait idiot pour cb vu qu'on doit y mettre la size.
16 membres de 4 octets + 2 WORD donc sizeof = 68.
On dira donc 16 DWORDs à remplir de 0 (pas membre cb qui est le 1er).

lea eax, [esp-4] ; adresse dernier membre future STARTUPINFO
mov ecx, 16 ; on ne fera pas le membre cb
sub esp, 68 ; a que voila une belle STARTUPINFO
setZERO: ; bouclage du memset, 4 octets mis à zero par passe
mov dword ptr[eax], 0
sub eax, 4
sub ecx, 1 ; meilleur que "dec ecx" pour l'alignement des instructions
jnz short setZERO
mov dword ptr[eax], 68 ; cb = sizeof(STARTUPINFO)

Inutile de faire de la philo sur l'ASM, trace plutot sur papier le schéma de la pile (ESP) et tout deviendra clair.

ciao...
BruNews, MVP VC++

jeudi 7 septembre 2006 à 05:56:41 | Re : traduction c++ ---> asm

ToutEnMasm

Salut,
Pas besoin de redefinir les structures les plus courantes avec masm et de se livrer a de la programmation genre listing parfaitement illisible.Masm est un langage de haut niveau très proche du c dans son écriture.
                     ToutEnMasm

;---------------------------------------------
include windows.inc

Main Proc

        Local startupinfo:STARTUPINFOA
           invoke RtlZeroMemory,addr startupinfo,sizeof startupinfo
        ..
        .... et la suite
         
ret

Main endp

jeudi 7 septembre 2006 à 09:21:24 | Re : traduction c++ ---> asm

BruNews

Administrateur CodeS-SourceS
ouhhh qu'il est médisant ToutEnAsm ce matin....
Je n'ai rien redéfini, la définition de la structure est en C, copier-coller de MSDN juste pour l'avoir devant les yeux que je l'ai mise ici.

Plus sérieux:
MASM n'est qu'un assembleur. Il est livré avec un analyseur syntaxique à base de macros qui remplaceront les lignes avec "invoke, "addr" et autres bidules de ce genre mais ce n'est pas cela qui en fera un langage, il manque (comme en C) le compilo et surtout son optimiseur.

"...par rapidité et souci de voir un résultat prompt et correct..."
Au vu du 1er paragraphe de ce post, on voit qu'on a affaire à un complet débutant. La demande est ASM et non pas du C en moins bon. Si c'est pour PUSHer 2 params et faire un call sur RtlZeroMemory, vaut mieux rester en C, le compilo aurait inséré direct de l'ASM en place du call.

ciao...
BruNews, MVP VC++
jeudi 7 septembre 2006 à 11:19:07 | Re : traduction c++ ---> asm

tezca_system

Bonjour,

En effet très clair en prennant le temps.
Vraiment formidable.
A terme ce bout de code devera etre integrer a un exe afin de lui permettre de se patcher lui meme...donc faire du bas niveau est vraiment nécessaire selon moi.
Merci beaucoup

jeudi 7 septembre 2006 à 11:26:14 | Re : traduction c++ ---> asm

tezca_system

lol ca sera peut etre l'objet d'un autre post...mais si vous avez des bonnes docs, des liens des methodes du code a propos de l'utilisation de fonction non importé dans un exe.........notamment WriteProcessMemory, (afin de patcher evidement) je suis tout ouie.

Car comment patcher un exe de lui meme, si la fonction qui sert a patcher n'est pas importée? Appremment faire le Mac Gyver avec l'IAT...

merci par avance
jeudi 7 septembre 2006 à 11:35:56 | Re : traduction c++ ---> asm

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
comment ça "non importé" ???
WriteProcessMemory tu l'obtiens par GetProcAddress si tu ne veux pas qu'il soit en clair dans les imports de l'exe.

ciao...
BruNews, MVP VC++
jeudi 7 septembre 2006 à 12:37:58 | Re : traduction c++ ---> asm

tezca_system

D'accord c'est que j'ai mal exprimé ma question... merci beaucoup.




jeudi 7 septembre 2006 à 13:50:16 | Re : traduction c++ ---> asm

ToutEnMasm

Précision utile,
Aucune médisance de ma part,je ne fais que préciser qu'avec masm nombre de définitions sont déja dans windows.inc,c'est tout.
Tant qu'au machin bidule du genre invoke et addr , on vient bien la un nostalgique de la programmation binaire (la c'est franchement de la médisance (rire))

                                            ToutEnMasm

 

jeudi 7 septembre 2006 à 14:14:49 | Re : traduction c++ ---> asm

ToutEnMasm

J'ai oublié de préciser qu'avec GetProcAddress il faut crypter le nom de la fonction qui doit se trouver obligatoirement en data sinon il vaut mieux utiliser la librairie c'est plus simple.Mais dans un cas comme dans l'autre un bon debugger n'a pas beaucoup de problèmes pour identifier les fonctions.
On peut aussi faire appel a non import (c'est a dire aucune librairie) un exemple est sur mon site page librairie,
                                       ToutEnMasm

                          

1 2

Cette discussion est classée dans : process, crée, asm, traduction, startupinfo


Répondre à ce message

Sujets en rapport avec ce message

Compileur ASM [ par fabiin ] SalutQuel compileur ASM me conseillez-vous ???Merci @+Fabs Besoin de conseils en livre sur l'asm! [ par BlackWizzard ] je voudrais m'acheter un livre sur l'asm sans trop de blabla et pas trop cher...qqun a qqchose a me conseiller? virgule flotante en asm [ par webfish ] Bonjour, Je fais de l'assembleur depuis pas longtemps, et j'aimerais savoir comment on fait des calculs avec des nombres à virgule flotante... asm [ par damien174 ] bonjour je viens de commencer a faire de l ASM sur PC, car je connais tres bien sur 68HC11.Avez vous des cours et un logiciel pour assembler et compil ASM pour 68hc11 [ par Sphaxs ] SphaxsSalut tout le monde,J'ai fait une plaque de test pour utiliser un 68hc11 mais je n'arrive pas à le programmer (pb de logiciel???), si quelqu'un passage de paramétres entre VCpp et ASM [ par orchis ] bjr a tous,j'ai ecris un programme en VCpp dont un module est en assembleur, mais je ne sais faire passer des paramétres entre les deux !! pourriez vo Routine asm dans gcc [ par Juke ] quelqu'un connait t'il un txt en francais qui explik comment incorporer de l'asm dans du c++ avec gcc ou dev-c++ ? Reboot de la machine en c/c++ ou asm [ par Juke ] quelqu'un sait t'il comment rebooter ou éteindre l'ordinateur en c/c++ ou en asm ?merci de votre aide.juke objets ASM [ par gblade ] est ce que qqun saurait comment exporter des membres statics d'une classe ecrite en ASM ? je sais faire avec les membres virtuels mais pas les statics Cherche développeurs asm pour OS [ par Shinji ] Salut, je cherche des gens intéressés par le développement d'un système d'exploitation sur x86 en asm (pour commencer).J'essaie seul pour le moment et


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales