Topic: Reverse Engineering chiarimenti ASM|C#|VB.NET  (Letto 367 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline tommyb1992

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Reverse Engineering chiarimenti ASM|C#|VB.NET
« il: Novembre 27, 2017, 18:37 »
Apro il topic anche qui, visto che nessuno sul forum di linux è riuscito a darmi una risposta.

piccolo disclaimer

da circa 5-6 giorni mi sono dato al "reverse engineering for dummies", quindi mi sono letto un paio di libri in pdf e uno cartaceo della hoepli sull'assembly, un pò di esercizi che mi ha fornito un utente sul forum e poi ho creato un mio programma semplice per vedere il funzionamento disassemblandolo e patchandolo con ollydbg/XVI32 e infine ho provato le skills acquisite provando a crackare un software che utilizza un anti-crack commerciale piuttosto famoso che viene utilizzanto anche su alcuni prodotti di Xbox etc... (alcuni di voi immagino che avranno capito di quale parlo) e ho notato che la difficoltà nel farlo è stata piuttosto bassa... penso di averci impiegato al massimo un ora e mezza e che alla fine si trattava solo di:
1) O modificare tutte le referenze ai vari je/jz/etc... che portavano al blocco del programma;
2) O modificare le procedure prima che ritornassero il valore, in maniera tale da evitare di modificare 300 je/jz/etc...
Sono sicuro che un utente esperto non ci impiegherebbe più di 20 minuti in confronto alla mia ora e mezza.

Ora passiamo alle domande:
1) Come procedo per la decompilazione di software sviluppati in VB.NET/C#? Ho provato a decompilare con JustDecompile e togliere l'obfuscator con de4dot e ricompilare con Visual Studio, ma il codice estratto mi da diversi errori perciò non riesco a ricompilarlo. Ovviamente una soluzione potrebbe essere imparare a programmare in C# o VB.NET e correggi gli errori, e per carità sono disposto anche farlo, ma se posso evitare...
2) Siccome voglio estrarre degli algoritmi da un software e poi traslarli in notazione matematica come faccio a vedere solo la parte di codice Assembly che viene eseguita in quel momento e soprattutto seguire tutti i vari loop che effettua?

p.s. come software attualmente sto utilizzando x96dbg

Post aggiunto che ho scritto in seguito nel thread senza risposte:

Alla prima domanda mi rispondo da solo: ILDASM/ILASM (l'ho appena scoperto e provato)
Per fortuna la sua sintassi è un mix fra Programmazione ad alto livello e asm, perciò non ho trovato grande difficoltà a patchare neanche questa volta. Chiunque abbia però una risposta alla seconda domanda è ben accetto...

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.642
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re:Reverse Engineering chiarimenti ASM|C#|VB.NET
« Risposta #1 il: Novembre 28, 2017, 01:19 »
Ma tu speri veramente che su un forum su python ti rispondano a domande sul reverse engineering di compilati .net?

Offline tommyb1992

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Re:Reverse Engineering chiarimenti ASM|C#|VB.NET
« Risposta #2 il: Novembre 28, 2017, 08:44 »
Ma tu speri veramente che su un forum su python ti rispondano a domande sul reverse engineering di compilati .net?

No a quello non ci spero, se vedi mi sono già risposto sotto, però a questa:

Citazione
2) Siccome voglio estrarre degli algoritmi da un software e poi traslarli in notazione matematica come faccio a vedere solo la parte di codice Assembly che viene eseguita in quel momento e soprattutto seguire tutti i vari loop che effettua?

Si ci spero, grazie :)

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Reverse Engineering chiarimenti ASM|C#|VB.NET
« Risposta #3 il: Novembre 28, 2017, 19:44 »
Stai discutendo di cose che sono come minimo al limite della legalita' e che sono per la piu' parte off topic.

Questo, per esempio, e' illegale secondo la legge italiana:

"""2) Siccome voglio estrarre degli algoritmi da un software e poi traslarli in notazione matematica come faccio a vedere solo la parte di codice Assembly che viene eseguita in quel momento e soprattutto seguire tutti i vari loop che effettua?""""

Secondo, e' insensato. Cioe' l'unica cosa che ci si avvicina e' un debugger. Se intendi eseguire il programma nel debugger, fallo e basta. Non ho idea di quanto sia legale (visto che lo fai con l'intento di ottenere informazioni riservate).

Ma questa cosa degli "algoritmi segreti da copiare" di solito e' il mantra dei niubbi totali che arrivano sul forum (che hanno paura che glielo facciano). Sinceramente mi sorprendo che ti sia venuta in mente sta cosa...

Offline tommyb1992

  • python neanderthalensis
  • ****
  • Post: 299
  • Punti reputazione: 0
    • Mostra profilo
Re:Reverse Engineering chiarimenti ASM|C#|VB.NET
« Risposta #4 il: Dicembre 01, 2017, 17:31 »
Ciao, scusa se rispondo solo ora anche se avevo letto la tua answer già il primo giorno che tu lo avevi scritto, solo che fra impegni e altro, per quanto cerco di organizzare la mia vita non sempre mi riesce rispettare tutti gli impegni.

Secondo, e' insensato. Cioe' l'unica cosa che ci si avvicina e' un debugger. Se intendi eseguire il programma nel debugger, fallo e basta. Non ho idea di quanto sia legale (visto che lo fai con l'intento di ottenere informazioni riservate).

Questo lo immaginavo, però a prima vista mi sembra un'ammazzata nel vero senso della parola, volevo sapere se ci sono tool, impostazioni di tool o tecniche che guidano nel scegliere cosa prendere in considerazione o meno.

Ma questa cosa degli "algoritmi segreti da copiare" di solito e' il mantra dei niubbi totali che arrivano sul forum (che hanno paura che glielo facciano). Sinceramente mi sorprendo che ti sia venuta in mente sta cosa...

Questo mi lusinga, anche perchè ormai nutro una certa simpatia virtuale per te e ricpol che vi apprestate sempre a darmi dei validi consigli o spunti di idee... In linea teorica ho imparato molto sul mondo della programmazione su questo forum, infatti spesso preferisco una risposta vostra piuttosto che di utente X anche se cerco di evitare di postare troppo off topic (e mi riesce decisamente male  :D :D :D)

Pero ti assicuro che sopravvaluti la mia intelligenza hahaha  :D :D :D

Comunque si, ho letto spessisimo le vostre risposte riguardo a questo proposito, quindi conoscevo già in anticipo le vostre posizioni su questo argomento, oltre al fatto che per decompilare un exe di python se non sbaglio ci sono proprio tools come "unpy2exe", però da una parte capisco il punto di vista di tizio Y che compila anche perchè vuole distribuire il suo semplice eseguibile e non obbligare la gente a scaricare python, anche perchè non c'è la cultura nel farlo come per java.

E poi il tuo discorso ha senso e lo comprendo ma ho le mie buone motivazioni, tra cui imho immagino che quando imparo a estrarre qualcosa disassemblando in asm probabilmente improverei incredibilmente le mie conoscenze di assembly/reverse engineering.
« Ultima modifica: Dicembre 01, 2017, 17:35 da tommyb1992 »

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Reverse Engineering chiarimenti ASM|C#|VB.NET
« Risposta #5 il: Dicembre 02, 2017, 02:27 »
Guarda, prima di tutto, io non ti sto dicendo *non farlo*. E' una questione fra la tua curiosita' ed eventuali leggi. Ognuno prenda la posizione che crede. Sinceramente. Quello che ti sto invitando a non fare, e' discuterne qui.

Il problema e' che questo non e' un sito black/gray/white hat. Non e' un sito che a che fare con niente di tutto cio'. Le persone coinvolte non sono preparate e non hanno voglia di avere ripercussioni di nessun tipo. Non che io seriamente creda che ci sia un elevata probabilita' che succeda un casino per quello che scrivi, rimane il punto che non e' un forum legato a quel mondo.

Poi fintanto che si parla di decompilare e compilare python il problema e' tecnico. Io ti dico come funziona. E' anche roba nella documentazione ufficiale.
Pero' formula il problema come un problema *tecnico*. Ovvio che non funziona partire dalla cosa dubbia che vuoi fare.
Ma in questo caso davvero parli di tutt'altro. Python non e' coinvolto in nessuna parte dell'equazione (e se lo e' indirettamente non e' minimamente evidente).