L'unica risposta completamente generale a questa domanda è scrivere lo stesso identico programma da soli ma lasciando fuori la protezione dalla copia. Questo funziona sempre, e tecnicamente risponde alla domanda. Chiameremo questo metodo #1. Io lo chiamo il "metodo che richiede di non essere pigri". È chiaramente inappropriato.
Perciò parliamo del metodo #2, che è solitamente chiamato "cracking". La maggior parte delle volte, avrete bisogno di avere accesso ad una copia già funzionante del software in modo da poter vedere cosa dovrebbe succedere; questo potrebbe significare che dovete comprarlo. Potrebbe essere possibile senza comprarlo prima, ma è molto più difficile.
In primo luogo, è importante che capiate come funzionano effettivamente i programmi per computer. Non intendo sapere come scrivere Java, o Python, o anche C. Questo è sapere come fare un programma. La maggior parte dei programmatori ha una comprensione piuttosto vaga di ciò che accade per eseguire il programma dopo che hanno finito di scriverlo, e questa è l'area in cui devi diventare un esperto.
Eventualmente, tutti i programmi sono codice macchina in esecuzione, e devi imparare il codice macchina. Considerate di imparare il linguaggio Assembler appropriato per la vostra piattaforma (x64 per Windows), almeno abbastanza bene per scrivere alcuni esempi banali e per leggere il codice macchina e sapere cosa sta facendo. Imparate gli interrupt, i registri, le pile di chiamate, i salti condizionali, la disposizione della memoria, l'accesso all'hardware mappato in memoria, e il tracciamento dei binari in esecuzione.
In seguito, avete bisogno della capacità di interrompere, leggere e modificare un programma in esecuzione; un tale strumento è chiamato debugger, a causa del suo uso previsto. Windbg è il principale che Microsoft usa per il debug del suo sistema operativo, ed è gratuito. Al giorno d'oggi, una protezione anticopia più elaborata potrebbe cercare di sconfiggervi rilevando la presenza di un debugger, ma questo lo rende solo più difficile, non impossibile.
In definitiva, il vostro obiettivo è quello di saltare o modificare la parte del software che è progettata per impedirvi di usarlo gratuitamente, lasciando tutti gli altri bit funzionanti. Questo è sorprendentemente difficile; alcuni anni fa, abbiamo sentito un utente sul nostro forum che aveva problemi con il nostro software. Era un bug molto strano. Alla fine venne fuori che lo aveva piratato, ma il pirata aveva fatto un pessimo lavoro e aveva rotto alcune cose importanti. Gli abbiamo suggerito di risolvere il problema, magari acquistando il software? Era un po' sconcertante, perché la nostra protezione anticopia era debole e facile da aggirare, eppure in qualche modo il pirata è riuscito a rovinarla. Bisogna ammirare la pura sfacciataggine di qualcuno che cerca di ottenere supporto tecnico per una versione pirata, però.
Purtroppo per voi, un sacco di software moderno ha abbandonato la protezione locale della copia in favore di mettere parte del programma su un server remoto. A meno che tu non riesca a rubare quel software remoto in qualche modo (difficile/pericoloso/potrebbe richiedere di lasciare la cantina), dovrai capire cosa sta facendo ed emulare quella parte da solo, da zero (vedi metodo #1). Scommettono che ci vorrà un po' di tempo, e questo è il motivo per cui tale software richiede così tanto tempo per essere decifrato. Se provate a fare il reverse engineering della parte online, dovrete cercare Wireshark, uno strumento per monitorare il traffico di rete, e imparare ad usarlo.
Ovviamente, dato tutto il lavoro che avete appena fatto per diventare esperti dell'interno del computer, ora potreste essere impiegabili scrivendo software di basso livello, come driver di dispositivi, scanner di virus, monitor di sicurezza, protezione dalla copia, debugger, ecc. Questi lavori sono di solito ben pagati, il che porta al metodo #3: basta comprare il fottuto' software. Seriamente.