Thejuster Posted May 17, 2016 Share Posted May 17, 2016 (edited) Prima di Iniziare: Non sono responsabile dei dati, immagini o appunti prese da utenti che leggono questa discussione.Questa discussione è a scopo didattico, ogni riferimento a screen, oggetti o programmi sono puramenteper scopo illustrativo o didattico, Non mi ritengo responsabile di eventuali danni arrecati a persone o a cose.Questa guida insegna l'utilizzo dell'assembly ed eventuali tecniche di reverse engineering.Qualsiasi atto improprio dovuto ad alcuni insegnamenti di questa guida vanno applicate direttamente all'utente finaleche esegue l'atto improprio. Consiglio: Utilizzate questi insegnamenti per la vostra istruzione e non per arrecare danni a persone o a cose. Salve a tutti. Sono Thejuster.Molti mi conoscono, e molti altri solo di passaggio. Sono un programmatore avanzato nel linguaggio C#con solide basi intermedie di C++, Assembly e molti altri linguaggi di programmazione. Ho deciso di scrivere una serie di tutorial sulle basi alla programmazione ad ingegneria inversa. La parola "ingegneria inversa" viene definita anche come: reversing engineering Da Wikipedia:consiste nell'analisi dettagliata del funzionamento, progettazione e sviluppo di un oggetto.al fine di produrre un nuovo dispositivo o programma che abbia un funzionamento analogo, magari migliorando o aumentando l'efficienza dello stesso, senza in realtà copiare niente dall'originale; inoltre, si può tentare di realizzare un secondo oggetto in grado di interfacciarsi con il primo La programmazione inversa, richiede anni ed anni di studio. Sopratutto per il linguaggio macchina Assembly.Qualsiasi programma, tool o altro strumento viene compilato o interpretato in codice macchina. il C++ compila il codice in codice macchina.il C# viene interpretato da JIT (Just in Time ) che a sua volta compila in codice macchina. Entrambi sono linguaggi molto potenti e non vanno sottovalutati.ma c'è un unica differenza tra i due. C++ può usare il blocco di codice __ams__ ( Assembly in Line )(da C++ si può scrivere direttamente in assembly ) C# può usare il blocco di codice unsafe ( Unmanaged Unsafe Code )(da c# si possono utilizzare frammenti di codice c++ ) In questi piccoli tutorial cercherò di mostrarvi e farvi capire come possiamo modificare un gioco per realizzare alcune modifiche.E far funzionare quel gioco come diciamo noi e non per lo scopo al quale è stato programmato. Purtroppo, non potrò spiegarvi precisamente e dettagliatamente ogni passo perché sarebbe un impresa.Bisogna conoscere a fondo anche un singolo byte come funziona. Ma cercherò nel limite massimo della semplicità di spiegarvi alcuni concetti chiari ed utili per chi voglia iniziare a fare qualcosa del genere. Un esempio?DynRPG di Cherry. Quello è reverse engineering.Per fare quello, abbiamo bisogno di capire come funziona una macchina.come è strutturato un programma e cercare di capire come si svolge un programma. Quindi impartirò qualche piccola lezione di Assembly. L'Assembly come detto è il linguaggio macchina. Madre di tutti i linguaggi di programmazione esistenti. un semplice calcolo int totale = 2 + 2; cout << totale;in Assembly diventa N1 DB 00h N2 DB 00h CALL PROCEDURA PROCEDURA PROC push AX push BC push CX push DX mov DL, BL mov CL, AL mov AL, DL add AL, BL mov DL, AL CALL STAMPA JMP FINE_PROC STAMPA PROC PUSH AX PUSH DX PUSH DX MOV AH, 2 MOV DL, '=' INT 21h POP DX ;------------------------------------ ADD dl, 30h INT 21h ;------------------------------------ pop DX pop AX ret STAMPA ENDP FINE_PROC: POP DX POP CX POP BX POP AX RET Questo è per farvi capire l'enorme difficoltà della cosa.Ma non impossibile da capire.Con impegno e costanza si può fare tutto. Principalmente dobbiamo sapere cosa sono i Registri. I Registri sono delle celle di memoria temporanee nello stack.e vengono divisi da registri alti e registri bassi. i registri alti sono ( AX,BX,CX,DX ) i registri bassi sono ( AL,BL,CL,DL ) un registro alto non può interagire con un'altro del suo stello livello.ma solo con quello basso.in ugual modo vale per i registri bassi. Per poter ottenere questi risultati, è importante imparare bene i concetti basilari dell'assemblyaltrimenti possiamo sognarci di poter realizzare un giorno qualcosa come questo :) http://www.rpg2s.net/forum/index.php/topic/20236-makerando-tool/ Questo mio tool, esegue codice Assembly InLine.modificando un indirizzo esempio: 0x001D5E ( EAX = 000000 ) in 0x001D5E ( EAX = 000001 ) più avanti spiegerò come funziona. Ora notate bene il codice che ho postato sopra di un banalissimo calcolo. Abbiamo delle funzioni e dichiarazioni. In Assembly, si legge da destra verso sinistra. [ VALORE ] . [ VARIABILE ] | <----------------| normalmente noi siamo abituati prima a scrivere la variabile e poi ad assegnargli un valore.in assembly è il contrario.si assegna prima un valore e poi una variabile di riferimento. ora che avete capito i registri quali sono, e come si scrive una variabile,Vi siete chiesti cosa sono quei: N1 DB 00h Come in C prima del main vanno dichiarate le variabili.Quella N1 è una variabile di tipo word occupa in memoria 16 bit.( in c++ sarebbe byte ) Ora vi illustro le altre. VARIABILE DW ( DWORD in c++ )Costanti binarie, rappresentate da stringhe di cifre binarie chiuse dal carattere b 11011010b valore binario a 8 bit 1010001101010100b valore binario a 16 bit 12o valore decimale 12d costante decimale 'Ciao' valore ASCII Ora vi potete chiedere, Ma con tutte ste cose io che ci devo fare?ve lo dico subito. Prendiamo esempio una screen qualsiasi da internet di Ollydbge proviamo ad analizzarla ora che conosciamo i concetti basi. ora iniziamo a capirci qualcosa in più. [ 1 ] [ 2 ] [ 3 ] [ 4 ] http://www.joestewart.org/morphine-dll/ollydbg3.png 1 = Indirizzi2 = Offset3 = Istruzioni4 = Registri Registri:Li notate a destra in alto? EAX ECXEDXEBX Togliamo la E iniziale diventano AXCXDXBX Eh si, proprio quelli di cui vi parlavo prima :) I registri contengono valori che prima di essere passati all'istruzione vengono tenuti in memoria.è come inviare un parametro ad una funzione.In parole semplici sarebbe come fare MOV AX,AL MOV BX,BL CALL calcola ;-- Tradotto diventa void calcola (int ax,bx) { return ax + bx; } Chiaro no? E notiamo anche nella screen i vari passaggi come MOV, PUSH, CALL ecc. ecc. Non è tanto difficile capire i termini.MOV ( Sposta )PUSH ( Setta )CALL ( Chiama )ADD ( Addiziona )SUB ( Sottraziona )JMP ( Jump - Salta )JNZ ( Condizione Frok )JMP ( Salto incondizionale )ecc. ecc. basta tenerli a mente ed impararli per avere più praticità nel linguaggio. Direi che per questa piccola sessione possiamo fermarci qui :)spero che queste piccole perle vi abbiano aiutato a capirci qualcosina in più.Lo sò, e molto difficile. Ma pian piano ci si arriva. Vi ho spiegato molto dettagliatamente la base,ora vi lascio leggere questo piccolo PDFed ora inizierete a capirci qualcosa in più. http://zeus.ing.unibs.it/calcb/Lucidi/Lucidi0405/Intel80x86-IstruzParteB0405.pdf Edited May 17, 2016 by Thejuster Rpgmaker Asset Converter & UI Tool by Making Italia ______________________________________________________ Produzione Software, Componenti e Controlli _______________________________________________________ *** Linguaggi di Programmazione Conosciuti e competenze Tecniche *** C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET, Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService Making Italia Link to comment Share on other sites More sharing options...
Guardian of Irael Posted May 17, 2016 Share Posted May 17, 2016 Ecco la prima parte! ^ ^C++ può usare il blocco di codice __ams__ ( Assembly in Line )(da C++ si può scrivere direttamente in assembly ) C# può usare il blocco di codice unsafe ( Unmanaged Unsafe Code )(da c# si possono utilizzare frammenti di codice c++ )Immagino però che quei pezzi di codice in C++ usati su C# non posson usare il blocco ams, giusto? XD Prima lezione se non approfondita comunque lunga e con tanta sostanza, più o meno già sapevo tutto, ma una rispolveratina di ASSEMBLY ora mi serve. Non sarà facile per chi non conosce la programmazione capire troppo questo tutorial mi sa! > Vado a leggermi il PDF aspettando la seconda parte! :D^ ^ (\_/)(^ ^) <----coniglietto rosso, me! (> <) Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^ http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^ http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^ REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^ 🖤http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gifhttp://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3http://i.imgur.com/MpaUphY.jpg by Idriu E:3Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44) http://i.imgur.com/PgUqHPm.pngUfficiale"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.pngGrazie Testament XD Fan n°1 ufficiale di PQ! :DVivail Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che nonavevo programmi di grafica per fare un banner su questo pc XD (ora ho dinuovo il mio PC veramente :D) Rosso Guardiano dellahttp://i.imgur.com/Os5rvhx.pngRpg2s RPG BY FORUM:Nome: Darth Reveal PV totali 2PA totali 16Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.Bozze vesti non definitive qui.Equipaggiamento:Indossa:60$ e 59$ divisi in due tasche interneLevaitanSpada a due mani elsa lungaGuanti del Defender (2PA)Anello del linguaggio animale (diventato del Richiamo)Scrinieri da lanciere (2 PA)Elmo del Leone (5 PA)Corazza del Leone in Ferro Corrazzato (7 PA) ZAINO (20) contenente:Portamonete in pelle di cinghiale contenente: 100$Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)CordaBottiglia di idromeleForma di formaggioTorcia (serve ad illuminare, dura tre settori)Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)Ampolla BiancaSemi di Balissa CAVALLO NORMALE + SELLA (30 +2 armi) contentente:66$Benda di pronto soccorso x3Spada a due maniFagotto per Adara (fazzoletto ricamato) Link to comment Share on other sites More sharing options...
HROT Posted May 17, 2016 Share Posted May 17, 2016 In realtà l'assembly è abbastanza meccanico.. credo che avrebbe più problemi a capirlo qualcuno già "vizziato" dalle agevolazioni dei linguaggi di altro livello rispetto a chi parte da 0Però non mi sembra impostata come una guida rivolta ai principianti, immagino che sia solo l'introduzione per passare più rapidamente alla roba seria Seguo http://i.imgur.com/JvoTKKj.png Link to comment Share on other sites More sharing options...
Ste Posted May 18, 2016 Share Posted May 18, 2016 È una guida interessante e ho solo qualche base di programmazione :)Seguo il topic aspettando le prossime lezioni! Link to comment Share on other sites More sharing options...
Thejuster Posted May 18, 2016 Author Share Posted May 18, 2016 Ecco la prima parte! ^ ^Immagino però che quei pezzi di codice in C++ usati su C# non posson usare il blocco ams, giusto? XD Prima lezione se non approfondita comunque lunga e con tanta sostanza, più o meno già sapevo tutto, ma una rispolveratina di ASSEMBLY ora mi serve. Non sarà facile per chi non conosce la programmazione capire troppo questo tutorial mi sa! > < Vado a leggermi il PDF aspettando la seconda parte! :D^ ^ Esatto.In C# sebbene è possibile utilizzare frammenti di codice C++ non è possibile usare inline assembly.Ma C++ .NET lo fà :) Alla fine basta creare una libreria, importala in C# e chiamado determinate funzioni, possiamo saltare anche questo ostacolo. Ma per questo motivo, alcuni programmi necessitano l'uso del C++.ad oggi il C# è il linguaggio più gettonato. Come detto all'inizio, posso tentare di spiegare in modo più semplice possibile.Ma se non si conosce la programmazione, risulta veramente impossibile capire questo tutorial.Bisogna essere già ad un livello medio / alto di programmazione per capire almeno le basi. Difatti spiegherò le basi e qualche tecnica di reversing.Sono argomenti che vanno trattati molto delicatamente, e se usate da mano indiscrete possono arrecare danni.Quindi per questo motivo mi sono limitato, e mi limiterò solo nel spiegare alcune cose.Ma che daranno la spinta necessaria, e le conoscenze basi per poter effettuare altre cose. In realtà l'assembly è abbastanza meccanico.. credo che avrebbe più problemi a capirlo qualcuno già "vizziato" dalle agevolazioni dei linguaggi di altro livello rispetto a chi parte da 0Però non mi sembra impostata come una guida rivolta ai principianti, immagino che sia solo l'introduzione per passare più rapidamente alla roba seria Seguo Esattamente.Non è una guida adatta ai principianti.Si deve conoscere molto bene la programmazione per poter capire questo tutorial.qui si parla di termini nativi e non più gestiti da un framework.Parliamo di manipolazione ai puntatori, celle di memoria in ram.Se non si conosce esempio nemmeno qual'è la differenza tra ( LPCSTR ed LPCLSTR ) credo che tutto il resto sia arcano. Ho deciso di fare una serie di tutorial non sbilanciandomi su argomenti dannosi.Ma limitando a conoscere come si può creare una mod per Rpgmaker prendendo spunto dalla libreria di Cherry. Rpgmaker Asset Converter & UI Tool by Making Italia ______________________________________________________ Produzione Software, Componenti e Controlli _______________________________________________________ *** Linguaggi di Programmazione Conosciuti e competenze Tecniche *** C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET, Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService Making Italia Link to comment Share on other sites More sharing options...
Guardian of Irael Posted May 18, 2016 Share Posted May 18, 2016 In C# sebbene è possibile utilizzare frammenti di codice C++ non è possibile usare inline assembly.Ah ah ti pareva! XDNon ricordo più nulla di C++, ma mi sarebbe piaciuto provarlo da lì, vedrò se troverò tempo di documentarmi in proposito.^ ^ Bisogna essere già ad un livello medio / alto di programmazione per capire almeno le basi.Qui non ci sono molti di quel livello, ma... eh capisco... già l'argomento non è facile e va discusso ampiamente, dare le giuste basi di programmazione anche solo medie sarebbe tutto un altro tutorial bello vasto > Ho deciso di fare una serie di tutorial non sbilanciandomi su argomenti dannosi.Ma limitando a conoscere come si può creare una mod per Rpgmaker prendendo spunto dalla libreria di Cherry.Perfetto (\_/)(^ ^) <----coniglietto rosso, me! (> <) Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^ http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^ http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^ REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^ 🖤http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gifhttp://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3http://i.imgur.com/MpaUphY.jpg by Idriu E:3Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44) http://i.imgur.com/PgUqHPm.pngUfficiale"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.pngGrazie Testament XD Fan n°1 ufficiale di PQ! :DVivail Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che nonavevo programmi di grafica per fare un banner su questo pc XD (ora ho dinuovo il mio PC veramente :D) Rosso Guardiano dellahttp://i.imgur.com/Os5rvhx.pngRpg2s RPG BY FORUM:Nome: Darth Reveal PV totali 2PA totali 16Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.Bozze vesti non definitive qui.Equipaggiamento:Indossa:60$ e 59$ divisi in due tasche interneLevaitanSpada a due mani elsa lungaGuanti del Defender (2PA)Anello del linguaggio animale (diventato del Richiamo)Scrinieri da lanciere (2 PA)Elmo del Leone (5 PA)Corazza del Leone in Ferro Corrazzato (7 PA) ZAINO (20) contenente:Portamonete in pelle di cinghiale contenente: 100$Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)CordaBottiglia di idromeleForma di formaggioTorcia (serve ad illuminare, dura tre settori)Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)Ampolla BiancaSemi di Balissa CAVALLO NORMALE + SELLA (30 +2 armi) contentente:66$Benda di pronto soccorso x3Spada a due maniFagotto per Adara (fazzoletto ricamato) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now