logo Homepage
+  NewbieContest
|-+  Divers» Cracking» ASM et Linux
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: ASM et Linux  (Lu 5589 fois)
Best Comp Iraq

Profil challenge

Classement : 1487/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 23


Voir le profil
« le: 06 Juin 2014 à 13:21:43 »

Hello les NewbieContestiens,

Dans l'espoir d'avancer sur les épreuves de wargame je me suis dit qu'il était bon d'avoir des bonnes notions d'assembleur. J'aimerais bien pour ça pouvoir coder des petits scripts de test. Je suis sous Linux et j'ai installé nasm. Maintenant je n'arrive pas à trouver sur Google quel est le code source de base qui doit être implémenté. Par exemple pour le C on doit écrire un main. Est ce que c'est la même chose avec l'assembleur ?

EDIT : j'ai vu que gcc -S test.c me traduisait test.c en assembleur. Seulement ce n'est pas la même manière de représenter les données que sous Ollydbg. Connaissez-vous un moyen d'y remédier ?
« Dernière édition: 06 Juin 2014 à 13:31:00 par Best Comp Iraq » Journalisée

Best Comp Iraq
Xioth

Profil challenge

Classement : 528/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 33


Voir le profil
« #1 le: 06 Juin 2014 à 14:24:15 »

Salut,

Moi j'ai utilisé ce tuto pour apprendre : http://www.tutorialspoint.com/assembly_programming/index.htm
Je l'ai trouvé plutôt pas mal. Je pense que t'auras ce que tu cherches de-dans.

Bye.
Journalisée

N'oubliez jamais la puissance de Google.

"Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver."
Gaston Bachelard
Ge0

Profil challenge

Classement : 16/54254

Membre Senior
****
Hors ligne Hors ligne
Messages: 377


Voir le profil WWW
« #2 le: 06 Juin 2014 à 14:57:36 »

Citation
Par exemple pour le C on doit écrire un main. Est ce que c'est la même chose avec l'assembleur ?

Ca dépend. Si tu utilises gcc pour l'édition de liens, tu as effectivement intérêt à exporter un symbole "main". Si tu utilises ld, c'est _start qu'il te faudra exporter (comme sur le lien fourni par Xioth).

Dans les deux cas tu as forcément un point d'entrée par lequel ton binaire commencera. Avec gcc tu auras également un _start, qui se contentera d'appeler main() par lui-même, avec les arguments qui vont bien (argc, **argv, **env...).

Voici un Hello World à la printf, c'est-à-dire sans passer par les syscalls, et en liant notre code avec la libc, donc :

Code:
% cat helloworld_libc.asm
bits 32

extern printf

section .data
format db 'Hello world!', 10, 0

section .text
global main

main:
        push ebp
        mov ebp, esp
        sub esp, 4
        mov dword [esp], format
        call printf
        xor eax, eax
        leave
        ret

% nasm -f elf helloworld_libc.asm
% gcc -o helloworld_libc helloworld_libc.o -m32
% ./helloworld_libc
Hello world!

C'est comme ça que tu écriras tes shellcodes, si tu décides de les faire toi-même !
Journalisée
Best Comp Iraq

Profil challenge

Classement : 1487/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 23


Voir le profil
« #3 le: 07 Juin 2014 à 12:59:05 »

C'est normal que cela ne ressemble pas totalement à ce qu'il a sur Ollydbg ?
Journalisée

Best Comp Iraq
benjani13

Profil challenge

Classement : 87/54254

Membre Junior
**
Hors ligne Hors ligne
Messages: 52


Voir le profil
« #4 le: 07 Juin 2014 à 13:22:16 »

Quelle différence?

Il y a une différence entre un programme complet (que tu écris et assemble), et un programme que tu décompile.

Dans le cas d'un programme que tu écris tu as principalement deux syntaxes : Intel et AT&T (Intel étant celle que tu vois sous OllyDBG, AT&T la syntaxe par défaut sous Linux). Tu as as aussi d'autres syntaxes dérivées suivant l'assembleur que tu utilises (NASM, MASM, TASM).

Dans le cas de la décompilation, suivant l'outil tu n'aura pas forcément les instructions "d'initialisation" comme les section, db, global, etc (probablement car tu ne regardes que le segment de code) et le code ne sera pas forcément exactement le même car tous les outils ne donnent pas forcément la même représentation.

Et pour finir, sache que tous ça n'est valable que pour une architecture donnée! Un processeur x86 n'a pas le même langage d’assemblage (car pas le même jeu d'instruction) qu'un processeur ARM ou qu'un processeur Motorala.
« Dernière édition: 07 Juin 2014 à 13:25:21 par benjani13 » Journalisée
Pages: [1]
  Imprimer  
 
Aller à: