Pagina 1 di 2

Provate a dare la soluzione

Inviato: gio dic 01, 2011 15:19
da miklos
Mi hanno passato questo piccolo rompicapo da risolvere :D
Ho capito di che si tratta, ma un po' per tempo.. un po' perchè mi manca qualche conoscenza tecnica non so dare ancora la risposta corretta.
Mi piacerebbe avere le vostre soluzioni/idee in merito

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 15:38
da Ansa89
Sembra un eseguibile dos (file ".com").
Probabilmente ti chiede una password e la controlla con una sua stringa interna, quindi si deve decompilare l'eseguibile e vedere cosa esce.

Non ho eseguito il file per due motivi:
- non sono su Windows.
- _MAI_ eseguire codice trovato su una pagina web a caso.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 15:46
da miklos
complimenti... ci sei andato molto vicino...
è codice assembler x86 a 32bit (quindi coi sistemi a 64bit nn va bene)
in pratica stampa la soluzione.. io non l'ho eseguito perchè non ho ancora avuto il tempo materiale di farlo e comunque bisogna codificare in c un qualcosa che lo carichi in memoria e lo lanci e io col c sono un po' arrugginito..
per quanto riguarda la tua preoccupazione 160 byte mi sembrano un po' troppo pochi per un qualunque malware.. soprattutto se per trovare la soluzione hai capito che è codice macchina.. e quindi cosa fa lo sai :D

comunque ottima risposta :D

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:18
da Ansa89
Quello non mi sembra codice assembler, mi sembra codice già compilato.
Comunque se ho un paio di minuti liberi, provo a risolverlo.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:21
da miklos
scusa la domanda ignorante(sarà per questo che ancora non so scrivere la benedetta risposta) ma che differenza c'e'!??!!?
voglio dire un programma compilato non viene convertito alla fine in codice macchina!??!?!

io mi sono accorto che era comunque un eseguibile perchè un algoritmo di cifratura non poteva essere (ci sono caratteri ripetuti verso la fine e un algoritmo decente non fa di questi errori) poi con una tabella degli opcode delle istruzioni x86 ho iniziato un po' a disassemblarlo in maniera brutale e mi è sembrato avesse un senso.. sembrava il codice di una funzione che restituisse qualcosa

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:39
da Ansa89
Il codice macchina è una sequenza di zeri e uni che il processore è in grado di capire (ovviamente questa sequenza può essere rappresentata anche in ottale, o esadecimale per comodità); invece il codice assembler è codice scritto secondo un qualche standard assembly (es: AT&T).
In parole povere: l'assembly è un linguaggio di programmazione (tipo il C, il java, ecc); il codice macchina è il risultato della compilazione del codice sorgente.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:40
da Plaoo
Non lo provo solamente perchè non posso fare copia-incolla visto che si tratta di un immagine.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:47
da Ansa89
Plaoo ha scritto:Non lo provo solamente perchè non posso fare copia-incolla visto che si tratta di un immagine.

:lol:
Tieni e divertiti anche tu.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 16:52
da Plaoo
Ansa89 ha scritto: :lol:
Tieni e divertiti anche tu.

AHAHAHAH Grazie mille!!! E io che volevo uscire a farmi un giro :lol: :lol:

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 17:08
da miklos
ecco il disassemblato prodotto con ndisasm -b 32 test.com

Codice: Seleziona tutto

00000000  EB04              jmp short 0x6
00000002  AF                scasw
00000003  C2BFA3            ret 0xa3bf
00000006  81EC0001          sub sp,0x100
0000000A  0000              add [bx+si],al
0000000C  31C9              xor cx,cx
0000000E  880C              mov [si],cl
00000010  0CFE              or al,0xfe
00000012  C1                db 0xc1
00000013  75F9              jnz 0xe
00000015  31C0              xor ax,ax
00000017  BAEFBE            mov dx,0xbeef
0000001A  AD                lodsw
0000001B  DE02              fiadd word [bp+si]
0000001D  040C              add al,0xc
0000001F  00D0              add al,dl
00000021  C1CA08            ror dx,0x8
00000024  8A1C              mov bl,[si]
00000026  0C8A              or al,0x8a
00000028  3C04              cmp al,0x4
0000002A  881C              mov [si],bl
0000002C  0488              add al,0x88
0000002E  3C0C              cmp al,0xc
00000030  FEC1              inc cl
00000032  75E8              jnz 0x1c
00000034  E95C00            jmp word 0x93
00000037  0000              add [bx+si],al
00000039  89E3              mov bx,sp
0000003B  81C30400          add bx,0x4
0000003F  0000              add [bx+si],al
00000041  5C                pop sp
00000042  58                pop ax
00000043  3D4141            cmp ax,0x4141
00000046  41                inc cx
00000047  41                inc cx
00000048  7543              jnz 0x8d
0000004A  58                pop ax
0000004B  3D4242            cmp ax,0x4242
0000004E  42                inc dx
0000004F  42                inc dx
00000050  753B              jnz 0x8d
00000052  5A                pop dx
00000053  89D1              mov cx,dx
00000055  89E6              mov si,sp
00000057  89DF              mov di,bx
00000059  29CF              sub di,cx
0000005B  F3A4              rep movsb
0000005D  89DE              mov si,bx
0000005F  89D1              mov cx,dx
00000061  89DF              mov di,bx
00000063  29CF              sub di,cx
00000065  31C0              xor ax,ax
00000067  31DB              xor bx,bx
00000069  31D2              xor dx,dx
0000006B  FEC0              inc al
0000006D  021C              add bl,[si]
0000006F  06                push es
00000070  8A14              mov dl,[si]
00000072  06                push es
00000073  8A34              mov dh,[si]
00000075  1E                push ds
00000076  8834              mov [si],dh
00000078  06                push es
00000079  8814              mov [si],dl
0000007B  1E                push ds
0000007C  00F2              add dl,dh
0000007E  30F6              xor dh,dh
00000080  8A1C              mov bl,[si]
00000082  16                push ss
00000083  8A17              mov dl,[bx]
00000085  30DA              xor dl,bl
00000087  8817              mov [bx],dl
00000089  47                inc di
0000008A  49                dec cx
0000008B  75DE              jnz 0x6b
0000008D  31DB              xor bx,bx
0000008F  89D8              mov ax,bx
00000091  FEC0              inc al
00000093  CD80              int 0x80
00000095  90                nop
00000096  90                nop
00000097  E89DFF            call word 0x37
0000009A  FF                db 0xff
0000009B  FF4141            inc word [bx+di+0x41]
0000009E  41                inc cx
0000009F  41                inc cx

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 17:57
da Plaoo
@Ansa89: tu mi hai passato un .com quando leggo int 80 che sarebbe interrupt per il richiamo delle syscall linux.

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 18:13
da Ansa89
Sì, infatti mi stanno venendo dei dubbi.
Però:

Codice: Seleziona tutto

$ file test.com
test.com: DOS executable (COM)

:-k

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 18:20
da zoros
provate a disassemblarlo a 64 bit, è molto più suggestivo, per la presenza di

Codice: Seleziona tutto

00000017  BAEFBEADDE        mov edx,0xdeadbeef

e per la comparazione delle stringhe "AAAA" e "BBBB"

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 18:22
da miklos
secondo me questi byte non rappresentano un eseguibile in se, ma del codice macchina da caricare in memoria tramite una programma ausiliare in c eppoi tramite puntatori(o qualcosa di simile) eseguirlo

Re: Provate a dare la soluzione

Inviato: gio dic 01, 2011 20:21
da sya54M
miklos ha scritto:secondo me questi byte non rappresentano un eseguibile in se, ma del codice macchina da caricare in memoria tramite una programma ausiliare in c eppoi tramite puntatori(o qualcosa di simile) eseguirlo

infatti l'ho provato e non si esegue un bel niente ne su wine e ne su una macchina virtuale win7 da semplicemente errore perchè non è un eseguibile