Domanda Basi programmazione per hacking

Stato
Discussione chiusa ad ulteriori risposte.

Eoloprox

Utente Emerald
20 Marzo 2016
607
151
51
415
Mi devo buttare sulla programmazzione, mi chedevo quale è la migiore sana base per exploit, malware, pentest, hacking ecc...
Mi hanno detto il C# non il C, o il c++, sono indeciso. Grazie per le risposte in anticipo ciao
 
Ultima modifica da un moderatore:
Puoi fare exploit in qualsiasi linguaggio di programmazione credo, ti consiglio di iniziare dal C, per impararlo leggi questi libri e un altro linguaggio che mi è stato consigliato, per l'hacking, è il golang. Ti può servire anche l'Assembly ma non è un linguaggio di programmazione ed è molto difficile da imparare.
 
Dipende da ciò che vuoi fare. A prescindere da tutto bash, powershell e python serve saperli. Se poi ti orienti su malware development per windows, C# regna sovrano, per ora (e nello specifico, se intraprendi questa strada dovrai dare un'occhiata alle direct syscall, PInvoke e DInvoke)
 
Quindi per malware ecc... il C# e una degna alternativa?? Credevo fosse l'ultima spiaggia! Comunque mi sono buttato proprio li, sto facendo da auto didata sul tubo, poi penso si faranno delle videolezioni, mi hanno sparato 1500 euro per 45 ore azz!
 
Quindi per malware ecc... il C# e una degna alternativa?? Credevo fosse l'ultima spiaggia! Comunque mi sono buttato proprio li, sto facendo da auto didata sul tubo, poi penso si faranno delle videolezioni, mi hanno sparato 1500 euro per 45 ore azz!
Lascia perdere qualsiasi corso online e inizia a studiare dai libri, non li trovi gratis ma di sicuro imparerai molto di più da essi che dai corsi. Ti consiglio di iniziare dal C, tutti abbiamo iniziato da quello, ti insegna come funziona la memoria e ti ritroverai avvantaggiato quando andrai a studiare un altro linguaggio, dato che la sintassi è più o meno uguale alla maggior parte dei linguaggi. Il C# non è obbligatorio, io ti consiglio di fare C, golang e assembly, so che quest'ultimo è molto difficile ma sono sicuro che ti tornerà molto utile, poi ,come ti hanno già detto, studia qualche linguaggio di scripting.
 
dato che la sintassi è più o meno uguale alla maggior parte dei linguaggi.
a massimo la semantica, la sintassi cambia da linguaggio a linguaggio, anche tra C e C++ si trovano cambiamenti, anche di non poco conto, l'unica cosa che è simile in tutti i linguaggi è appunto la semantica e il paradigma di programmazione.


??? Assembly lo usavano negli anni 70 per sviluppare i sistemi unix, poi hanno lasciato quella roba ed hanno inventato C (perché con Assembly dovevi creare dei porting dell'intero sistema in funzione dell HW), quindi a cosa serve Assembly nel 2021??
Se lo vuoi studiare perché hai tempo da buttare allora puoi farlo, ma Assembly non lo usa più nessuno, anche per la programmazione in PLC ormai o usi C o il ladder.
 
  • Mi piace
Reazioni: HellIn
Assembly lo usavano negli anni 70 per sviluppare i sistemi unix, poi hanno lasciato quella roba ed hanno inventato C
Assolutamente no, Assembly è ancora usato tutt'oggi per i kernel e driver e UNIX tutt'oggi usa Assembly, inoltre, può essere molto utile per lavorare a basso livello e per i malware può tornargli utile.

golang deriva da C, quindi si deve passare sempre da quello.
Ok se conosci il C non è che conosci automaticamente golang.
 
a massimo la semantica, la sintassi cambia da linguaggio a linguaggio, anche tra C e C++ si trovano cambiamenti, anche di non poco conto, l'unica cosa che è simile in tutti i linguaggi è appunto la semantica e il paradigma di programmazione.



??? Assembly lo usavano negli anni 70 per sviluppare i sistemi unix, poi hanno lasciato quella roba ed hanno inventato C (perché con Assembly dovevi creare dei porting dell'intero sistema in funzione dell HW), quindi a cosa serve Assembly nel 2021??
Se lo vuoi studiare perché hai tempo da buttare allora puoi farlo, ma Assembly non lo usa più nessuno, anche per la programmazione in PLC ormai o usi C o il ladder.
Devo appoggiare FuckSociety, l'assembly tutt'oggi non è come il C che bene o male puoi evitarlo, l'assembly serve punto e basta soprattutto lavorando con windows e implementazioni win32 non documentate, e lo dico per esperienza non a caso.

Comunque buona fortuna se studierai driver kernel, efi-r ed efi se non userai assembly.
Messaggio unito automaticamente:

Quindi per malware ecc... il C# e una degna alternativa?? Credevo fosse l'ultima spiaggia! Comunque mi sono buttato proprio li, sto facendo da auto didata sul tubo, poi penso si faranno delle videolezioni, mi hanno sparato 1500 euro per 45 ore azz!
Il C# è buono lo consiglio per qualsiasi cosa ma... è relativamente facile analizzare .NET e di conseguenza viene detectato abbastanza facilmente se non sei esperto, anche perchè viene interpretato dal runtime .net e non è nativo.
Linguaggi migliori per i malware: Go, Rust, C++ e assembly se servisse.
Messaggio unito automaticamente:

Lascia perdere qualsiasi corso online e inizia a studiare dai libri, non li trovi gratis ma di sicuro imparerai molto di più da essi che dai corsi. Ti consiglio di iniziare dal C, tutti abbiamo iniziato da quello, ti insegna come funziona la memoria e ti ritroverai avvantaggiato quando andrai a studiare un altro linguaggio, dato che la sintassi è più o meno uguale alla maggior parte dei linguaggi. Il C# non è obbligatorio, io ti consiglio di fare C, golang e assembly, so che quest'ultimo è molto difficile ma sono sicuro che ti tornerà molto utile, poi ,come ti hanno già detto, studia qualche linguaggio di scripting.
Secondo me dovreste smettere con questo taboo del C, è utile solo per mantenere sistemi vecchi scritti precedentemente in C o kernel davvero complessi/lunghi. Il C++ è un'estensione a tutti gli effetti del C infatti qualsiasi codice C viene eseguito tranquillamente su C++, che è più moderno e non ha letteralmente niente che il C non abbia, anzi.
 
Ultima modifica:
se va bè andate a leggere un pò la storia di Unix(tutto ciò che esiste oggi è un derivato di unix, ma non è unix, da IBM a Apple) GNU è un progetto nato anche grazie a C tecnologia molto più avanzata dell'assembly, il kernel Linux è scritto interamente in C(così come molti altri kernel), se poi non conoscete la storia di Unix e di Gnu/Linux è un altro conto, per il resto pensatela come volete.
 
se va bè andate a leggere un pò la storia di Unix(tutto ciò che esiste oggi è un derivato di unix, ma non è unix, da IBM a Apple) GNU è un progetto nato anche grazie a C tecnologia molto più avanzata dell'assembly, il kernel Linux è scritto interamente in C(così come molti altri kernel), se poi non conoscete la storia di Unix e di Gnu/Linux è un altro conto, per il resto pensatela come volete.
Se preferisci fare l'ignorante resta e fai come vuoi, il kernel linux è scritto sia in C che in Assembly e un paio di altri linguaggi, nessuno sta criticando ne C ne ASM, sono linguaggi che al giorno d'oggi se non lavori su architetture specifiche o con driver kernel, efi-r, efi ecc, ti servono a poco e nulla.
Immagine 2021-02-27 203330.png
 
Finito di insultarvi? Altrimenti chiudo anche se non ho i poteri.... :D
Ho letto un pò di ASSEMBLY e il corso su cui mi sto buttando ne sconsiglia l'utilizzo non perche non valga un cazz@, ma perchè il livello è molto basso e lo sapete meglio di me.... Sè il fine era di creare malware ed exploit, prendo come buono il C, ma come prima esperienza ho approfondito lo C#, ed il corso di C++ è davvero un casino, quello che ho imparato nello stesso numero di lezioni in C#, non ho imparato in C++ ed ho avuto piu soddisfazioni... Mi riservo di intraprendere oltre allo C# anche un futuro corso di C e C++. ciao
 
Ultima modifica:
Ti consiglio comunque di partire prima da C essendo gli altri linguaggi tutti dei derivati di quest'ultimo.

ne sconsiglia l'utilizzo non perche non valga un cazz@
Mai detto che non vale un c.azzo, ma se hanno creato C per sostituire l'assembly nella creazione di sistemi UNIX e GNU una ragione ci sarà no?
Altrimenti continuavano ad usarlo, C è molto performante anche in merito alla programmazione di Basso livello e alla gestione della memoria.
Quando negli anni 70 si usava Assembly era un casino, perché se dovevi far girare UNIX su un sistema con Hardware diverso da quello di partenza eri costretto a riscrivere l'intero codice, quindi per ogni azienda che voleva UNIX sui propri Device si doveva creare sempre un porting diverso adatto al nuovo Hardware.
Con C invece questo problema è stato risolto, permettendo di creare codice che potesse girare su tanti tipi di Hardware diversi senza dover
andare a riscriverlo per intero ogni volta.

Ma a quanto pare solo gli ignoranti si vanno a leggere la storia della nascita dei sistemi UNIX e di GNU/Linux(Che è in stretta correlazione con la nascita di internet tra la fine degli anni 60 e l'inizio degli anni 70, quando fù progettato il protocollo TCP/IP, dal Dipartimento della Difesa americano con l'aiuto dei ricercatori dell'ARPANET )
 
Ti dico quella che è la mia esperienza lavorativa e dei miei vari colleghi. Se devi operare a livello malware su windows, C# e C++ sono la strada più diretta e che ti offre una marea di possibilità, specie se parliamo di integrazione con vari C2, tipo Cobalt Strike e Covenant. C'è un motivo se i team di SpecterOps ed MDSec (non proprio gli ultimi arrivati) hanno spostato tutte le loro tradecraft su C#.

Qualcuno diceva che .NET è facile da analizzare - vero di base, vero anche però che qualsiasi cosa fatta a ca**o di cane è facile da analizzare.
 
ma perchè il livello è molto basso
Se il linguaggio è di basso livello, non vuol dire che fa schifo ma che lavora a stretto contatto con l'hardware.

il kernel Linux è scritto interamente in C
Da quel che so, il kernel Linux è scritto in C, Assembly, Python e Perl.

Ti consiglio comunque di partire prima da C essendo gli altri linguaggi tutti dei derivati di quest'ultimo.
L'Assembly non è un linguaggio derivato dal C.

Ho fatto una piccola ricerca su Google e qualche libro e ti riassumerò le principali caratteristiche dei linguaggi:

Ad oggi si utilizzano moltissimi linguaggi che possiamo distinguere in 3 categorie:

1 Linguaggio macchina

2 Linguaggi assemblatori o di basso livello

3 Linguaggi di alto livello

Linguaggio macchina:
Qualunque computer è in grado di eseguire soltanto il proprio linguaggio macchina. I linguaggi macchina consitono di stringhe di numeri espressi dai caratteri 1 e 0, questi linguaggi sono molto scomodi per gli esseri umani

Linguaggi assemblatori:
Programmare in linguaggio macchina è molto scomodo per un programmatore, per questo sono stati creati i linguaggi assemblatori, in parole semplici, i linguaggi assemblatori sono un abbreviazione dei linguaggi macchina, per eseguire questo tipo di linguaggio si usano dei veri e propri 'traduttori', chiamati assemblatori, che traducono il linguaggio assemblatore in linguaggio macchina.

Linguaggi di alto livello:
Per aumentare la velocità del processo di programmazione sono stati sviluppati linguaggi ad alto livello, in cui si possono scrivere singole istruzioni per eseguire compiti consistenti. I programmi traduttori chiamati compilatori convertono i programmi in linguaggio ad alto livello nel linguaggio macchina, la particolarità dei linguaggi di alto livello è quella di avere una semplice sintassi in cui si usano parole della lingua inglese.

Assembly:
L'assembly è un linguaggio di basso livello che ha lo scopo di consentire al programmatore di ignorare il formato binario della macchina, Il programma scritto in assembly non può essere eseguito direttamente dal processore; esso deve essere tradotto nel linguaggio macchina (binario) corrispondente, usando un programma compilatore detto assembler, l'utilizzo dell'Assembly, tutt'oggi, è molto di nicchia ma può essere utile per kernel, driver, malware e tutte quelle volte che abbiamo la necessità di lavorare a stretto contatto con l'hardware.

C:
Il C è un linguaggio di programmazione procedurale, di alto livello, le sue principali caratteristiche sono la versatilità dei pc sul quale può essere compilato, può maneggiare attività di basso livello e l'implementazione dei puntatori, anche esso viene usato per kernel, driver e microcontrollori.

C#:
Il C# è il linguaggio di programmazione per eccellenza del framework .NET, è stato sviluppato da microsoft ed è un linguaggio di programmazione ad oggetti (OOP), anche esso è di alto livello ed i suoi principali usi sono il software development ed il game development, con il software unity.

Python:
Il Python è un linguaggio di alto livello (il più alto di tutti), di scripting che supporta anche la programmazione ad oggetti, ha una sintassi molto semplice ma diversa dagli altri linguaggi e viene interpretato, infatti, per eseguire codice Python abbiamo bisogno di un interprete che interpreti le istruzioni che gli diamo, si impara in poco risperro agli altri linguaggi ma ha dei problemi che sono: la dichiarazione delle variabili, la lentezza dell'esecuzione del codice e la sintassi diversa rispetto agli altri linguaggi, i suoi principali usi sono il machine learning e l'intelligenza artificiale.

Spero di avervi chiarito le idee :p
 
Ti consiglio comunque di partire prima da C essendo gli altri linguaggi tutti dei derivati di quest'ultimo.


Mai detto che non vale un c.azzo, ma se hanno creato C per sostituire l'assembly nella creazione di sistemi UNIX e GNU una ragione ci sarà no?
Altrimenti continuavano ad usarlo, C è molto performante anche in merito alla programmazione di Basso livello e alla gestione della memoria.
Quando negli anni 70 si usava Assembly era un casino, perché se dovevi far girare UNIX su un sistema con Hardware diverso da quello di partenza eri costretto a riscrivere l'intero codice, quindi per ogni azienda che voleva UNIX sui propri Device si doveva creare sempre un porting diverso adatto al nuovo Hardware.
Con C invece questo problema è stato risolto, permettendo di creare codice che potesse girare su tanti tipi di Hardware diversi senza dover
andare a riscriverlo per intero ogni volta.

Ma a quanto pare solo gli ignoranti si vanno a leggere la storia della nascita dei sistemi UNIX e di GNU/Linux(Che è in stretta correlazione con la nascita di internet tra la fine degli anni 60 e l'inizio degli anni 70, quando fù progettato il protocollo TCP/IP, dal Dipartimento della Difesa americano con l'aiuto dei ricercatori dell'ARPANET )
Il problema è che il C non sostituisce completamente l'assembly, infatti come ho già spiegato è un must nella programmazione driver.
Messaggio unito automaticamente:

Ti dico quella che è la mia esperienza lavorativa e dei miei vari colleghi. Se devi operare a livello malware su windows, C# e C++ sono la strada più diretta e che ti offre una marea di possibilità, specie se parliamo di integrazione con vari C2, tipo Cobalt Strike e Covenant. C'è un motivo se i team di SpecterOps ed MDSec (non proprio gli ultimi arrivati) hanno spostato tutte le loro tradecraft su C#.

Qualcuno diceva che .NET è facile da analizzare - vero di base, vero anche però che qualsiasi cosa fatta a ca**o di cane è facile da analizzare.
Indipendentemente di quello ha altri problemi a partire che viene interpretato dal runtime .NET e non nativamente come il C++.
 
Finito di insultarvi? Altrimenti chiudo anche se non ho i poteri.... :D
Ho letto un pò di ASSEMBLY e il corso su cui mi sto buttando ne sconsiglia l'utilizzo non perche non valga un cazz@, ma perchè il livello è molto basso e lo sapete meglio di me.... Sè il fine era di creare malware ed exploit, prendo come buono il C, ma come prima esperienza ho approfondito lo C#, ed il corso di C++ è davvero un casino, quello che ho imparato nello stesso numero di lezioni in C#, non ho imparato in C++ ed ho avuto piu soddisfazioni... Mi riservo di intraprendere oltre allo C# anche un futuro corso di C e C++. ciao
Solo perchè il C# è relativamente semplice rispetto a capire cose in C++ non significa che il C++ non sia utile o buono comunque, prima o poi anche se impari C# dovrai studiarti almeno C o C++ base.
 
Indipendentemente di quello ha altri problemi a partire che viene interpretato dal runtime .NET e non nativamente come il C++.
Credo di essermi perso qualche passaggio allora, non sto capendo ciò che vuoi dire. .NET di base è interpretato dal CLR, ciò non toglie che ci sia in ogni caso l'opzione di farlo eseguire nativamente.
 
Partendo col dire , di prendere con le pinze quanto detto essendo un mio parere e non sono un coder
Hai detto quale e' il migliore ...ma e' un soggetto di cui arduo usarlo in questo caso/modo.
quelli citati vanno bene tutti c python ecc,per quello che posso consigliarti e' se solo basato in quanto richiesto da te Python essendo molto completo comunque nella anche nella sua semplicita' di scrittura, piu' rapido del C , ma non posso dire piu' completo. Pero' con python puoi sviluppare di tutto
Diciamo se vuoi immergerti nel coding inizierei da C. se invece puoi anche impararne solo 1 per determinati ^progetti^ andrei di python. e questo perche oltre ad automazione di sistema sviluppi appunto web app tool script per hacking ecc..
correggettemi se sbaglio modo di pensarlo
 
Se il linguaggio è di basso livello, non vuol dire che fa schifo ma che lavora a stretto contatto con l'hardware.


Da quel che so, il kernel Linux è scritto in C, Assembly, Python e Perl.


L'Assembly non è un linguaggio derivato dal C.

Ho fatto una piccola ricerca su Google e qualche libro e ti riassumerò le principali caratteristiche dei linguaggi:

Ad oggi si utilizzano moltissimi linguaggi che possiamo distinguere in 3 categorie:

1 Linguaggio macchina

2 Linguaggi assemblatori o di basso livello

3 Linguaggi di alto livello

Linguaggio macchina:
Qualunque computer è in grado di eseguire soltanto il proprio linguaggio macchina. I linguaggi macchina consitono di stringhe di numeri espressi dai caratteri 1 e 0, questi linguaggi sono molto scomodi per gli esseri umani

Linguaggi assemblatori:
Programmare in linguaggio macchina è molto scomodo per un programmatore, per questo sono stati creati i linguaggi assemblatori, in parole semplici, i linguaggi assemblatori sono un abbreviazione dei linguaggi macchina, per eseguire questo tipo di linguaggio si usano dei veri e propri 'traduttori', chiamati assemblatori, che traducono il linguaggio assemblatore in linguaggio macchina.

Linguaggi di alto livello:
Per aumentare la velocità del processo di programmazione sono stati sviluppati linguaggi ad alto livello, in cui si possono scrivere singole istruzioni per eseguire compiti consistenti. I programmi traduttori chiamati compilatori convertono i programmi in linguaggio ad alto livello nel linguaggio macchina, la particolarità dei linguaggi di alto livello è quella di avere una semplice sintassi in cui si usano parole della lingua inglese.

Assembly:
L'assembly è un linguaggio di basso livello che ha lo scopo di consentire al programmatore di ignorare il formato binario della macchina, Il programma scritto in assembly non può essere eseguito direttamente dal processore; esso deve essere tradotto nel linguaggio macchina (binario) corrispondente, usando un programma compilatore detto assembler, l'utilizzo dell'Assembly, tutt'oggi, è molto di nicchia ma può essere utile per kernel, driver, malware e tutte quelle volte che abbiamo la necessità di lavorare a stretto contatto con l'hardware.

C:
Il C è un linguaggio di programmazione procedurale, di alto livello, le sue principali caratteristiche sono la versatilità dei pc sul quale può essere compilato, può maneggiare attività di basso livello e l'implementazione dei puntatori, anche esso viene usato per kernel, driver e microcontrollori.

C#:
Il C# è il linguaggio di programmazione per eccellenza del framework .NET, è stato sviluppato da microsoft ed è un linguaggio di programmazione ad oggetti (OOP), anche esso è di alto livello ed i suoi principali usi sono il software development ed il game development, con il software unity.

Python:
Il Python è un linguaggio di alto livello (il più alto di tutti), di scripting che supporta anche la programmazione ad oggetti, ha una sintassi molto semplice ma diversa dagli altri linguaggi e viene interpretato, infatti, per eseguire codice Python abbiamo bisogno di un interprete che interpreti le istruzioni che gli diamo, si impara in poco risperro agli altri linguaggi ma ha dei problemi che sono: la dichiarazione delle variabili, la lentezza dell'esecuzione del codice e la sintassi diversa rispetto agli altri linguaggi, i suoi principali usi sono il machine learning e l'intelligenza artificiale.

Spero di avervi chiarito le idee :p
Tanto per chiarire

C non è ne high-level ne low-level proprio come il C++, nessuno dei due ha le caratteristiche complete di un linguaggio lowlevel (asm) ma nemmeno tanto highlevel, quindi solitamente vengono chiamati midlevel, C# non è vero che gli utilizzi principali sono software e game dev, bensì microservizi e software development, il game dev oggi come oggi è sempre poco richiesto.

Python non c'entra una sega in tutto questo è weakly-typed etc etc fa cagare lo sappiamo, non serve a niente se non per AI e Ricerca ma non c'è un linguaggio "Più alto di tutti" ogni linguaggio ha alti e bassi.
Messaggio unito automaticamente:

Partendo col dire , di prendere con le pinze quanto detto essendo un mio parere e non sono un coder
Hai detto quale e' il migliore ...ma e' un soggetto di cui arduo usarlo in questo caso/modo.
quelli citati vanno bene tutti c python ecc,per quello che posso consigliarti e' se solo basato in quanto richiesto da te Python essendo molto completo comunque nella anche nella sua semplicita' di scrittura, piu' rapido del C , ma non posso dire piu' completo. Pero' con python puoi sviluppare di tutto
Diciamo se vuoi immergerti nel coding inizierei da C. se invece puoi anche impararne solo 1 per determinati ^progetti^ andrei di python. e questo perche oltre ad automazione di sistema sviluppi appunto web app tool script per hacking ecc..
correggettemi se sbaglio modo di pensarlo
python va bene per programmini stupidi e gente che non ha le mani, altro che a quello per AI e scienze come ho già detto, python non dovrebbe essere utilizzato al di fuori di quei due campi, soprattutto quando si passa a livelli enterprise.
Messaggio unito automaticamente:

Credo di essermi perso qualche passaggio allora, non sto capendo ciò che vuoi dire. .NET di base è interpretato dal CLR, ciò non toglie che ci sia in ogni caso l'opzione di farlo eseguire nativamente.
Da quel che so .NET Native funziona una merd*, .NET Core Self-Packed fa cagare devi perdere 2 giorni a configurare le classi e dipendenze per non farti includere 90 MB di librerie senza motivo.
(UWP non credo serva nominarlo è scontato non abbia senso)
 
Stato
Discussione chiusa ad ulteriori risposte.