;file coclide.asm ;Note legali: ; ; *************************************************************************** ; * Copyright (C) 2006 by vitogambi * ; * vitogambi@gmail.com * ; * * ; * This program is free software; you can redistribute it and/or modify * ; * it under the terms of the GNU General Public License as published by * ; * the Free Software Foundation; either version 2 of the License, or * ; * (at your option) any later version. * ; * * ; * This program is distributed in the hope that it will be useful, * ; * but WITHOUT ANY WARRANTY; without even the implied warranty of * ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ; * GNU General Public License for more details. * ; * * ; * This program is free for individuals, * ; * You should have received a copy of the GNU General Public License * ; * along with this program; if not, write to the * ; * Free Software Foundation, Inc., * ; * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ; *************************************************************************** ;compilare da shell usando i comandi: ; ;[xx@localhost coclide]$ nasm -f elf coclide-K10.0.asm ;[xx@localhost coclide]$ ld -o coclide coclide-K10.0.o ; ;mandare in esecuzione col comando: ; ;[xx@localhost coclide]$ ./coclide ZMZS -n nick ; ; ; ;datacoclide.asm ;contiene i dati del programma coclide, oltre ad alcuni dati predefiniti utili per ;eventuali sessioni di debug o di verifiche. ;integrati vi sono tutti i dati necessari per una sessione debug come debug.exe del dos. ; section .data ;qui abbiamo le Kiavi predefinite (standard); si raccomanda di non modificarle; cambiarle ;da comando durante la fase di esecuzione. Si avra' lo stesso livello di sicurezza ma ;lasciando queste kiavi standard invariate sara' possibile dialogare in modalita' CODEC con ;altri coclide; in caso di modifica anche di una sola di queste chiavi il programma sara' ;inutilizzabile. ;Si rammenta che la modifica delle chiavi da programma si ottiene facilmente col comando: ; /CODE[C] Kxxxxxxxxxxxx per esempio, volendo cammbiare la Kiave8 lasciando invariate le altre ; si dara' il comando: ; /CODE[C] Kiiiiiiin nuova chiave_otto da usare integralmente ; Inoltre cambiando il PIN code o la sequenza delle keys si hanno 1.000.000 X !13 ovvero oltre sei ; milioni di miliardi di combinazioni diverse con le sole chiavi di default. ; allinea_k1 times 1000 db 0 ;K1s db "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;K1s db "cococococococococococococococococococococo" ;K1s db "abcdefghijklmnopqrstuvwxyz" K1s db "colli\n@1et4tasCa bcdefg3hij k�lmno �pqrstuv2wxyzo1Li Natac4a# laAbanzlamucola n�9ampkldgsh yef cgszysup erca,li&fragil iol56esZxtichke spi WraliQdo,so3a*afdghs mbdi+�mbarabQa h&2gi:gW ig8o_gotrxe^sEim miett epat!5X6dKOs75alosco Lt us[asdp}cho8ylanae inoltre u;n po di74 caZl!abrano che non fXa mainala scupaVuyMlaGara!BolTa sBcaNzu�nata capiNlLi|era scaz>unuta- p�iu o- vir?gola 5,lana.punto" lK1s dd $ - K1s ;K2s times 1000 db 0 ;K2s dd 0,0,0,0,0,0,0,0 ;K2s db 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 ;K2s db "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" K2s db "KLMJUHIYTREpUMBORECQOLRH-RZH",245,"ZAFDLNEDMF",157,"MCOZPIZUEZH^'?0=9)8(7/7&5%4$3�",179,"2!216\|s�-_-������++*��lL.:,;�0��sp",219,"erandosperanzoso.,clko985774",197,163,"66645535542443312!|!6//654(9==)'^?*�����#��� ciaulonio.-.,nl�l�+�+�^-��g�",123,"�jlh,mvbchfgdtxcdgsdkaslokesbxhd254005'=��d�� ��spkekitgdtf,.lkd",28,"hsyjd",193,"ukfoll�clsc",138,"bnfhjdkkfl",232,115,"skokijehd&",20,"677&544��22�9?0'/8&&�*������@#+��skkhhakjkkainccm" lK2s dd $ - K2s ;80 chars ;K3s db 1,2,3,4,5,6 ;"12345678" ;K3s db "aaaaaaaaaaaaaaaaaaaa" K3s db "nel mezzo del cammin di nostra vita mi ritrovai per una selva oscura chela diritta via era smarrita e c'era una zorba nera nfransciunata MENTRE LA DONZELLETTA VIENDALLACAMPAGNAIN sul calar del sole e reca in mano un mazzolin di rose e di viole,. Onde siccome suole Silvia rimembri ancora ecc ecc. solo la gente malvagia sente la necessita' dell'esistenza di un Dio che lo assolva e lo perdoni dei suoi misfatti, e sara' vero che i nani sono carogne di sicuro perche' hanno il cuore troppo vicino al buco del culo?" lK3s dd $ - K3s ;K4s db 0,1,0,0,0,0,0,0 K4s db 01010101b, 00100100b, 00010001b, 00001000b, 10000010b, "ABRACADABRAAPRITISESAMOHCHAFTVBLABLA e ora raccontiamo la bella storia di come e' nata l'idea di questa K4 che opera nel seguente modo: I bit delle chiavi sono i bit che compongono questo messaggio, per esempio al lettera B che ha codice binario 01000010 entra in gioco nel seguente modo: immaginiamo di voler criptare la parola seguente -> CORNELIO ebbene come si vede in corrispondenza degli 1 ci sono le lettere O e I mentre alle altre lettere corrispondono gli zeri di conseguenza la O e la I subiranno uno swap delle coppie dei bit 12 34 56 78 mentre le altre lettere subiranno un rotazione di un bit che quindi portera' i bit dalla sequenza originaria 87654321 alla nuova sequenza 18765432. capito il meccanismo? naturalmente tutto questo ripetuto sull'intera lunghezza del messaggio e per tutta la lunghezza della chiave, a partire dal pointer casuale generato dal numero random ecc. ecc. leggetevi l'help per maggiori dettagli." lK4s dd $ - K4s ;34 K5s db "NON TI CURAR DI LOR MA GUARDA E PASSA e MMUCCT STAH ZORBAnzrbugliata OkkkjsHgtFrddTTCCVah bbdh NNCKML SLP��D��SP E RTTIJGNMVFDLSKAL" db 87,30,33,49,67,17,22,13,12,15,91,9,8,142,17,22,13,12,18,27,33,12,15,91 db " e come se non bastasse ecco ancora altri caratteri per la chiave5 1234567890, abcdefghijklmnopqrstuvz ancora ALTRI CODICI" db 44,4,41,23,19,1,7,15,13,79,121,223,119,217,115,254,2,5,13,17,49,212,223,250,243,149,198,197,190,91,0,12,1,23,230,22,222,29,229 lK5s dd $ - K5s ;K6s db "AAAAAAAAAA" ;K6s db 0,0,0,0,0,0,0,0,0,0 K6s db "ma come balli bene bella bimba, sembri proprio zoppa bella bimba" db 13,15,13,79,121,1,28,78,8,99,97,123,1,2,3,5,6,7,16 db "e cosi via; se la frase e' finita si prosegue di nuovo a partire da 4, 8, 16, 32 ecc fino esaurimento del codice.Naturalmente nell'esempio sopra viene lasciata sempre la stessa frase originaria, in realta gia al primo passaggio 'ciao' potrebbe diventare ocia oppure aoci o iaoc o restare ciao." lK6s dd $ - K6s ;30 K7s db "ABCDEFGHIJKLMNOPQRSTUVWXYZ cifre e numeri non importa 123456765434567890'0ecc ecc" db 2,3,5,7,9,18,27,30,33,49,67,17,22,13,12,15,91,9,8,4,6,3,2,4,5,9,8,7,4,5,6,7,2 db 12,5,7,5,3,4,8,9,3,18,17,21,23,19,17,15,13 lK7s dd $ - K7s ;max valore dei bytes 240 (pari a 480/2 tagli con inversione della frase) K8s db "Hello baby! Come te la passi passando per questa selva oscura? Quesi brevi messaggi sono solo degli esempi di potenzialita' di coclide; basterebbero da soli a rendere infernale la sua risoluzione, ma pensa a questo messaggio sostituito a piacere da un utente con un messaggio assolutamente nuovo e persino privo di senso e di significato. E in piu eccoti altri caratteri casuali giano da solo a far la guerra bhs fjdhyr grtfsdh sjkdollekdhgs sjdjsiekd blablabla" lK8s dd $ - K8s ;28 K9s db "Chiave di traslazione i cui bit fanno traslare a gruppi di 8 bytes per volta i bytes del messaggio verso l'inizio; questa spiegazione ne e' gia' la chiave 9. e se non sei contento tricchebballacche e tricchebballacchete; ah dimenticavo i codici PIN e il codice di sequenza, che da soli basterebbero e avanzerebbero in fatto di sicurezza... oltre 6 mega.giga.ecc milioni di miliardi di combinazioni, e il punto di attacco viene calcolato con un algoritmo semplice ma efficacemente intrappolato all'interno del messaggio... ma diamine leggiti l'help e ci troverai tutte le spiegazioni minuziosamente dettagliate. Open e' piu sicuro" lK9s dd $ - K9s ;K0s db 0,0,0,0,0,0,0,0 ;K0s db 0xff,0xff,0xff,0xff K0s db "Se pensi che sia facile decodificare un messaggio CODEC di coclide senza conoscerne le chiavi, o che sia facile reperire le chiavi che chiunque potra' costruirsi come meglio ritiene opportuno, ti sbagli di grosso. Questo breve messaggio e' gia una chiave..... compresi i puntini naturalmente e in fase di esecuzione del programma potra' essere cambiata con lunghezza fino a 1 milione di caratteri e qualsiasi tipo di carattere, compreso questo codice zero",0,"si proprio zero; unico limite la RAM del tuo calcolatore; solo per motivi contingenti le chiavi le abbiamo limitate a 1 megabyte. Ovviamente anche le chiavi precedenti possono essere estese fino a 1 megabyte. e tanto per complicarti la vita eccoti alcuni codici di caratteri strani:",02,03,79,7,1,23,"Napoli 2* estratto hihihihiih, e pirla chi se li gioca." lK0s dd $ - K0s ;Chiavi extra attivabili da comando manuale: K11s db "chiave11 da attivare con un comando extra AK11 : esegue un ADD con chiave immediata o chiave estratta da File. Chi l'ha detto che Open Source sia meno sicuro? Questo coclide ne e' un esempio! leggete l'help allegato, e' tutto dettagliato minuziosamente nel suo funzionamento, eppure sta tutta qui la sua estrema sicurezza. Durante l'esecuzione sostituite una sola di queste chiavi a piacere, verificatene il funzionamento con VKXX e i vostri dati viaggeranno sicuri perche' il vero messaggio e' la chiave che avrete utilizzato; dopo la sessione codec distruggete entrambre le copie delle chiavi e nessuna potenza al mondo neppure arcana potra' mai risalire al messaggio originario." lK11s dd $ - K11s ;110 K12s db "Questa chiave12 e' da attivare anch'essa con un comando extra: comando AK12 ; se K12 e' attiva viene eseguita prima di K2 e subito dopo K1 e K3; sostanzialmente e' una K825 da usare specificatamente per caratteri alfabetici in quanto ricodifica con 5 bit gli 8 bit dei caratteri. Open source, e' il futuro delle comunicazioni codec" lK12s dd $ - K12s ;279 K13s db "this is la kiave 13; (mi piace mischiare inglese e italiano), Ma non preoccupatevi, potete mischiare tutte le lingue che volete. Questa chiave 13 per ora non e' attiva ne funzionante ma e' attivabile in futuro e funziona cosi: I primi 2 bit di ogni byte della chiave individuano il numero di byte interessati a una operazione di ROR o ROL, gli altri 5 bit identificano il numero di rotazioni sui bit da effettuare, l'ultimo bit definisce se ROR o ROL. Capitoooo?" lK13s dd $ - K11s act_K: act_K01 dd 1 act_K02 dd 1 act_K03 dd 1 act_K04 dd 1 act_K05 dd 1 act_K06 dd 1 act_K07 dd 1 act_K08 dd 1 act_K09 dd 1 act_K00 dd 1 act_K11 dd 0 act_K12 dd 0 act_K13 dd 0 sequenza_Kiavi_default: seq_kiavi_no_mod dd 1,3,12 seq_kiavi_mod dd 2,4,5,6,7,8,9,10,11,13 sequenza_Kiavi dd 1,3,12,2,4,5,6,7,8,9,10,11,13 key_is_attiva db 0,0,0,0 P1 dd 0 P2 dd 0 P1max dd 0 P1max_base dd 0 P3_7 dd 0 P3_8 dd 0 P3_9 dd 0 P3_7max dd 0 P3_8max dd 0 P3_9max dd 0 P3_7_p dd 0 P3_8_p dd 0 P3_9_p dd 0 P3_7max_p dd 0 P3_8max_p dd 0 P3_9max_p dd 0 P3 dd 0 P3i dd 0 P3v dd 0 P3max dd 0 P3max_K4 dd 0 P3_master dd 0 L1 dd 0 L2 dd 0 fatto_k1 dd 0 P1i dd 0 lungh_key_DK dd 0 errore_l_mesg dd 0 prov_K4 db 0 provv_1_max db 0 op_ebp dd 0 op_edi dd 0 ;CH1_4 e' il byte i cui bit servono alla kiave4 CH1_4 db 0 ;blocchi_Da8b_K4 quanti blocchi da 8 bytes (o meno) ci sono per DK4 Bda8 dd 0 NCR4 dd 0 Lchx4 dd 0 blocchi_Da8b_K4 dd 0 resto_blk_8b_DK4 dd 0 NCRIP_K4 dd 0 resto_NCRIP_K4 dd 0 no_e dd 0 no_s dd 0 provv_789 dd 0 msg_err_CODE db "Errore CODE! Controllare che sia tutto a posto prima di proseguire",0xa msg_err_CODE_l dd $ - msg_err_CODE ok_file_F dd 0 msg_accettato db "Il comando " msg_acc db " e' stato eseguito",0xA msg_acc_l dd $ - msg_accettato msg_seq_k789 db 0xa,"ATTENZIONE!",0xa db " Ricordarsi che scambiare le sequenze K7-K8-K9 con altre chiavi e' una operazione complessa...",0xa db " Sei sicuro di quello che fai? Rileggersi l'help completo se si hanno dei dubbi. ",0xa,0xa msg_seq_k789_l dd $ - msg_seq_k789 msg_HELP: db "Il client coclide accetta i seguenti comandi:",0xa db "/ComandoIRC = Esegue il comando IRC specificato, (join, mode, privmsg, nick ecc.)",0xA db "/ComandoCoclide = Esegue il comando coclide a 4 byte che puo' essere uno tra quelli di seguito specificati:",0xA db "/AK00 ... /AK13 = Attiva chiavi da 00 a 13. (Le chiavi da 1 a 10 sono gia' attive per default, K00 e K10 coincidono)",0xA db "/CPIN xxxxxx = Cambia il codice PIN generico da 0 a 999999",0xa db "/CP00 ... /CP13 xxxxxx = Cambia i codici PIN delle singole chiavi da 0 a 999999",0xa db "/CSEQ XX YY = Scambia la sequenza di codifica della chiave XX con la chiave YY --- sinonimo di /SEQK",0xA db "/DSEQ or /RSEQ = Ripristina la sequenza delle chiavi di default 1 3 12 2 4 5 6 7 8 9 10 11 13",0xA db "/DK00 ... /DK13 = Disattiva chiavi da 00 a 13. (Le chiavi 11, 12 e 13 sono disattivate per default)",0xA db "/EMSG ON | [OF] = Messaggi in formato Esteso ON oppure OFF",0xA db "/HELP = Esegue questo Help; il comando /help (minuscolo) esegue l'help del server",0xa db "/MSG2 nick|chan = Cambia destinazione di default dei messaggi",0xA db "/RPIN = Reset PIN CODE, resetta tutti i PIN CODE rimettendo i valori di default",0xa db "/RSTK = Esegue un reset di tutte le chiavi rimettendo le chiavi di default",0xa db "/SCOD = Set CODE MODE: Inizia una sessione CODEC",0xA db "/SEQK XX YY = Scambia la sequenza di codifica della chiave XX con la chiave YY --- sinonimo di /CSEQ",0xA db "/UCOD = Unset CODE MODE: Termina sessione CODEC",0xA db "/VERS = Versione N... del... e breve messsaggio di Copyright",0xA db "/VK00 ... /VK13 = Verifica le chiavi da 1 a 13 (la K00 e la K10 coincidono)",0xa db "/VPIN = Verifica tutti i codici PIN ",0xa db "/VSEQ = Verifica la sequenza delle chiavi e quali chiavi sono attive",0xA db "....",0xa db "/CODE Kxxxxxxxxxxxxx [chiave immediata digitata al volo]",0xa db "/CODE Fxxxxxxxxxxxxx nomefile [-s 3000] [-e 5000] dove x individua la posizione del numero di chiave che puo' essere:" db " void = i = invariata ------ " db "d = default ------ " db "n = nuova key ",0xa db " dove K = K(ch)iave immediata -------- F = chiave da File. -s = start_point -e = end_point",0xA db " 1� Es.: /CODE Kiiin Questa e' una key",0xa db " Cambiera' la quarta chiave in 'Questa e' una key'",0xa db " 2� Es. /CODE Fiiiiiin File.ext -s 100000 -e 300000",0xa db " Da File.ext saranno estratti come 7^ chiave 200.000 bytes a partire dalla pos. 100.000 fino alla pos. 300.000",0xA db "...",0xA db "N.B.:IMPORTANTE!!!! in questa versione sono implementate solo le prime 10 chiavi attive di default.",0xa msg_HELP_l dd $ - msg_HELP ;Help supplementari: db "/CODE[C] Fxxxxxxxxxxxx ",0xA db " Es. /CODE Fiin MioFile.ext [-s 3000] [-e 5000]",0xa db " dal quale vengono estratti come terza kiave 2000 caratteri a partire dalla posizione 3000 fino alla pos. 5000 del file MioFile.ext )",0xA db "-in caso di omissione di -s si intendera' per default inizio file",0xa db "-in caso di omissione di -e si intendera' per default la fine del file",0xa db "-in caso di omissione di entrambi verra' utilizzato l'intero file a partire dal primo byte fino a un massimo di 1 megabytes",0xa db "...",0xA db " La sessione CODEC e' valida solo per nick|chan di default (settabile col comando /MSG2 )",0xa db " Se durante una sessione CODEC attiva si vuole inviare un messaggio in chiaro a nick|chan di default si puo' ricorrere al comando:",0xa db " /PRIVMSG nick|chan :Il testo di un messaggio inviato utilizzando il comando /PRIVMSG viene inviato sempre in chiaro.",0xa ;msg_HELP_l dd $ - msg_HELP schema: rt0 db "____________________________________________________________________________________",0xa rt1 db "| EAX EBX ECX EDX ESI EDI EBP ESP |",0xa rt2 db "| xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx |",0xa rt3 db "| |",0xa rt4 db "| EIP CS DS ES SS FS GS EFLAGS ???????? SZ?H?P?C |",0xa rt5 db "| xxxxxxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxxxxxx xxxxxxxx |",0xa rt6 db "| 0 0 1 |",0xa rt7 db "|I iiiiiiii |",0xa rt8 db "|F ffffffff | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F |___________________|",0xa rt9 db "| | | |",0xA r1 db "| 00000000 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r2 db "| =====+10 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r3 db "| =====+20 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r4 db "| =====+30 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r5 db "| =====+40 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r6 db "| =====+50 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa r7 db "| =====+60 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr8 db "| =====+70 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa krs db "| | | |",0xA kr9 db "| =====+80 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr10 db "| =====+90 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr11 db "| =====+A0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr12 db "| =====+B0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr13 db "| =====+C0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr14 db "| =====+D0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr15 db "| =====+E0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr16 db "| =====+F0 | xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx | ........ ........ |",0xa kr17 db "|___________|______________________________________________________________________|",0xa kr18 db 0xa," Digitare 'q' e entro 90 secondi per uscire ed evitare il PING Timeout;",0xa," a vuoto per nuova pagina; 'h' per help",0xa,0x0a l_schema dd $ - schema fine_schema db 0xa,0xa,0xa,0xa,0xa,2025 msg_vers db "coclide - irc client. Copyright by vitogambi@gmail.com. Versione: " versione db "K10.0 del 04/Apr/2006",0xa l_msg_vers dd $ - msg_vers buff_struc_time: t_MMl db "X........ ",0xA,0,0 ; (Gennaio - Dicembre) MESEnome t_GGl db "Xxx ",0xA ;(Lun - Dom) GIORNOset t_GG db "00","/" ;00 GIORNOnum t_MMs db "00","/" ; MESEnum t_AAAA db "0000",0xA ; ANNO t_HHpre db " <" t_HH db "00",":" ; (da 00 a 24) ORE t_MMm db "00",":" ; (da 00 a 59) MIN t_SS db "00","> ",0xA ; (da 00 a 59) SEC t_GS db "00",0xA,0xA,0xA,0xA ;(da 0 a 6) t_giosetN dd 0 ; e' un doppione di t_ggNs t_ggN dd 0 ; (giorno da 1 a 31) t_ggNs dd 0 ; (giorno settimana da 0 a 6 ... Dom = 0 ... sab = 6 ) t_mmN dd 0 ; (mese da 1 a 12) t_aaN dd 0 ; (anno da 0 a 4miliardiecc) t_hhN dd 0 ; ore t_MMnN dd 0 ; min t_ssN dd 0 ; sec ;struct sock------- ;struttura socket ;socket su sys_call 66h ---> eax ;#define SYS_SOCKET 1 /* sys_socket(2) */ ;#define SYS_BIND 2 /* sys_bind(2) */ ;#define SYS_CONNECT 3 /* sys_connect(2) */ ;#define SYS_LISTEN 4 /* sys_listen(2) */ ;#define SYS_ACCEPT 5 /* sys_accept(2) */ ;#define SYS_GETSOCKNAME 6 /* sys_getsockname(2) */ ;#define SYS_GETPEERNAME 7 /* sys_getpeername(2) */ ;#define SYS_SOCKETPAIR 8 /* sys_socketpair(2) */ ;#define SYS_SEND 9 /* sys_send(2) */ ;#define SYS_RECV 10 /* sys_recv(2) */ ;#define SYS_SENDTO 11 /* sys_sendto(2) */ ;#define SYS_RECVFROM 12 /* sys_recvfrom(2) */ ;#define SYS_SHUTDOWN 13 /* sys_shutdown(2) */ ;#define SYS_SETSOCKOPT 14 /* sys_setsockopt(2) */ ;#define SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */ ;#define SYS_SENDMSG 16 /* sys_sendmsg(2) */ ;#define SYS_RECVMSG 17 /* sys_recvmsg(2) */ ;per recv: mov eax,102 ;0x66 ; mov ebx,10 ;funzione 10 recv(int s, void *buf, size_t len, int flags) ; mov ecx,args_per_recv ;struttura args_per_recv: ;in ecx arg_r0 dd 0 ;????? sock si.... numero di sock? arg_r1 dd 0 ;????? ptr_2_buffer si suffer_2_recv_dopo arg_r2 dd 512 ;????? lungh_buffer? arg_r3 dd 0 ;??? ;finalemnte FLAGS 0x40 MSG_NOBLOCKING arg_r4 dd 0 ;??? arg_r5 dd 0 ;? fino a 6 args da passare in caso di chiamate SYS_SOCKET da 1 a 17 ;Flags args: ;in ecx arg0 dd 2 ;AF_INET arg1 dd 1 ;SOCK_STREAM arg2 dd 6 ;IPPPROTO_TCP o Socket Option Level 6=TCP arg3 dd 0 ; arg4 dd 0 arg5 dd 0 ; fino a 6 args da passare in caso di chiamate SYS_SOCKET da 1 a 17 sock dd 0 ;fd di socket sock_ID ;---DA VERIFICARE E CORREGGERE------------- ;0x66 --> eax ;0x3 --> ebx subfunzione 3 CONNECT ;ptr args_Conn ---> ecx server: AF_INETs dw 0x2 port1 dw 0x0B1A ;6667 ;ircserver1 dd 0x745D33E ;irc1.tin.it ;ircserver1 dd 0x945D33E ;irc2.tin.it ;ircserver1 dd 0xE649D33E ;era 0x945D33E ;irc2.tin.it NATOI inverso ;ircserver1 dd 0x645D33E ;irc3.tin.it ircserver1 dd 0x2563C8D5 ;irc.tiscali.it riemp_serv times 100 db " " zero_term_serv db 0 server_l dd $ - server args_Conn: arg0C dd 0 ; sock_ID arg1C dd 0 ; ptr su irc_server1 arg2C dd 0 ; ptr su server_l venti_bytes1 db "12345678901234567890" join db "JOIN " where_2_join db "#coclide ",0x0D,0x0A join_l dd $ - join no_join dd 0 ;0 = ok join 1 = No_join nick db "NICK " nickn db "sonoio^^^^ ",0x0D,0x0A nick_l dd $ - nick user db "USER " ident db "ioi1 " ;-i user1 db "ioi2 " ;-u userid db "ioi3 " ;-d realname db "ioi4 ",0x0D,0x0A ;-r user_l dd $ - user flag_codec dd 0 ;0 = no codec 1 = codec venti_bytes db "12345678901234567890" buffer_2send db "PRIVMSG " ;8 where_2_msg db "#coclide :" ;20 buffer_2send_dopo times 480 db 0 poi2b2s db 0,0,0xa,0x0a,0x0a popipoi db 0x0a,0x0a,0,0,0,0,0,0,0,0,0,0,0,0,0 Kripta dd 0 ;0 = UNCOD 1=CODEC mesg_pulito_0 db " < " canale2_pulito db "PRIVMSG canale >: " mesg_pulito times 512 db 0 mesg_estesi dd 1 ;default 1 messaggi in formato esteso (ora nick!ident@host... ecc" Testata_msg_pul dd 48 ;b2s_l dd $ - buffer_2send b2s_dopo times 480 db 0 ping db "PING" pong db "PONG" buffer_2recv times 510 db 0 rb2r db 0xA,0xA pong_l dd $ - pong l_header dd 0 char_bel times 100 db 7 ;---DA CORREGGERE---------------- ;-------fine sock struc msg_err_file db 0xA,"REGISTRO EAX HEX... " codice_errore db "--------",0xA,0xA,0xA,0xA msg_ascizza db "VAL. ASCII di EAX: " asci4 db " ",0xA,0xA,0xA,0xA mask1 dd 0x00000000 ;access mode 00 = read anly mask2 dd 0x00000666 ;rw by owner 400+200 e by group 40+20 sara' vero ;mask1_a dd 0x00000777 ;modo di accesso mask1_w dd 0x00000201 ;access mode 2000 = append 100 = create 001 = Write Only ;flag permmessi mask2_w dd 0x000001B6 ;mask2_w dd 0x000001A0 ;rw by owner cazzate nere funziona su 9 bit se lo crea err dd 0 fd1 dd 0 b_letti dd 0 EOF1 dd 0 fd_generico dd 0 tot_conn dd 0 tot_connA db "##########",0xA,0xA provv1 dd 0 provv2 dd 0 provv dd 0 edi_provv dd 0 ebx_provv dd 0 eax_provv dd 0 buff_std_prova db "PRIVMSG " ;8 can_std_prova db "#canmio :" ;20 provv_buff times 480 db 0x41 fin_buff_stdprv db 0xd,0xA riemp_buff_prov times 480 db 0 ggl: db "Dom " db "Lun " db "Mar " db "Mer " db "Gio " db "Ven " db "Sab " db "Dom ",0xA,0xA mese: db "Gennaio ",0 db "Febbraio ",0 db "Marzo ",0 db "Aprile ",0 db "Maggio ",0 db "Giugno ",0 db "Luglio ",0 db "Agosto ",0 db "Settembre",0 db "Ottobre ",0 db "Novembre ",0 db "Dicembre ",0 mes: db "Jan " dd 1 giorn dd 31 db "Feb " dd 2 dd 28 db "Mar " dd 3 dd 31 db "Apr " dd 4 dd 30 db "May " dd 5 dd 31 db "Jun " dd 6 dd 30 db "Jul " dd 7 dd 31 db "Aug " dd 8 dd 31 db "Sep " dd 9 dd 30 db "Oct " dd 10 dd 31 db "Nov " dd 11 dd 30 db "Dec " dd 12 dd 31 giorni_mese dd 0 Indirizzo db "Indirizzo " indA db "######## : " numindA db "######## ",0xA,0xA ;tot32 file_name_cod times 256 db 0 lungh_nome_file_F dd 0 lungh_buff_file_F dd 0 ptr1_fn_cod dd 0 ptr2_fn_cod dd 0 new_line1 db 0xA,0xD bisest dd 0 sono_qui dd 0 pre_prova1 db "AAAAAAAAAAAAAAAA" ;prova1 db 0,0,0,0x50,0x0E8,0x32,0,0,0,0x89,0x0C6,0,0,0,0,0 ;0x58,0x0E8,0x5D,0x07,0 prova1 db 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 prova1a db 57,58,59,60,61,62,63,64,65,66,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101 prova1aa db 102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119 prova1b db 120,121,122,123,124,125,126,127 msg_few_par: db 0xa db "================================================================================================",0xa,0xa db "Esempio di avvio di una sessione coclide standard:",0xa,0xa db "./coclide ZMZS -n tuo_nick",0xa,0xa db "attendere qualche secondo che si sia connessi al server, quindi:",0xa,0xa db "/JOIN #chan",0xa db "/MSG2 nick | #chan",0xa db "/SCOD",0xa,0xa db " ... e buona conversazione coclide....",0xa,0xa db "/HELP per saperne di piu",0xa db "/UCOD per terminare la sessione coclide",0xa db " Ctrl+C per uscire",0xa,0xa,0xa db " ...... ",0xa,0xa,0xa ; db "================================================================================================",0xa,0xa db "La sintassi completa e':",0xA,0xa db "./coclide ZMZS [-s xxx.xxx.xxx.xxx(ircServer)] [-p Port] [-n Nickname] [-i Ident] [-r Realname] [-u User] [-d useriD] [+j]",0xA,0xa ; db " (ZMZS Only = default session)",0xa db " +j Senza opzioni = /join #coclide ",0xA,0xa db "================================================================================================",0xa,0xa msg_few_par_l dd $ - msg_few_par tin_dot1 db "62.211.69.7",0 tin_dot2 db "62.211.69.9",0 tin_dot3 db "62.211.69.6",0 ptr_2_server dd 0 server_numero_dotted db "xxx.xxx.xxx.xxx",0 ptr_2_port dd 0 ptr_2_nick dd 0 ptr_2_realname dd 0 ptr_2_user dd 0 ptr_2_userid dd 0 ptr_DK4 dd 0 p_file_iniziale dd 0 N_par dd 0 input_msg db "Digitare INDIRIZZO VALORE ( XX YY ) ",0xA,0xa input_msg_dumpa db "Digitare indirizzo (da 00000000 a FFFFFFFF) ",0xA,0xA input_msg_I db "Digitare nuovo indirizzo di Inizio file (in HEX XXXXXXXX) ",0xA,0xA input_msg_F db "Digitare nuovo indirizzo di Fine file (in HEX XXXXXXXX) ",0xA,0xA ;input_msg_help db "h=help ; D=Dumpa a XXXXXXXX ; M|m= modifica valore memoria XX YY ; W=Write file ; u=pagina Up di 256 bytes ; =pagina Down di 256 bytes ; I=Nuovo inizio file ; F=Nuova fine file ; q|x=EXIT",0xa,0xA input_msg_help db " h=help ; D=Dumpa a XXXXXXXX ; M|m= modifica valore memoria XX YY ; ............ ; u=pagina Up di 256 bytes ; =pagina Down di 256 bytes ; ................... ; ................ ; q|x=EXIT",0xa,0xA ok_scritto db "OK il Buffer � stato scritto su file ",0xA val_fin dd 0 conta dd 0 buff_provv times 256 db 0 validate_file dd 0 fd_W1 dd 0 riempitivo times 2000 db "Z" inizio_buff dd 0 ;l'inizio del buff puo spostarsi indietro fino a 10 mb inizio_buff1 dd 0 ;INIZIO BUFF ORIGINALE fine_buff1 dd 0 ;FINE BUFF ORIGINALE fine_buff dd 0 ;la fine del buffer puo arrivare fino al limite superiore dei 30 mega byte_rec db 0 attiva db 0 timer dd 0 timer4 dd 0 oltretim times 256 db 0 timer1 dd 0 timer5 dd 0 quanti_bytes dd 0 primo_byte dd 0 %define DATAOFF(addr) byte ebp + ((addr) - score) host1 db "/usr/bin/host",0 par_host1p dd 0 dd 0 par_host1d db "irc.tin.it",0 par2_host1p dd 0 dd 0 par2_host1d db "irc.tin.it",0 times 32 db " ",0 times 32 db " ",0 times 32 db " ",0 times 32 db " ",0 times 32 db " ",0 host1_l dd $ - host1 primo_pass dd 0 offset_inizio_F dd 0 offset_fine_F dd 0 l_buff_da_cryptare dd 0 lungh_kiave_attuale dd 0 Ptr_2_buffKeys_attuale dd 0 Ptr_2_buffKeys_precedente dd 0 l_buff_da_DE_cryptare dd 0 Ptr_2_buffKeys_attuale_2_DK dd 0 mesg_seq_kiavi db 0xa,"Sequenza Chiavi:",0xa,0xa," " seq_tutte db ".. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. ",0xa,0xa ;seq_dopo_tutte db "Chiavi attive : " ;seq_attive db ".. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. ",0xa,0xa l_mesg_seq_kiavi dd $ - mesg_seq_kiavi seq_dopo_tutte db "Chiavi attive : " seq_attive db ".. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. ",0xa,0xa mesg_PIN_CODE db "Codici PIN :",0x0a CPIN_GEN_msg db "CPGEN XXXXXXxxxx",0x0a CPIN_01_msg db "PIN01 XXXXXXxxxx",0x0a CPIN_02_msg db "PIN02 XXXXXXxxxx",0x0a CPIN_03_msg db "PIN03 XXXXXXxxxx",0x0a CPIN_04_msg db "PIN04 XXXXXXxxxx",0x0a CPIN_05_msg db "PIN05 XXXXXXxxxx",0x0a CPIN_06_msg db "PIN06 XXXXXXxxxx",0x0a CPIN_07_msg db "PIN07 XXXXXXxxxx",0x0a CPIN_08_msg db "PIN08 XXXXXXxxxx",0x0a CPIN_09_msg db "PIN09 XXXXXXxxxx",0x0a CPIN_10_msg db "PIN10 XXXXXXxxxx",0x0a CPIN_11_msg db "PIN11 XXXXXXxxxx",0x0a CPIN_12_msg db "PIN12 XXXXXXxxxx",0x0a CPIN_13_msg db "PIN13 XXXXXXxxxx",0x0a,0xa l_mesg_PIN_CODE dd $ - mesg_PIN_CODE mesg_som_PIN_CODE db "Somma cifre H Codici PIN :",0x0a som_CPIN_GEN_msg db "SMGEN XXXXXXxxxx",0x0a som_CPIN_01_msg db "SOM01 XXXXXXxxxx",0x0a som_CPIN_02_msg db "SOM02 XXXXXXxxxx",0x0a som_CPIN_03_msg db "SOM03 XXXXXXxxxx",0x0a som_CPIN_04_msg db "SOM04 XXXXXXxxxx",0x0a som_CPIN_05_msg db "SOM05 XXXXXXxxxx",0x0a som_CPIN_06_msg db "SOM06 XXXXXXxxxx",0x0a som_CPIN_07_msg db "SOM07 XXXXXXxxxx",0x0a som_CPIN_08_msg db "SOM08 XXXXXXxxxx",0x0a som_CPIN_09_msg db "SOM09 XXXXXXxxxx",0x0a som_CPIN_10_msg db "SOM10 XXXXXXxxxx",0x0a som_CPIN_11_msg db "SOM11 XXXXXXxxxx",0x0a som_CPIN_12_msg db "SOM12 XXXXXXxxxx",0x0a som_CPIN_13_msg db "SOM13 XXXXXXxxxx",0x0a,0x0a l_mesg_som_PIN_CODE dd $ - mesg_som_PIN_CODE PIN_CODE_d dd 123456 PIN_COD01_d dd 102031 PIN_COD02_d dd 234567 PIN_COD03_d dd 355678 PIN_COD04_d dd 402034 PIN_COD05_d dd 507035 PIN_COD06_d dd 632570 PIN_COD07_d dd 422913 PIN_COD08_d dd 919978 PIN_COD09_d dd 143259 PIN_COD10_d dd 987654 PIN_COD11_d dd 879543 PIN_COD12_d dd 609977 PIN_COD13_d dd 731598 PIN_PROVV_PTR dd 0 som_PIN_CODE dd 0 PIN_CODG dd 0 PIN_COD_XX: PIN_CODE dd 123456 PIN_COD01 dd 102031 PIN_COD02 dd 102032 PIN_COD03 dd 102033 PIN_COD04 dd 102034 PIN_COD05 dd 102035 PIN_COD06 dd 102036 PIN_COD07 dd 102037 PIN_COD08 dd 102038 PIN_COD09 dd 102039 PIN_COD10 dd 102040 PIN_COD11 dd 102041 PIN_COD12 dd 102042 PIN_COD13 dd 102043 som_PIN_COD01 dd 0 som_PIN_COD02 dd 0 som_PIN_COD03 dd 0 som_PIN_COD04 dd 0 som_PIN_COD05 dd 0 som_PIN_COD06 dd 0 som_PIN_COD07 dd 0 som_PIN_COD08 dd 0 som_PIN_COD09 dd 0 som_PIN_COD10 dd 0 som_PIN_COD11 dd 0 som_PIN_COD12 dd 0 som_PIN_COD13 dd 0 CRIP dd 0 ;ognuno lo modifica col proprio CPIN e lo lascia al successivo ; CRIP contiene sempre NUM_RAND XOR CPIN (generico) lungh_kiave_attuale_01 dd 0 lungh_kiave_attuale_02 dd 0 lungh_kiave_attuale_03 dd 0 lungh_kiave_attuale_04 dd 0 lungh_kiave_attuale_05 dd 0 lungh_kiave_attuale_06 dd 0 lungh_kiave_attuale_07 dd 0 lungh_kiave_attuale_08 dd 0 lungh_kiave_attuale_09 dd 0 lungh_kiave_attuale_10 dd 0 lungh_kiave_attuale_11 dd 0 lungh_kiave_attuale_12 dd 0 lungh_kiave_attuale_13 dd 0 Ptr_2_buffKeys_attuale_01 dd 0 Ptr_2_buffKeys_attuale_02 dd 0 Ptr_2_buffKeys_attuale_03 dd 0 Ptr_2_buffKeys_attuale_04 dd 0 Ptr_2_buffKeys_attuale_05 dd 0 Ptr_2_buffKeys_attuale_06 dd 0 Ptr_2_buffKeys_attuale_07 dd 0 Ptr_2_buffKeys_attuale_08 dd 0 Ptr_2_buffKeys_attuale_09 dd 0 Ptr_2_buffKeys_attuale_10 dd 0 Ptr_2_buffKeys_attuale_11 dd 0 Ptr_2_buffKeys_attuale_12 dd 0 Ptr_2_buffKeys_attuale_13 dd 0 Ptr_2_buffKeys_attuale_2_DK_01 dd 0 Ptr_2_buffKeys_attuale_2_DK_02 dd 0 Ptr_2_buffKeys_attuale_2_DK_03 dd 0 Ptr_2_buffKeys_attuale_2_DK_04 dd 0 Ptr_2_buffKeys_attuale_2_DK_05 dd 0 Ptr_2_buffKeys_attuale_2_DK_06 dd 0 Ptr_2_buffKeys_attuale_2_DK_07 dd 0 Ptr_2_buffKeys_attuale_2_DK_08 dd 0 Ptr_2_buffKeys_attuale_2_DK_09 dd 0 Ptr_2_buffKeys_attuale_2_DK_10 dd 0 Ptr_2_buffKeys_attuale_2_DK_11 dd 0 Ptr_2_buffKeys_attuale_2_DK_12 dd 0 Ptr_2_buffKeys_attuale_2_DK_13 dd 0 struct_tms: t_u dd 0 ; /* user time */ t_s dd 0 ; /* system time */ t_cu dd 0 ; /* user time of children */ t_cs dd 0 ; /* system time of children */ buff_crypt_start: db "PRIVMSG " where_2_msg_K db "provaasm2 :" ;20 buff1_2K_defa db "BAU BAU",0xd, "messaggio",0xa, "per l'altro bot",0,"ciao" ;01,02,03,04,05,06,07,08,09,0xb,0xc,14,15,16,17,18,19,20,31,22,23,24,25,26,27,28,29,30,31,32,33,34,35 buffw2kdopo times 2048 db 0 codice_0AD db 0x3E,41,0xD3,0x98 identificativo_0AD db 14,1 ;1 puo essere 1= 0 11 = A 14 = D buff_norm_prova times 512 db 0x41 section .bss score: resd 1 ;timer: resd 4 fdset: resd 32 fdset1 resd 32 K1u resb 2000000 ;chiave Ultima K2u resb 2000000 ;chiave Ultima K3u resb 2000000 ;chiave Ultima K4u resb 2000000 ;chiave Ultima K5u resb 2000000 ;chiave Ultima K6u resb 2000000 ;chiave Ultima K7u resb 2000000 ;chiave Ultima K8u resb 2000000 ;chiave Ultima K9u resb 2000000 ;chiave Ultima K0u resb 2000000 ;chiave Ultima K11u resb 2000000 ;chiave Ultima K12u resb 2000000 ;chiave Ultima K13u resb 2000000 ;chiave Ultima K1a resb 2000000 ;chiave Attiva K2a resb 2000000 ;chiave Attiva K3a resb 2000000 ;chiave Attiva K4a resb 2000000 ;chiave Attiva K5a resb 2000000 ;chiave Attiva K6a resb 2000000 ;chiave Attiva K7a resb 2000000 ;chiave Attiva K8a resb 2000000 ;chiave Attiva K9a resb 2000000 ;chiave Attiva K0a resb 2000000 ;chiave Attiva K11a resb 2000000 ;chiave Attiva K12a resb 2000000 ;chiave Attiva K13a resb 2000000 ;chiave Ultima buff_provv_32k resb 32000 buff_vuoto_2mega resb 2000000 riempi1 resb 2000000 buff1 resb 3000000 ;-------------------------------- ;������������������������������������������������������������������������������� ;������������������������������������������������������������������������������� ;-------------------------------- section .text global _start _start: pop eax ; 0-Get the number of arguments cmp al,2 jae is_2_n jmp fine_con_msg is_2_n: is_2: mov [N_par],eax pop ebx ; 1-get command line pop ebx ; 2-Get p* to 1� parametro ZMZS cmp dword [ebx],"ZMZS" jae is_2_p jmp fine_con_msg is_2_p: mov ecx,[N_par] sub ecx,2 ;i parametri gia estratti, command line e ZMZS jz near is_2_vai_dopo cmp ecx,16 ja near fine_con_msg is_2_p_dopo_set: mov eax,[err] cmp eax,0 ;jne near fine_con_msg pop eax xor ebx,ebx mov bx,[eax] cmp bx,"-s" je near vai_is_server cmp bx,"-p" je near vai_is_port cmp bx,"-n" je near vai_is_nick cmp bx,"-r" je near vai_is_realname cmp bx,"-u" je near vai_is_user cmp bx,"-d" je near vai_is_userid cmp bx,"-i" je near vai_is_ident cmp bx,"+j" je near vai_is_join jmp fine_con_msg va_a_visualizza: ; mov eax,"BENE" ; call visualizza ; jmp fine ;mov eax,ebx ;call visualizza ;jmp fine jmp fine_con_msg ;---------- vai_is_server: ; mov eax,"Is_s" ; call visualizza ; jmp fine pop esi ;ptr 2 parametro mov dword [err],0 call Natoi bswap eax mov [ircserver1],eax ;call errorizza mov eax,[err] cmp eax,0 jne near fine_con_msg dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_port: ;mov eax,"Is_p" pop eax ;ptr parametro mov eax,[eax] call numerizza_eax bswap eax ror eax,16 cmp eax,0xffff ja near fine_con_msg mov [port1],ax dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_nick: mov dword [err],0 ;mov eax,"Is_n" ;call visualizza mov esi,nickn call pulisci_con_space_16_bytes pop esi pusha mov ecx,16 ;max 16 chars mov edi,nickn cont_vai_is_nick mov al,[esi] cmp al,0 je fine_vai_nick mov [edi],al inc esi inc edi dec ecx jnz cont_vai_is_nick fine_vai_nick: cmp ecx,16 jb fine_vai_nick_ok1 mov dword [err],1 fine_vai_nick_ok1: popa dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_realname: mov dword [err],0 ;mov eax,"Is_r" ;call visualizza mov esi,realname call pulisci_con_space_8_bytes pop esi ;ptr parametro r pusha mov ecx,8 ;max 8 chars mov edi,realname cont_vai_is_nick_ir mov al,[esi] cmp al,0 je fine_vai_nick_ir mov [edi],al inc esi inc edi dec ecx jnz cont_vai_is_nick_ir fine_vai_nick_ir: cmp ecx,8 jb fine_vai_nick_ok1_ir mov dword [err],1 fine_vai_nick_ok1_ir: popa dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_user: mov dword [err],0 ;mov eax,"Is_u" ;call visualizza mov esi,user1 call pulisci_con_space_8_bytes pop esi ;ptr parametro pusha mov ecx,8 ;max 8 chars mov edi,user1 cont_vai_is_nick_iru: mov al,[esi] cmp al,0 je fine_vai_nick_iru mov [edi],al inc esi inc edi dec ecx jnz cont_vai_is_nick_iru fine_vai_nick_iru: cmp ecx,8 jb fine_vai_nick_ok1_iru mov dword [err],1 fine_vai_nick_ok1_iru: popa dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_userid: mov dword [err],0 ;mov eax,"Is_d" ;call visualizza ;mov eax,ecx ;call errorizza mov esi,userid call pulisci_con_space_8_bytes pop esi ;ptr parametro pusha mov ecx,8 ;max 8 chars mov edi,userid cont_vai_is_nick_irud: mov al,[esi] cmp al,0 je fine_vai_nick_irud mov [edi],al inc esi inc edi dec ecx jnz cont_vai_is_nick_irud fine_vai_nick_irud: cmp ecx,8 jb fine_vai_nick_ok1_irud mov dword [err],1 fine_vai_nick_ok1_irud: popa dec ecx jnz near vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_ident: mov dword [err],0 ;mov eax,"Is_i" ;call visualizza ;mov eax,ecx ;call errorizza mov esi,ident call pulisci_con_space_8_bytes pop esi ;ptr 2 parametro pusha mov ecx,8 ;max 8 chars mov edi,ident cont_vai_is_nick_i mov al,[esi] cmp al,0 je fine_vai_nick_i mov [edi],al inc esi inc edi dec ecx jnz cont_vai_is_nick_i fine_vai_nick_i: cmp ecx,8 jb fine_vai_nick_ok1_i mov dword [err],1 fine_vai_nick_ok1_i: popa dec ecx jnz vedi_se_fine_par jmp is_2_vai_dopo ;---------- vai_is_join: mov dword [no_join],1 ;mov eax,"Is_u" ;call visualizza ;mov esi,where_2_join; user1 ;call pulisci_con_space_16_bytes ;mp fine jmp near vedi_se_fine_par ;jmp is_2_vai_dopo ;------------ vedi_se_fine_par: dec ecx jz is_2_vai_dopo jmp is_2_p_dopo_set ;-----------------gia SISTEMAto--------- is_2_vai_dopo: ; mov eax,"BENE" ; call visualizza ;jmp fine mov eax,1 mov ebx,2 mov ecx,3 mov edx,4 mov ebp,5 mov esi,6 mov edi,7 push eax call vedi_stack_su_buff ; mov esi,prova1 ;eax pop eax ;mov ebx,[p_file_iniziale] ;call esegui_letture ;mov esi,[p_file_iniziale] ;call sistema_sequenza_chiavi_default call metti_chiavi_default call RPIN_ROUT ;mette i codici pin di default call inizializza_buff_vuoto_2mega ;------------------ mov esi,buff_vuoto_2mega mov [P3_7_p],esi mov [P3_8_p],esi mov [P3_9_p],esi inc esi mov [P3_7max_p],esi mov [P3_8max_p],esi mov [P3_9max_p],esi ;----FORK------ ;mov eax,2 ;mov ebx,1 ???? ;int 0x80 ;call errorizza ;jmp fine ;-------------- call apri_sock1 cmp eax,1 jnb no_err jmp fine_con_msg no_err: mov [sock],eax mov [arg0C],eax mov eax,server mov [arg1C],eax mov eax,[server_l] mov [arg2C],eax call connetti_sock1 cmp eax,0 jae no_err_conn jmp fine_con_msg no_err_conn: ;call errorizza ;ok siamo connessi mov eax,4 mov ebx,[sock] mov ecx,nick mov edx,[nick_l] int 0x80 mov eax,4 mov ebx,[sock] mov ecx,user mov edx,[user_l] int 0x80 mov eax,[no_join] cmp eax,1 jne Loop1 mov eax,4 mov ebx,[sock] mov ecx,join mov edx,[join_l] int 0x80 Loop1: call getkey dopo_Loop1: ;call pulisci_buffer_2recv call sock_recv1 ;usiamo sock_recv1 invece della sottostante per avere un recv_NO_BLOCKING ;mov eax,3 ;mov ebx,[sock] ;mov ecx,buffer_2recv ;mov edx,512 ;int 0x80 mov esi,[buffer_2recv] ;solo 4 bytes mov edi,[ping] cmp esi,edi ; controlliamo se PING je near pongroutine ; e in caso affermativo rispondiamo con PONG cmp esi,0 ; se e' 0 (no chars received) je Loop1 ; torniamo sul loop principale ;vediamo se attivo Kripta call calcola_l_header ;-------------- ;---------------- mov eax,[Kripta] cmp eax,0 je near visual_normale_NoK cmp eax,1 jne near visual_normale_NoK ;per maggior sicurezza, DEVE essere 1 per avviare CODEC mov edi,where_2_msg mov esi,buffer_2recv xor ebx,ebx inc esi mov ecx,16 va_forse_nick: mov al,[esi] mov ah,[edi] cmp al,ah jne no_nick_forse_chan inc ebx inc esi inc edi dec ecx jnz va_forse_nick no_nick_forse_chan: cmp ebx,0 je prova_se_chan cmp al,"!" jne prova_se_chan cmp al,0x20 jbe prova_se_chan forse_nick_2: cmp ah," " jne prova_se_chan ;OK e' sicuramente nick jmp OK_is_Kripta_nick_chan prova_se_chan: ;cercare PRIVMSG #canmio mov edi,where_2_msg mov esi,buffer_2recv xor ebx,ebx add esi,11 ; minimo n!i@1.2.3.4 NOTICE mov ecx,80 cont1_prova_se_chan: mov al,[esi] cmp al," " je ok_primo_spazio_chan inc esi dec ecx jnz cont1_prova_se_chan jmp visual_normale_NoK ok_primo_spazio_chan: inc esi mov al,[esi] cmp al," " je ok_secondo_spazio_chan dec ecx jnz ok_primo_spazio_chan jmp visual_normale_NoK ok_secondo_spazio_chan: inc esi xor ebx,ebx mov edi,where_2_msg mov ecx,20 ok_2_sp_chan_va: mov al,[esi] mov ah,[edi] cmp al," " je va_forse_chan_verifica1 cmp ah," " je va_forse_chan_verifica_ah cmp ah,al jne va_forse_chan_verifica inc ebx inc edi inc esi dec ecx jnz ok_2_sp_chan_va jmp visual_normale_NoK va_forse_chan_verifica_ah: cmp al,0 je OK_is_Kripta_nick_chan va_forse_chan_verifica1: cmp ah," " je OK_is_Kripta_nick_chan va_forse_chan_verifica: cmp ebx,1 ja si_deciso_isKripta OK_is_Kripta_nick_chan: cmp ebx,1 ja si_deciso_isKripta jmp visual_normale_NoK ;--- si_deciso_isKripta: ;ed eccoci qui a decodificare le Keys in ordine inverso ;appena pronta SEQK (o KSEQ) sara' fatta secondo l'ordine ;stabilito da KSEQ ;call errorizza pusha call calcola_som_PIN_CODE popa mov ebp,sequenza_Kiavi mov edx,48 mov ecx,13 mov dword [errore_l_mesg],0 mov dword [P3_7],0 mov dword [P3_8],0 mov dword [P3_9],0 mov dword [P3_7max],0 mov dword [P3_8max],0 mov dword [P3_9max],0 mov esi,buff_vuoto_2mega mov [P3_7_p],esi mov [P3_8_p],esi mov [P3_9_p],esi inc esi mov [P3_7max_p],esi mov [P3_8max_p],esi mov [P3_9max_p],esi call primo_passo_DK cmp dword [errore_l_mesg],0 jne near visual_normale_NoK call primo_passo_fase_DK chiavi_in_seq_DK: mov ebx,[ebp+edx] call mettiK_su_eax_DK cmp eax,0xFFFFFFFF je near fine_chiavi_in_seq_DK ;ERROREEEEEEEEEEEEEE ;mov eax,decodkiave5 ;provvisorio pusha call eax popa sub edx,4 dec ecx jnz chiavi_in_seq_DK jmp fine_chiavi_in_seq_DK mettiK_su_eax_DK: cmp ebx,dword 1 je is_kiave1_DK cmp ebx,2 je is_kiave2_DK cmp ebx,3 je is_kiave3_DK cmp ebx,4 je is_kiave4_DK cmp ebx,5 je is_kiave5_DK cmp ebx,6 je is_kiave6_DK cmp ebx,7 je is_kiave7_DK cmp ebx,8 je is_kiave8_DK cmp ebx,9 je is_kiave9_DK cmp ebx,10 je is_kiave10_DK cmp ebx,11 je is_kiave11_DK cmp ebx,12 je is_kiave12_DK cmp ebx,13 je is_kiave13_DK mov eax,0xFFFFFFFF ret is_kiave1_DK: mov eax,decodkiave1 ret is_kiave2_DK: mov eax,decodkiave2 ret is_kiave3_DK: mov eax,decodkiave3 ret is_kiave4_DK: mov eax,decodkiave4 ret is_kiave5_DK: mov eax,decodkiave5 ret is_kiave6_DK: mov eax,decodkiave6 ret is_kiave7_DK: mov eax,decodkiave7 ret is_kiave8_DK: mov eax,decodkiave8 ret is_kiave9_DK: mov eax,decodkiave9 ret is_kiave10_DK: mov eax,decodkiave10 ret is_kiave11_DK: mov eax,decodkiave11 ret is_kiave12_DK: mov eax,decodkiave12 ret is_kiave13_DK: mov eax,decodkiave13 ret fine_chiavi_in_seq_DK_ERRORE: ;qui mettere salto a gestione eventuale errore ; call errorizza fine_chiavi_in_seq_DK: ;e da qui si puo proseguire ok mov dword [P3_7],0 mov dword [P3_8],0 mov dword [P3_9],0 call pulisci_buffer_2recv call sistema_ultima_x_visual call pulisci_buffer_2recv cmp dword [mesg_estesi],0 ;jmp near vis_norm_fine_DK jne near vis_norm_fine_DK mov esi,mesg_pulito_0 inc esi call pulisci_buff_16_bytes mov esi,canale2_pulito call pulisci_con_space_8_bytes mov esi,canale2_pulito add esi,8 call pulisci_buff_16_bytes mov esi,mesg_pulito call pulisci_buff_480_bytes mov edi,mesg_pulito_0 mov esi,buff1_2K_defa inc edi inc edi inc esi ;superiamo i : iniziali mov ecx,16 cont_su_buf_pul1: mov al,[esi] cmp al,"!" je OK_su_buf_pul mov [edi],al inc esi inc edi dec ecx jnz cont_su_buf_pul1 jmp vis_norm_fine_DK_pre OK_su_buf_pul: ; jmp vis_nick_ch_DK add esi,10 mov ecx,120 OK_su_buf_pul_02: mov al,[esi] cmp al," " je ok_dest_DK_pul inc esi dec ecx jnz OK_su_buf_pul_02 jmp vis_norm_fine_DK_pre ok_dest_DK_pul: mov edi,canale2_pulito mov ecx,28 inc esi cont_ok_dest_DK_pul: mov eax,[esi] cmp eax,"PRIV" jne cont_ok_dest_DK_pul1 call sistema_PRIVMSG cont_ok_dest_DK_pul1: mov al,[esi] cmp al,":" je cont_ult_sist_DK_pre mov [edi],al inc edi inc esi dec ecx jnz cont_ok_dest_DK_pul jmp vis_norm_fine_DK_pre cont_ult_sist_DK_pre: inc esi ;inc esi mov edi,mesg_pulito mov ecx,480 cont_ult_sist_DK: mov al,">" mov [edi],al mov al,[esi] cmp al,0xa jbe ok_fine_nick_ch_DK mov [edi],al inc esi inc edi dec ecx jnz cont_ult_sist_DK jmp vis_norm_fine_DK_pre ok_fine_nick_ch_DK: mov al,0xd mov [edi],al inc edi mov al,0xa mov [edi],al mov edx,[Testata_msg_pul] add edx,[l_buff_da_DE_cryptare] add edx,3 ;0xd oxa e space separatore tra : primo char ;vis_nick_ch_DK: mov eax,4 mov ebx,1 mov ecx,mesg_pulito_0 ;buff1_2K_defa ;buffer_2recv ;mov edx,512 int 0x80 call pulisci_buffer_2recv jmp Loop1 vis_norm_fine_DK_pre: vis_norm_fine_DK: mov eax,4 mov ebx,1 mov ecx,buff1_2K_defa ;buffer_2recv mov edx,512 int 0x80 jmp Loop1 ;---------------------------------- ;mov eax,"DCOD" ;call visualizza ;Qui dobbiamo chiudere visualizzando il buffer decriptato ; e quindi: ;quando pronto eliminare i 2 commenti sotto ;call pulisci_buffer_2recv ;jmp Loop1 ;------------------------- visual_normale_NoK: ;------------------- ;prova ticks counts (times) ;pusha ;mov eax,43 ;mov ebx,struct_tms ;int 0x80 ;mov eax,[t_u] ;call errorizza ;mov eax,[t_s] ;call errorizza ;mov eax,[t_cu] ;call errorizza ;mov eax,[t_cs] ;call errorizza ;popa ;------------------ call get_time call aggiusta_time mov ecx,t_HHpre mov edx,12 call msg_gen mov eax,4 mov ebx,1 mov ecx,buffer_2recv mov edx,512 int 0x80 call pulisci_buffer_2recv ;call getkey jmp Loop1 pongroutine: ; call get_time ; call aggiusta_time ; mov ecx,t_HHpre ; mov edx,12 ; call msg_gen ; mov eax,4 ; mov ebx,1 ; mov ecx,buffer_2recv ; mov edx,512 ; int 0x80 mov eax,"PONG" mov ecx,buffer_2recv mov [ecx],eax mov eax,4 mov ebx,[sock] ;mov ecx,pong mov edx,512 ;512 ;[pong_l] int 0x80 ; call get_time ; call aggiusta_time ; mov ecx,t_HHpre ; mov edx,12 ; call msg_gen ; mov eax,"PONG" ; mov ecx,buffer_2recv ; mov [ecx],eax ; mov eax,4 ; mov ebx,1 ; anche a video [sock] ;mov ecx,pong ; mov edx,512 ;512 ;[pong_l] ; int 0x80 ; call ritardo call pulisci_buffer_2recv jmp Loop1 mov esi,buff1 ; call debugga call get_time call aggiusta_time mov ecx,buff_struc_time mov edx,42 call msg_gen jmp fine ;------------------------ fine_con_msg: mov ecx,msg_few_par mov edx,[msg_few_par_l] ;120 fine_con_msg_gia_settato: mov eax,4 mov ebx,1 int 0x80 ;------------------- fine: mov eax,6 ;chiudi file mov ebx,[sock] int 0x80 mov eax,1 mov ebx,0 int 80h ; Exit ;---------------------FINE------------------------------------------------ ;�������������������������������������������������������������������������������������������� ;�������������������������������������������������������������������������������������������� ;---------------ROUTINES------- (00)------------------------- getkey: ;entra senza parametri, torna in in AL 0 se nokey altrimenti keycode ;e torna in byte_rec una copia di AL pusha xor eax,eax xor ebx,ebx cdq mov ecx,byte_rec mov [ecx],al pusha inc ebx mov ecx,fdset mov [ecx],ebx xor esi,esi ;lea edi, [DATAOFF(timer)] mov edi,timer mov eax,0 ;1 secondo mov [edi],eax ;mov eax,1000 mov [byte edi+4],eax xor eax,eax mov al,142 int 0x80 dec eax popa jl returna js retquita mov ecx,buffer_2send_dopo add ecx,[quanti_bytes] mov dword [primo_byte],0 mov eax,1 add [quanti_bytes],eax mov eax,[quanti_bytes] cmp eax,1 jne pre_retquit mov [primo_byte],eax pre_retquit: cmp eax,480 jna pre_retquit_poi1 dec eax mov [quanti_bytes],eax ;ietta sangu coglione che batti piu di 480 charatteri ;call sound pre_retquit_poi1: mov al,3 mov edx,1 int 0x80 dec eax jz returna retquita: nop ; mov byte[ecx],0 ;"q" returna: mov al,[ecx] cmp al,0xA jne near dopo_return mov eax,[quanti_bytes] mov [l_buff_da_cryptare],eax mov eax,0 mov [quanti_bytes],eax mov ecx,buffer_2send_dopo mov al,[ecx] cmp al,"/" jne near return_dopo5 inc ecx mov eax,[ecx] mov esi,msg_acc mov [esi],eax mov ebx,eax cmp bx,"AK" je near is_ADKxx cmp bx,"DK" je near is_ADKxx cmp eax,"ACTC" je near is_SCOD cmp eax,"CODE" je near is_CODE cmp eax,"CPIN" je near is_CPIN cmp eax,"CSEQ" ;cambia sequenza kiavi je near is_SEQK cmp bx,"CP" je near is_CPxx cmp eax,"DEAC" je near is_UCOD cmp eax,"DEFK" ;senza parametri Mette le Kiavi di Default je near is_RSTK cmp eax,"RSEQ" ;reset sequenza di default je near is_DSEQ cmp eax,"DSEQ" ;reset sequenza di default je near is_DSEQ cmp eax,"EMSG" je near is_EMSG cmp eax,"HELP" je near is_CODEHELP cmp eax,"MSG2" je near is_MSG2 cmp eax,"RPIN" ;reset PIN CODE je near is_RPIN cmp eax,"RSTC" je near is_UCOD cmp eax,"RSTK" je near is_RSTK cmp eax,"SCOD" ;SET (Attiva) sessione CODEC je near is_SCOD cmp eax,"SEQK" ;cambia sequenza kiavi je near is_SEQK cmp eax,"SEQD" ;sequenza di default sinonimo di DSEQ je near is_DSEQ cmp eax,"SETC" ;SET (Attiva sessione CODEC = sinonimo di SCOD je near is_SCOD cmp eax,"UCOD" ;Unset (Disattiva) sessione CODEC je near is_UCOD cmp eax,"VERS" ;Versione.... e Copyright je near is_VERS cmp bx,"VK" ;VKnn Verifica Kiave nn je near is_VKxx cmp eax,"VPIN" ;Verifica Codice PIN je near is_VPIN cmp bx,"VP" ;VKnn Verifica Kiave nn je near is_VPxx cmp eax,"VSEQ" ;Verifica sequenza Keys je near is_VSEQ jmp manda_comando nop manda_comando: mov eax,4 mov ebx,[sock] ; anche a video [sock] mov ecx,buffer_2send_dopo inc ecx ;scartiamo la / mov edx,483 ;512 ;[pong_l] int 0x80 call get_time call aggiusta_time mov ecx,t_HHpre mov edx,12 call msg_gen mov eax,4 mov ebx,1 ; anche a video [sock] mov ecx,buffer_2send_dopo inc ecx ;scartiamo la / mov edx,483 ;512 ;[pong_l] int 0x80 jmp dopo_return_pre2 return_dopo5: mov ecx,buffer_2send_dopo mov al,[ecx] cmp al,0xA jbe near return_dopo5_noKript mov eax,[Kripta] cmp eax,0 je near return_dopo5_noKript cmp eax,1 jne near return_dopo5_noKript ;per maggior sicurezza, DEVE essere 1 per avviare CODEC ;----------------------------------------- si_deciso_isKripta_K: ;ed eccoci qui a decodificare le Keys in ordine inverso ;appena pronta SEQK (o KSEQ) sara' fatta secondo l'ordine ;stabilito da KSEQ ;call errorizza mov ebp,sequenza_Kiavi mov edx,0 mov ecx,13 call primo_passo_fase_K ;------------------------- mov esi,buff_vuoto_2mega mov [P3_7_p],esi mov [P3_8_p],esi mov [P3_9_p],esi inc esi mov [P3_7max_p],esi mov [P3_8max_p],esi mov [P3_9max_p],esi ;-------------------------- mov eax,[l_buff_da_cryptare] cmp eax,0 ja chiavi_in_seq_DK_K jmp near return_dopo5_noKript chiavi_in_seq_DK_K: mov ebx,[ebp+edx] call mettiK_su_eax_DK_K cmp eax,0xFFFFFFFF je near fine_chiavi_in_seq_DK_K ;ERROREEEEEEEEEEEEEE ;mov eax,decodkiave5 ;provvisorio pusha call eax popa add edx,4 dec ecx jnz chiavi_in_seq_DK_K ;-------------------------- mov ebx,[Ptr_2_buffKeys_attuale] xor ebx,[PIN_CODE] mov [buff1_2K_defa+2],ebx ;successivi 4 bytes = Ptr_2_buffer_Keys_precedente ;-------------------------- call ultimo_passo_K jmp fine_chiavi_in_seq_DK_K mettiK_su_eax_DK_K: cmp ebx,dword 1 je is_kiave1_DK_K cmp ebx,2 je is_kiave2_DK_K cmp ebx,3 je is_kiave3_DK_K cmp ebx,4 je is_kiave4_DK_K cmp ebx,5 je is_kiave5_DK_K cmp ebx,6 je is_kiave6_DK_K cmp ebx,7 je is_kiave7_DK_K cmp ebx,8 je is_kiave8_DK_K cmp ebx,9 je is_kiave9_DK_K cmp ebx,10 je is_kiave10_DK_K cmp ebx,11 je is_kiave11_DK_K cmp ebx,12 je is_kiave12_DK_K cmp ebx,13 je is_kiave13_DK_K mov eax,0xFFFFFFFF ret is_kiave1_DK_K: mov eax,codkiave1 ret is_kiave2_DK_K: mov eax,codkiave2 ret is_kiave3_DK_K: mov eax,codkiave3 ret is_kiave4_DK_K: mov eax,codkiave4 ret is_kiave5_DK_K: mov eax,codkiave5 ret is_kiave6_DK_K: mov eax,codkiave6 ret is_kiave7_DK_K: mov eax,codkiave7 ret is_kiave8_DK_K: mov eax,codkiave8 ret is_kiave9_DK_K: mov eax,codkiave9 ret is_kiave10_DK_K: mov eax,codkiave10 ret is_kiave11_DK_K: mov eax,codkiave11 ret is_kiave12_DK_K: mov eax,codkiave12 ret is_kiave13_DK_K: mov eax,codkiave13 ret fine_chiavi_in_seq_DK_ERRORE_K: ;qui mettere salto a gestione eventuale errore ;call errorizza fine_chiavi_in_seq_DK_K: ;e da qui si puo proseguire ok mov dword [P3_7],0 mov dword [P3_8],0 mov dword [P3_9],0 call pulisci_buffer_2recv ;call pulisci_buff1_2K_defa jmp Loop1 ;---------------------------------- return_dopo5_noKript: mov ecx,buffer_2send_dopo mov al,[ecx] cmp al,0xA jbe near dopo_return mov eax,4 mov ebx,[sock] ; anche a video [sock] mov ecx,buffer_2send mov edx,512 ;512 ;[pong_l] int 0x80 call get_time call aggiusta_time mov ecx,t_HHpre mov edx,12 call msg_gen mov eax,4 mov ebx,1 ; anche a video [sock] mov ecx,buffer_2send mov edx,512 ;512 ;[pong_l] int 0x80 dopo_return_pre2: mov ecx,buffer_2send_dopo mov al,0 mov edx,480 dopo_return_pre1: mov [ecx],al inc ecx dec edx jnz dopo_return_pre1 mov ax,0x0d0a mov [ecx],ax add ecx,2 mov [ecx],ax jmp dopo_return is_MSG2: add ecx,5 mov ebx,18 ;max 19 caratteri canale o nick mov edi,where_2_msg mov ebp,where_2_msg_K is_MSG2_d0: mov al,[ecx] cmp al,0x20 jbe is_MSG2_d1 mov [edi],al mov [ebp],al inc ecx inc edi inc ebp dec ebx jnz is_MSG2_d0 is_MSG2_d1: cmp ebx,18 je is_MSG2_d2 cmp ebx,0 je is_MSG2_d2 mov al,0x20 is_MSG2_dpre: mov [edi],al mov [ebp],al inc edi inc ebp dec ebx jnz is_MSG2_dpre is_MSG2_d2: mov ecx,buffer_2send_dopo mov al,"K" mov [ecx],al ; sostituiamo / con K mov eax,4 mov ebx,1 mov ecx,buffer_2send mov edx,60 ;512 ; confermiamo che ok MSG2 e'cambiato int 0x80 call pulisci_buffer_2send_dopo jmp dopo_return ;--------ROUTINE frammezza------------------- pulisci_buffer_2send_dopo: pusha mov ecx,buffer_2send_dopo mov edi,480 mov al,0 pul_buf_MSG2: ;jmp dopo_return mov [ecx],al inc ecx dec edi jnz pul_buf_MSG2 popa ret ;------------------------------------------ is_SCOD: mov [mesg_estesi],dword 0 mov edi,where_2_msg_K mov esi,where_2_msg mov ecx,5 is_SCOD_sistema_where2msg: mov eax,[esi] mov [edi],eax add esi,4 add edi,4 dec ecx jnz is_SCOD_sistema_where2msg mov dword [Kripta],1 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_UCOD: mov [mesg_estesi],dword 1 mov dword [Kripta],0 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_AK11: mov dword [act_K11],1 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_DK11: mov dword [act_K11],0 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_AK12: mov dword [act_K12],1 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_DK12: mov dword [act_K12],0 call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_CODE: ;push eax add ecx,4 mov eax,[ecx] cmp eax,"HELP" jne vai_is_CODE ;pop eax jmp is_CODEHELP vai_is_CODE: cmp eax,"RSTK" je near is_RSTK ;qui il resto di CODExxxx ;inc ecx mov al,[ecx] cmp al,"C" je forse_FK cmp al,0x20 je forse_FK_sp jmp fine_is_CODE forse_FK: inc ecx forse_FK_sp: ;mov esi,K0u ;call debugga ;jmp fine inc ecx mov al,[ecx] cmp al,"F" je is_F cmp al,"K" je is_K jmp fine_is_CODE is_F: call is_F_sistema jmp fine_is_CODE is_K: call is_K_sistema fine_is_CODE: ;pop eax call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return is_CODEHELP: mov eax,4 mov ebx,1 mov ecx,msg_HELP mov edx,[msg_HELP_l] int 0X80 jmp dopo_return ;METTERE qui altre is_XXXX dopo_return: ;mov al,[ecx] ; call errorizza mov [provv],al popa mov al,[provv] ret ;--------------------------------------- is_RSTK: call metti_chiavi_default call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return ;---------------------------------------- is_VKxx: ;verifica le key bswap eax and eax,0x0F0F0F0F xor edx,edx xor ecx,ecx xor ebx,ebx mov cx,ax mov bl,ah xor eax,eax mov al,bl cmp al,9 ja is_VK_err cmp cl,9 ja is_VK_err mov bl,10 mul bl add al,cl mov cl,al xor ebx,ebx xor edx,edx mov bl,cl mov eax,ebx cmp eax,0 ;dobbiamo equipararlo a 10 jne va_dopo_VKxx mov eax,10 ;quindi lo settiamo K0=K10 va_dopo_VKxx: dec eax ;zero_based quindi x=n-1 mov ebx,2000000 mul ebx mov esi,K1a add esi,eax call debugga ;call errorizza ;call visualizza is_VK_err: call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------- is_ADKxx: mov edi,ebx xor eax,eax xor edx,edx bswap ebx mov ax,bx mov al,bh ;xor ax,0xFF sub al,0x30 mov cl,10 mul cl mov ch,al mov ah,bl sub ah,0x30 add ch,ah xor eax,eax mov al,ch cmp al,13 ;12 ja fine_isAKxx_no_msg ;cmp al,1 ; ;je fine_isAKxx_no_msg cmp al,0 jne ok_vaiAK mov eax,10 ok_vaiAK: dec eax ;zero based mov ebx,4 mul ebx mov esi,act_K add esi,eax mov ebx,edi mov eax,1 cmp bx,"AK" je va_dopo_ADK mov eax,0 va_dopo_ADK: mov [esi],eax call msg_comando_accettato fine_isAKxx_no_msg: call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------- is_CPxx: push ecx mov edi,ebx xor eax,eax xor edx,edx bswap ebx mov ax,bx mov al,bh ;xor ax,0xFF sub al,0x30 mov cl,10 mul cl mov ch,al mov ah,bl sub ah,0x30 add ch,ah xor eax,eax mov al,ch cmp al,13 ;12 ja near fine_isCPxx_no_msg ;cmp al,1 ; ;je fine_isAKxx_no_msg cmp al,0 jne ok_vaiCP mov eax,10 ok_vaiCP: ;dec eax ;zero based mov ebx,4 mul ebx ;call errorizza mov esi,PIN_COD_XX add esi,eax mov [PIN_PROVV_PTR],esi ;push esi ;(CALCOLA PIN_CODE_XX su eax ) e quindi: ;========================== pop ecx xor edi,edi xor eax,eax xor ebx,ebx xor edx,edx mov edx,6 add ecx,5 cont_is_PIN_XX: mov al,[ecx] sub al,0x30 cmp al,9 ja is_PIN_dopo1_XX inc ecx inc ebx dec edx jnz cont_is_PIN_XX is_PIN_dopo1_XX: cmp ebx,0 je fine_isCPxx_no_msg_dopo_pop ;fine_is_PIN_no_msg sub ecx,ebx xor edi,edi mov esi,10 xor edx,edx mov ebp,ebx ;dec ebx mol_PIN_XX: ;mov ebx,ebp xor eax,eax mov al,[ecx] sub al,0x30 dec ebp jz dopo_mol_PIN_XX mov ebx,ebp mov esi,10 mol_PIN_1_XX: mul esi xor edx,edx dec ebx jnz mol_PIN_1_XX add edi,eax inc ecx mov ebx,ebp jmp mol_PIN_XX dopo_mol_PIN_XX: add edi,eax mov esi,[PIN_PROVV_PTR] mov [esi],edi ;mov [PIN_CODE],edi mov eax,edi call errorizza fine_is_PIN_XX: ;============================ call msg_comando_accettato jmp fine_isCPxx_no_msg_dopo_pop fine_isCPxx_no_msg: pop ecx fine_isCPxx_no_msg_dopo_pop: call pulisci_buffer_2send_dopo jmp dopo_return ;---------------------------- is_VPxx: mov edi,ebx xor eax,eax xor edx,edx bswap ebx mov ax,bx mov al,bh ;xor ax,0xFF sub al,0x30 mov cl,10 mul cl mov ch,al mov ah,bl sub ah,0x30 add ch,ah xor eax,eax mov al,ch cmp al,13 ;12 ja fine_is_VPxx_no_msg ;cmp al,1 ; ;je fine_isAKxx_no_msg cmp al,0 jne ok_vaiVP mov eax,10 ok_vaiVP: dec eax ;zero based mov ebx,4 mul ebx ;call errorizza mov esi,PIN_COD_XX add esi,eax ;(CALCOLA PIN_CODE_XX su eax ) e quindi: ;========================== mov eax,[esi] call errorizza call msg_comando_accettato fine_is_VPxx_no_msg: call calcola_som_PIN_CODE call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------- is_SEQK: ;serve a cambiare la sequenza delle kiavi add ecx,5 ;puntiamo alla prima cifra N di SEQK NNNNNNNNNN..NN xor edx,edx xor ebx,ebx xor eax,eax xor ebp,ebp xor edi,edi mov esi,10 mov al,[ecx] sub al,0x30 ;call errorizza cmp al,9 ja near fine_is_SEQK_no_msg cmp al,1 ja near fine_is_SEQK_no_msg mul esi mov ebp,eax xor eax,eax inc ecx mov al,[ecx] sub al,0x30 cmp al,9 ja near fine_is_SEQK_no_msg add ebp,eax ;n kiave 1 cmp ebp,13 ja near fine_is_SEQK_no_msg ;cmp ebp,1 ;je fine_is_SEQK_no_msg ;kiave1 inamovibile ;call errorizza inc ecx inc ecx xor eax,eax mov al,[ecx] sub al,0x30 cmp al,9 ja near fine_is_SEQK_no_msg cmp al,1 ja near fine_is_SEQK_no_msg mul esi mov edi,eax xor eax,eax inc ecx mov al,[ecx] sub al,0x30 cmp al,9 ja near fine_is_SEQK_no_msg add edi,eax ;n.kiave 2 cmp edi,13 ja near fine_is_SEQK_no_msg ;cmp edi,1 ;je fine_is_SEQK_no_msg ;call errorizza ;mov esi,sequenza_Kiavi mov ebx,sequenza_Kiavi mov ecx,13 cont_is_SEQK_2: mov eax,[ebx] cmp eax,ebp je is_k_ebp cmp eax,edi je is_k_edi cont_is_SEQK_3: ;add esi,4 add ebx,4 dec ecx jnz cont_is_SEQK_2 jmp fine_is_SEQK is_k_ebp: cmp edi,7 jne no_7 xor dword [provv_789],1 no_7: cmp edi,8 jne no_8 xor dword [provv_789],1 no_8: cmp edi,9 jne no_9 xor dword [provv_789],1 no_9: mov [ebx],edi jmp cont_is_SEQK_3 is_k_edi: cmp ebp,7 jne no_7_edi xor dword [provv_789],1 no_7_edi: cmp ebp,8 jne no_8_edi xor dword [provv_789],1 no_8_edi: cmp ebp,9 jne no_9_edi xor dword [provv_789],1 no_9_edi: mov [ebx],ebp jmp cont_is_SEQK_3 fine_is_SEQK: call msg_comando_accettato cmp dword [provv_789],1 jne fine_is_seq_no789 mov dword [provv_789],0 call invia_mesg_789 fine_is_seq_no789: fine_is_SEQK_no_msg: call pulisci_buffer_2send_dopo jmp dopo_return ;-------------------------------------- is_VSEQ: ;verifica sequenza call ripulisci_sequenze mov ebx,sequenza_Kiavi mov esi,seq_tutte mov edx,act_K mov ecx,13 cont_is_VSEQ: mov eax,[ebx] mov edi,esi call verifica_se_key_attiva cmp byte [key_is_attiva],1 jne dopo_is_seq pusha call ascizzaNsu_buff_2ch popa dopo_is_seq: ;call errorizza add ebx,4 add esi,5 dec ecx jnz cont_is_VSEQ jmp fine_VSEQ_pre ;---------- mov ebp,seq_attive mov edx,act_K01 mov ecx,1 cont_is_VSEQ_att: mov eax,[edx] cmp eax,1 jne dopo_is_seq_att mov edi,ebp pusha mov eax,ecx call ascizzaNsu_buff_2ch popa dopo_is_seq_att: ;call errorizza add edx,4 add ebp,5 inc ecx cmp ecx,13 jna cont_is_VSEQ_att ;ascizzaNsu_buff_2ch: ; entra con eax = valore da ascizzare ; edi = ptr su buff (2 bytes .. fino a 99) fine_VSEQ_pre: mov eax,4 mov ebx,1 mov ecx,mesg_seq_kiavi mov edx,[l_mesg_seq_kiavi] int 0x80 fine_VSEQ: call pulisci_buffer_2send_dopo jmp dopo_return ;------------------------------------------ is_CPIN: ;per cambiare il codice pin xor edi,edi xor eax,eax xor ebx,ebx xor edx,edx mov edx,6 add ecx,5 cont_is_PIN: mov al,[ecx] sub al,0x30 cmp al,9 ja is_PIN_dopo1 inc ecx inc ebx dec edx jnz cont_is_PIN is_PIN_dopo1: cmp ebx,0 je fine_is_PIN_no_msg sub ecx,ebx xor edi,edi mov esi,10 xor edx,edx mov ebp,ebx ;dec ebx mol_PIN: ;mov ebx,ebp xor eax,eax mov al,[ecx] sub al,0x30 dec ebp jz dopo_mol_PIN mov ebx,ebp mov esi,10 mol_PIN_1: mul esi xor edx,edx dec ebx jnz mol_PIN_1 add edi,eax inc ecx mov ebx,ebp jmp mol_PIN dopo_mol_PIN: add edi,eax mov [PIN_CODE],edi mov eax,edi call errorizza fine_is_PIN: ;call ; som_PIN_CODE call msg_comando_accettato fine_is_PIN_no_msg: call calcola_som_PIN_CODE call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------------- is_RPIN: ;reset codici_pin ; rimette i codici pin di default call RPIN_ROUT jmp dopo_RPIN RPIN_ROUT: pusha mov esi,PIN_CODE_d mov edi,PIN_CODE mov ecx,14 cont_is_RPIN: mov eax,[esi] mov [edi],eax add esi,4 add edi,4 dec ecx jnz cont_is_RPIN popa ret dopo_RPIN: call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return ;----------------------------- is_DSEQ: call sistema_sequenza_chiavi_default call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return ;------------------------- is_VPIN: mov ecx,14 mov ebp,PIN_CODE mov edi,CPIN_GEN_msg add edi,6 ;CPIN_GEN_msg db "CPGEN XXXXXX",0x0a cont_is_VPIN: mov eax,[ebp] call ascizzaNsu_buff ;sistema_NUM_su_6bytes mov eax," " mov [edi],eax ;ripuliamo i primi 4 caratteri che la call preced. mette a 0000 add ebp,4 add edi,17 dec ecx jnz cont_is_VPIN mov eax,4 mov ebx,1 mov ecx,mesg_PIN_CODE mov edx,[l_mesg_PIN_CODE] int 0x80 ;------------------ mov ecx,14 mov ebp,PIN_CODE mov edi,som_CPIN_GEN_msg add edi,6 ;CPIN_GEN_msg db "CPGEN XXXXXX",0x0a cont_is_VPIN_som: xor eax,eax mov ebx,[ebp] mov edx,ebx and edx,0xff add eax,edx ror ebx,8 mov edx,ebx and edx,0xff add eax,edx ror ebx,8 mov edx,ebx and edx,0xff add eax,edx ror ebx,8 mov edx,ebx and edx,0xff add eax,edx call ascizzaNsu_buff ;sistema_NUM_su_6bytes mov eax," " mov bx," " mov [edi],eax ;ripuliamo i primi 4 caratteri che la call preced. mette a 0000 mov [edi+4],bx add ebp,4 add edi,17 dec ecx jnz cont_is_VPIN_som mov eax,4 mov ebx,1 mov ecx,mesg_som_PIN_CODE mov edx,[l_mesg_som_PIN_CODE] int 0x80 ;call errorizza ;call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------------- is_VERS: mov eax,4 mov ebx,1 mov ecx,msg_vers mov edx,[l_msg_vers] int 0x80 call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------------- is_EMSG: ;Pessaggi estesi ON | OF add ecx,5 mov ax,[ecx] cmp ax,"ON" je is_EMSG_on mov [mesg_estesi],dword 0 jmp fine_is_EMSG is_EMSG_on: mov [mesg_estesi],dword 1 fine_is_EMSG: call msg_comando_accettato call pulisci_buffer_2send_dopo jmp dopo_return ;--------------------------- ;������������������������������������������������������������������������������������������ ;������������������������������������������������������������������������������������������� ; ;codkiavi.asm ; sistema_sequenza_chiavi_default: pusha mov esi,sequenza_Kiavi_default mov edi,sequenza_Kiavi ;mov edx,0 mov ecx,13 cont_sist_seq_K: mov eax,[esi] mov [edi],eax add esi,4 add edi,4 dec ecx jnz cont_sist_seq_K popa ret ;----------------------------- metti_chiavi_default: pusha mov ebp,K1s mov ebx,[lK1s] mov edi,K1u call metti_chiave mov ebp,K1s mov ebx,[lK1s] mov edi,K1a call metti_chiave ;----------------------- mov ebp,K2s mov ebx,[lK2s] mov edi,K2u call metti_chiave mov ebp,K2s mov ebx,[lK2s] mov edi,K2a call metti_chiave ;----------------------- mov ebp,K3s mov ebx,[lK3s] mov edi,K3u call metti_chiave mov ebp,K3s mov ebx,[lK3s] mov edi,K3a call metti_chiave ;----------------------- mov ebp,K4s mov ebx,[lK4s] mov edi,K4u call metti_chiave mov ebp,K4s mov ebx,[lK4s] mov edi,K4a call metti_chiave ;----------------------- mov ebp,K5s mov ebx,[lK5s] mov edi,K5u call metti_chiave mov ebp,K5s mov ebx,[lK5s] mov edi,K5a call metti_chiave ;----------------------- mov ebp,K6s mov ebx,[lK6s] mov edi,K6u call metti_chiave mov ebp,K6s mov ebx,[lK6s] mov edi,K6a call metti_chiave ;----------------------- mov ebp,K7s mov ebx,[lK7s] mov edi,K7u call metti_chiave mov ebp,K7s mov ebx,[lK7s] mov edi,K7a call metti_chiave ;----------------------- mov ebp,K8s mov ebx,[lK8s] mov edi,K8u call metti_chiave mov ebp,K8s mov ebx,[lK8s] mov edi,K8a call metti_chiave ;----------------------- mov ebp,K9s mov ebx,[lK9s] mov edi,K9u call metti_chiave mov ebp,K9s mov ebx,[lK9s] mov edi,K9a call metti_chiave ;----------------------- mov ebp,K0s mov ebx,[lK0s] mov edi,K0u call metti_chiave mov ebp,K0s mov ebx,[lK0s] mov edi,K0a call metti_chiave ;----------------------- mov ebp,K11s mov ebx,[lK11s] mov edi,K11u call metti_chiave mov ebp,K11s mov ebx,[lK11s] mov edi,K11a call metti_chiave ;----------------------- mov ebp,K12s mov ebx,[lK12s] mov edi,K12u call metti_chiave mov ebp,K12s mov ebx,[lK12s] mov edi,K12a call metti_chiave ;----------------------- mov ebp,K13s mov ebx,[lK13s] mov edi,K13u call metti_chiave mov ebp,K13s mov ebx,[lK13s] mov edi,K13a call metti_chiave ;----------------------- ;mov esi,K0u ;call debugga ;jmp fine popa ret ;-------------------------------- metti_chiave: mov edx,2000000 mov ecx,ebx push ebp ; mov esi,ebp add edx,1 metti_chiave_1: dec edx jz metti_chiave_fine mov al,[ebp] mov [edi],al inc ebp inc edi dec ecx jnz metti_chiave_1 mov ecx,ebx pop ebp push ebp ;mov esi,ebp jmp metti_chiave_1 metti_chiave_fine: pop ebp ret ;-------------------------------- is_F_sistema: ;qui entra con ecx che punta a F di Fxxxxxxxxxxxxx pusha mov ebx,0 cont_is_F: inc ebx cmp ebx,13 jae near fine_is_F inc ecx mov al,[ecx] cmp al,0x20 jbe near fine_is_F cmp al,"i" je cont_is_F cmp al,"d" je is_dF ;cmp al,"u" ;je is_uK cmp al,"n" je is_nF jmp fine_is_F is_dF: xor edx,edx dec ebx mov eax,2000000 mul ebx mov ebp,K1u add ebp,eax mov edi,K1a add edi,eax mov ebx,2000000 ;mov ebp,K11s ;mov ebx,[lK11s] ;mov edi,K11u ;cmp dword [err],0 ;jne near fine_F_err call metti_chiave jmp fine_is_F is_nF: ;impostare Kna con valore nuovo digitato di seguito mov dword [offset_inizio_F],0 mov dword [offset_fine_F],0 dec ebx mov eax,2000000 mul ebx push eax ;da riprendere e addare a edi xor ebx,ebx cont_is_nF: inc ecx pusha mov edi,file_name_cod mov al,0 mov edx,256 cont_pul_F: mov [edi],al ;azzeriamo filename inc edi dec edx jnz cont_pul_F ;prendere nome_file mov edi,file_name_cod mov edx,256 cont_nome_file_F_nonC: inc ebx ;mov eax,ebx ;call errorizza dec edx jz near fine_F_err inc ecx mov al,[ecx] cmp al,0x20 jbe ok_nomefile_F mov [edi],al inc edi jmp cont_nome_file_F_nonC ok_nomefile_F: push ecx mov [lungh_nome_file_F],ebx mov ecx,[lungh_nome_file_F] mov ebx,file_name_cod call leggi_file_F pop ecx mov dword [no_s],0 mov dword [no_e],0 ;cerchiamo ora -s e -e mov al,[ecx] cmp al,0xa je near fine_F_se_std inc ecx xor ebp,ebp mov ebx,256 mov al,[ecx] cmp al,"-" jne near fine_F_se_std inc ecx mov al,[ecx] cmp al,"e" je near solo_e_forse cmp al,"s" jne near fine_F_se_std is_s_F: mov dword [no_s],1 mov edx,7 ;fino a 7-1 = 6 cifre xor ebx,ebx xor eax,eax inc ecx ;superiamo lo spazio tra -s NNNNNN is_s_F1: inc ecx mov al,[ecx] sub al,0x30 cmp al,9 ja near fine_num_s ;jc fine_num_s inc ebx cmp ebx,edx ;max 6 cifre je near fine_F_se_std jmp is_s_F1 fine_num_s: cmp ebx,0 je near fine_F_se_std ;in ebx abbiamo il numero di cifre del numero -s sub ecx,ebx xor edx,edx xor esi,esi xor ebp,ebp mol_10_F_pre: dec ebx jz dopo_mol10_F xor eax,eax mov al,[ecx] sub al,0x30 mov esi,10 mov edi,ebx mol_10_F: mul esi dec edi jnz mol_10_F add ebp,eax inc ecx jmp mol_10_F_pre dopo_mol10_F: xor eax,eax mov al,[ecx] sub al,0x30 add ebp,eax mov esi,[lungh_buff_file_F] ;controlliamo che lungh_buff_file > di ebp pointer cmp ebp,esi ja near fine_F_se_std mov eax,ebp mov [offset_inizio_F],ebp ;jmp dopo_solo_e_forse ;call errorizza add ecx,2 ;push eax ;mov eax,[ecx] ;call visualizza ;pop eax mov al,[ecx] cmp al,"-" jne near fine_F_se_std inc ecx mov al,[ecx] cmp al,"e" jne near fine_F_se_std jmp solo_e_forse_si solo_e_forse: mov dword [no_e],1 solo_e_forse_si: inc ecx mov al,[ecx] cmp al," " jne near fine_F_se_std ;========================= is_s_F1_e: inc ecx mov al,[ecx] sub al,0x30 cmp al,9 ja fine_num_s_e ;jc fine_num_s inc ebx cmp ebx,edx ;max 6 cifre je near fine_F_se_std jmp is_s_F1_e fine_num_s_e: cmp ebx,0 je near fine_F_se_std ;in ebx abbiamo il numero di cifre del numero -s sub ecx,ebx xor edx,edx xor esi,esi xor ebp,ebp mol_10_F_pre_e: dec ebx jz dopo_mol10_F_e xor eax,eax mov al,[ecx] sub al,0x30 mov esi,10 mov edi,ebx mol_10_F_e: mul esi dec edi jnz mol_10_F_e add ebp,eax inc ecx jmp mol_10_F_pre_e dopo_mol10_F_e: xor eax,eax mov al,[ecx] sub al,0x30 add ebp,eax mov edi,[offset_inizio_F] cmp ebp,edi jna fine_F_se_std add ebp,edi mov esi,[lungh_buff_file_F] ;controlliamo che lungh_buff_file > di ebp pointer cmp ebp,esi ja fine_F_se_std mov eax,ebp mov [offset_fine_F],ebp ;======================== ;ora cerchiamo e popa ;ora prendiamo i numeri ;mov ebp,K1s ;mov ebx,[lK1s] ;mov edi,K1u ;call metti_chiave ;mov dword [err],1 ;jmp fine_F_err vai_avanti_giusto_F: cmp dword [no_s],1 je vai_avanti_giusto_F_dopo cmp dword [no_e],0 ;deve esserci s | ( s && e ) je vai_avanti_giusto_F_dopo mov dword [err],1 ;jmp fine_F_err vai_avanti_giusto_F_dopo: mov esi,[offset_inizio_F] mov ebx,[offset_fine_F] sub ebx,esi mov ebp,buff1 add ebp,esi ; in ebx abbiamo gia la lunghezza della chiave pop eax mov edi,K1a add edi,eax cmp dword [err],0 jne fine_F_err call metti_chiave ;mov esi,K5a ;call debugga jmp fine_is_F fine_F_se_std: popa mov ebp,buff1 add ebp,[offset_inizio_F] mov ebx,[lungh_buff_file_F] pop eax mov edi,K1a add edi,eax ;---------------- cmp dword [no_s],1 je vai_avanti_giusto_F_dopo_dopo cmp dword [no_e],0 ;deve esserci s | ( s && e ) je vai_avanti_giusto_F_dopo_dopo mov dword [err],1 ;--------------------- vai_avanti_giusto_F_dopo_dopo: cmp dword [err],0 jne fine_F_err call metti_chiave ;mov esi,K4a ;call debugga ;jmp fine jmp fine_is_F fine_F_err: ;qui mettere messaggio errore mov ecx,msg_err_CODE mov edx,[msg_err_CODE_l] call msg_gen fine_is_F: mov eax,0 cmp eax,[lungh_buff_file_F] jne fine_fine_is_F jmp fine_fine_is_F mov ecx,msg_err_CODE mov edx,[msg_err_CODE_l] call msg_gen fine_fine_is_F: mov eax,[lungh_buff_file_F] call errorizza popa ret ;--------------------------------- is_K_sistema: ;qui entra con ecx che punta a K di Kxxxxxxxxxxxxx pusha ;max 12 keys mov ebx,0 cont_is_K: inc ebx cmp ebx,13 jae near fine_is_K inc ecx mov al,[ecx] cmp al,0x20 jbe near fine_is_K cmp al,"i" je cont_is_K cmp al,"d" je is_dK ;cmp al,"u" ;je is_uK cmp al,"n" je is_nK jmp fine_is_K is_dK: xor edx,edx dec ebx mov eax,2000000 mul ebx mov ebp,K1u add ebp,eax mov edi,K1a add edi,eax mov ebx,2000000 ;mov ebp,K11s ;mov ebx,[lK11s] ;mov edi,K11u call metti_chiave jmp fine_is_K is_nK: ;impostare Kna con valore nuovo digitato di seguito dec ebx mov eax,2000000 mul ebx push eax ;da riprendere e addare a edi push ecx xor ebx,ebx cont_is_nK: inc ecx mov al,[ecx] inc ebx cmp ebx,480 ja fine_Kpop ;c'e' errore quindi esci senza azioni cmp al,0xa jne cont_is_nK ;e qui abbiamo ebx lungh. pop ebp ;il valore ex di ecx inc ebp inc ebp dec ebx dec ebx ; in ebx abbiamo gia la lunghezza della chiave pop eax mov edi,K1a add edi,eax call metti_chiave ;vedere quanti caratteri ci sono di kiave immediata ;e passarli come parametri ptr ---> ebp e su ebx=numero_chars ;mov ebp,K11s ;mov ebx,[lK11s] ;mov edi,K11u ;call metti_chiave ;qui vediamo se ha funzionato jmp fine_is_K fine_Kpop: pop eax fine_is_K: ; mov eax,[primo_pass] ; cmp eax,1 ; jne oltre_K ; mov esi,K4a ; call debugga ; jmp fine ;oltre_K: ; mov eax,1 ; mov [primo_pass],eax popa ret ;---------------------------------______________________ primo_passo_fase_K: pusha call pulisci_buff1_2K_defa call randomizza mov [Ptr_2_buffKeys_attuale],eax ;nuova funzione randomizza call calcola_som_PIN_CODE mov ebx,[l_buff_da_cryptare] ; lunghezza messaggio (una copia di quanti_bytes ; prima di essere azzerato dec ebx ;leviamo il carattere 0xA mov [l_buff_da_cryptare],ebx add eax,ebx mov [lungh_kiave_attuale],eax mov [buff1_2K_defa],bx ; primi 2 bytes = Lungh messaggio mov ebx,[Ptr_2_buffKeys_attuale] xor ebx,[PIN_CODE] mov [buff1_2K_defa+2],ebx ;successivi 4 bytes = Ptr_2_buffer_Keys_precedente ;---------------------------------------- mov ecx,[l_buff_da_cryptare] inc ecx ;compreso 0xa mov esi,buffer_2send_dopo mov [P1i],esi mov [P1],esi mov edi,buff1_2K_defa add edi,6 ;dopo 2+4 bytes mov [P2],edi mov edx,[lungh_kiave_attuale] mov [L2],edx mov esi,[P1i] ;esi gia settato a mov edi,[P2] ;edi era cmq gia settato a fuffer_2kdefa + 2+4 char iniziali ;mettiamo buffer_2sendopo to buffer_2Kdefa ;inc ecx cont_P600K1_prima_fase_K: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_P600K1_prima_fase_K ;--------------------------------------------- ; call allinea_P2_2_P1 popa ret ;------------------------------------------------------- codkiave1: pusha ;qui inserire le routines da master mov eax,[act_K01] cmp eax,1 jne near fine_codkiave1 mov eax,[PIN_COD01] xor [Ptr_2_buffKeys_attuale],eax ;mov eax,"K 01" ;call visualizza ;popa ;provvisorio ;ret ;provvisorio ;jmp fine_codkiave1 ;provvisorio ; Da eseguire all'inizio di codKiave1 prima di act_K01 ; variabili da tenere presenti ; A) PIN_CODE ; B) Ptr_2_buffKeys Pointer_preced a Buffer_keys (da 1 a 1000000) ;generare un numero random da 4 bytes da usare come individuatore di codificatore di 0-A-D ; Algoritmo da usare: ; 1) lungh_kiave_attuale = l_buff_da_cryptare + Cod_PIN ; alla fine di kript_K1 eseguire le seguenti azioni: ; - ; 2) -salvare una copia di Ptr_2_buffKeys_attuale prima di aggiornarlo chiamandolo ; Ptr_2_buffKeys_provvisorio ; - aggiornare: ; 3) Ptr_2_buffKeys_attuale = Ptr_2_buffKeys_precedente + lungh_kiave_attuale ; 4) - se Ptr_2_buffKeys_attuale > 1000000 ----> ; Ptr_2_buffKeys_attuale = Ptr_2_buffKeys_attuale - 1000000 ; ; sul Buff_da_inviare scrivere: ; 5) PRIVMSG Def_chan :XXYYYY ;dove: XX = l_buff_da_cryptare (2 bytes, numero puro) ; YYYY = Ptr2_buffKeys_precedente ;ERANO QUIIIIIIIIIIII vai_k1_pre_ok_lmsg: ok_ptr_prossimo_msg: ;mov [Ptr_2_buffKeys_attuale],ebx ;-------------- mov esi,buffer_2send_dopo mov [P1i],esi mov [P1],esi mov edi,buff1_2K_defa add edi,6 ;dopo 2+4 bytes mov [P2],edi mov edx,[lungh_kiave_attuale] mov [L2],edx mov ebp,K1a ;kiave1 ;--------------------------------- mov eax,[som_PIN_COD01] add eax,[Ptr_2_buffKeys_attuale] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor ebp,[PIN_COD01] mov [P3i],ebp mov [P3max],ebp add [P3max],edx add dword [P3max],5000 ;���������������������������� mov edx,ebp ;ebx=P3v mov ecx,[l_buff_da_cryptare] ;dec ecx mov [L1],ecx mov [P1max],ecx add [P1max],esi mov [P1i],esi ;da ora esi=P1v sist_buff_12345: mov bl,[edx] ;5 mov bh,[edx+1] primo_char_K1: mov al,[esi] ;10 cmp al,bl ;20 je P100K1 ; uguali_al_bl ; goto 100 cmp al,bh ;30 je P200K1 ; uguali_al_bh ; goto 200 linea40: inc esi ;40 P1v=P1v+1 cmp esi,[P1max] ;50 jae P500K1 ;non_ugiuali_al,bl-bh ; goto 500 jmp primo_char_K1 ; goto 20 P100K1: mov [esi],bh ;100 al= bh inc esi ;110 P1v = P1v +1 cmp esi,[P1max] ;120 If P1v > P1max then 500 jae P500K1 jmp primo_char_K1 ;130 goto 10 P200K1: mov [esi],bl ;200 al=bl inc esi ;210 P1v = P1v+1 cmp esi,[P1max] ;220 If P1v > P1max then 500 jae P500K1 jmp primo_char_K1 ;230 goto 10 P500K1: ;ok siamo fuori sistemato il buffer inc edx cmp edx,[P3max] jae P600K1 inc edx cmp edx,[P3max] jae P600K1 mov esi,[P1i] jmp sist_buff_12345 P600K1: mov ecx,[l_buff_da_cryptare] inc ecx ;compreso 0xa mov esi,[P1i] ;esi gia settato a mov edi,[P2] ;edi era cmq gia settato a fuffer_2kdefa + 2+4 char iniziali ;mettiamo buffer_2sendopo to buffer_2Kdefa ;inc ecx cont_P600K1: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_P600K1 ;finiu ;mov esi,buff1_2K_defa ;buffer_2send_dopo ;buff1_2K_defa ;call debugga ;----------- ;pusha ;mov edx,[l_header] ;add edx,[l_buff_da_cryptare] ;add edx,9 ;mov eax,4 ;mov ebx,1 ;mov ecx,buff1_2K_defa ;dec ecx ;mov edx,512 ;int 0x80 ;popa ;--------------- ;============== ;mov esi,[P1] ;add esi,[l_header] ;mov eax,esi ;call visualizza ;mov esi,[P2] ;add esi,[l_header] ;mov eax,esi ;call visualizza ;============== fine_codkiave1: sub dword [P3max],5000 ;���������������������������� popa ret ;--------------------------------- codkiave2: pusha mov eax,[act_K02] cmp eax,1 jne near fine_codkiave2 mov eax,[PIN_COD02] xor [Ptr_2_buffKeys_attuale],eax ; mov eax,"K 02" ;call visualizza ;call visualizza ; vediamo in che buffer abbiamo il messaggio consegnato da K01 ;abbiamo in [P1i] buffer_2send_dopo da----> mov esi,buffer_2send_dopo ;abbiamo in [P2] buff1_2K_defa da ----> mov edi,buff1_2K_defa ; QUINDI ALLINEATI con: ;add edi,6 ;dopo 2+4 bytes ;e quindi mov [P2],edi ; QUINDI ALLINEATI CON: ;mov ecx,[l_buff_da_cryptare] ;mov esi,[P1i] ;esi gia settato a ;mov edi,[P2] ;edi era cmq gia settato a fuffer_2kdefa + 2+4 char iniziali ; inoltre far riferimento a: ; l_header ; l_buff_da_cryptare = lunghezza messaggio attuale ; Ptr_2_buffKeys_precedente = quello gia scritto nei 4 bytes del messaggio ; som_PIN_CODE il pin code per costruire la lungh chiave att ;sistemiamoli nei registri: ;mov edi,[P1i] ; qui il msg SENZA i 2+4 bytes mov esi,[P2] ;[P2] ; qui buff1_2K_defa = il msg prov da K01 con i 2+4 bytes ; no add esi,[l_header] ;add esi,28 ;allineati dopo "PRIVMSG.... Nick|#Chan..... :" ;add esi,6 ;2+4 bytes mov [P1],esi ;buffer_2send_dopo usiamo al solito P1 e P1max mov ecx,[l_buff_da_cryptare] ;dec ecx ;leviamo 0xa mov [l_buff_da_cryptare],ecx add esi,ecx mov [P1max],esi mov esi,[P1] mov edx,K2a mov ebp,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD02] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD02] mov [P3],edx mov ecx,[l_buff_da_cryptare] add edx,ecx mov eax,[som_PIN_COD02] ;[som_PIN_CODE] add edx,eax mov [P3max],edx mov edx,[P3] ;dec edx ;0 based mov ecx,480 ;max 480 caaratteri call xora_K02 ;come call da usare anche per decodifica jmp fine_codkiave2_pre ;--------------- xora_K02: mov al,[esi] mov ah,[edx] xor al,ah mov [esi],al ;rimettiamolo xorato inc esi cmp esi,[P1max] jae K100_K02 xora_K02_dopo: inc edx cmp edx,[P3max] je K600_K02 ;fine dec ecx jnz xora_K02 K100_K02: mov esi,[P1] jmp xora_K02_dopo K600_K02: ret ;----------------- fine_codkiave2_pre: ;preparare buffer per prossima key o e' gia pronto?? ;mov esi,[P1] ;buffer_2send_dopo call allinea_P1_2_P2 mov esi,buffer_2send_dopo mov [P1i],esi mov [P1],esi fine_codkiave2: popa ret ;--------------------------------- codkiave3: pusha mov eax,[act_K03] cmp eax,1 jne near fine_codkiave3 mov eax,[PIN_COD03] xor [Ptr_2_buffKeys_attuale],eax mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave3 ; |------------------------------:Messaggio.............| ;buffer_2_send -----^ buffer_2send_dopo = P1 -----^ ; |------------------------:LmCodkMessaggio.............| ;buff_crypt_start --^ buff1_2K_defa -----^ ^---P2 ; |----------------------------------------i----------------f--------------| ; Kna--^ Ptr_2_buffKeys_attuale= P3---^ ^---P3max ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K3a ;la chiave 3 add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD03] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD03] mov [P3],edx ;-------------------------------------------- ;=============================================== add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD03] add edx,eax mov [P3max],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- ;xor,ecx,ecx inizia_K3: xor ebx,ebx mov bl,[edx] pre_va_oltre_K3: cmp ebx,ecx ;[l_buff_da_cryptare] jb va_oltre_K3 sub ebx,ecx jmp pre_va_oltre_K3 va_oltre_K3: mov ebp,ebx xor ebx,ebx mov bl,[edx+1] pre_va_oltre_K3_B2: cmp ebx,ecx ;[l_buff_da_cryptare] jb va_oltre_K3_B2 sub ebx,ecx jmp pre_va_oltre_K3_B2 va_oltre_K3_B2: mov al,[esi+ebp] mov ah,[esi+ebx] mov [esi+ebp],ah mov [esi+ebx],al inc edx cmp edx,[P3max] jna inizia_K3 ;------------ ; gia finito, sistemiamo qui anche il buffer di P2 ; rendiamo identico P2 a P1 ; ; fine_codkiave3_pre: call allinea_P1_2_P2 fine_codkiave3: popa ret ;--------------------------------- codkiave4: pusha mov eax,[act_K04] cmp eax,1 jne near fine_codkiave4 mov eax,[PIN_COD04] xor [Ptr_2_buffKeys_attuale],eax ;jmp fine_codkiave4 ;mov eax,"K 04" ;call visualizza ; Come chiave4 viene effettuato un doppio taglio con doppia inversione sui bit dei bytes individuati dai bit di kiave4, esempio: ;kiave4 (bit) 0100 0010 ;frase ???????? = (bit) abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz ;dopo kiave4 sara': abcdwxyz badcxwzy abcdwxyz abcdwxyz abcdwxyz abcdwxyz badcxwzy abcdwxyz ;Se il bit vale zero invece fara' effettuare al byte corrispondente rotazione di 1 bit a destra ;alla fine per effetto di kiave4: ; abcdwxyz badcxwzy abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz abcdwxyz diventera': ; zabcdwxy adcxwzya zabcdwxy zabcdwxy zabcdwxy zabcdwxy badcxwzy zabcdwxy ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;--------------------La chiave------------------ mov edx,K4a ;la chiave 4 add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD04] add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD04] mov [P3],edx mov ecx,[l_buff_da_cryptare] cmp ecx,0 jna near fine_codkiave4 ;dec ecx ;mettiamolo zero_based add edx,ecx ;dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD04] add edx,eax ;inc edx ;dec edx ;P3max vero mov [P3max],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- mov esi,[P1] inizia_K4: mov bh,10000000b ;mov cl,8 xor eax,eax K4_va_10: mov bl,[edx] mov al,[esi] and bl,bh jz va_K4_noswap call opera_su_al_K4 ;va_a_swappare_al mov [esi],al jmp K4_50 va_K4_noswap: ror al,1 mov [esi],al K4_50: inc esi cmp esi,[P1max] jna K4_100 mov esi,[P1] inc edx cmp edx,[P3max] ja fine_codkiave4_pre jmp inizia_K4 K4_100: clc shr bh,1 cmp bh,0 je K4_200 ;jc K4_200 ;dec cl jmp K4_va_10 K4_200: inc edx cmp edx,[P3max] ja fine_codkiave4_pre jmp inizia_K4 fine_codkiave4_pre: cmp esi,[P1] jne dopo_dopo_dopo_K4_01 dopo_FcK4_01: mov esi,[P1max] mov al,[esi] ;rol al,1 mov [esi],al ;------------- jmp dopo_dopo_dopo_K4_01 dopodopoK4_01: dopo_dopo_dopo_K4_01: ;-------da qui in poi OK--------------- mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al mov esi,[P1max] inc esi mov [P1max],esi call allinea_P1_2_P2 fine_codkiave4: popa ret ;-------------------------------------------------------------------------- codkiave5: pusha mov eax,[act_K05] cmp eax,1 jne near fine_codkiave5 mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_decodkiave5 ;mov eax,"K 05" ;call visualizza mov eax,[PIN_COD05] xor [Ptr_2_buffKeys_attuale],eax ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K5a ;la chiave 3 add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD05] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD05] mov [P3],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave5_pre2 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD05] add edx,eax mov [P3max],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K5: xor ebx,ebx mov bl,[edx] mov al,[esi] inizia_K5_01: add al,bl mov [esi],al inc esi cmp esi,[P1max] ja K5_2 inc edx cmp edx,[P3max] jna inizia_K5 jmp fine_codkiave5_pre K5_2: mov esi,[P1] jmp inizia_K5 fine_codkiave5_pre: call allinea_P1_2_P2 mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al fine_codkiave5_pre2: mov esi,[P1max] inc esi mov [P1max],esi fine_codkiave5: popa ret ;--------------------------------- codkiave6: pusha mov eax,[act_K06] cmp eax,1 jne near fine_codkiave6 ;mov eax,"K 06" ;call visualizza mov eax,[PIN_COD06] xor [Ptr_2_buffKeys_attuale],eax ;jmp fine_codkiave6 ;PROVVISORIOOOOOO!!!!!!!!!!!!! ;salto da eliminare appena pronta la decodifica di K6 ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K6a ;la chiave add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD06] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD06] mov [P3],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,0 jna near fine_codkiave6 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD06] add edx,eax mov [P3max],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K6: xor ecx,ecx ;esi ptr to >....123456.......... messaggio ;edx ptr to >...c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14.... ; ror al,cl ; ; 1 2 ; 1 2 3 ; 1 2 3 4 ; 1 2 3 4 5 ; 1 2 3 4 5 6 ; 1 ; 1 ; 1 ; 1 ; 1 c1 ror al , cl ; 1 2 ; 1 2 ; 1 2 ; 1 2 ; 1 2 c2 ror ax , cl ; 2 ; 2 ; 1 2 3 4 ; 1 2 3 4 ; 1 2 3 4 c3 ror eax , cl ; 2 3 ; 2 ; 2 ; 2 c4 ; 3 ; 2 3 ; 2 3 ; 2 3 c5 ; 3 ; 2 3 4 5 ; 2 3 4 5 c6 ; 3 4 ; 3 ; 3 c7 ; 4 ; 3 4 ; 3 4 c8 ; 4 ; 3 4 5 6 c9 ; 4 5 ; 4 c10 ; 5 ; 4 5 c11 ; 5 c12 ; 5 6 c13 " ; 6 c14 ;Lm = Lunghezza messaggio ; G_da4 = Lm - 3 ; G_da2 = Lm - 1 ; G_da1 = Lm ; Gtotali = P3max-P3 = Lm-3 + Lm -2 + Lm = 3*Lm -(3+1) NO!!!! non vale per Lm = 1 o 2 mov cl,[edx] blocco4bytes_K6_pre: mov al,[esi] ;[1].2.3.4.5 ror al,byte cl mov [esi],al inc edx ;il prossimo char come chiave mov cl,[edx] blocco4bytes_K6: ;--------primo blocco 4 bytes----------- add esi,1 cmp esi,[P1max] ja fine_codkiave6_pre ;fine messaggio e codifica sub esi,1 ;roimettiamolo come prima mov ax,[esi] ;[12].3.4.5 ror ax,byte cl mov [esi],ax inc edx mov cl,[edx] add esi,3 cmp esi,[P1max] ja meno_di_4_K6 sub esi,3 mov eax,[esi] ;[1234].5 ror eax,byte cl mov [esi],eax inc esi inc edx mov cl,[edx] jmp blocco4bytes_K6_pre meno_di_4_K6: sub esi,3 inc esi jmp inizia_K6 ;----------------------- fine_codkiave6_pre: mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al mov esi,[P1max] inc esi mov [P1max],esi call allinea_P1_2_P2 fine_codkiave6: popa ret ;--------------------------------- codkiave7: pusha mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave7 mov dword [P3_7],0 mov dword [P3_7max],0 mov esi,buff_vuoto_2mega mov dword [P3_7_p],esi inc esi mov dword [P3_7max_p],esi mov eax,[act_K07] cmp eax,1 jne near fine_codkiave7 ;mov eax,"K 07" ;call visualizza mov eax,[PIN_COD07] xor [Ptr_2_buffKeys_attuale],eax mov dword [P3_7],1 ;========================================================== ;DA QUI ��������������������������������������������������� ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K7a ;la chiave ;��������������� mov eax,[som_PIN_COD07] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_K7 mov [P3_master],eax no_master_K7: ;��������������� add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD07] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD07] mov [P3_7_p],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave7_pre2 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD07] add edx,eax mov [P3_7max_p],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE ;mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K7: ;FIN QUI ��������������������������������������������������� ;=========================================================== ;======CONTROLLI INIZIALI========================= mov eax,[act_K08] cmp eax,1 je K8_is_attivo_K7 mov eax,[act_K09] cmp eax,1 je K9_is_attivo_K7 jmp tocca_a_me_K7 K8_is_attivo_K7: mov eax,[P3_8] cmp eax,1 je K8_gia_fatto_K7 jmp fine_codkiave7_pre K8_gia_fatto_K7: mov eax,[act_K09] cmp eax,1 jne tocca_a_me_K7 K9_is_attivo_K7: mov eax,[P3_9] cmp eax,1 je tocca_a_me_K7 jmp fine_codkiave7_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_K7: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"OPK7" ;call visualizza ; Funzione: settare P1 = P1_7 --- P1max = P1_7 max ... P3 = P3_7 --- P3max = P3_7max call esegui_funzione_789_K ;nella funzione 789 trovera': ; P1_7_A = 0 ecc. ; P1_8_A --> OK ; P1_9_A --> OK jmp fine_codkiave7_pre ;------------------- K89_viene_dopo: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 ;mov eax,"OP89" ;call visualizza ;Funzione: settare P1_7A = P1 --- P1_7A max = P1max ---- P3_7 = P3 ---- P3_7max = P3max ;uscire eseguendo le minime operazioni di ripristino jmp fine_codkiave7_pre ;======================TUTTO QUI===================== fine_codkiave7_pre: mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al call allinea_P1_2_P2 fine_codkiave7_pre2: mov esi,[P1max] inc esi mov [P1max],esi fine_codkiave7: popa ret ;--------------------------------- codkiave8: pusha mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave8 mov dword [P3_8],0 mov dword [P3_8max],0 mov esi,buff_vuoto_2mega mov [P3_8_p],esi inc esi mov [P3_8max_p],esi mov eax,[act_K08] cmp eax,1 jne near fine_codkiave8 ;mov eax,"K 08" ;call visualizza mov eax,[PIN_COD08] xor [Ptr_2_buffKeys_attuale],eax mov dword [P3_8],1 ;========================================================== ;DA QUI ��������������������������������������������������� ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K8a ;la chiave ;��������������� mov eax,[som_PIN_COD08] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_K8 mov [P3_master],eax no_master_K8: ;��������������� add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD08] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD08] mov [P3_8_p],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave8_pre2 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD08] add edx,eax mov [P3_8max_p],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE ;mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K8: ;FIN QUI ��������������������������������������������������� ;=========================================================== ;======CONTROLLI INIZIALI========================= mov eax,[act_K07] cmp eax,1 je K7_is_attivo_K8 mov eax,[act_K09] cmp eax,1 je K9_is_attivo_K8 jmp tocca_a_me_K8 K7_is_attivo_K8: mov eax,[P3_7] cmp eax,1 je K7_gia_fatto_K8 jmp fine_codkiave8_pre K7_gia_fatto_K8: mov eax,[act_K09] cmp eax,1 jne tocca_a_me_K8 K9_is_attivo_K8: mov eax,[P3_9] cmp eax,1 je tocca_a_me_K8 jmp fine_codkiave8_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_K8: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"OPK8" ;call visualizza call esegui_funzione_789_K jmp fine_codkiave8_pre ;------------------- K79_viene_dopo: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 ;mov eax,"OP79" ;call visualizza jmp fine_codkiave8_pre ;======================TUTTO QUI===================== fine_codkiave8_pre: mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al call allinea_P1_2_P2 fine_codkiave8_pre2: mov esi,[P1max] inc esi mov [P1max],esi fine_codkiave8: popa ret ;--------------------------------- codkiave9: pusha mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave7 mov dword [P3_9],0 mov dword [P3_9max],0 mov esi,buff_vuoto_2mega mov dword [P3_9_p],esi inc esi mov dword [P3_9max_p],esi mov eax,[act_K09] cmp eax,1 jne near fine_codkiave9 ;mov eax,"K 09" ;call visualizza mov eax,[PIN_COD09] xor [Ptr_2_buffKeys_attuale],eax mov dword [P3_9],1 ;========================================================== ;DA QUI ��������������������������������������������������� ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K9a ;la chiave ;��������������� mov eax,[som_PIN_COD09] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_K9 mov [P3_master],eax no_master_K9: ;��������������� add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD09] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD09] mov [P3_9_p],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,1 jna near fine_codkiave9_pre2 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD09] add edx,eax mov [P3_9max_p],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE ;mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K9: ;FIN QUI ��������������������������������������������������� ;=========================================================== ;======CONTROLLI INIZIALI========================= mov eax,[act_K08] cmp eax,1 je K8_is_attivo_K9 mov eax,[act_K07] cmp eax,1 je K7_is_attivo_K9 jmp tocca_a_me_K9 K8_is_attivo_K9: mov eax,[P3_8] cmp eax,1 je K8_gia_fatto_K9 jmp fine_codkiave9_pre K8_gia_fatto_K9: mov eax,[act_K07] cmp eax,1 jne tocca_a_me_K9 K7_is_attivo_K9: mov eax,[P3_7] cmp eax,1 je tocca_a_me_K9 jmp fine_codkiave9_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_K9: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"OPK9" ;call visualizza call esegui_funzione_789_K jmp fine_codkiave9_pre ;------------------- K78_viene_dopo: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 ;mov eax,"OP78" ;call visualizza jmp fine_codkiave9_pre ;======================TUTTO QUI===================== fine_codkiave9_pre: mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al call allinea_P1_2_P2 fine_codkiave9_pre2: mov esi,[P1max] inc esi mov [P1max],esi fine_codkiave9: popa ret ;--------------------------------- codkiave10: pusha mov eax,[act_K00] cmp eax,1 jne near fine_codkiave10 ;mov eax,"K 10" ;call visualizza mov eax,[PIN_COD10] xor [Ptr_2_buffKeys_attuale],eax ;-------------------Il messaggio---------------- mov esi,buff1_2K_defa ;buffer_2send_dopo add esi,6 mov [P1],esi add esi,[l_buff_da_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;mov esi,[P2] ;=========EV.te da ripristinare================== ;--------------------La chiave------------------ mov edx,K0a ;la chiave add edx,[Ptr_2_buffKeys_attuale] mov eax,[som_PIN_COD10] ;--------------------------------- add edx,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] xor edx,[PIN_COD10] mov [P3],edx ;-------------------------------------------- ;=============================================== mov ecx,[l_buff_da_cryptare] cmp ecx,0 jna near fine_codkiave10 add edx,ecx dec ecx ;mettiamolo zero_based mov eax,[som_PIN_COD10] add edx,eax mov [P3max],edx ;P3max = base_addr_attuale+lungh_mesg+som_PIN_CODE mov edx,[P3] ;base_addr_attuale ;----------------------------------------------- inizia_K10: ;=================================================================================== ;La kiave10 come chiave complessa usa i bit della key per traslare a gruppi di 8 i byte ;del messaggio originale verso l'inizio; esempio: ;kiave10 (bit) 0010 0100 ;messaggio: ABCDEFGH ;usando kiave10 il messaggio diventa: ;1� passaggio: CABDEFGH ;2� passaggio: FCABDEGH ;il tutto ripetuto sui successivi gruppi di 8 bytes di messaggio tante volte quanti ;sono i bytes di kiave9 ;:------------------------------------------ ; |------------------------------:Messaggio.............| ;buffer_2_send -----^ buffer_2send_dopo = P1 -----^ ; |------------------------:LmCodkMessaggio.............| ;buff_crypt_start --^ buff1_2K_defa -----^ ^---P2 ; |---------------------------------------------............--------------------| ; riempi1 (buff da 2 mega) <----ebp...-^-...edi----> ; |----------------------------------------i----------------f--------------| ; Kna--^ Ptr_2_buffKeys_attuale= P3---^ ^---P3max ;==================================================================================== mov dword [op_ebp],0 mov dword [op_edi],0 mov esi,[P1] mov edx,[P3] mov ebp,riempi1 ; buff da 2 mega add ebp,512 ;mettiamoci a distanza sufficiente dall'inizio per ricevere ;l'intero messaggio se tutti i bit della chiave sono a 1 mov edi,ebp ;sincr edi e ebp; edi incrementa se bit =0, ebp decrementa se bit=1 inc edi ;dec ebp inizia_K10_1: mov bl,[edx] mov cl,8 va_esi_K10: mov al,[esi] clc shl bl,1 jc is_1_K10 ;mov [edi],al ;inc edi ;jmp dopo_is_1_K10 ror al,2 is_1_K10: mov [ebp],al dec ebp dopo_is_1_K10: inc esi cmp esi,[P1max] jbe va_a_deccl_K10 call rimetti_riempi1_2_P1 ;rimetti nel buffer iniziale jmp fine_codkiave10_pre ;provvisorio ;mov esi,[P1] ;inc edx ;cmp edx,[P3max] ;ja fine_codkiave10_pre ;jmp inizia_K10_1 va_a_deccl_K10: dec cl jnz va_esi_K10 inc edx cmp edx,[P3max] ja fine_codkiave10_pre jmp inizia_K10_1 fine_codkiave10_pre: ;call rimetti_riempi1_2_P1 ;allineamolo che e' meglio mov esi,[P1] add esi,[l_buff_da_cryptare] mov al,0xa mov [esi],al mov esi,[P1max] inc esi mov [P1max],esi call allinea_P1_2_P2 fine_codkiave10: popa ret ;--------------------------------- codkiave11: pusha mov eax,[act_K11] cmp eax,1 jne fine_codkiave11 mov eax,"K 11" call visualizza mov eax,[PIN_COD11] xor [Ptr_2_buffKeys_attuale],eax fine_codkiave11: popa ret ;--------------------------------- codkiave12: pusha mov eax,[act_K12] cmp eax,1 jne fine_codkiave12 mov eax,"K 12" call visualizza mov eax,[PIN_COD12] xor [Ptr_2_buffKeys_attuale],eax fine_codkiave12: popa ret ;--------------------------------- codkiave13: pusha mov eax,[act_K13] cmp eax,1 jne fine_codkiave13 mov eax,"K 13" call visualizza mov eax,[PIN_COD13] xor [Ptr_2_buffKeys_attuale],eax fine_codkiave13: popa ret ;--------------------------------- ultimo_passo_K: pusha ;call codifica_0AD codifica_0AD_up: ;serve a codificare i bytes 0,A,D del paccketto buff1_2K_defa ;altrimenti non accettati dal server call pulisci_buff_provv_32k xor ebx,ebx mov edi,buff_provv_32k mov esi,buff1_2K_defa mov ecx,512 cod_0AD1x_poiup: mov al,[esi] cmp al,0 je is_0_cod_0ADup cmp al,0xa je is_A_cod_0ADup cmp al,0xd je is_D_cod_0ADup mov [edi],al inc edi inc esi dec ecx jnz cod_0AD1x_poiup jmp fine_0ADup is_0_cod_0ADup: call conta_otto_zeri cmp ebx,0 je near fine_0ADup mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] mov [edi],ax jmp no_0ADup is_A_cod_0ADup: call conta_otto_zeri cmp ebx,0 je fine_0ADup mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] add ax,0xa mov [edi],ax jmp no_0ADup is_D_cod_0ADup: call conta_otto_zeri cmp ebx,0 je fine_0ADup mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] add ax,0xd mov [edi],ax jmp no_0ADup ;-------routine interna---- conta_otto_zeri: mov ebx,8 push esi continua_conta_otto: inc esi mov al,[esi] cmp al,0 jne fine_conta_otto dec ebx jnz continua_conta_otto fine_conta_otto: pop esi ret ;--------------------- no_0ADup: add edi,2 inc esi dec ecx jnz cod_0AD1x_poiup fine_0ADup: mov al,0xa mov [edi],al push edi ;popa ;ret ;qui abbiamo tutto su buff_provv_32K ;ora mettiamolo su buff_crypt mov esi,buff_provv_32k mov edi,buff1_2K_defa mov ebx,480 cont_sistema_ultimo_buffer: mov al,[esi] mov [edi],al inc esi inc edi dec ebx jnz cont_sistema_ultimo_buffer pop edx ;valore precedente del buffer mov edi,buff_provv_32k sub edx,edi ;abbiamo cosi quanti bytes add edx,29 ; i chars di privmesg ecc... ;push edx mov eax,4 mov ebx,[sock] mov ecx,buff_crypt_start ; buff_std_prova ;mov edx,510 numero di bytes e' quello calcolato int 0x80 ;pop edx ;mov eax,4 ;mov ebx,1 ;[sock] ;mov ecx,buff_crypt_start ; buff_std_prova ;mov edx,510 numero di bytes e' quello calcolato ;int 0x80 popa ret ;----------------------- ;������������������������������������������������������������������������������������������ ;������������������������������������������������������������������������������������������ ; ;decodkiavi.asm ; ;--------------------------------- decodkiave1: pusha ;qui inserire le routines da master mov eax,[act_K01] cmp eax,1 jne near fine_decodkiave1 mov eax,"DK01" ;call visualizza ;call pulisci_buff1_2K_defa call pulisci_buff1_2K_defa ;call calcola_som_PIN_CODE ;mov eax,[PIN_CODE] ;mov [som_PIN_CODE],dword 0 ;add [som_PIN_CODE],al ;add [som_PIN_CODE],ah ;bswap eax ;add [som_PIN_CODE],al ;add [som_PIN_CODE],ah ;mov eax,[som_PIN_CODE] xor eax,eax mov ebx,[l_buff_da_DE_cryptare] ;dec ebx e' gia levato ;leviamo il carattere 0xA add ebx,eax ; = lunghezza chiave da usare mov [lungh_key_DK],ebx and ebx,1 jz is_pari_K1xx mov ebx,[lungh_key_DK] inc ebx mov [lungh_key_DK],ebx is_pari_K1xx: mov ebx,[lungh_key_DK] mov ebp,K1a mov edx,[Ptr_2_buffKeys_attuale_2_DK] ;quello pervenuto nel messaggio ;-------------------------------- add edx,[som_PIN_COD01] add edx,eax ;-------------------------------- add ebp,edx ;P3i -->P3v xor ebp,[PIN_COD01] mov [P3],ebp add ebx,ebp ;aggiungiamo pin_CODE + Lungh_messaggio ; sub ebx,2 ;provvisorio mov [P3max],ebx ;e abbiamo il Puntatore_max_aKey add dword [P3max],5000 ;���������������������������� mov ebx,[l_buff_da_DE_cryptare] and ebx,1 jz is_pari_K1 sub dword [P3max],2 ;inc ebx ;mov [P3max],ebx is_pari_K1: mov edx,[P3max] ;anche in edx mov esi,buffer_2recv add esi,[l_buff_da_DE_cryptare] mov ecx,[l_header] add ecx,6 add esi,ecx mov [P1max],esi mov ebx,[l_buff_da_DE_cryptare] and ebx,1 jz is_pari_K1_peresi ;dec dword [P1max] is_pari_K1_peresi: mov ebx,[l_buff_da_DE_cryptare] and ebx,1 jnz is_dispari_K1_peredx sub dword [P3max],2 mov edx,[P3max] is_dispari_K1_peredx: ;-------------- mov esi,buffer_2recv mov edi,buff1_2K_defa ;buff_provv_32k call pulisci_buff1_2K_defa ; buff_provv_32k mov ecx,[l_header] add ecx,6 allinea_buff_K1_DK: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz allinea_buff_K1_DK ;add esi,6 ;i 4+2 chars mov [P1i],esi ;jmp fine_decodkiave1 sist_buff_12345_DK: mov bl,[edx] ;5 mov bh,[edx+1] primo_char_K1_DK: xor eax,eax mov al,[esi] ;10 cmp al,bl ;20 je P100K1_DK ; uguali_al_bl ; goto 100 cmp al,bh ;30 je P200K1_DK ; uguali_al_bh ; goto 200 linea40_DK: inc esi ;40 P1v=P1v+1 cmp esi,[P1max] ;50 jae P500K1_DK ;non_ugiuali_al,bl-bh ; goto 500 jmp primo_char_K1_DK ; goto 20 P100K1_DK: mov [esi],bh ;100 al= bh inc esi ;110 P1v = P1v +1 cmp esi,[P1max] ;120 If P1v > P1max then 500 jae P500K1_DK jmp primo_char_K1_DK ;130 goto 10 P200K1_DK: mov [esi],bl ;200 al=bl inc esi ;210 P1v = P1v+1 cmp esi,[P1max] ;220 If P1v > P1max then 500 ja P500K1_DK jmp primo_char_K1_DK ;230 goto 10 P500K1_DK: ;ok siamo fuori sistemato il buffer dec edx cmp edx,[P3] jb P600K1_DK dec edx cmp edx,[P3] jb P600K1_DK mov esi,[P1i] jmp sist_buff_12345_DK P600K1_DK: ;mov ecx,[l_buff_da_DE_cryptare] ;mov esi,[P1i] ;esi gia settato a mov edi,buff1_2K_defa ;[P2] ;edi era cmq gia settato a fuffer_2kdefa + 2+4 char iniziali ;mettiamo buffer_2sendopo to buffer_2Kdefa ;inc ecx mov esi,buffer_2recv mov ecx,[l_header] inc ecx cont_P600K1_DK: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_P600K1_DK mov ecx,[l_buff_da_DE_cryptare] add ecx,2 ;0xD 0xA add ecx,6 ;+2 +4 dec edi dec esi ;add esi,6 ;superiamo i 2+4 bytes di controllo cont_P600K1_DK_dopo6: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_P600K1_DK_dopo6 mov eax,[PIN_COD01] xor [Ptr_2_buffKeys_attuale_2_DK],eax ;mov esi,buffer_2recv ;call debugga ;popa fine_decodkiave1: sub dword [P3max],5000 ;���������������������������� popa ret ;--------------------------------- decodkiave2: pusha mov eax,[act_K02] cmp eax,1 jne near fine_decodkiave2 ; mov eax,"DK02" ;call visualizza ;[P2] ; qui buff1_2K_defa = il msg prov da K01 con i 2+4 bytes ; no add esi,[l_header] ;add esi,28 ;allineati dopo "PRIVMSG.... Nick|#Chan..... :" ;add esi,6 ;2+4 bytes ;usiamo al solito P1 e P1max ;pusha ;call debugga ;popa ;ERANO QUIIIIIIIIIIIIIIIIIIIIIIIIII ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi mov esi,[P1] ;--------------------La chiave------------------ ;mov ebp,K3a mov ebp,K2a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD02] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD02] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD02] mov [P3max],edx ;mov edx,[P3max] mov ecx,[l_buff_da_DE_cryptare] ; cmp ecx,1 ; jna near fine_decodkiave2 dec ecx ;mettiamolo zero_based ;----------------------------------------------- mov esi,[P1] mov ebp,K2a mov edx,[P3] mov ecx,480 ;max 480 caaratteri call xora_K02 ;come call da usare anche per decodifica jmp fine_decodkiave2_pre fine_decodkiave2_pre: ;preparare buffer per prossima key o e' gia pronto?? mov esi,buffer_2recv mov edi,buff1_2K_defa mov ebx,[l_header] ;28 ;PRIVMSG ecc ;[l_header] add ebx,6 ;2+4 bytes add ebx,[l_buff_da_DE_cryptare] inc ebx ;0Xa inc ebx mov ecx,480 ;480 mov eax,[PIN_COD02] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave2: ;sistemare il buffer giusto dec ecx jz sist_buff_K02_fin_DK mov al,[esi] mov [edi],al inc esi inc edi dec ebx jnz fine_decodkiave2 ; se ebx errato vediamo che cazz ci mette ;mov al,0xa ;mov [edi],al ;:zuppolo!~zupolon^@host200-41.pool8261.interbusiness.it PRIVMSG #coclide :@@@@@ sist_buff_K02_fin_DK: ;fine_decodkiave2: popa ret ;--------------------------------- decodkiave3: pusha mov eax,[act_K03] cmp eax,1 jne near fine_decodkiave3 mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave3_pre2 dec ecx ;mettiamolo zero_based ;jmp fine_decodkiave3 ;mov esi,buffer_2recv ;call debugga ;mov esi,buff1_2K_defa ;call debugga ;mov eax,"DK03" ;call visualizza ; |----l_header -----------:LmCodkM e s s a g g i o.............| ;buffer_2recv ------^ P1--^ ^---P1max ;(dopo il preDK) ; |----l_header -----------:LmCodkM e s s a g g i o.............| ;buff1_2K_defa -----^ ; |----------------------------------------i---------------------f--------------| ; Kna--^ Ptr_2_buffKeys_attuale= P3---^ ^---P3max ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi mov esi,[P1] ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K3a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD03] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD03] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD03] mov [P3max],edx mov edx,[P3max] ;------------------------------------------------- ;================================================= ;----------------------------------------------- inizia_DK3: xor ebx,ebx mov bl,[edx] pre_va_oltre_DK3: cmp ebx,ecx ;[l_buff_da_DE_cryptare] jb va_oltre_DK3 sub ebx,ecx jmp pre_va_oltre_DK3 va_oltre_DK3: mov ebp,ebx xor ebx,ebx mov bl,[edx+1] pre_va_oltre_DK3_B2: cmp ebx,ecx ;[l_buff_da_DE_cryptare] jb va_oltre_DK3_B2 sub ebx,ecx jmp pre_va_oltre_DK3_B2 va_oltre_DK3_B2: mov al,[esi+ebp] mov ah,[esi+ebx] mov [esi+ebp],ah mov [esi+ebx],al dec edx cmp edx,[P3] jae inizia_DK3 ;------------ ; gia finito, sistemiamo qui anche il buffer di P2 ; rendiamo identico P2 a P1 ; ; fine_decodkiave3_pre: call allinea_BUFF_DK fine_decodkiave3_pre2: mov eax,[PIN_COD03] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave3: popa ret ;--------------------------------- decodkiave4: pusha mov eax,[act_K04] cmp eax,1 jne near fine_decodkiave4 ;mov eax,"DK04" ;call visualizza ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K4a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD04] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD04] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD04] ;inc edx ;dec edx mov [P3max],edx mov edx,[P3max] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,0 jna near fine_codkiave4 dec ecx ;mettiamolo zero_based ;----------------------------------------------- inizia_DK4__: ;========================================================== mov esi,[P1] mov edx,[P3] inizia_DK4_f1: mov bh,10000000b mov cl,8 xor eax,eax K4_va_10_f1: mov bl,[edx] mov al,[esi] and bl,bh jz va_K4_noswap_f1 ;call opera_su_al_K4 ;va_a_swappare_al ;mov [esi],al K4_50_f1: inc esi cmp esi,[P1max] jna K4_100_f1 mov esi,[P1] inc edx cmp edx,[P3max] ja fine_decodkiave4_pre_f1 jmp inizia_DK4_f1 K4_100_f1: clc shr bh,1 cmp bh,0 je K4_200_f1 ;dec cl jmp K4_va_10_f1 K4_200_f1: inc edx cmp edx,[P3max] ja fine_decodkiave4_pre_f1 jmp inizia_DK4_f1 va_K4_noswap_f1: ;ror al,1 ;mov [esi],al jmp K4_50_f1 fine_decodkiave4_pre_f1: dec edx ;rimettiamolo su P3max ;mov edx,[P3max] dec esi cmp esi,[P1] jnb dopo_esi_dk4 mov esi,[P1max] ;dec edx dopo_esi_dk4: ;mov edx,[P3max] ;allineiamo: mov byte [provv],00000001b ;mov byte [provv],00000001b mov ecx,[P1max] sub ecx,[P1] ;cmp ecx,8 ;jnb prova_esi_DK4 mov byte [prov_K4],10000000b ;dec cl su_k4: cmp cl,0 je prova_esi_DK4 ror byte [prov_K4],1 dec cl jnz su_k4 ;mov al,[prov_K4] ;mov [provv_1_max],al ;mov [provv],bh ;mov cl,bh ;rol bh,1 ? ;cl e bh puntano giusti? prova_esi_DK4: mov al,[prov_K4] mov [provv_1_max],al ;shl bh,1 cmp bh,0 jne dopo_dopo_esi_dk4 mov bh,[provv] ;mov cl,8 lo facciamo diventare: dopo_dopo_esi_dk4; cmp esi,[P1] ja DK4_va_10 mov esi,[P1max] ;jmp DK4_va_10 ;============================================================ ;1) calcolare blocchi da 8 Bda8 in lungh messaggio ;se c'e' resto Bda8 = Bda8 +1 ; almeno 1 blocco (anche se <8) ;2) dividere lungh chiave per Bda8 per trovare resto R_Lch = resto Lunghezza chiave (Lch/Bda8) ;3) add esi,R_Lch ;per trovare posizione iniziale ;PRIMA DI TUTTO ALLINEIAMO UBK Ultimo Byte CRIPTATO ; ||.... ....|.... ....|.... ....|.... ....|.... ....|.... ....|.... ....|.... ....||..... ^ ;---UBK------------------------------------------^ ;bh || 0 0 0 0 1 0 0 0 || ;settare i bit di bh a 00001000 ;=========================== inizia_DK4_3: cmp dword [l_buff_da_DE_cryptare],8 ; 7 ;cmp bh,0 ja dopo_dk4_3 ;DK4_va_9 cmp bh,0 ja DK4_va_10 jmp DK4_va_5 dopo_dk4_3: mov byte [prov_K4],00000001b ; cmp bh,0 ; ja DK4_va_10 DK4_va_5: mov bh,[prov_K4] ;10000000b oppure max-lungh da 100000000 a 00000001h mov cl,8 xor eax,eax DK4_va_9: cmp bh,0 je DK4_va_5 DK4_va_10: mov bl,[edx] mov al,[esi] and bl,bh jz va_DK4_noswap call opera_su_al_K4 ;va_a_swappare_al mov [esi],al DK4_50: dec esi cmp esi,[P1] jae DK4_100 mov esi,[P1max] mov bh,[provv_1_max] dec edx cmp edx,[P3] jb fine_decodkiave4_pre jmp DK4_va_10 ;DK4_va_5 ;inizia_DK4_3 DK4_100: shl bh,1 cmp bh,0 je DK4_200 ;dec cl jmp DK4_va_10 ;jnz DK4_va_10 DK4_200: dec edx cmp edx,[P3] jb fine_decodkiave4_pre mov bh,[provv_1_max] cmp dword [l_buff_da_DE_cryptare],8 jna DK4_200_1 mov bh,000000001b DK4_200_1: jmp DK4_va_10 ;inizia_DK4_3 va_DK4_noswap: rol al,1 mov [esi],al jmp DK4_50 ;=================== fine_decodkiave4_pre: call allinea_BUFF_DK mov eax,[PIN_COD04] xor [Ptr_2_buffKeys_attuale_2_DK],eax mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave4: popa ret ;--------------------------------- decodkiave5: pusha mov eax,[act_K05] cmp eax,1 jne near fine_decodkiave5 mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave5 ; mov eax,"DK05" ;call visualizza ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi mov esi,[P1] ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K5a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD05] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD05] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD05] mov [P3max],edx mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave5_pre2 dec ecx ;mettiamolo zero_based ;----------------------------------------------- inizia_DK5: xor ebx,ebx mov bl,[edx] mov al,[esi] inizia_DK5_01: sub al,bl mov [esi],al inc esi cmp esi,[P1max] ja DK5_2 inc edx cmp edx,[P3max] jna inizia_DK5 jmp fine_decodkiave5_pre DK5_2: mov esi,[P1] jmp inizia_DK5 fine_decodkiave5_pre: call allinea_BUFF_DK mov eax,[PIN_COD05] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave5_pre2: mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave5: popa ret ;--------------------------------- decodkiave6: pusha mov eax,[act_K06] cmp eax,1 jne near fine_decodkiave6 ; mov eax,"DK06" ; call visualizza ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;mov esi,[P1] ;ok in esi P1max ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K6a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD06] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD06] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD06] mov [P3max],edx mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,0 jna near fine_codkiave6 dec ecx ;mettiamolo zero_based ;----------------------------------------------- ;precalcoliamo P3max xor ecx,ecx mov ecx,1 mov eax,[l_buff_da_DE_cryptare] cmp eax,1 je pre_inizia_DK6 add ecx,2 ;2+1=3 combinazioni cmp eax,2 ;2 caratteri je pre_inizia_DK6 ; >2 quindi vale la formula ; Gtotali = Lm = 3*Lm -4 mov ebx,3 mul ebx sub eax,4 mov ecx,eax pre_inizia_DK6: mov edx,[P3] add edx,ecx mov [P3max],edx dec edx ;zero based inizia_DK6: xor ecx,ecx ;esi ptr to >....123456.......... messaggio ;edx ptr to >...c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14.... ; ror al,cl ; ; 1 2 ; 1 2 3 ; 1 2 3 4 ; 1 2 3 4 5 ; 1 2 3 4 5 6 ; 1 ; 1 ; 1 ; 1 ; 1 c1 ror al , cl ; 1 2 ; 1 2 ; 1 2 ; 1 2 ; 1 2 c2 ror ax , cl ; 2 ; 2 ; 1 2 3 4 ; 1 2 3 4 ; 1 2 3 4 c3 ror eax , cl ; 2 3 ; 2 ; 2 ; 2 c4 ; 3 ; 2 3 ; 2 3 ; 2 3 c5 ; 3 ; 2 3 4 5 ; 2 3 4 5 c6 ; 3 4 ; 3 ; 3 c7 ; 4 ; 3 4 ; 3 4 c8 ; 4 ; 3 4 5 6 c9 ; 4 5 ; 4 c10 ; 5 ; 4 5 c11 ; 5 c12 ; 5 6 c13 " ; 6 c14 ;Lm = Lunghezza messaggio ; G_da4 = Lm - 3 ; G_da2 = Lm - 1 ; G_da1 = Lm ; Gtotali = P3max-P3 = Lm-3 + Lm -2 + Lm = 3*Lm -(3+1) NO!!!! non vale per Lm = 1 o 2 mov cl,[edx] mov al,[esi] ; 1.2.3.4.[5] rol al,cl mov [esi],al dec edx mov cl,[edx] blocco4bytes_DK6: ;--------primo blocco 4 bytes----------- sub esi,1 cmp esi,[P1] jb fine_decodkiave6_pre ;fine messaggio e codifica ;dec edx ;inc edx ;il prossimo char come chiave ;sub esi,1 ;roimettiamolo come prima mov ax,[esi] ; 1.2.3.[45] rol ax,byte cl ;ror ax,byte cl mov [esi],ax dec edx ;inc edx mov cl,[edx] mov al,[esi] ; 1.2.3.[4].5 rol al,byte cl mov [esi],al dec edx mov cl,[edx] sub esi,1 cmp esi,[P1] jb fine_decodkiave6_pre ;sub esi,1 ;roimettiamolo come prima mov ax,[esi] ; 1.2.[34].5 rol ax,byte cl ;ror ax,byte cl mov [esi],ax dec edx ;inc edx mov cl,[edx] mov al,[esi] ; 1.2.[3].4.5 rol al,byte cl mov [esi],al dec edx mov cl,[edx] sub esi,1 cmp esi,[P1] jb fine_decodkiave6_pre ;sub esi,1 ;roimettiamolo come prima Qui_parte4_DK6: mov eax,[esi] ; 1.[2345] rol eax,byte cl ;ror ax,byte cl mov [esi],eax dec edx ;inc edx mov cl,[edx] ;sub esi,1 ;roimettiamolo come prima mov ax,[esi] ; 1.[23].4.5 rol ax,byte cl ;ror ax,byte cl mov [esi],ax dec edx ;inc edx mov cl,[edx] ;sub esi,1 ;roimettiamolo come prima mov al,[esi] ; 1.[2].3.4.5 rol al,byte cl ;ror ax,byte cl mov [esi],al dec edx ;inc edx mov cl,[edx] sub esi,1 cmp esi,[P1] jb fine_decodkiave6_pre jmp Qui_parte4_DK6 ;-------------------------------- fine_decodkiave6_pre: call allinea_BUFF_DK mov eax,[PIN_COD06] xor [Ptr_2_buffKeys_attuale_2_DK],eax mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave6: popa ret ;--------------------------------- decodkiave7: pusha mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave7 mov dword [P3_7],0 mov dword [P3_7max],0 mov esi,buff_vuoto_2mega mov dword [P3_7_p],esi inc esi mov dword [P3_7max_p],esi mov eax,[act_K07] cmp eax,1 jne near fine_decodkiave7 ;mov eax,"DK07" ;call visualizza mov dword [P3_7],1 ;================================================ ;������������������������������������������������ ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;mov esi,[P1] ;ok in esi P1max ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K7a ;��������������� mov eax,[som_PIN_COD07] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_DK7 mov [P3_master],eax no_master_DK7: ;��������������� mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD07] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD07] mov [P3_7_p],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD07] mov [P3_7max_p],edx ;mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave7_pre2 dec ecx ;mettiamolo zero_based ;----------------------------------------------- ;precalcoliamo P3max inizia_DK7: ;������������������������������������������������ ;================================================ ;======CONTROLLI INIZIALI========================= mov eax,[act_K08] cmp eax,1 je K8_is_attivo_DK7 mov eax,[act_K09] cmp eax,1 je K9_is_attivo_DK7 jmp tocca_a_me_DK7 K8_is_attivo_DK7: mov eax,[P3_8] cmp eax,1 je K8_gia_fatto_DK7 jmp fine_decodkiave7_pre K8_gia_fatto_DK7: mov eax,[act_K09] cmp eax,1 jne tocca_a_me_DK7 K9_is_attivo_DK7: mov eax,[P3_9] cmp eax,1 je tocca_a_me_DK7 jmp fine_decodkiave7_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_DK7: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"IDK7" ;call visualizza call esegui_funzione_789_K jmp fine_decodkiave7_pre ;------------------- K89_viene_dopo_DK: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 mov eax,"DK89" call visualizza jmp fine_decodkiave7_pre ;======================TUTTO QUI===================== fine_decodkiave7_pre: call allinea_BUFF_DK fine_decodkiave7_pre2: mov eax,[PIN_COD07] xor [Ptr_2_buffKeys_attuale_2_DK],eax mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave7: popa ret ;--------------------------------- decodkiave8: pusha mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave8 mov dword [P3_8],0 mov dword [P3_8max],0 mov esi,buff_vuoto_2mega mov dword [P3_8_p],esi inc esi mov dword [P3_8max_p],esi mov eax,[act_K08] cmp eax,1 jne near fine_decodkiave8 ;mov eax,"DK08" ;call visualizza mov dword [P3_8],1 ;================================================ ;������������������������������������������������ ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;mov esi,[P1] ;ok in esi P1max ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K8a ;��������������� mov eax,[som_PIN_COD08] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_DK8 mov [P3_master],eax no_master_DK8: ;��������������� mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD08] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD08] mov [P3_8_p],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD08] mov [P3_8max_p],edx ;mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave8_pre2 dec ecx ;mettiamolo zero_based ;----------------------------------------------- ;precalcoliamo P3max inizia_DK8: ;������������������������������������������������ ;================================================ ;======CONTROLLI INIZIALI========================= mov eax,[act_K07] cmp eax,1 je K7_is_attivo_DK8 mov eax,[act_K09] cmp eax,1 je K9_is_attivo_DK8 jmp tocca_a_me_DK8 K7_is_attivo_DK8: mov eax,[P3_7] cmp eax,1 je K7_gia_fatto_DK8 jmp fine_decodkiave8_pre K7_gia_fatto_DK8: mov eax,[act_K09] cmp eax,1 jne tocca_a_me_DK8 K9_is_attivo_DK8: mov eax,[P3_9] cmp eax,1 je tocca_a_me_DK8 jmp fine_decodkiave8_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_DK8: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"IDK8" ;call visualizza call esegui_funzione_789_K jmp fine_decodkiave8_pre ;------------------- K79_viene_dopo_DK: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 mov eax,"DK79" call visualizza jmp fine_decodkiave8_pre ;======================TUTTO QUI===================== fine_decodkiave8_pre: call allinea_BUFF_DK fine_decodkiave8_pre2: mov eax,[PIN_COD08] xor [Ptr_2_buffKeys_attuale_2_DK],eax mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave8: popa ret ;--------------------------------- decodkiave9: pusha mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave9 mov dword [P3_9],0 mov dword [P3_9max],0 mov esi,buff_vuoto_2mega mov dword [P3_9_p],esi inc esi mov dword [P3_9max_p],esi mov eax,[act_K09] cmp eax,1 jne near fine_decodkiave9 ;mov eax,"DK09" ;call visualizza mov dword [P3_9],1 ;================================================ ;������������������������������������������������ ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;mov esi,[P1] ;ok in esi P1max ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K9a ;��������������� mov eax,[som_PIN_COD09] add eax,[l_buff_da_cryptare] cmp eax,[P3_master] jbe no_master_DK9 mov [P3_master],eax no_master_DK9: ;��������������� mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD09] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD09] mov [P3_9_p],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD09] mov [P3_9max_p],edx ;mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,1 jna near fine_decodkiave9_pre2 dec ecx ;mettiamolo zero_based ;----------------------------------------------- ;precalcoliamo P3max inizia_DK9: ;������������������������������������������������ ;================================================ ;======CONTROLLI INIZIALI========================= mov eax,[act_K08] cmp eax,1 je K8_is_attivo_DK9 mov eax,[act_K07] cmp eax,1 je K7_is_attivo_DK9 jmp tocca_a_me_DK9 K8_is_attivo_DK9: mov eax,[P3_8] cmp eax,1 je K8_gia_fatto_DK9 jmp fine_decodkiave9_pre K8_gia_fatto_DK9: mov eax,[act_K07] cmp eax,1 jne tocca_a_me_DK9 K7_is_attivo_DK9: mov eax,[P3_7] cmp eax,1 je tocca_a_me_DK9 jmp fine_decodkiave9_pre ;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB tocca_a_me_DK9: ;nessuna delle condizioni di cui sopra, sono io che devo lavorare ;mov eax,"IDK9" ;call visualizza call esegui_funzione_789_K jmp fine_decodkiave9_pre ;------------------- K78_viene_dopo_DK: ;mettere qui le routine per lasciare il buffer pronto per K8 oppure K9 mov eax,"DK78" call visualizza jmp fine_decodkiave9_pre ;======================TUTTO QUI===================== fine_decodkiave9_pre: call allinea_BUFF_DK fine_decodkiave9_pre2: mov eax,[PIN_COD09] xor [Ptr_2_buffKeys_attuale_2_DK],eax mov esi,[P1max] inc esi mov [P1max],esi fine_decodkiave9: popa ret ;--------------------------------- decodkiave10: pusha mov eax,[act_K00] cmp eax,1 jne near fine_decodkiave10 ;mov eax,"DK10" ;call visualizza ;-------------------Il messaggio---------------- mov esi,buffer_2recv add esi,[l_header] add esi,6 mov [P1],esi add esi,[l_buff_da_DE_cryptare] dec esi ;zero based ;dec esi ;eliminare anche 0xa mov [P1max],esi ;mov esi,[P1] ;ok in esi P1max ;=======BLOCCO DA Riprist. se non FUNZIA======== ;--------------------La chiave------------------ mov ebp,K0a mov edx,[Ptr_2_buffKeys_attuale_2_DK] mov eax,[som_PIN_COD10] ;--------------------------------- add ebp,eax ;[Ptr_2_buffKeys_attuale] ;[Ptr_2_buffKeys_precedente] add edx,ebp xor edx,[PIN_COD10] mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_COD10] mov [P3max],edx mov edx,[P3] ;------------------------------------------------- ;================================================= mov ecx,[l_buff_da_DE_cryptare] cmp ecx,0 jna near fine_codkiave10 dec ecx ;mettiamolo zero_based ;----------------------------------------------- ;precalcoliamo P3max inizia_DK10: ;=================================================================================== ;La kiave10 come chiave complessa usa i bit della key per traslare a gruppi di 8 i byte ;del messaggio originale verso l'inizio; esempio: ;kiave10 (bit) 0010 0100 ;messaggio: ABCDEFGH ;usando kiave10 il messaggio diventa: ;1� passaggio: CABDEFGH ;2� passaggio: FCABDEGH ;il tutto ripetuto sui successivi gruppi di 8 bytes di messaggio tante volte quanti ;sono i bytes di kiave9 ;:------------------------------------------ ; |------------------------------:Messaggio.............| ;buffer_2_send -----^ buffer_2send_dopo = P1 -----^ ; |------------------------:LmCodkMessaggio.............| ;buff_crypt_start --^ buff1_2K_defa -----^ ^---P2 ; |---------------------------------------------............--------------------| ; riempi1 (buff da 2 mega) <----ebp...-^-...edi----> ; |----------------------------------------i----------------f--------------| ; Kna--^ Ptr_2_buffKeys_attuale= P3---^ ^---P3max ;==================================================================================== mov dword [op_ebp],0 mov dword [op_edi],0 mov esi,[P1max] mov edx,[P3] mov ebp,riempi1 ; buff da 2 mega add ebp,512 ;mettiamoci a distanza sufficiente dall'inizio per ricevere ;l'intero messaggio se tutti i bit della chiave sono a 1 mov edi,ebp ;sincr edi e ebp; edi incrementa se bit =0, ebp decrementa se bit=1 inc edi ;dec ebp inizia_DK10_1: mov bl,[edx] mov cl,8 va_esi_DK10: mov al,[esi] clc shl bl,1 jc is_1_DK10 rol al,2 ;mov [edi],al ;inc edi ;jmp dopo_is_1_DK10 is_1_DK10: mov [ebp],al dec ebp dopo_is_1_DK10: dec esi cmp esi,[P1] jae va_a_deccl_DK10 call rimetti_riempi1_2_P1_DK ;rimetti nel buffer iniziale jmp fine_decodkiave10_pre ;provvisorio ;mov esi,[P1] ;inc edx ;cmp edx,[P3max] ;ja fine_decodkiave10_pre ;jmp inizia_DK10_1 va_a_deccl_DK10: dec cl jnz va_esi_DK10 inc edx cmp edx,[P3max] ja fine_decodkiave10_pre jmp inizia_DK10_1 fine_decodkiave10_pre: call allinea_BUFF_DK mov eax,[PIN_COD10] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave10: popa ret ;--------------------------------- decodkiave11: pusha mov eax,[act_K11] cmp eax,1 jne fine_decodkiave11 mov eax,"DK11" call visualizza fine_decodkiave11_pre: mov eax,[PIN_COD11] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave11: popa ret ;--------------------------------- decodkiave12: pusha mov eax,[act_K12] cmp eax,1 jne fine_decodkiave12 mov eax,"DK12" call visualizza fine_decodkiave12_pre: mov eax,[PIN_COD12] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave12: popa ret ;--------------------------------- decodkiave13: pusha mov eax,[act_K13] cmp eax,1 jne fine_decodkiave13 mov eax,"DK13" call visualizza fine_decodkiave13_pre: mov eax,[PIN_COD13] xor [Ptr_2_buffKeys_attuale_2_DK],eax fine_decodkiave13: popa ret ;-------------------------------------------------- primo_passo_fase_DK: pusha mov esi,buffer_2recv add esi,[l_header] add esi,6 ;2 + 4 bytes mov [P1],esi add esi,[l_buff_da_DE_cryptare] ;add ecx,2 ;0xD 0xA mov [P1max],esi mov esi,[P1] mov ebp,K2a mov edx,[Ptr_2_buffKeys_attuale_2_DK] add edx,ebp mov [P3],edx add edx,[l_buff_da_DE_cryptare] add edx,[som_PIN_CODE] mov [P3max],edx popa ret ;----------------------------- primo_passo_DK: pusha ; call sorrispondente decript di codifica_0AD ; chiamarlo decodifica_0AD ;jmp fine_primo_passo ;provvisorio mov dword [errore_l_mesg],0 codifica_0AD_up_pp: ;serve a de_codificare i bytes 0,A,D del paccketto buff1_2K_defa ;altrimenti non accettati dal server ;call pulisci_buff_provv_32k call pulisci_buff1_2K_defa xor ebx,ebx mov edi,buff1_2K_defa ;buff_provv_32k mov esi,buffer_2recv ;buff1_2K_defa mov ecx,512 cod_0AD1x_poiup_pp: mov al,[esi] cmp al,0xa je near is_AD_cod_0ADup_pp cmp al,0xd je near is_AD_cod_0ADup_pp mov eax,[esi] cmp eax,[codice_0AD] je near is_0AD_pp mov [edi],al inc edi inc esi su_dec_pp: dec ecx jnz cod_0AD1x_poiup_pp jmp is_A_cod_0ADup_pp_dopo is_0AD_pp: mov al,0 mov bx,[esi+4] ;bswap ebx ;rol ebx,16 cmp bx,[identificativo_0AD] je is_0_pp sub bx,0xa cmp bx,[identificativo_0AD] je is_A_pp sub bx,3 cmp bx,[identificativo_0AD] je is_D_pp jmp is_A_cod_0ADup_pp_dopo is_0_pp: mov al,0 mov [edi],al add esi,6 inc edi jmp su_dec_pp is_A_pp: mov al,0xa mov [edi],al add esi,6 inc edi jmp su_dec_pp is_D_pp: mov al,0xD mov [edi],al add esi,6 inc edi jmp su_dec_pp is_A_cod_0ADup_pp_dopo: ;c'e' un errore quindi manipolarlo avvisando... mov eax,"ERR " call visualizza mov eax,"MESG" call visualizza jmp fine_primo_passo_err is_AD_cod_0ADup_pp: ;finito, OK mov al,0xd mov [edi],al mov al,0xa inc edi mov [edi],al mov esi,buff1_2K_defa ;buff_provv_32k add esi,[l_header] xor ebx,ebx mov bx,[esi] ;lungh messaggio cmp bx,512 jna ok_MSG_giusto_pp mov dword [errore_l_mesg],1 jmp fine_primo_passo_err ok_MSG_giusto_pp: mov [l_buff_da_DE_cryptare],ebx mov ebx,[esi+2] ;Ptr_2CodKey xor ebx,[PIN_CODE] mov [Ptr_2_buffKeys_attuale_2_DK],ebx ;mov [l_buff_da_DE_cryptare],ebx ;salviamo bx su variabile lungh_messaggio ; e ebx su Pointer su BufferKeys attuale per Decript mov ebx,[l_buff_da_DE_cryptare] add ebx,[l_header] add ebx,8 ;+2 +4 e 0d+0ah ;inc ebx ;mov eax,ebx ;add eax,[l_header] ;call errorizza mov ecx,512 ;max lungh altrimenti errore mov esi,buff1_2K_defa ;buff_provv_32k mov edi,buffer_2recv call pulisci_buffer_2recv mov edi,buffer_2recv is_A_cod_0ADup_dopopp: mov al,[esi] mov [edi],al inc edi inc esi dec ecx jz fine_primo_passo_err dec ebx jnz is_A_cod_0ADup_dopopp fine_primo_passo: ;mov esi,buffer_2recv ;buff_provv_32k ;buffer_2recv ;call debugga fine_primo_passo_err: ;mov eax,"NOnP" ;call visualizza ;mov eax,ecx ;call errorizza popa ret ;--------------------- ;���������������������������������������������������������������������������������������� ;���������������������������������������������������������������������������������������� ;tools.asm ;queste sono routine utili e /o di servizio; si possono utilizzare per svariati usi ;leggere attentamente la testata di ogni routine rima di utilizzarla per altri scopi. ;---------------ROUTINES------- (00-0)------------------------- ;---------------ROUTINES------- (00)------------------------- ;getkey: EXTERNAL in comandi.asm msg_comando_accettato: pusha ;mov ebx,msg_acc ;mov [ebx],eax mov eax,4 mov ebx,1 mov ecx,msg_accettato mov edx,[msg_acc_l] int 0x80 popa ret ;---------------ROUTINES------- (01)------------------------- pulisci_buffer_2recv: pusha mov esi,buffer_2recv mov ecx,511 mov al,0 pul_b2r: mov [esi],al inc esi dec ecx jnz pul_b2r mov al,0x0A mov [esi],ax popa ret ;---------------ROUTINES------- (01-A)------------------------- pulisci_buff1_2K_defa: pusha mov esi,buff1_2K_defa mov ecx,1024 mov al,0 pul_b2r_2kdefa: mov [esi],al inc esi dec ecx jnz pul_b2r_2kdefa mov al,0x0A mov [esi],ax popa ret ;---------------ROUTINES------- (01 A)-------------------------- vedi_stack_su_buff: ;serve per capire in quale area di ram si trova il programma in esecuzione, ;in [esp] e' salvato l'indirizzo di ritorno successivo all'istruzione chiamante ;lo salviamo in [sono_qui] e ritorniamo al chiamante mov eax,[esp] mov [sono_qui],eax ret ;---------------ROUTINES------- (02)------------------------- debugga: ; Entra coi registri ATA (As They Are) tranne esi che punta a un'area di memoria ; e visualizza fotograficamente cio' che succede (come il debug del DOS) ; Da usarsi come debugger chiamandolo da una posizione qalsiasi per visualizzare ; tutti i registri e un'area di 16 x 16 bytes di RAM. ; Successivamente potra' usarsi come vero e proprio debugger pusha ini_deb: push esi ;prima cosa salviamo esi mov esi,rt2 add esi,3 ;per poter stampare il contenuto di eax usando esi come ptr sul buff call esadecizza_su_buff pop esi push esi ;ora stampiamo il valore di esi mov eax,esi ;messo in eax mov esi,rt2 ;usando acora esi come ptr sul buff add esi,43 call esadecizza_su_buff mov eax,ebx ; ora stampiamo ebx mov esi,rt2 add esi,13 call esadecizza_su_buff mov eax,ecx ;ora ecx mov esi,rt2 add esi,23 call esadecizza_su_buff mov eax,edx mov esi,rt2 add esi,33 call esadecizza_su_buff mov eax,edi mov esi,rt2 add esi,53 call esadecizza_su_buff pop esi mov edi,esi and edi,0xFFFFFF00 ;alignment alla pagina :)) mov eax,ebp mov esi,rt2 add esi,63 call esadecizza_su_buff mov eax,esp mov esi,rt2 add esi,73 call esadecizza_su_buff ;ora prendiamo il valore di EIP; non e' esattamente quello corretto ma siamo ;nelle vicinanze (E' GIUSTO se si chiama debugga subito dopo aver chiamare la routine dove_siamo) ;call dove_siamo ;va chiamata PRIMA di entrare qui mov eax,[sono_qui] mov esi,rt5 add esi,3 call esadecizza_su_buff ;in eax il valore di EIP e in esi il punto di inizio del buff push cs ;torna in ax il valore de reg di seg pop eax ; mov ax,0x5AF3 ;provv mov esi,rt5 add esi,13 call esadecizza_ax_su_buff ;in ax il valore di CS ; call esadecizza_su_buff ; call visualizza push ds pop eax mov esi,rt5 add esi,18 call esadecizza_ax_su_buff ;in ax il valore di DS push es pop eax mov esi,rt5 add esi,23 call esadecizza_ax_su_buff ;in ax il valore di ES push ss pop eax mov esi,rt5 add esi,28 call esadecizza_ax_su_buff ;in ax il valore di SS push fs pop eax mov esi,rt5 add esi,33 call esadecizza_ax_su_buff ;in ax il valore di FS push gs pop eax mov esi,rt5 add esi,38 call esadecizza_ax_su_buff ;in ax il valore di GS ; mov al,200 ; add al,1 pushfw ;lahf pop ax ;mov al,ah ; mov al,0Fh push ax mov esi,rt5 add esi,63 call binarizza_al ;la parte inferiore di EFLAGS pop ax mov al,ah mov esi,rt5 add esi,53 call binarizza_al ;la parte superiore di EFLAGS mov esi,[inizio_buff] mov eax,esi mov esi,rt7 add esi,3 call esadecizza_su_buff ; e che andiamo a mettere nella zona da dumpare mov esi,[fine_buff] mov eax,esi mov esi,rt8 add esi,3 call esadecizza_su_buff mov esi,edi ; ridondande, ma e' per capire che abbiamo a che fare con esi and esi,0xFFFFFF00 ; che avevamo salvato temporaneamente su edi mov eax,esi mov esi,r1 add esi,2 call esadecizza_su_buff ; e che andiamo a mettere nella zona da dumpare mov esi,r1 ; ora piazziamo i valori HEX della ram a 2 bytes per volta add esi,14 ; nel buffer riservato ai valori HEX mov ebp,r1 ; e i valori ASCII nel buff riservato add ebp,65 ; ai valori ASCII se stampabili altrimenti resta il puntino . mov edx,16 ; 2 blocchi da 16 colonne ciascuna dbg_1A_pre: mov ecx,8 mov ebx,2 dbg_1A: mov al,[edi] ;leggiamo la ram push esi mov esi,ebp ; mov al,"A" ;provvisorio call vis_al ; mette il valore ASCII se stampabile nel buff pop esi call esadecizza_al ;ora lo rende esadecimale e lo mette nell'area HEX del buff inc ebp ;al carattere ASCII successivo inc edi add esi,3 ;alla zona HEX successiva (2 char+1 space = 3) dec ecx jnz dbg_1A ; 8 caratteri piazzati? se no continua altrimenti inc esi ;supera lo spazio di separazione dei Blocchi aumentando di 1 i ptrs mov ecx,8 ; e ricomincia da 8 inc ebp dec ebx jnz dbg_1A ; operazione da ripetere 2 volte per ogni riga add esi,35 add ebp,67 cmp edx,9 ;qui controlliamo se siamo alla separazione delle 8 righe jne va_8 add esi,85 add ebp,85 va_8: dec edx ; tutto da ripetere per 16 righe jnz dbg_1A_pre mov ecx,schema ;una volta sistemato completamente lo schema, stampiamolo mov edx,[l_schema] ;2476 call msg_gen ;mov al,"q" call w_ch cmp al,"W" je near write_salva_su_file cmp al,"q" je near fine_deb cmp al,0x1B je near fine_deb cmp al,"x" je near fine_deb cmp al,"M" je near modifica_val_db cmp al,"m" je near modifica_val_db cmp al,"D" je near dumpa_ind cmp al,"h" je near help_dumpa cmp al,"I" je near cambia_inizio_file cmp al,"F" je near cambia_fine_file cmp al,"u" jne near is_down_forse sub edi,512 ;512 is_down_forse: ; call errorizza mov esi,edi jmp ini_deb cambia_inizio_file: pusha mov ecx,input_msg_I mov edx,58 call msg_gen mov eax,8 ;8 caratteri XXXXXXXX call input_su_buff256 mov ecx,0 mov edx,6 mov ebp,inizio_buff dumpa_ind_018v_cif: mov ax,[buff_provv+edx] call numerizza_ax_hex mov [ebp+ecx],al inc ecx sub edx,2 jnz dumpa_ind_018v_cif mov ax,[buff_provv] call numerizza_ax_hex mov [ebp+ecx],al mov eax,[fine_buff] mov ebx,[inizio_buff] sub eax,ebx inc eax ;zero based mov [b_letti],eax ; call errorizza ;entra con ax contenente Numero ASCII HESADECIMALE tipo "A4" (41h 34h); ritorna ;con eax contenente corrispondente valore numerico 164 = 00000A04 ;mov edi,[fine_buff] call w_ch popa sub edi,256 mov esi,edi jmp ini_deb cambia_fine_file: pusha mov ecx,input_msg_F mov edx,56 call msg_gen mov eax,8 ;8 caratteri XXXXXXXX call input_su_buff256 mov ecx,0 mov edx,6 mov ebp,fine_buff dumpa_ind_018v_cff: mov ax,[buff_provv+edx] call numerizza_ax_hex mov [ebp+ecx],al inc ecx sub edx,2 jnz dumpa_ind_018v_cff mov ax,[buff_provv] call numerizza_ax_hex mov [ebp+ecx],al mov eax,[fine_buff] mov ebx,[inizio_buff] sub eax,ebx inc eax ;zero based mov [b_letti],eax ; call errorizza ;entra con ax contenente Numero ASCII HESADECIMALE tipo "A4" (41h 34h); ritorna ;con eax contenente corrispondente valore numerico 164 = 00000A04 ;mov edi,[fine_buff] call w_ch popa sub edi,256 mov esi,edi jmp ini_deb dumpa_ind: pusha mov ecx,input_msg_dumpa mov edx,45 call msg_gen mov eax,8 ;5 caratteri XX YY call input_su_buff256 mov ecx,0 mov edx,6 mov ebp,val_fin dumpa_ind_018v: mov ax,[buff_provv+edx] call numerizza_ax_hex mov [ebp+ecx],al inc ecx sub edx,2 jnz dumpa_ind_018v mov ax,[buff_provv] call numerizza_ax_hex mov [ebp+ecx],al mov eax,[val_fin] ; call errorizza call w_ch ;entra con ax contenente Numero ASCII HESADECIMALE tipo "A4" (41h 34h); ritorna ;con eax contenente corrispondente valore numerico 164 = 00000A04 popa mov edi,[val_fin] mov esi,edi jmp ini_deb help_dumpa: pusha mov ecx,input_msg_help mov edx,196 call msg_gen call w_ch popa sub edi,256 mov esi,edi jmp ini_deb write_salva_su_file: push esi push edi mov eax,[validate_file] cmp eax,1 jne fine_wssf ; inserire qui call aprifile ; call scrivi file mov ebx,[p_file_iniziale] mov edi,fd_W1 call crea_file_w mov edx,[b_letti] mov ebx,[fd_W1] mov [fd_generico],ebx mov esi,[inizio_buff] call scrivi_su_file mov eax,6 ;chiudi file mov ebx,[fd_W1] int 0x80 mov ecx,ok_scritto ;una volta sistemato completamente lo schema, stampiamolo mov edx,38 call msg_gen ;call w_ch fine_wssf: pop edi pop esi sub edi,256 mov esi,edi jmp ini_deb modifica_val_db: mov ecx,input_msg mov edx,36 call msg_gen mov eax,5 ;5 caratteri XX YY call input_su_buff256 ;xor eax,eax mov ax,[buff_provv] call numerizza_ax_hex add edi,eax ;provvisorio sub edi,256 mov esi,edi mov ax,[buff_provv+3] call numerizza_ax_hex mov [esi],al pusha ; call errorizza call w_ch popa jmp ini_deb fine_deb: popa ret ;---------------ROUTINES------- (03)------------------------- ; entra con al numero da binarizzare e esi buff di 8 bytes dove salvare il risultato binarizza_al: pusha mov cl,7 mov bl,al bin_al_01: ror al,cl and al,1 or al,30h mov [esi],al inc esi mov al,bl dec cl jnz bin_al_01 and al,1 or al,30h mov [esi],al popa ret ;---------------ROUTINES------- (04)------------------------- ; entra con al numero da esadecizzare e esi buff di 2 bytes dove salvare il risultato ; ritorna in ax il valore di al esadecizzato (max FF) esadecizza_al: pusha mov bl,al and al,0xF0 ror al,4 or al,30h cmp al,39h jna ok_esadec add al,7 ok_esadec: mov [esi],al mov ah,al inc esi mov al,bl and al,0xF or al,30h cmp al,39h jna ok_esadecf add al,7 ok_esadecf: mov [esi],al mov [provv],ax popa mov ax,[provv] ret ;---------------ROUTINES------- (05)------------------------- ; entra con al carattere da visualizzare ed esi buff di 1 byte dove salvare il risultato ; controlla se il carattere e' stampabile (20h -7Eh) altrimenti non viene eseguito vis_al: pusha cmp al,20h ; no caratteri di controllo del cazzo jb no_vis cmp al,7Eh ; caratteri del cazzo che simulano backspace meglio escluderli ja no_vis mov [esi],al popa ret no_vis: mov al,"." mov [esi],al popa ret ;---------------ROUTINES------- (06)------------------------- ; entra con ax valori da esadecizzare e in esi buff di 4 byte dove salvare il risultato ; torna in eax una copia del valore esadecizzato (max FFFF) esadecizza_ax_su_buff: pusha mov ecx,4 add esi,3 mov ebx,eax ax_prima1_err_lett: and al,0Fh or al,30h cmp al,39h jna ax_oltre1_err_lett add al,7 ax_oltre1_err_lett: mov [esi],al dec esi dec ecx jz ax_oltre2_err_lett mov eax,ebx ror eax,4 mov ebx,eax jmp ax_prima1_err_lett ax_oltre2_err_lett: inc esi mov eax,[esi] mov [provv],eax popa mov eax,[provv] ret ;---------------ROUTINES------- (07)------------------------- ; Entra con Ecx settato come ptr to stringa e Edx n. di Bytes da stampare msg_gen: mov eax,4 ;write nel canale indicato da ebx mov ebx,1 ;1= std output int 0x80 ret ;---------------ROUTINES------- (08 STD)------------------------- ;entra con eax pointing to STRUC_mesg ; ;STRUC_mesg: ;msg_0 dd ptr to ASCII_STRING ;msg_leng dd length_of_string ;chan_ID dd chan_ID --> 1 = std out ; MODIFICATO Entra con Ecx settato come ptr to stringa e Edx n. di Bytes da stampare msg_gen_STD: pusha mov ecx,[eax] ;ptr to string mov edx,[eax+4] ;ptr to string_lenght mov ebx,[eax+8] ;chan_ID --> 1 = std out mov eax,4 ;funzione write nel canale indicato da ebx ;mov ebx,1 ;1= std output int 0x80 popa ret ;-----------------ROUTINES------- (09)--------------- ; Entra in eax con Codice di Errore: ritorna su codice_errore il valore hex in ASCII ; e lo visualizza come Codice Errore ........fino a FFFFFFFF errorizza: ;push esi mov esi,codice_errore mov byte [provv],1 ;pop esi esadecizza_su_buff: ;entra con eax il codice hex e esi che punta su buffer dove si vuole eax esadecizzato ;fino a FFFFFFFF pusha mov ecx,8 add esi,7 mov ebx,eax prima1_err_lett: and al,0Fh or al,30h cmp al,39h jna oltre1_err_lett add al,7 oltre1_err_lett: mov [esi],al dec esi dec ecx jz oltre2_err_lett mov eax,ebx ror eax,4 mov ebx,eax jmp prima1_err_lett oltre2_err_lett: cmp byte[provv],1 jne fine_errorizza mov ecx,msg_err_file mov edx,30 call msg_gen fine_errorizza: mov byte[provv],0 popa ret ;---------------ROUTINES------- (10)------------------------- crea_file_w: ; entra con edi=fd_xxx ; in ebx = nome_file ;mov dword [err],0 push ebx mov eax,8 ;crealo ;mov ebx,file_EnoC mov ecx,[mask2_w] ;stavolta permissions in ecx int 0x80 mov ebx,eax ;fdescriptor chiudilo mov eax,6 int 0x80 pop ebx ;nome file mov eax,5 ;mov ebx,file_EnoC mov ecx,[mask1_w] mov edx,[mask2_w] int 0x80 mov [edi],eax ;fd in edi cmp eax,0xFFFF jna fine_crea_w mov dword [err],1 fine_crea_w: ret ;---------------ROUTINES--------(11)----------------------- esegui_letture: ; esegue letture su files multipli e accoda i dati in un unico buffer ; buff1 = 30.000.000 di bytes ; entra con ebx = nomefile e ecx = ptr to lunghezza_file ; ritorna con eax= fd_xxx ; NO! e setta lungh_file_xx in lunghezza_file ; NO! e setta validate_file_xx se il file viene letto tutto mov eax,5 ;mov ebx,file_iniziale mov ecx,[mask1] ;bitmask tipo accesso r-w-a mov edx,[mask2] ;bitmask file permission int 0x80 mov [fd1],eax cmp eax,0xFFFF jna apri_file_lett_1 mov dword[err],1 jmp fine_letture apri_file_lett_1: mov ecx,buff1 ;buff dove ricevere i bytes add ecx,[b_letti] mov ebx,[fd1] ;fd in ebx mov eax,3 ;read mov edx,3000000 ;[b_da_legg] dd 1024000 bytes int 0x80 cmp edx,eax je apri_file_lett_1_dopo1 ; se letti bytes quanto richiesti no EOF cmp eax,0 je apri_file_lett_1_dopo1 ; se nessun byte letto mov edx,1 mov [validate_file],edx ; mov ecx,eax ;inc eax apri_file_lett_1_dopo1: add [b_letti],eax mov ebx,[b_letti] mov eax,buff1 mov [inizio_buff],eax mov [inizio_buff1],eax add eax,ebx dec eax ;indirizzo zero based quindi se 1 solo byte inizia e finisce allo stesso indir. mov [fine_buff],eax mov [fine_buff1],eax mov esi,buff1 dec ebx mov al,[esi+ebx] cmp al,0x20 jb apri_file_lett_1_siA mov al,0xA inc ebx add dword[b_letti],1 mov [esi+ebx],al ; mov bl,0ah ; mov [esi+eax],bl apri_file_lett_1_siA: cmp eax,edx je fine_letture ;if edx > eax then EOF e if eax=0 nessun byte nuovo letto mov dword [EOF1],1 cmp eax,0 ja fine_letture mov dword[err],1 fine_letture: mov eax,6 ;chiudi file mov ebx,[fd1] int 0x80 ret ;================================================== leggi_file_F: ; esegue letture su files multipli e accoda i dati in un unico buffer ; buff1 = 30.000.000 di bytes ; entra con ebx = nomefile e ecx = ptr to lunghezza_file ; ritorna con eax= fd_xxx ; NO! e setta lungh_file_xx in lunghezza_file ; NO! e setta validate_file_xx se il file viene letto tutto mov dword [err],0 mov edx,0 mov [validate_file],edx mov [ok_file_F],edx mov eax,0 mov [lungh_buff_file_F],eax mov eax,5 ;mov ebx,file_iniziale mov ecx,[mask1] ;bitmask tipo accesso r-w-a mov edx,[mask2] ;bitmask file permission int 0x80 mov [fd1],eax cmp eax,0xFFFF jna apri_file_lett_1_F mov dword[err],1 jmp fine_letture_F apri_file_lett_1_F: mov ecx,buff1 ;buff dove ricevere i bytes ;add ecx,[b_letti] mov ebx,[fd1] ;fd in ebx mov eax,3 ;read mov edx,3000000 ;[b_da_legg] dd 1024000 bytes int 0x80 cmp edx,eax je apri_file_lett_1_dopo1_F ; se letti bytes quanto richiesti no EOF cmp eax,0 je apri_file_lett_1_dopo1_F ; se nessun byte letto mov edx,1 mov [validate_file],edx mov [ok_file_F],edx ; mov ecx,eax ;inc eax apri_file_lett_1_dopo1_F: mov [lungh_buff_file_F],eax fine_letture_F: mov eax,6 ;chiudi file mov ebx,[fd1] int 0x80 ;mov esi,buff1 ;call debugga ;jmp fine ret ;======================================================= ;-----------------ROUTINES-----(12)-------------------------- visualizza: ;entra con 4 bytes ascii in eax ritorna in visualizza push eax push ecx push edx push edi push ebx mov edi,asci4 mov [edi],eax mov ecx,msg_ascizza ;usa un msg generico mov edx,24 ;in msg_gen si entra con Ecx settato come ptr to stringa e Edx n. di Bytes da stampare call msg_gen pop ebx pop edi pop edx pop ecx pop eax ret ;-------------------ROUTINES-----(13)-------------------------- scrivi_su_file: ;entra con edx= N.bytes da scrivere ; esi = inizio buffer ; fd_generico = fd_di file gia open push ecx mov ecx,esi ;inizio buffer mov ebx,[fd_generico] ; [fd_generico] mov eax,4 int 0x80 pop ecx ret ;---------------ROUTINES------- (14)------------------------ ritardo: push ecx mov ecx,0xFFFFFFF rit1: dec ecx jnz rit1 pop ecx ret ;--------------ROutines----------(15)-------------------- ascizzaNsu_buff_4ch: ; entra con eax = valore da ascizzare ; edi = ptr su buff (4 bytes .. fino a 9999) pusha push ebp mov ebp,10 mov ebx,3 mov ecx,4 asN_01_4ch: xor edx,edx div ebp or dl,30h mov [edi+ebx],dl dec ebx dec ecx jnz asN_01_4ch ;mov ecx,tot_connA ;mov edx,12 ;call msg_gen pop ebp popa ret ;---------------ROUTINES-------(16)------------------------- ascizzaNsu_buff_2ch: ; entra con eax = valore da ascizzare ; edi = ptr su buff (2 bytes .. fino a 99) pusha push ebp mov ebp,10 mov ebx,1 mov ecx,2 asN_01_2ch: xor edx,edx div ebp or dl,30h mov [edi+ebx],dl dec ebx dec ecx jnz asN_01_2ch ;mov ecx,tot_connA ;mov edx,12 ;call msg_gen pop ebp popa ret ;---------------ROUTINES-------(17)------------------------- ascizzaNsu_buff: ; entra con eax = valore da ascizzare ; edi = ptr su buff (10 bytes .. fino a 4294967296 ) pusha push ebp mov ebp,10 mov ebx,9 mov ecx,10 asN_01: xor edx,edx div ebp or dl,30h mov [edi+ebx],dl dec ebx dec ecx jnz asN_01 ;mov ecx,tot_connA ;mov edx,12 ;call msg_gen pop ebp popa ret ;---------------ROUTINES-------(18)------------------------- cerca_host: ;entra con puntatore su esi a inizio stringa fino a 0xA ;ritorna in eax, distanza da base esi di host xxx.yyy.zzz.aaa pusha mov dword [provv],0 xor edx,edx mov ecx,180 ;controlliamo max 180 +34 caratteri mov ebx,34 ;minimo partiamo da poco prima di @ ; jmp fine_cerca_host_ok mov eax,[esi+26] ; jmp fine_cerca_host_ok cmp eax,"EXIT" je is_ex_c_ch mov edx,1 ;mov dword[conn_o_exit],1 ;default = 0 Exit ;je near is_conn_ch1pq is_ex_c_ch: inc ebx dec ecx jnz is_exit_chpq jmp fine_cerca_host_no_ok is_exit_chpq: ;ricercare 2 parentesi quadre aperte mov al,[esi+ebx] cmp al,"@" jne is_ex_c_ch inc ebx dec ecx jz near fine_cerca_host_no_ok mov eax,[esi+ebx] cmp eax,"host" je near cont_1b_okhost cmp eax,"80.1" je near cont_1b_okhost cmp eax,"212." je cont_1b_okhost cmp eax,"213." je cont_1b_okhost cmp eax,"62.2" je cont_1b_okhost cmp eax,"82.4" je cont_1b_okhost cmp eax,"82.5" je cont_1b_okhost cmp eax,"82.6" je cont_1b_okhost cmp eax,"87.0" je cont_1b_okhost cmp eax,"87.1" je cont_1b_okhost cmp eax,"87.2" je cont_1b_okhost cmp eax,"87.3" je cont_1b_okhost mov edi,[edi_provv] push ebx mov ebx,[ebx_provv] mov eax,1 add ebx,2000004 mov [edi+ebx],eax pop ebx cont_1b_okhost: ;ora dobbiamo trovare le 2 (o 1) parentesi [ mov al,[esi+ebx] cmp al,"[" je ed_e_1a inc ebx dec ecx jnz cont_1b_okhost jmp near fine_cerca_host_no_ok ed_e_1a: cmp edx,1 je ed_e_ok ed_e_1: inc ebx dec ecx jz near fine_cerca_host_no_ok ;est connect quindi 1 sola parentesi mov al,[esi+ebx] cmp al,"[" je ed_e_ok jmp ed_e_1 ed_e_ok: inc ebx ;--------------------------------- fine_cerca_host_ok: mov [provv],ebx fine_cerca_host_no_ok: popa mov eax,[provv] ret ;-----------ROUTINES------- (19)------------------------- ;cerca_EXIT: ;extern su file cerca_EX.asm ;---------------ROUTINES------- (20)------------------------ ;cerca_CONNECT: ;extern su file cerca_CONN.asm ;---------------ROUTINES------- (21)------------------------- numerizza_mese: ;entra con eax contenente "Mes " ;ritorna con eax = 01 .. 12 oppure 00 in caso di errore push esi push ecx push ebx mov esi,mes mov ecx,12 num_mes_p1: mov ebx,[esi] cmp ebx,eax jne num_mes_p2 mov eax,[esi+4] jmp fine_num_mes num_mes_p2: add esi,12 dec ecx jnz num_mes_p1 xor eax,eax fine_num_mes: pop ebx pop ecx pop esi ret ;---------------ROUTINES------- (22)------------------------- numerizza_giorni_mese: ;entra con eax contenente "Mes " ;ritorna con eax = da 28 a 31 a secondo il mese di riferimento push esi push ecx push ebx mov esi,mes mov ecx,12 num_mes_p1_gm: mov ebx,[esi] cmp ebx,eax jne num_mes_p2_gm mov eax,[esi+8] jmp fine_num_mes num_mes_p2_gm: add esi,12 dec ecx jnz num_mes_p1_gm xor eax,eax fine_num_mes_gm: pop ebx pop ecx pop esi ret ;---------------ROUTINES------- (23)------------------------- numerizza_eax: ;entra con eax contenente ASCII numerici tipo "2005" ritorna ;con eax contenente corrispondente valore numerico 2005 push edi push ebx push ecx push edx xor edi,edi mov ebx,eax xor ecx,ecx xor edx,edx ror eax,24 ; 1234 e' scritto 4321 prendiamo il 4 and eax,0Fh ;togliamo la codifica ascii add edi,eax ;accumuliamolo in edi mov eax,ebx ror eax,16 and eax,0Fh mov ecx,10 mul ecx add edi,eax mov eax,ebx ror eax,8 and eax,0Fh mov ecx,100 mul ecx add edi,eax mov eax,ebx ;ror eax,16 and eax,0Fh mov ecx,1000 mul ecx add eax,edi ;ultima volta in eax fine_num_eax: pop edx pop ecx pop ebx pop edi ret ;---------------ROUTINES------- (24)------------------------- numerizza_ax: ;entra con ax contenente ASCII numerici tipo "12" ritorna ;con eax contenente corrispondente valore numerico 12 ;azzeriamo i primi 2 bytes di eax e chiamiamo la routine numerizza_eax ;per rispettare le inversioni and eax,0xFFFF rol eax,16 call numerizza_eax ret ;---------------ROUTINES------- (24.1)------------------------- numerizza_ax_hex: ;entra con ax contenente Numero ASCII HESADECIMALE tipo "A4" (41h 34h); ritorna ;con eax contenente corrispondente valore numerico 164 = 00000A04 pusha xor ecx,ecx mov bx,ax mov al,ah cmp al,39h jna ok_39_nh sub al,7 ok_39_nh: xor ah,ah and al,0Fh ; rol al,4 mov cl,al xor ch,ch mov al,bl cmp al,39h jna ok_39_nh_2 sub al,7 ok_39_nh_2: and al,0Fh rol al,4 add cl,al mov [provv],ecx popa mov eax,[provv] ret ;---------------ROUTINES------- (25)------------------------- ;calcola_secondi_e_tutto: ;extern su file calcola_sec.asm ;ultima routine eseguita ;---------------ROUTINES------- (26)------------------------- Natoi: ;entra in esi il puntatore a Internet Address tipo xxx.xxx.xxx.xxx ; torna in eax il valore INTERNET come numero puro pusha xor ebp,ebp xor ecx,ecx xor ebx,ebx xor edx,edx xor edi,edi mov edi,3 mov eax,10 Natoi_01: mov cl,[esi+ebp] cmp cl,"." je Nis_punto sub cl,30h cmp cl,9 ja Natoi_ok mul ch mov ch,al mov al,10 add ch,cl inc ebp cmp ebp,16 ja Natoi_err jmp Natoi_01 Nis_punto: dec edi inc ebp cmp ebp,16 ja Natoi_err ; inc edi ; cmp edi,3 ; ja Natoi_ok rol ebx,8 mov bl,ch mov al,10 mov ch,0 jmp Natoi_01 Natoi_err: mov dword [err],1 Natoi_ok: cmp edi,0 je Natoi_ok_dopo mov dword [err],1 Natoi_ok_dopo: rol ebx,8 mov bl,ch mov [provv],ebx popa mov eax,[provv] ret ;---------------ROUTINES------- (27)------------------------- ; sec_da_mezzanotte: ;external su calcola_sec_asm ;entra con: ;esi ptr su riga (EXIT) oppure (CONNECT) ;ritorna secondi da mezzanotte su eax ;---------------ROUTINES------- (28)------------------------- esplora_ram: ;entra con esi che punta a un'area della RAM si esce premendo ESC q o x ;si continua in avanti premendo un tasto qualsiasi (Invio) ; e premendo s e invio si va indietro (su nella ram) pusha xor ebp,ebp esplora_p1: mov ecx,provv_buff mov edx,1 ; numero caratteri mov ebx,1 ;standard input mov eax,3 ;funzione 3 read aspetta un carattere ;ecx ptr to input buffer ; edx buffer size, max. count of bytes to receive ;return eax no. of bytes received, file pointer advanced accordingly int 0x80 mov eax,[ecx] ;call errorizza call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram add esi,4 call vis_ram mov al,[provv_buff] cmp al,27 je fine_esplora cmp al,"q" je fine_esplora cmp al,"x" je fine_esplora cmp al,"s" je vai_su_ram jmp esplora_p1 vai_su_ram: sub esi,64 call new_line jmp esplora_p1 fine_esplora: popa ret ;---------------ROUTINES------- (29)------------------------- --- vis_ram: ;entra con esi che punta su una area di memoria ;e viene visualizzato il contenuto di [esi] pusha add esi,2000000 ;provvisorio mov ecx,8 mov edi,indA add edi,7 mov eax,esi ; mov eax,esi mov ebx,eax prima1_err_lett_vr_esi1: and al,0Fh or al,30h cmp al,39h jna oltre1_err_lett_vr_esi1 add al,7 oltre1_err_lett_vr_esi1: mov [edi],al dec edi dec ecx jz oltre2_err_lett_vr_esi1 mov eax,ebx ror eax,4 mov ebx,eax jmp prima1_err_lett_vr_esi1 oltre2_err_lett_vr_esi1: ;------------------------------ mov ecx,8 mov edi,numindA add edi,7 mov eax,[esi] mov ebx,eax prima1_err_lett_vr_esi1F: and al,0Fh or al,30h cmp al,39h jna oltre1_err_lett_vr_esi1F add al,7 oltre1_err_lett_vr_esi1F: mov [edi],al dec edi dec ecx jz oltre2_err_lett_vr_esi1F mov eax,ebx ror eax,4 mov ebx,eax jmp prima1_err_lett_vr_esi1F oltre2_err_lett_vr_esi1F: ;--------------------- mov ecx,Indirizzo mov edx,32 ;32 byts call msg_gen popa ret ;---------------ROUTINES-------(30-a)------------------------- input_su_buff256: ;entra con ;eax N. bytes da ricevere ;esi buffer buff_provv (massimo 256 bytes) ;la funzione prevede: ;arg eax 3 ;ebx file descriptor ;ecx ptr to input buffer ;edx buffer size, max. count of bytes to receive pusha mov ecx,64 mov eax,0 mov esi,buff_provv inp_01: mov [esi],eax add esi,4 dec ecx jnz inp_01 popa pusha cmp eax,256 ja fine_inp mov edx,eax mov eax,3 mov ebx,1 mov ecx,buff_provv ;mov edx,256 int 0x80 fine_inp: popa ret ;---------------ROUTINES-------(30)------------------------- w_ch: ;senza parametri, attende un carattere da tastiera pusha ;arg eax 3 ;ebx file descriptor ;ecx ptr to input buffer ;edx buffer size, max. count of bytes to receive ;aspetta: ; mov ah,0 ; int 16h ; NON FUNZIONA ; jnz aspetta mov eax,3 mov ebx,1 ;1 char mov ecx,provv mov edx,256 int 0x80 ;mov [provv],eax popa mov eax,[provv] ret ;---------------ROUTINES-------(31)------------------------- ;---------------ROUTINES-------(32)------------------------- ;---------------ROUTINES-------(33)------------------------- new_line: pusha mov eax,4 ;arg eax 4 mov ebx,1 ;ebx file descriptor mov ecx,new_line1 ;ecx ptr to output buffer mov edx,2 ;edx count of bytes to send ;return eax no. of sent bytes (if POSIX conforming f.s.) int 0x80 popa ret ;---------------ROUTINES-------(34)------------------------- get_time: ; entra con eax = func 13 - ebx = 0 oppure Pointer to buff dove ricevere una copia ; restituisce in eax secondi trascorsi dalle ore 00:00:00 del 01/01/1970 a oggi pusha mov eax,13 mov ebx,provv int 0x80 add eax,3600 ; strano... manca 1 ora PROVVISORIOOOO almeno finche' non si chiarisce mov [provv],eax ;call errorizza ;call ascizza popa mov eax,[provv] ret ;---------------ROUTINES-------(35)------------------------- aggiusta_time: ; entra con eax = sec trasc dal 1970 (dopo call get_time) e in esi = ; buff_struc_time: ; t_MMl db "X........ ",0xA,0,0 ; (Gennaio - Dicembre) MESEnome ; t_GGl db "Xxx ",0xA ;(Lun - Dom) GIORNOset ; t_GG db "00","/" ;00 GIORNOnum ; t_MMs db "00","/" ; MESEnum ; t_AAAA db "0000",0xA ; ANNO ; t_HH db "00",":" ; (da 00 a 24) ORE ; t_MMm db "00",":" ; (da 00 a 59) MIN ; t_SS db "00",0xA ; (da 00 a 59) SEC ; t_GS db "00",0xA,0xA,0xA,0xA ;(da 0 a 6) ; ; t_giosetN dd 0 ; e' un doppione di t_ggNs ; t_ggN dd 0 ; (giorno da 1 a 31) ; t_ggNs dd 0 ; (giorno settimana da 0 a 6 ... Dom = 0 ... sab = 6 ) ; t_mmN dd 0 ; (mese da 1 a 12) ; t_aaN dd 0 ; (anno da 0 a 4miliardiecc) ; t_hhN dd 0 ; ore ; t_MMnN dd 0 ; min ; t_ssN dd 0 ; sec ;Secondi In ;60 1 minuto ;3.600 1 0ra ;86.400 1 giorno ;2.419.200 28 giorni ;2.592.000 30 giorni ;31.536.000 365 giorni ;31.622.400 366 giorni ; pusha push eax xor edx,edx mov ebx,604800 ;7 giorni div ebx ;resto in edx mov eax,edx ;il resto xor edx,edx mov ebx,86400 div ebx ; ora in eax numero da 0 a 6 (giorno della settimana) mov ebx,7 add eax,4 ; 1-1-70 era giovedi; aggiungere 4 per allinearlo a lunedi xor edx,edx div ebx ; e' il sistema migliore di fare un (mod 7) dividere ancora per 7 mov eax,edx ;ora prendiamo il resto (da 0 a 6... e' quello giusto di oggi) mov [t_giosetN],eax mov edi,t_GS call ascizzaNsu_buff_2ch push esi mov edi,t_GGl mov esi,ggl xor edx,edx mov ebx,4 mul ebx mov ebx,eax mov eax,[esi+ebx] ;in eax "Lun "... o "Dom " mov [edi],eax ; mettiamo su t_GGl "Lun ", "Mar " ... o "Dom " pop esi pop eax mov ecx,1970 mov ebx,eax cmp ebx,31536000 ;cominciare con 1 anno (i secondi di un anno) jna basta_an_ag_t conta_an_ag_t: sub ebx,31536000 ; (1-1-1971 - 75 79 83...) inc ecx cmp ebx,31536000 ;cominciare con 1 anno (i secondi di un anno) jna basta_an_ag_t sub ebx,31536000 ; (1-1-1972 - 76 80 84...) inc ecx cmp ebx,31622400 ;cominciare con 1 anno (i secondi di un anno) jna basta_an_ag_t ;vediamo se secolo bisest xor edx,edx mov eax,ecx mov esi,400 div esi cmp edx,0 je bisest_an xor edx,edx mov eax,ecx mov esi,100 div esi cmp edx,0 jne bisest_an sub ebx,31536000 ; (1-1-2100 ) e' secolare non bisestile inc ecx cmp ebx,31536000 ;cominciare con 1 anno (i secondi di un anno) ja dopo_bisest_an jmp basta_an_ag_t bisest_an: sub ebx,31622400 ;prec bisestile (1-1-1973 77 81 - 2001 2401 2801) inc ecx cmp ebx,31536000 ;cominciare con 1 anno (i secondi di un anno) jna basta_an_ag_t dopo_bisest_an: sub ebx,31536000 ; (1-1-1974 -78 82 86...)) inc ecx cmp ebx,31536000 ;cominciare con 1 anno (i secondi di un anno) ja conta_an_ag_t basta_an_ag_t: ;ora i mesi mov eax,ecx mov [t_aaN],eax mov edi,t_AAAA call ascizzaNsu_buff_4ch ; entra con eax = valore da ascizzare ; edi = ptr su buff (4 bytes .. fino a 9999 ) mov ecx,1 ;gen mov edi,t_MMl ;"XX?Gennaio " mov ebp,mese ;"Gennaio " conta_mes_ag_t: cmp ebx,2678400 ;31 gg jb near basta_mese_ag_t sub ebx,2678400 add ebp,10 ;Febbraio inc ecx ;1 feb mov eax,[bisest] cmp eax,0 je no_bisest cmp ebx,2505600 ;29 gg jb near basta_mese_ag_t sub ebx,2505600 inc ecx ;1 mar jmp dopo_no_bisest no_bisest: cmp ebx,2419200 ;28 gg jb near basta_mese_ag_t sub ebx,2419200 inc ecx ;1 mar dopo_no_bisest: cmp ebx,2678400 ;31 gg jb near basta_mese_ag_t add ebp,10 sub ebx,2678400 inc ecx ;1 Apr cmp ebx,2592000 ;30 gg jb near basta_mese_ag_t add ebp,10 sub ebx,2592000 inc ecx ;1 Mag cmp ebx,2678400 ;31 gg jb near basta_mese_ag_t add ebp,10 sub ebx,2678400 inc ecx ;1 Giu cmp ebx,2592000 ;30 gg jb basta_mese_ag_t add ebp,10 sub ebx,2592000 inc ecx ;1 Lug cmp ebx,2678400 ;31 gg jb basta_mese_ag_t add ebp,10 sub ebx,2678400 inc ecx ;1 Ago cmp ebx,2678400 ;31 gg jb basta_mese_ag_t add ebp,10 sub ebx,2678400 inc ecx ;1 Set cmp ebx,2592000 ;30 gg jb basta_mese_ag_t add ebp,10 sub ebx,2592000 inc ecx ;1 Ott cmp ebx,2678400 ;31 gg jb basta_mese_ag_t add ebp,10 sub ebx,2678400 inc ecx ;1 Nov cmp ebx,2592000 ;30 gg jna basta_mese_ag_t add ebp,10 sub ebx,2592000 inc ecx ;1 Dic basta_mese_ag_t: ;ora i giorni mov eax,[ebp] mov [edi],eax mov eax,[ebp+4] mov [edi+4],eax mov ax,[ebp+8] mov [edi+8],ax mov eax,ecx mov [t_mmN],eax mov edi,t_MMs call ascizzaNsu_buff_2ch mov ecx,1 basta_mese_dopo: cmp ebx,86400 ;1 gg jb basta_gio_ag_t sub ebx,86400 inc ecx ;1 gio jmp basta_mese_dopo basta_gio_ag_t: ;ora l'ora mov eax,ecx mov [t_ggN],eax mov edi,t_GG call ascizzaNsu_buff_2ch mov ecx,0 ; t_HH db "00",0xA ; (da 00 24) ; t_MMm db "00",0xA ; (da 00 a 59) ; t_SS db "00",0xA ; basta_gio_dopo: cmp ebx,3600 ;1 h jb basta_ora_ag_t sub ebx,3600 inc ecx ;1 ora jmp basta_gio_dopo basta_ora_ag_t: ;ora i min mov eax,ecx mov [t_hhN],eax mov edi,t_HH ;call ascizzaNsu_buff call ascizzaNsu_buff_2ch mov ecx,0 basta_ora_dopo: cmp ebx,60 ;1 gg jb basta_min_ag_t sub ebx,60 inc ecx ;1 ora jmp basta_ora_dopo basta_min_ag_t: ;ora i sec mov eax,ecx mov [t_MMnN],eax mov edi,t_MMm call ascizzaNsu_buff_2ch mov eax,ebx ; i pochi secondi rimasti mov [t_ssN],eax mov edi,t_SS call ascizzaNsu_buff_2ch fine_ag_t: popa ret ;---------------ROUTINES-------(36)------------------------- dove_siamo: ;torna in eax il valore di EIP pop eax ;e' quello giusto? Si nello stack c'e' l'indirizzo di ritorno push eax ;rimettiamolo al suo posto ret ; e ritorniamo col valore di EIP in eax ;---------------ROUTINES-------(37)------------------------- apri_sock1: ;entra senza parametri (sock1... perche' si possono prevedere alre sock o generalizzare ;questa funzione) ;torna in eax il valore di ID_sock oltre che sulla variabile [sock1] pusha mov eax,0x66 ;syscall N.102 socketcall mov ebx,1 ;SYS_SOCKET 1 (significa aprila o generala) mov ecx,args ;l'indirizzo di inizio della struc AF_INET, SOCK_STREAM e IPPROTO_TCP int 0x80 mov [sock],eax mov [provv],eax popa mov eax,[provv] ret ;---------------ROUTINES-------(37)------------------------- sock_recv1: pusha mov eax,0x66 mov ebx,10 ;recv mov ecx,args_per_recv mov edx,[sock] mov [arg_r0],edx mov edx,buffer_2recv mov [arg_r1],edx mov edx,512 mov [arg_r2],edx mov edx,0x40 ;MSG_DONTWAIT ... si ci vuole; errore se = FFFFFFFF mov [arg_r3],edx mov edx,0x0ffffffff ;sembra non avere alcun effetto se 0 o FFFFFFFF mov [arg_r4],edx mov esi,512 ;buffer_2recv ;sara' questo? int 0x80 ;call errorizza popa ret ;----------------------- connetti_sock1: ;entra senza parametri (sock1... perche' si possono prevedere alre sock o generalizzare ;questa funzione) pusha mov eax,0x66 ;syscall N.102 socketcall mov ebx,3 ;SYS_SOCKET 3 (significa connetti) mov ecx,args_Conn ;l'indirizzo di inizio della struc AF_INET, SOCK_STREAM e IPPROTO_TCP int 0x80 ;??mov [sock],eax mov [provv],eax popa mov eax,[provv] ret ;---------------ROUTINES-------(38)------------------------- ; suona un beeepp sound: pusha mov eax,4 mov ebx,0 mov ecx,char_bel mov edx,4 int 0x80 popa ret ;--------------------------------------- codifica_0AD: ;serve a codificare i bytes 0,A,D del paccketto buff1_2K_defa ;altrimenti non accettati dal server pusha call pulisci_buff_provv_32k xor ebx,ebx mov edi,buff_provv_32k mov esi,buff1_2K_defa mov ecx,512 cod_0AD_1: mov eax,[esi] cmp eax,0 jne cod_0AD_2 cod_0AD1x: mov eax,[esi+4] cmp eax,0 je near fine_0AD cod_0AD_2: cmp eax,0x0a jne cod_0AD1x_poi mov eax,[esi+4] cmp eax,0 je near fine_0AD cod_0AD1x_poi: mov al,[esi] cmp al,0 je is_0_cod_0AD cmp al,0xa je is_A_cod_0AD cmp al,0xd je is_D_cod_0AD mov [edi],al inc edi inc esi dec ecx jnz cod_0AD_1 jmp fine_0AD is_0_cod_0AD: mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] mov [edi],ax jmp no_0AD is_A_cod_0AD: mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] add ax,0xa mov [edi],ax jmp no_0AD is_D_cod_0AD: mov eax,[codice_0AD] mov [edi],eax add edi,4 mov ax,[identificativo_0AD] add ax,0xd mov [edi],ax jmp no_0AD no_0AD: add edi,2 inc esi dec ecx jnz cod_0AD_1 fine_0AD: mov al,0xa mov [edi],al popa ret ;-------------------------------------------------------- pulisci_buff_provv_32k: pusha mov eax,0 mov ecx,32000 mov esi,buff_provv_32k pul_buf_32k_cont: mov [esi],eax add esi,4 sub ecx,4 jnz pul_buf_32k_cont popa ret ;------------------------------------------------------- pulisci_con_space_8_bytes: ;entra con esi che punta a un buffer di 8 bytes da mettere a space pusha mov al," " mov ecx,8 cont_pul_c_sp_8_bts: mov [esi],al inc esi dec ecx jnz cont_pul_c_sp_8_bts popa ret ;---------------------------- pulisci_con_space_16_bytes: ;entra con esi che punta a un buffer di 16 bytes da mettere a space pusha mov al," " mov ecx,16 cont_pul_c_sp_16_bts: mov [esi],al inc esi dec ecx jnz cont_pul_c_sp_16_bts popa ret ;---------------------------- pulisci_buff_480_bytes: ;entra con esi che punta a un buffer di 480 bytes da mettere a space pusha mov al," " mov ecx,480 cont_pul_c_sp_480_bts: mov [esi],al inc esi dec ecx jnz cont_pul_c_sp_480_bts popa ret ;-------------------------------------------------- calcola_l_header: pusha mov esi,buffer_2recv mov ecx,512 xor ebx,ebx cerca_separatore_ident: mov al,[esi] cmp al,"!" je cerca_chiocciola inc esi inc ebx dec ecx jnz cerca_separatore_ident jmp errore_calcola_l_nosep cerca_chiocciola: mov al,[esi] cmp al,"@" je cerca_i_2punti inc esi inc ebx dec ecx jnz cerca_chiocciola jmp errore_calcola_l_nochiocciola cerca_i_2punti: mov al,[esi] cmp al,":" je ok_fine_header inc esi inc ebx dec ecx jnz cerca_i_2punti errore_calcola_l_no2p: mov eax,0xFFFFFFF2 mov [l_header],eax jmp dopo_fine_head errore_calcola_l_nosep: mov eax,0xFFFFFFF0 mov [l_header],eax jmp dopo_fine_head errore_calcola_l_nochiocciola: mov eax,0xFFFFFFF1 mov [l_header],eax jmp dopo_fine_head ok_fine_header: inc ebx mov [l_header],ebx dopo_fine_head: popa ret ;---------------------------------------------------- pulisci_buff_16_bytes: ;entra con esi che punta a buffer 16 chars da pulire con spazi pusha mov al," " mov ecx,16 pul_16_cont: mov [esi],al inc esi dec ecx jnz pul_16_cont popa ret ;---------------------------------------------------- randomizza: ;genera un numero random da 0 a 1.000.000 da utilizzare come puntatore casuale alle kiavi pusha mov eax,13 mov ebx,0 int 0x80 mov ecx,1000000 mov ebx,eax randomizza_01: cmp eax,ecx jb fine_randomizza sub eax,ecx jmp randomizza_01 ;ror ebx,8 ;and ebx,0xFF fine_randomizza: ror ax,7 add ax,bx ;add al,bh ;bswap ebx ;add ax,bx add al,ah add ah,al mov ebx,eax and ebx,0xFF00 bswap eax add eax,ebx bswap eax cont_33_rand: cmp eax,1000000 jb fine_fine_random sub eax,1000000 jmp cont_33_rand fine_fine_random: mov [provv],eax popa mov eax,[provv] ret ;-------------------------------------- calcola_som_PIN_CODE: ;entra con nul ;torna in eax som_PIN_CODE call calcola_som_PIN_COD_XX xor eax,eax ;da qualche parte si usa eax, meglio metterlo a zero ret mov eax,[PIN_CODE] mov [som_PIN_CODE],dword 0 add [som_PIN_CODE],al add [som_PIN_CODE],ah bswap eax add [som_PIN_CODE],al add [som_PIN_CODE],ah mov eax,[som_PIN_CODE] call calcola_som_PIN_COD_XX ret ;---------------------------------------- calcola_som_PIN_COD_XX: ;entra con nul ;torna in eax som_PIN_CODE pusha mov esi,PIN_COD01 mov edi,som_PIN_COD01 mov ecx,13 cont_calc_SPC: mov eax,[esi] mov [edi],dword 0 add [edi],al add [edi],ah bswap eax add [edi],al add [edi],ah add edi,4 add esi,4 dec ecx jnz cont_calc_SPC popa ret ;---------------------------------------- sistema_ultima_x_visual: pusha mov esi,buff1_2K_defa mov edi,buffer_2recv mov ecx,[l_header] xor eax,eax mov ax,[esi+ecx] ;pusha ;call errorizza ;popa cmp ah,1 ja fine_s_uxv s_uxv1: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz s_uxv1 add esi,6 mov ecx,[l_buff_da_DE_cryptare] s_uxv2: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz s_uxv2 mov al,0xd mov [edi],al inc edi mov al,0xa mov [edi],al call pulisci_buff1_2K_defa mov edi,buff1_2K_defa mov esi,buffer_2recv mov ecx,[l_header] add ecx,[l_buff_da_DE_cryptare] add ecx,2 s_uxv3: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz s_uxv3 fine_s_uxv: popa ret ;---------------------------------------- sistema_PRIVMSG: ;abbiamo esi che punta a PRIV(MSG ) mov eax,[esi+4] cmp eax,"MSG " ;controlliamo che sia la stringa giusta je cont_sistema_PRIVMSG ret ;altrimenti ritorna senza far nulla cont_sistema_PRIVMSG: mov eax,"CRYP" ;sostituiamo PRIVMSG con CRYPTIC mov [edi],eax add edi,4 mov eax,"TIC " mov [edi],eax add edi,4 add esi,8 ret ;----------------------------------------------- allinea_P2_2_P1: pusha mov edi,buff1_2K_defa ;[P2 - 6] mov esi,buffer_2send_dopo ;[P1] add edi,6 ;2+4 ora edi = P2 mov ecx,[l_buff_da_cryptare] cont_allinea_P2_2_P1: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_allinea_P2_2_P1 popa ret ;----------------------------------------------- allinea_P1_2_P2: pusha mov esi,buff1_2K_defa ;[P2 - 6] mov edi,buffer_2send_dopo ;[P1] add esi,6 ;2+4 ora esi = P2 mov ecx,[l_buff_da_cryptare] cont_allinea_P1_2_P2: mov al,[esi] mov [edi],al inc esi inc edi dec ecx jnz cont_allinea_P1_2_P2 popa ret ;----------------------------------------------- allinea_BUFF_DK: ;non esattamente 2 a 1 (reverse di quello di cui sopra pusha mov esi,buffer_2recv ;mov [P1],esi mov edi,buff1_2K_defa mov ebx,[l_header] ;28 ;PRIVMSG ecc ;[l_header] add ebx,6 ;2+4 bytes add ebx,[l_buff_da_DE_cryptare] inc ebx ;0Xa inc ebx mov ecx,480 ;480 allinea_fine_decodkiave2: ;sistemare il buffer giusto dec ecx jz allinea_sist_buff_K02_fin_DK mov al,[esi] mov [edi],al inc esi inc edi dec ebx jnz allinea_fine_decodkiave2 ; se ebx errato vediamo che cazz ci mette ;mov al,0xa ;mov [edi],al ;:zuppolo!~zupolon^@host200-41.pool8261.interbusiness.it PRIVMSG #coclide :@@@@@ allinea_sist_buff_K02_fin_DK: popa ret ;----------------------------------------------- metti_bit_byte_K4: ;entra con la coppia eax:edx contenenti 8 bytes da uniformare al byte ;contenuto su CH1_4 pusha ror eax,1 ror edx,1 mov [esi],eax mov [esi+4],edx xor ecx,ecx mov cl,08h cont_eax_K4: mov bl,[CH1_4] and bl,cl cmp bl,0 je near oltre_bit_byte_K4_eax ;qui effettuare operazione di inversione ;push eax xor ebx,ebx cmp ecx,1 jne near dopo_ecx_no1_K4 call opera_su_al_K4 jmp oltre_bit_byte_K4_eax dopo_ecx_no1_K4: cmp ecx,2 jne dopo_ecx_no2_K4 ror eax,8 call opera_su_al_K4 rol eax,8 jmp oltre_bit_byte_K4_eax dopo_ecx_no2_K4: cmp ecx,3 jne dopo_ecx_no3_K4 ror eax,16 call opera_su_al_K4 rol eax,16 jmp oltre_bit_byte_K4_eax dopo_ecx_no3_K4: cmp ecx,4 jne dopo_ecx_no4_K4 ror eax,24 call opera_su_al_K4 rol eax,24 jmp oltre_bit_byte_K4_eax dopo_ecx_no4_K4: cmp ecx,5 jne dopo_ecx_no5_K4 mov ebp,eax mov eax,edx ;ror eax,24 call opera_su_al_K4 ;rol eax,24 mov edx,eax mov eax,ebp jmp oltre_bit_byte_K4_eax dopo_ecx_no5_K4: cmp ecx,6 jne dopo_ecx_no6_K4 mov ebp,eax mov eax,edx ror eax,8 call opera_su_al_K4 rol eax,8 mov edx,eax mov eax,ebp jmp oltre_bit_byte_K4_eax dopo_ecx_no6_K4: cmp ecx,7 jne dopo_ecx_no7_K4 mov ebp,eax mov eax,edx ror eax,16 call opera_su_al_K4 rol eax,16 mov edx,eax mov eax,ebp jmp oltre_bit_byte_K4_eax dopo_ecx_no7_K4: ; e' 8 quindi mov ebp,eax mov eax,edx ror eax,24 call opera_su_al_K4 rol eax,24 mov edx,eax mov eax,ebp jmp oltre_bit_byte_K4_eax ;-----routine interna------ opera_su_al_K4: push ebx xor ebx,ebx mov bl,al ;1� bit and bl,80h ror bl,1 or bh,bl mov bl,al ;2� bit and bl,40h rol bl,1 or bh,bl mov bl,al ;3� bit and bl,20h ror bl,1 or bh,bl mov bl,al ;4� bit and bl,10h rol bl,1 or bh,bl mov bl,al ;5� bit and bl,08h ror bl,1 or bh,bl mov bl,al ;6� bit and bl,04h rol bl,1 or bh,bl mov bl,al ;7� bit and bl,02h ror bl,1 or bh,bl mov bl,al ;8� bit and bl,01h rol bl,1 or bh,bl mov al,bh pop ebx ret ;----fine routine interna--------- oltre_bit_byte_K4_eax: shr ecx,1 cmp ecx,0 je vai_su_edx_K4 jmp cont_eax_K4 vai_su_edx_K4: mov [provv1],eax mov [provv2],edx popa mov eax,[provv1] mov edx,[provv2] ret ;---------------------------------------------- ripulisci_sequenze: pusha ;seq_tutte db "xx - xx - xx - xx - xx - xx - xx - xx - xx - xx - xx - xx - xx ",0xa,0xa ;seq_attive db ".. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. - .. ",0xa,0xa mov ecx,13 mov esi,seq_tutte mov edi,seq_attive mov ax,".." mov bx,".." cont_ripulisci_sequenze: mov [esi],ax mov [edi],bx add esi,5 add edi,5 dec ecx jnz cont_ripulisci_sequenze popa ret ;------------------------------------------------ esegui_funzione_789_K: pusha ; se 7 oppure 8 oppure 9 sono inattivi, far puntare i corr. P3 a buff_vuoto ( Zero 0) mov ebp,[P3_7_p] mov edi,[P3_8_p] mov edx,[P3_9_p] mov esi,[P1] ;jmp fine_789 cont_opera_789_K: mov bl,[ebp] mov cl,[edi] xor cl,bl ;jmp fine_789 mov bl,[edx] xor bl,cl mov al,[esi] xor al,bl mov [esi],al inc ebp cmp ebp,[P3_7max_p] jna va_ebp_789 mov ebp,[P3_7_p] va_ebp_789: inc edi cmp edi,[P3_8max_p] jna va_edi_789 mov edi,[P3_8_p] va_edi_789: inc edx cmp edx,[P3_9max_p] jna va_edx_789 mov edx,[P3_9_p] ;jmp fine_789 ;provvisorio va_edx_789: inc esi cmp esi,[P1max] jna va_esi_789 mov esi,[P1] jmp fine_789 va_esi_789: ;dec eax ;dec dword [P3_master] dec dword [P3_master] jnz cont_opera_789_K fine_789: popa ret ;-------------------------------------------------- inizializza_buff_vuoto_2mega: pusha mov esi,buff_vuoto_2mega mov eax,0 mov ecx,500000 cont_in_2mega: mov [esi],eax add esi,4 dec ecx jnz cont_in_2mega popa ret ;--------------------------------------------------- verifica_se_key_attiva: pusha xor edx,edx mov byte [key_is_attiva],0 mov edi,act_K mov ebx,4 dec eax mul ebx add edi,eax cmp dword [edi],1 jne va_dopo_attiva mov byte [key_is_attiva],1 va_dopo_attiva: popa ret ;----------------------------------------------------- invia_mesg_789: pusha mov eax,4 mov ebx,1 mov ecx,msg_seq_k789 mov edx,[msg_seq_k789_l] int 0x80 popa ret ;------------------------------------------------------- rimetti_riempi1_2_P1: ;entra con ebp che punta a inizio buffer ;edi a fine buffer mov esi,[P1] ;cmp dword [op_ebp],0 ;je noebpr2_P1 noebpr2_P1: inc ebp ;cmp dword [op_edi],0 ;je noedir2_P1 ;dec edi noedir2_P1: ;nop rim_r12_P1_va: mov al,[ebp] mov [esi],al inc ebp ;cmp ebp,edi ;ja si_finito_verorim_r12_P1 ;fine_rimetti_r2P1 inc esi cmp esi,[P1max] ja si_finito_verorim_r12_P1 jmp rim_r12_P1_va fine_rimetti_r2P1: ;cmp esi,[P1max] ;ja si_finito_verorim_r12_P1 ;forse un corno ;jmp rim_r12_P1_va ; altrimenti.... cacchio... ;si trova gia allineato.... :)))) ;non serve nient'altro si_finito_verorim_r12_P1: mov ebp,riempi1 ; buff da 2 mega add ebp,512 ;mettiamoci a distanza sufficiente dall'inizio per ricevere ;l'intero messaggio se tutti i bit della chiave sono a 1 mov edi,ebp ;sincr edi e ebp; edi incrementa se bit =0, ebp decrementa se bit=1 inc edi mov dword [op_ebp],0 mov dword [op_edi],0 mov esi,[P1] ret ;---------------------------------------------------------- rimetti_riempi1_2_P1_DK: ;entra con ebp che punta a inizio buffer ;edi a fine buffer mov esi,[P1max] ;cmp dword [op_ebp],0 ;je noebpr2_P1 noebpr2_P1_DK: inc ebp ;cmp dword [op_edi],0 ;je noedir2_P1 ;dec edi noedir2_P1_DK: ;nop rim_r12_P1_va_DK: mov al,[ebp] mov [esi],al inc ebp ;cmp ebp,edi ;ja si_finito_verorim_r12_P1 ;fine_rimetti_r2P1 dec esi cmp esi,[P1] jb si_finito_verorim_r12_P1_DK jmp rim_r12_P1_va_DK fine_rimetti_r2P1_DK: ;cmp esi,[P1max] ;ja si_finito_verorim_r12_P1 ;forse un corno ;jmp rim_r12_P1_va ; altrimenti.... cacchio... ;si trova gia allineato.... :)))) ;non serve nient'altro si_finito_verorim_r12_P1_DK: mov ebp,riempi1 ; buff da 2 mega add ebp,512 ;mettiamoci a distanza sufficiente dall'inizio per ricevere ;l'intero messaggio se tutti i bit della chiave sono a 1 mov edi,ebp ;sincr edi e ebp; edi incrementa se bit =0, ebp decrementa se bit=1 inc edi mov dword [op_ebp],0 mov dword [op_edi],0 mov esi,[P1max] ret ;---------------------------------------------------------- ;da pianificare: a) lettura da 1 file random (blocchi da 256 bytes) leggi_file_256_b ; b) lettura c.s. 512 bytes leggi_file_512_b ; c) n ---> eax ; ebx F_ID leggi_file_n_b ;=====================FINE ROUTINES======================= ;---------------------FINE------------------------------------------------