Pergunta

Eu sou um programador. Tenho cerca de 5 anos de experiência de programação em diferentes tipos de línguas. Eu estava sobre a minha velocidade de código, sobre como otimizar a memória que usa o meu código, e sobre o bom estilo de codificação e assim por diante. Mas nunca pensou em como garantir o meu código é. Então eu ter desmontado o meu código para ver o que pode fazer um hacker. Seria fácil de quebrar meu código? E eu vi que ele é! É muito fácil, porque eu estava armazenando

  1. número de série como uma string
  2. códigos de criptografia descriptografia bem

Então, se alguém tem o conhecimento mínimo de assembler ele / ela pode apenas simples dissembler e depois de 10-20 minutos de depuração meu código está rachado !!! Mesmo que poderia ser feito abrindo o exe com bloco de notas eu acho! : -)

Então, o que eu estou pedindo é o seguinte:

  1. Onde devo guardar esse tipo de de informações seguras?
  2. Quais são as estratégias comuns de entrega de um código de segurança?
Foi útil?

Solução

A primeira coisa que você deve perceber é que você nunca vai impedir que um determinado inversor de rachar quaisquer esquemas de proteção, porque qualquer coisa que o código pode fazer, o reversor acabará por descobrir como replicá-la. A única maneira você pode conseguir qualquer tipo de proteção confiável é ter o programa enviado ser nada mais do que um cliente mudo e tem o peso do software em algum servidor o reversor não tem acesso.

Com isso fora do caminho, você pode certamente fazê-lo mais difícil para uma seria reverser para quebrar suas proteções. Obfuscation é o tipo de primeiro passo para alcançar este objectivo. Eu não tenho nenhuma experiência com obfuscators mas eu tenho certeza que você pode encontrar algumas sugestões para alguns no SO. Além disso, se você estiver usando uma linguagem de baixo nível como C / C ++, simplesmente compilar o código com otimização plena e tirando todos os símbolos de depuração você recebe uma quantidade razoável de ofuscação.

Eu li este artigo há alguns anos, mas eu ainda acho TI de técnicas de realizar-se hoje. É um dos desenvolvedores de um videogame chamado Spyro falando sobre o conjunto de técnicas que eles usaram para evitar a pirataria. Eles afirmam não foi até 3 meses após o lançamento que uma versão rachada tornou-se disponível, que é bastante impressionante.

Outras dicas

Se você está preocupado com a pirataria, então há muitos caminhos que você pode tomar. Tornando o código de segurança mais apertado (ofuscação, códigos de licença, a ligação do software para um PC particular, hardware / proteção dongle, etc) é um, mas é importante ter em mente que todas pedaço de software pode ser quebrada se alguém suficientemente talentoso pode ser incomodado.

Outra abordagem é a de considerar o modelo de preços para o seu software. Se você cobrar R $ 1000 de uma cópia, então não é um grande incentivo para alguém para ter um ir para quebrá-lo. Se você só cobrar US $ 5, então por que alguém deveria se preocupar para quebrá-la?

Então, o que é necessário é um equilíbrio. Mesmo a proteção mais básica vai parar de pessoas comuns que fazem cópias casuais. Além disso, técnicas simples (códigos de ofuscação e licenças) e uma estratégia de preços sensata irá realizar mais would-be biscoitos na baía, tornando-a não vale o incômodo de rachaduras. Depois disso, você começar a entrar cada vez mais sofisticadas técnicas (dongles / CDs que precisam estar presentes para executar o software, apenas ser capaz de executar o software após Logon em um sistema de licenciamento on-line) que ter um monte de esforço / custo para implementar e aumentar significativamente o risco de clientes genuínos irritantes (lembro como irritado todo mundo tem quando eles compraram metade vida, mas que não iria deixá-los jogar o jogo?) - a menos que você tem um produto mainstream popular (ou seja, um enorme fluxo de receitas para proteger), provavelmente não há muito sentido vai muito esforço.

Faça-o aplicativo web.

É geralmente não será bem protegida a menos que haja um serviço externo fazendo a verificação de que você está no controle de - e que o serviço ainda pode ser falsificado por aqueles que realmente quer "crack"-lo. Em vez disso, confiar no cliente e fornecer apenas proteção mínima de direitos de autor. Estou certo de que havia um artigo ou podcast sobre isso por Joel Spolsky em algum lugar ... aqui está outra pergunta relacionada SO .

Eu não tenho idéia se ele vai ajudar, mas o Windows fornece (desde 2000) um mecanismo para recuperar e armazenar informações criptografadas e você também pode sal este armazenamento em uma base por aplicativo, se necessário: Protecção de Dados API ( DPAPI )

Esta é em um nível de usuário da máquina ou mas armazenar números de série e talvez algumas chaves de usá-lo pode ser melhor do que tê-los escondido no aplicativo?

Que tipo de seguro que você está falando? Segura a partir da perspectiva de que você está guardando seus dados de usuários bem? Se assim for, estudar alguns criptografia real e utilizar existentes bibliotecas para criptografar seus dados. A API Win32 é muito bom para isso.

Mas se você está falando sobre a parada de um cracker de roubar sua aplicação? Existem muitos métodos, mas simplesmente desistir. Eles biscoitos desacelerar, eles não detê-los.

Primeiro você tem que definir o que o código deve ser contra seguro, sendo seguro, como tal, não tem sentido.

Você parece estar preocupado com a engenharia reversa e usuários gerando códigos de licença sem pagar, embora você não dizê-lo. Para tornar isso mais difícil você pode ofuscar seu código e as principais informações de várias maneiras. Há área também técnicas para tornar o uso de depuradores com mais força, para impedir a engenharia reversa de percorrendo o código e ver as informações de forma clara. Mas isso só faz engenharia reversa um pouco mais difícil, não impossível

Outra ameaça à segurança comum é a execução de código indesejado, por exemplo através de estouros de buffer.

Uma técnica simples para fazer isso é a xor sobre todo o seu código e xor volta quando você precisar dele ... mas isso tem um conhecimento inato de reunião ... Eu não tenho certeza, mas você pode tentar este:

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

Para prevenir contra hackers vendo o seu código, você deve usar um obfuscator. Um obfuscator irá utilizar várias técnicas que tornam extremamente difícil de fazer sentido do código ofuscado. Algumas técnicas utilizadas são criptografia corda, símbolo renomeação, controle de ofuscamento fluxo, etc. Confira Crypto Obfuscator que, adicionalmente, também tem método externa chamada esconderijo, anti-reflector, Anti-depuração, etc

O objetivo é ereto tantos obstáculos quanto possível no caminho de um suposto hacker.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top