• STATISTIQUES
  • Il y a eu un total de 0 membres et 31164 visiteurs sur le site dans les dernières 24h pour un total de 31 164 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [FR] Microcontest
    Cryptographie: 7, Mathématiques: 8, Image Son Vidéo: 5, Intelligence artificielle: 3, Réseau: 2, Divers: 7, Phy...
    Challenges
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [EN] Security Traps
    Site de challenge qui prétend être construit non pas dans le but de parfaire vos connaissances, mais plutôt dan...
    Challenges
    [FR] Hackfest
    Le Hackfest est un évènement de sécurité et de piratage informatique au Québec reg...
    Hacking
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] Sabre Films
    Site de challenge présenté sous la forme d'une quête. Vous êtes un détective et devrez résoudre d...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[NASM] Bot irc basique
10-05-2013, 23h51
Message : #1
Darmo Hors ligne
Newbie
*



Messages : 22
Sujets : 3
Points: 6
Inscription : Mar 2013
[NASM] Bot irc basique
Bonsoir!

Après une semaine à bouffer de l'asm, moi et Trivial avons enfin fini de coder notre bot irc en NASM.

Bon ok il est très basique, il ne fait que lire en brut les messages renvoyés par le serveur auquel on est connecté (irc.big-daddy.fr) et du channel.

Code :
BITS    32

EXTERN  puts
EXTERN  printf
EXTERN  send
EXTERN  recv
      
SECTION .data
        sock_error      db      "[-] Echec de creation de la socket", 0
        sock_ok         db      "[+] Creation de la socket", 0
        connect_error   db      "[-] Echec de la connection au serveur", 0
        connect_ok      db      "[+] Connection au serveur irc.big-daddy.fr", 0
        nick_cmd        db      "NICK BotDe7Lieu", 0xd, 0xa, 0
        user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
        input_print     db      "\ninput: %s", 0
        channel         db      "JOIN #Secu-appli", 0xd, 0xa, 0
SECTION .bss
        buffer          resb    256
SECTION .text
        GLOBAL  main
main:
        push    ebp
        mov     ebp, esp
make_socket:                    ; _
        push    0               ;  |
        push    0x1             ;  | struct sockaddr_in
        push    0x2             ; _|
        mov     ecx, esp        ; on passe le début de la struct en arg
        mov     ebx, 1          ; syscall socket
        mov     eax, 102        ; syscall sys_socketcall
        int     0x80
        mov     esi, eax        ; file descriptor du socket
        cmp     eax, 0
        jb      sock_fail       ; if (eax < 0) on jmp à sock fail
        push    sock_ok
        call    puts
connect:
        push    0
        push    dword 0xC589BF58 ; irc.big-daddy.fr
        push    dword 0x0B1A0002 ; port: 6667
        mov     ecx, esp         ; ecx = début de la structure
        push    0x10            
        push    ecx
        push    esi
        mov     ecx, esp
        mov     ebx, 3          ; 3 = sys_connect
        mov     eax, 102        ; sys_socketcall
        int     0x80
        test    eax, eax      
        jnz     connect_fail    ; si la connection a échoué
        push    connect_ok
        call    printf
send_:
        push    0               ; int flags
        push    17              ; size_t len
        push    nick_cmd        ; *buf
        push    esi             ; sockfd
        call    send
        push    0               ; int flags
        push    33              ; size_t len
        push    user_cmd        ; *buf
        push    esi             ; sockfd
        call    send
receive:
        push    0               ; int flags
        push    256             ; size_t len
        push    buffer          ; *buf
        push    esi             ; fd du socket
        call    recv
        push    buffer
        call    puts
        push    0
        push    256
        push    buffer
        push    esi
        call    recv
        push    buffer
        call    puts
join:
        push    0               ; flags
        push    18              ; length
        push    channel         ; nom du chan
        push    esi             ; fd du socket
        call    send
        jmp     receive
        leave
        ret
sock_fail:    
        push    sock_error
        call    puts
        leave
        ret
connect_fail:
        push    connect_error
        call    puts
        leave
        ret

Toutes critiques / remarques ou commentaires sont les bienvenus évidemment Wink
+1 (6) -1 (0) Répondre
11-05-2013, 00h36
Message : #2
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Cool du code assembleur!
Tiens, ca vous dis je vous fait la version 64 bits demain ? Big Grin
+1 (3) -1 (0) Répondre
11-05-2013, 00h38
Message : #3
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Salut Ark.
Oui, ça serai plutôt simpa Smile Je compte sur toi pour recevoir ça Smile

The game, Trivial.
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
11-05-2013, 00h57
Message : #4
fr0g Hors ligne
NTEuNDI2MzcsLTEuNzc4NDg4
*****



Messages : 348
Sujets : 22
Points: 56
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Nice Wink
+1 (1) -1 (0) Répondre
11-05-2013, 01h05 (Modification du message : 11-05-2013, 01h07 par b0fh.)
Message : #5
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [NASM] Bot irc basique
Très impressionnant, sauf que votre bot ne répond pas aux messages PING, il ne pourra donc pas rester connecté bien longtemps (et sur certains serveurs, il ne se connectera pas du tout).

Mais quitte a faire ce genre de trucs, faites-le jusqu'au bout: appeler la libc en externe c'est de la triche, faites tous les syscalls a la main.

Et sinon, gcc -S, ça va bien aussi.
+1 (4) -1 (0) Répondre
11-05-2013, 01h15
Message : #6
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
(11-05-2013, 01h05)b0fh a écrit : Très impressionnant, sauf que votre bot ne répond pas aux messages PING, il ne pourra donc pas rester connecté bien longtemps (et sur certains serveurs, il ne se connectera pas du tout).

Exact, disons qu'on a arrête de coder le bot, dès qu'il s'est connecté au CHAN en question.
A vrai dire, on a 2 autres projet à réaliser (Un keylogger en C), ainsi qu'un Snake en C++.
Je vais faire ça dans la soirée Smile

(11-05-2013, 01h05)b0fh a écrit : Mais quitte a faire ce genre de trucs, faites-le jusqu'au bout: appeler la libc en externe c'est de la triche, faites tous les syscalls a la main.

Et sinon, gcc -S, ça va bien aussi.

Oui, tu as tous à fais raison. Disons que grace à ce projet, j'ai appris beaucoup de chose en Assembleur. Je suis déjà fier de ce projet, même si ce n'est pas grand chose.

Et pour ce qui est de gcc -S, crois moi que j'en ai mangé Big Grin

The game, Trivial Smile
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
11-05-2013, 12h31
Message : #7
sakiir Hors ligne
[sakiir@Ubuntu]:~$ ./ExploitMe ShellC0de
*



Messages : 411
Sujets : 51
Points: 34
Inscription : Sep 2012
RE: [NASM] Bot irc basique
Bien joué les gars ! désolé pour mon absence on refait un truc du genre vite Smile
+1 (1) -1 (0) Répondre
13-05-2013, 15h14
Message : #8
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Yo, bon, j'ai toujours pas fini la versions 64 bit, je me heurte en effet a un petit problème que je ne comprends pas...
Il s'agit d'un problème de passage de paramètres a la fonction connect().

Voici ce que me print un strace du binaire:
Code :
connect(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 ECONNREFUSED (Connection refused)

On peux voir que le port et l'ip sont tous les deux a 0, ca me gene un peu ^^

voila le code (ampute de certaines parties):
Code ASM :

BITS 64

    EXTERN  puts
    EXTERN  htons

    %DEFINE BUFF_SIZE   1024
    %DEFINE INT_SIZE    4
    %DEFINE AF_INET     2
    %DEFINE SOCK_STREAM 1

    %DEFINE SYS_SOCKET  41
    %DEFINE SYS_CONNECT 42
    %DEFINE SYS_CLOSE   3
    %DEFINE SYS_WRITE   1

    SECTION .rodata
            sock_error      db      "[-] Error while creating socket", 0
            sock_ok         db      "[+] The socket have been successfuly created", 0
            connect_error   db      "[-] Error: connexion to server failed", 0
            connect_ok      db      "[+] Connecting to irc.n-pn.fr", 0
            nick_cmd        db      "NICK asm64_bot", 0xd, 0xa, 0
            user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
            input_print     db      "\ninput: %s", 0
            channel         db      "JOIN #bot", 0xd, 0xa, 0
        server      db  "irc.n-pn.fr", 0
    SECTION .bss
            buffer          resb    1024
        sock_fd     resb    4

    SECTION .text

        GLOBAL  main
main:
        push rbp
        mov rbp, rsp
;; make_socket
            mov     rdi, AF_INET
            mov     rsi, SOCK_STREAM
        mov rdx, 0
            mov     rax, SYS_SOCKET
            syscall         ; Syscall socket()
            mov     [sock_fd], eax  ; Saving socket fd
            cmp     rax, 0
            jl      sock_fail
        mov     rdi, sock_ok
            call    puts
;; connect
        xor     rdi, rdi
        mov     edi, DWORD [sock_fd]
        xor     rax, rax
        push    server
        push    QWORD 0x0b1a0000
        push    AF_INET
        mov rsi, rsp
        mov rdx, 0x10       ; sizeof struct sockaddr ; Don't know how to have a generic value here...
        mov     rax, SYS_CONNECT
        syscall
        cmp rax, 0
        jl  connect_fail
        mov rdi, connect_ok
        call    puts

        call    close_socket
        mov     rax, 0
        leave
        ret

sock_fail:
        mov     rdi, sock_error
        call    puts
        mov     rax, 1
            leave
            ret

connect_fail:
        mov rdi, connect_error
        call    puts
        call    close_socket
        mov     rax, 1
        leave
        ret

close_socket:                   ; This just closes the socket
        push    rbp
        mov rbp, rsp
        xor rdi, rdi
        mov     edi, DWORD [sock_fd]
        mov     rax, SYS_CLOSE
        syscall
        leave
        ret
 


Voili voilou, donc si quelqu'un a une idee de pourquoi, je veux bien savoir! ^^
+1 (0) -1 (0) Répondre
13-05-2013, 18h50
Message : #9
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [NASM] Bot irc basique
bon du coup t'as timeout sur irc donc je post ici Big Grin

comme dit tu fais un connect() qui prend en paramètre une IP (dword/32) et tu lui files le pointeur sur "irc.n-pn.fr", entre les deux il manque un gethostbyname() ou au moins l'IP hardcodée du serveur (ex: 0x0100007f == 127.0.0.1)

d'autre part tu fais un push QWORD 0x0b1a0000, c'est pas bon du tout, le port est un unsigned short (netinet/in.h) donc il faut mettre push word 0x0b1a à la place
et idem pour le push AF_INET qui suit, sin_family est défini sur 16bits donc push word AF_INET dans la structure, pour ce qui est de sa taille ca ne change pas entre 32/64, ca fait bien 16 octets, hardcodé ça marche très bien
+1 (1) -1 (0) Répondre
14-05-2013, 01h50
Message : #10
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
RE: [NASM] Bot irc basique
Okay, donc j'ai un peu avancer, on a le droit a un bot qui se co/deco instant! \o/ Magnifique. x) le seul probleme etant que j'ai hardcoded pas mal de trucs.

Voici le code pour l'instant, je compte virer mes trucs trop hardcoded et les remplacer par des trucs plus generiques. Et une fois que ca sera fait, je rajouterais la reponse au ping.

Code ASM :
BITS 64

    EXTERN  puts

    %DEFINE BUFF_SIZE   1024
    %DEFINE INT_SIZE    4
    %DEFINE AF_INET     2
    %DEFINE SOCK_STREAM 1

    %DEFINE SYS_SOCKET  41
    %DEFINE SYS_CONNECT 42
    %DEFINE SYS_CLOSE   3
    %DEFINE SYS_WRITE   1

    SECTION .rodata
            sock_error      db      "[-] Error while creating socket", 0
            sock_ok         db      "[+] The socket have been successfuly created", 0
            connect_error   db      "[-] Error: connexion to server failed", 0
            connect_ok      db      "[+] Connecting to irc.n-pn.fr", 0
            nick_cmd        db      "NICK asm64_bot", 0xd, 0xa, 0
            user_cmd        db      "USER BotDe7Lieu 0 0 :BotDe7Lieu", 0xd, 0xa, 0
            input_print     db      "\ninput: %s", 0
            channel         db      "JOIN #bot", 0xd, 0xa, 0
        server      db  "localhost", 0
    SECTION .bss
            buffer          resb    1024
        sock_fd     resb    4

    SECTION .text

        GLOBAL  main
main:
        push rbp
        mov rbp, rsp
;; make_socket
            mov     rdi, AF_INET
            mov     rsi, SOCK_STREAM
        mov rdx, 0
            mov     rax, SYS_SOCKET
            syscall         ; Syscall socket()
            mov     [sock_fd], eax  ; Saving socket fd
            cmp     rax, 0
            jl      sock_fail
        mov     rdi, sock_ok
            call    puts
;; connect
        xor     rax, rax
        push    rax             ; padding
        push    DWORD 0xc589bf58     ; Hardcoded server's IP
        push    WORD 0x0b1a
        push    WORD AF_INET
        mov rsi, rsp
        xor     rdi, rdi
        mov     edi, DWORD [sock_fd]
        mov rdx, 0x10
        mov     rax, SYS_CONNECT
        syscall
        cmp rax, 0
        jl  connect_fail
        mov rdi, connect_ok
        call    puts

;; send data identification
        xor rdi, rdi
        mov edi, [sock_fd]
        mov rsi, nick_cmd
        mov rdx, 16
        mov     rax, 1
        syscall
        xor rdi, rdi
        mov edi, [sock_fd]
        mov rsi, user_cmd
        mov rdx, 33
        mov     rax, 1
        syscall

;; receive datas
        xor     rax, rax
        inc rax         ; set rax to 1 for the cmp
        jmp     recv_data_loop1
recv_data_start1:
        xor     rdi, rdi
        mov edi, [sock_fd]
        mov rsi, buffer
        mov rdx, 1024
        mov     rax, 0
        syscall             ; read what's on the socket 'till there's nothing left

        push    rax         ; save rax's value  which is read's return value
        mov rdi, 1
        mov rsi, buffer
        mov rdx, rax
        mov     rax, 1
        syscall             ; print the buffer to stdout
        pop rax

recv_data_loop1:
        cmp rax, 287            ; Hardcore cheat of the death hame:
        jne recv_data_start1

;; join chan
        xor rdi, rdi
        mov edi, [sock_fd]
        mov rsi, channel
        mov rdx, 11
        mov     rax, 1
        syscall

;; close connexion and exit
        call    close_socket
        mov     rax, 0
        leave
        ret

sock_fail:
        mov     rdi, sock_error
        call    puts
        mov     rax, 1
            leave
            ret

connect_fail:
        mov rdi, connect_error
        call    puts
        call    close_socket
        mov     rax, 1
        leave
        ret

close_socket:                   ; This just closes the socket
        push    rbp
        mov rbp, rsp
        xor rdi, rdi
        mov     edi, DWORD [sock_fd]
        mov     rax, SYS_CLOSE
        syscall
        leave
        ret
 
+1 (3) -1 (0) Répondre
14-05-2013, 13h19
Message : #11
Trivial Hors ligne
Membre actif
*



Messages : 223
Sujets : 10
Points: 29
Inscription : Aug 2011
RE: [NASM] Bot irc basique
Vraiment pas mal Ark \o/.
Dès que tu as finis, la meilleure solution, est d'éditer le Post de Darmo, histoire de foutre ton code Smile.

Trivial.
Citation :manger informatique, dormir informatique, chier informatique sans jamais avoir l'impression que ça nous accable ou que c'est relou, c'est ça être passionné - j0rn
+1 (0) -1 (0) Répondre
14-05-2013, 14h01
Message : #12
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [NASM] Bot irc basique
ben euh.. non, ça dépend ce que tu cherches, perso je trouve intéressant de voir l'historique des démarches/des pb rencontrés, voir d'où c'est parti et où ça arrive à la fin, sinon on perd la cohérence temporelle en lisant le 1er post qui finalement est le post final et ceux qui suivent n'ont plus aucun intérêt, on pourrait aussi bien les supprimer dans ce cas ?

sinon en terme de bonne idée un lien pastebin et/ou un lien pour télécharger directement, voir le code un peu mieux ou autre, pourquoi pas...
+1 (3) -1 (0) Répondre
14-05-2013, 16h55
Message : #13
supersnail Hors ligne
Éleveur d'ornithorynques
*******



Messages : 1,609
Sujets : 71
Points: 465
Inscription : Jan 2012
RE: [NASM] Bot irc basique
Sinon pour ce qui est des structures, ben la macro NASM "struc" is your friend Wink (et nomdelastruct_size pour avoir sa taille Wink)
Mon blog

Code :
push esp ; dec eax ; inc ebp ; and [edi+0x41],al ; dec ebp ; inc ebp

"VIM est merveilleux" © supersnail
+1 (1) -1 (0) Répondre


Sujets apparemment similaires…
Sujet Auteur Réponses Affichages Dernier message
  [NASM] Création d'un thread sous Linux uniquement avec les syscalls supersnail 2 232 04-03-2013, 23h36
Dernier message: Dobry
  [ASM] hello world 64bits (nasm) gruik 2 233 01-12-2012, 13h02
Dernier message: gruik

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut