Neste artigo, vamos nos apresentar como um desenvolvedor de software licenciado e considerar maneiras de proteger nosso programa de ser hackeado por piratas.
Introdução
Consideraremos métodos de proteção de software escrito em uma linguagem compilada contra engenharia reversa, pirataria e introdução de malware de terceiros. As informações fornecidas são relevantes porque um dos objetivos de qualquer projeto proprietário é licenciar e controlar a distribuição deste software. Quase todos os programas que requerem uma licença estão sujeitos a tentativas de hackers e muitos deles têm contrapartes pirateadas neste momento. A seguir, para simplificar, chamaremos o programa cracked - cracked, e o processo de cracking - crack.
Neste artigo, vamos nos apresentar como um desenvolvedor de software licenciado em C ++ e analisar quais métodos de proteção devem ser usados para complicar o processo de cracking de nosso programa. Deve ser entendido que qualquer programa pode acabar sendo hackeado, e não há proteção absoluta, o objetivo é dificultar a engenharia reversa e o tempo necessário para hackear o programa é maior do que o tempo entre as atualizações do nosso software fictício.
Informação geral
A pirataria de software é um grande problema para os desenvolvedores. Para proteger o software da distribuição ilegal, uma licença não é suficiente, é necessário proteger o programa da engenharia reversa. Existem centenas de maneiras de proteger um programa, mas todas elas também têm sua própria solução alternativa. Suponha que queiramos escrever um programa proprietário em C ++ compilado para o sistema operacional Windows, licenciá-lo-emos e venderemos cópias. Vamos considerar como devemos agir para que a única maneira de obter nosso software seja comprando sua licença do desenvolvedor.
++ , . : . , . . , , , .
, , , , . , , , , , . (. reverse engineering). ++ , – . , , - , . .
. , :·
()
, (. . , ). – , .
, , , .
, . – . , , . .
, . , , , .
. . , - .
, , . DR7 – debug control register, , . , , DR0 – DR3. , .
– windows, . , DbgUiRemoteBreakin(), , , . , - . , . .
– , , . , , - . , , , , .
– . windows API , , . , :
IsDebuggerPresent() –
CheckRemoteDebuggerPresent() –
NtQueryInformationProcess() –
RtlQueryProcessHeapInformation() –
RtlQueryProcessDebugInformation() –
NtQuerySystemInformation() –
.
. - -, , . . . — , , , . , , .
. . – . , , , , . . , - . , . .
, .
. , , . . VMProtect Themida. : . . , . , – , .
Neste artigo, vimos como proteger o software de piratas. O uso de todos esses métodos de proteção aumentou muito o tempo e os recursos necessários para quebrar nosso programa. Não existe um método de proteção absoluto, qualquer proteção pode ser contornada. Nesse caso, o principal objetivo de nossa proteção é garantir que leve mais tempo para quebrar o programa do que para lançar uma atualização. Nesse caso, o programa pode ser considerado bem protegido.