Protegendo software de engenharia reversa

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.












All Articles