Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1078 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  blabla@elite

 

 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

blabla@elite

n°1261577
red factio​n
Posté le 08-12-2005 à 11:36:11  profilanswer
 

Bonjour [:dawa]
 
Ceci est un magnifique troll topic qui nous permettra a nous, les vrai-hommes qui ecrivons nos applis en bytecode directement, sans api et sans la moindre dll (cad uniquement par appel au noyau a coup de INT 2E) d'echanger librement vos joies, peines et tentatives de suicide rencontrées lors de cet exercice
 
(Surtout le dernier point en fait)
 
Toi aussi tu comptes les opcodes x86 avant d'aller dormir, ou calcule directement le total de tes courses en hexa ?? alors viens ce topic est fait pour toi!!!!
Je propose donc dans un premier temps un recensement du nombre de W@r|OrdZ present dans ce forum, paske si je suis tout seul ca sera pas la peine d'aller plus loin [:pingouino]
 
-------------------------------------
Edit:
 
bon pour commencer je vais faire un petit tuto sur les bases de la programmation en hexa pour ceux qui ni connaissent rien car ca sent un peu le noob ici :o
 
Evidement nous n'utiliserons pas de compilo, car l'€|iTe n'a pa besoin de ca, d'ailleurs ca simplifie beaucoup de choses, rien a installer rien a configurer, pas de librairie qui manque, plus de warnings...  
Tout ce dont vous aurais besoin c'est un editeur hexa, voir le bon vieux debug sous dos pour les plus courageux (ou pauvres, au choix) d'entre vous...
De toute facon le programme final ne fera pas trés grand, 160 bytes tout au plus [:dawa]
 
 
Tutorial 1 - Ma premiere MessageBox en hexa...
 
 
Structure d'un Exe Win32 PE
 
-MZ Header
-MZ Stub
-PE Header
-Image optional header
-Section Table
-Sections (.data .text .src,... )
 
Comme vous le savez tous, tout Exe Win32 commence par le bon vieux header Dos MZ, principalement pour des raisons de compatibilité [:dawa] (ce qui permet a Dos d'afficher le message "This program cannot be run in DOS mode" et de ne pas planter betement). Ce dernier est contenu dans MZ Stub
 
Ensuite, vient le header PE qui lui est specifique a windows. Il contient qq d'infos techniques (machine utilisée,checksum) mais decrit surtout comment est organisé le reste de l'exe.
Le reste sera detaillé plus tard :o
 
---------------
Une fois dans l'editeur, vous pouvez deja remplir un bloc de 0x40 bytes avec des zeros car le header ms dos fait cette taille et nous n'allons pas remplir tout les champs.......
 
Ensuite pour le premier byte
4D5A <= le fameux MZ
bon apres on pourrait s'amuser a remplir tout le reste, mais dans le cas dune appli Win32, NT s'en fou et va directement en 0x3C pour connaitre ou se trouve le PE Header.
on peut donc aller en 0x3C ecrire 0400 0000  pour indiquer que le header PE se trouve a cet endroit la.  
 
Enfait le PE Header sera linterieur du MZ Header puisque ce dernier est ignoré et on gagne donc pas mal de place  :sol:  
 
Ensuite,
2E2E  <=  c juste pour combler et avoir adresse alignée sur 4
 
50450000  //le fameux Header PE  
 
4C01 // informations sur la machine (386 ici)
0100  // nombre de sections  
 
Normalement ca devrait ressembler a ca :

4D5A 2E2E 5045 0000 4C01 0100 0000 0000  
0000 0000 0000 0000 0000 0000 0000 0000  
0000 0000 0000 0000 0000 0000 0000 0000  
0000 0000 0000 0000 0000 0000 0400 0000


 
Evidement si on lance l'exe, windows nous dit quil est invalide mais il manque encore qq trucs, mais ca c pour la suite ...
 
Partie II
 
bon c'est bien tout ca mais il faut quand meme que notre exe fasse quelque chose
dans l'exemple ici on va se contenter d'afficher une simple message box
pour cela on utilise l'api MessageBoxA
Les 3 prochains champs etant timestamp (32bit),pointeur vers symbol table(32 bit) et number of symbols(32bit aussi) on peut ecraser allegrement
(je precise tout de meme que l'exe final fonctionnera tout ceci netant pas du bluff)
en hexa ca donne M4D e65 s73 s73 a61 g67 e65 B42 o6F x78 A41
ne pas oublier de rajouter un byte nul pour terminer la chaine
 
apres viens sizeof optionalheader, que l'on met a 4000 (jexpliquerai apres)
 
ensuite, le champ charateristics sur 16 bit, dont chaque bit constitue un flag  
 
ici on va mettre 0F01 (0000 1111 0000 0001)
ce qui correspond a :
-Relocation info stripped from file
-File is executable
-Line numbers stripped from file
-Local symbols stripped from file
-32 bit word machine
 
voila c fini pour le pe header....
viens apres image optional header dont le header commence tjs par 0B01


4D5A 2E2E 5045 0000 4C01 0100 4D65 7373  
6167 6542 6F78 4100 4000 0F01 0B01 0000
0000 0000 0000 0000 0000 0000 0000 0000  
0000 0000 0000 0000 0000 0000 0400 0000


c tout pour cette fois ci


Message édité par red faction le 17-12-2005 à 18:27:31
mood
Publicité
Posté le 08-12-2005 à 11:36:11  profilanswer
 

n°1268943
red factio​n
Posté le 17-12-2005 à 15:06:09  profilanswer
 

je continurai bien le topic mais vu la tournure que ca prend :o

n°1268960
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 17-12-2005 à 15:49:14  profilanswer
 

bah non, continue :spamafote:
je me charge de faire le ménage
 
edit: menage done


Message édité par Harkonnen le 17-12-2005 à 15:50:33
n°1268967
chrisbk
-
Posté le 17-12-2005 à 16:17:02  profilanswer
 

[:petrus75]

n°1268968
chrisbk
-
Posté le 17-12-2005 à 16:17:19  profilanswer
 

t'as oublié d'effacer le premier post [:petrus75]

n°1269012
red factio​n
Posté le 17-12-2005 à 18:13:59  profilanswer
 

[:yoyoz]

n°1269017
Rasthor
Posté le 17-12-2005 à 18:21:47  profilanswer
 
n°1269240
deniss4444
Posté le 17-12-2005 à 23:03:36  profilanswer
 

salut .
continu plutot 2 fois qu'une , c'est tres interressant , dumoins a mon avis pour le debutant que je suis ...

n°1269287
red factio​n
Posté le 17-12-2005 à 23:47:34  profilanswer
 

oui mais bon c long a faire comme tuto
 
jai deja la solution finale mais tout expliquer  :sleep:  
reste encore une bonne moitié la

n°1269452
Joel F
Real men use unique_ptr
Posté le 18-12-2005 à 14:16:02  profilanswer
 

[:drapo] ca m'interesse bien aussi ^^


Message édité par Joel F le 18-12-2005 à 14:16:15
mood
Publicité
Posté le 18-12-2005 à 14:16:02  profilanswer
 

n°1269490
Mackila
Posté le 18-12-2005 à 15:36:40  profilanswer
 

[:drapo] Pour la curiosité.
Parceque faire un programme en hexa, on est plus au moyen-age, hein  [:petrus75]

n°1269496
red factio​n
Posté le 18-12-2005 à 15:50:17  profilanswer
 

oui ta raison
d'ailleurs au depart cetait plus un troll lance contre le topic de chrisbk qu'un topic vraiment serieux (je crois que tout le monde avait compris)
 
bon la jen ai un peu plein le c** et de tout facon personne ne suit (a part les troll qu'on a effacé) donc je laisse tomber
je donne qd mm la solution car cela fonctionne bel et bien :o


4D5A 2E2E 5045 0000 4C01 0100 4D65 7373
6167 6542 6F78 4100 4000 0F01 0B01 33ED
55BB 0000 8000 5353 55EB 0500 1E00 0000
FF15 8C00 8000 C300 0000 8000 0400 0000
0400 0000 7573 6572 3332 0000 0400 0000
0000 0000 9900 0000 8800 0000 0000 0000
0200 0000 1100 0000 8800 0000 1100 0000  
8800 0000 0000 0000 0200 0000 0000 0000  
2000 3060 8800 0000 0000 0000 0A00 0000  
0000 0000 4400 0000 8C00 0000


Message édité par red faction le 18-12-2005 à 15:53:03
n°1269499
chrisbk
-
Posté le 18-12-2005 à 15:58:48  profilanswer
 

je ne vois pas pkoi tu dois t'enflammer ainsi contre mon topique [:el g]

n°1269514
Mackila
Posté le 18-12-2005 à 16:33:37  profilanswer
 

Na mais la curiosité, ca veut dire les explications :o
 
Le code hexa d'un truc qui faire un messageBox en 156 octets, j'en ai rien à faire, mais un peu de description de l'entete, etc, etc,... ca peut etre interessant...

n°1269520
jagstang
Pa Capona ಠ_ಠ
Posté le 18-12-2005 à 16:41:28  profilanswer
 


tu t'y connais en ASM toi ? ;)

n°1580092
mc40
Posté le 27-06-2007 à 18:18:37  profilanswer
 

hello alors moi je suis entrain de me casser la tete sur les headers alors red faction si tu vx bien me filer un coup de... main!
 
alors pour commencer voici mon entete:
 
00   4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00
10   b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
20   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30   00 00 00 00 00 00 00 00 00 00 00 00 b0 00 00 00
40   0e 1f ba 0e 00 b4 09 cd 21 b8 01 4c cd 21 54 68
50   69 73 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f
60   74 20 62 65 20 72 75 6e 20 69 6e 20 44 4f 53 20
70   6d 6f 64 65 2e 0d 0d 0a 24 00 00 00 00 00 00 00
80   bd 0f cb da f9 6e a5 89 f9 6e a5 89 f9 6e a5 89
90   77 71 b6 89 fd 6e a5 89 05 4e b7 89 f8 6e a5 89
a0   52 69 63 68 f9 6e a5 89 00 00 00 00 00 00 00 00

b0   50 45 00 00 4c 01 02 00 5f 6b 60 46 00 00 00 00
c0   00 00 00 00 e0 00 0f 01 0b 01 05 0c 6c 00 00 00
d0   04 00 00 00 00 00 00 00 00 02 00 00 f8 01 00 00
 
 
Donc mon PE Header de $00 à $7F
en $3C l'adresse le e_lfanew contient l'adresse de l’en-tête PE à proprement parler.
Apres en $ob je retrouve bien la signature PE
ensuite le champ qui indique le type de machine qui a servit à compiler
 
mais ce qui me pose problème et que je n'arrive pas identifier c'est de l'adresse $80 à $af
 
alors une idée?

n°1580473
mc40
Posté le 28-06-2007 à 15:58:48  profilanswer
 

'MZ'+0x0 = début IMAGE_DOS_HEADER
donc :
* 'MZ'+ 0x00 = e_magic (IMAGE_DOS_SIGNATURE (0x5a4d)
* 'MZ'+ 0x02 = e_cblp (Bytes on last page of file)
* 'MZ'+ 0x04 = e_cp (Pages in file)
* 'MZ'+ 0x06 = e_crlc (Relocations)
* 'MZ'+ 0x08 = e_cparhdr (Size of header in paragraphs)
* 'MZ'+ 0x0a = e_minalloc (Minimum extra paragraphs needed)
* 'MZ'+ 0x0c = e_maxalloc (Maximum extra paragraphs needed)
* 'MZ'+ 0x0e = e_ss (Initial (relative) SS value)
* 'MZ'+ 0x10 = e_sp (Initial SP value)
* 'MZ'+ 0x12 = e_csum (Checksum)
* 'MZ'+ 0x14 = e_ip (Initial (relative) CS value)
* 'MZ'+ 0x16 = e_cs (Initial (relative) CS value)
* 'MZ'+ 0x18 = e_lfarlc (File address of relocation table)
* 'MZ'+ 0x1a = e_ovno (Overlay number)
* 'MZ'+ 0x1c = e_res[4] (4 words réservés)
* 'MZ'+ 0x24 = e_oemid (OEM identifier)
* 'MZ'+ 0x26 = e_oeminfo (OEM information)
* 'MZ'+ 0x28 = e_res2[10] ( 10 words réservés)
* 'MZ'+ 0x3c = e_lfanew (offset 'PE', 0x4550)
 
 
'PE'+4 = début IMAGE_FILE_HEADER
donc :
* 'PE'+0x04 = Machine
* 'PE'+0x06 = NumberOfSections
* 'PE'+0x08 = TimeDateStamp
* 'PE'+0x0c = PointerToSymbolTable
* 'PE'+0x10 = NumberOfSymbols
* 'PE'+0x14 = SizeOfOptionalHeader
* 'PE'+0x16 = Characteristics
 
 
Il me manque des petits!!!!

n°1580575
anordem
Posté le 28-06-2007 à 22:19:31  profilanswer
 

Salut.
 
En général, ce sont des infos ajoutées par le linker, mais je ne sais plus quoi exactement.
 
Dans tous les cas, tu as le pointeur vers le PE header dans e_lfanew donc tout ce qui est entre les 2 n'est pas défini par le format PE. C'est à dire qu'on peut mettre ce qu'on veut.

n°1580612
mc40
Posté le 29-06-2007 à 02:29:51  profilanswer
 

arf il doit y avoir des ckecks sum par la...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  blabla@elite

 

Sujets relatifs
blabla 2PUTAIN HARKO TU AS FERM2 BLABLA !
Space Geeks: un clone d'Elite (forum officiel ouvert)[Beaucoup de blabla pour rien : post à effacer] Compiler .bat
BlaBlaTech@JAVA [ELITE, viendez les boobs][CSS]Pourriez vous m'aider pour ce code (CSS ELITE)
variable1="blabla + variable2 +blala : c'est possible ??[PHP & regex] "blabla blabla file.ext?point=444 blabla" Recupérer 444
mail("celine@hotmail.com"," sujet","blabla"); pose une err ! Help[blabla@hosto] Le topic des chomistes bouffeurs d'allocs
Plus de sujets relatifs à : blabla@elite


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR