Question

... de telle sorte que la navigation sur le démontage ne sera pas exposer immédiatement le mot de passe (déclarée comme une variable statique). À titre d'exemple, imaginez un programme qui a un fichier zip attaché qu'il doit ouvrir des actifs, mais ne sont pas facilement accessibles aux regards indiscrets.

Je sais qu'il est impossible de cacher complètement ou protégerai que zip mais je suis curieux de savoir quels sont les moyens disponibles pour au moins attendre un fouineur occasionnel.

Merci!

Était-ce utile?

La solution

Non, mais il y a des choses que vous pouvez faire pour le rendre plus difficile.

Magasin le mot de passe une série de chiffres, certains ne calcualtions sur eux pour générer le mot de passe réel, des pièces de magasin du mot de passe dans des ressources telles que les icônes etc.

Autres conseils

Si votre programme est un programme Windows, il suffit d'utiliser « Ce programme ne peut pas être exécuté en mode DOS. » comme mot de passe. Cette chaîne est dans presque tous les exécutables de Windows.

Je suis seulement la moitié blague, car il est probablement presque aussi sûr que XOR-ment le mot de passe avec une clé qui est d'ailleurs dans le programme et il y aura à peu près zéro des maux de tête maintenir.

En bref, non, Tout pirate serait tout simplement mettre un point d'arrêt sur la fonction qui ouvre le fichier zip, et obtenir le mot de passe de la RAM il.

Au lieu du magasin de mot de passe réel XOR crypté version du mot de passe variable statique. Lorsque vous avez besoin de l'utiliser, vous appliquez tout simple décryptage XOR pour récupérer le mot de passe réel.

http://en.wikipedia.org/wiki/XOR_cipher

Une solution serait de XOR le mot de passe statique avec une autre constante ou même une autre chaîne. Cela se répandrait votre mot de passe entre cependant de nombreuses parties doivent être combinées pour le récupérer. A cordes sur le binaire compilé ne montre pas la chaîne pw.

#include <stdio.h>

char pw[8] = {124, 109, 127, 127, 123, 99, 126, 104};

int main(int argc, char** argv) {
  for (int i = 0; i < 8; i++) {
    pw[i] = pw[i] ^ 12;
  }
  printf("%s\n", pw);  // => 'password'
}

Il y a un certain nombre de façons de données d'inspection de protection d'un occasionnel, un adversaire déterminé est une autre affaire (il suffit de demander aux gens de faire DRM).

Vous pourriez XOR le mot de passe avec un autre mot de passe dérivé de certaines données de votre programme, par exemple la position relative d'un champ (dans une struct compactées / classe) par rapport au début de la struct / classe, ou peut-être utiliser un peu " constantes »(données du siècle actuel et millénaire sont tout à fait constant, pour les 89 années à venir :-)), ou la conversion de certains caractères d'un à l'autre codepage, ou peut-être la conversion de certains nombres de flotter ou double (peut-être même quelques-uns simples divisions comme 2/3, 3/5, 5/7 dans le double utilisé comme un mot de passe. Assurez-vous de « forcer » le compilateur de ne pas les optimiser (probablement dérivé du nombre d'autres « mesurables », comme la longueur de certains cordes)). Surtout le premier est probablement le plus facile à cacher: il est assez fréquent de « mesurer » la position relative d'un champ. Aucune de ces méthodes survivra 5 minutes d'un pirate ... Ils ne protègent contre « l'espionnage avec un éditeur hexadécimal ».

Well why store it at all? Why not have a second packed application that your first encrypts based off of an xor algorithm? That way there is no need to store the password at all!

Of course this method is a little more difficult, But I would say you greatly benefit from not only using this method, but learning the necessary things required to make it work.

Show a picture with another code in italics to the user and insert a text box where the user can enter the code that is written in the picture. XOR the password of the ZIP file with the code in the picture. The result can be implemented hardcoded. The program has to XOR the hardcoded code with the input of the user to get the code of the ZIP file. Optionally, you can verify the inputted code using another one-way-code.

obfuscate the password with a perl script. Hackers can still reverse engineer your machine code...but at least your password its not obvious from a hex editor.

obfuscate_password("my_password434");

sub obfuscate_password($) {

  my $string = shift;
  my @c = split(//, $string);
  push(@c, "skip"); # Skip Null Terminator
                    # using memset to clear this byte
  # Add Decoy Characters
  for($i=0; $i < 100; $i++) {
    $ch = rand(255);
    next if ($ch == 0);
    push(@c, chr($ch));
  }                     
  my $count1 = @c;
  print "  int x1, x2, x3, x4, x5;\n";
  print "  char password[$count1];\n";
  print "  memset(password, 0, $count1);\n";
  my $count2 = 0;
  my %dict  = ();
  while(1) {
    my $x = int(rand($count1));
    $y = obfuscate_expr($count1, $x);
    next if (defined($dict{$x}));
    $dict{$x} = 1;
    last if ($count2+1 == $count1);
    if ($c[$x] ne "skip") {
      #print "  $y\n";
      print "  $y password[x4] = (char)" . ord($c[$x]) . ";\n";
    }
    $count2++;
  }
}

sub obfuscate_expr($$) {
    my $count  = shift;
    my $target = shift;
    #return $target;

    while(1) {

       my $a = int(rand($count*2));
       my $b = int(rand($count*2));
       my $c = int(rand($count*2));
       next if (($a == 0) || ($b == 0) || ($c == 0));
       my $y = $a - $b;
       #print "$target: $y : $a - $b\n";
       if ($y == $target) {
          #return "$a - $b + $c";
          return "x1=$a; x2=$b; x3=$c; x4=x1-x2+x3; x5= +=x4;";
       }
    } 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top