IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Trouver une fonction "simple" (reverse engineering)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut Trouver une fonction "simple" (reverse engineering)
    Salut,

    Pour décrypter un code (j'en ai déjà décrypté une partie), il me reste ceci:
    (f est une fonction de h^6 vers h^4, où h est l'ensemble des caractères hexa)
    f(x) = y :

    f(b71184) = 32d5
    f(a920b8) = 785d
    f(35496e) = 5fc4
    f(1cfcbd) = 3b30
    ...

    Avez-vous une méthode pour trouver une fonction simple (j'ai essayé en force brute des XOR (y(1) = x(1) XOR x(2)... etc... Mais pas de résultat).
    Je ne vois vraiment pas quelle fonction "simple" a pu être utilisée...

    Merci d'avance...

  2. #2
    Membre habitué Avatar de larnicebafteur
    Inscrit en
    Mai 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 133
    Points : 131
    Points
    131
    Par défaut
    Que veux dire "simple" pour une fonction ?

    Une fonction avec uniquement des opérateurs logique ? Une fonction numérique linéaire ou autre ?

    La fonction est-elle forcement bijective ?

    Je crois qu'il fait déjà avoir une petite idée de la "tete" de la fonction pour pouvoir la trouver.

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par larnicebafteur
    Que veux dire "simple" pour une fonction ?

    Une fonction avec uniquement des opérateurs logique ? Une fonction numérique linéaire ou autre ?

    La fonction est-elle forcement bijective ?

    Je crois qu'il fait déjà avoir une petite idée de la "tete" de la fonction pour pouvoir la trouver.
    Je dirais une fonction avec uniquement des opérateurs logiques (même des rotations gauche-droite, on sait jamais).
    Ah oui, je n'ai pas précisé, la fonction est surjective, mais non injective. Elle n'a pas de raison d'être linéaire...

  4. #4
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Recherche les algo de minimisation booleennes.

  5. #5
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    f(81bed1) = 2c24
    f(3ac294) = 5a4f
    f(9d6bc3) = 7bf4
    f(624110) = 3254
    Dispose t'on de beaucoup de données de ce type ?

  6. #6
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    est-on certain que f soit déterministe ?

  7. #7
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Graffito
    Bonjour,


    Dispose t'on de beaucoup de données de ce type ?
    oui... énormément...

    Par contre, j'ai dit que la fonction était non injective... Celle-là on n'en sait rien...


    Sinon, oui, la fonction est déterministe

  8. #8
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Avec beaucoup de données, on peut déjà voir pour tous les bits de la chaine 6, si il existe un bit correspondant dans la chaine4.
    Par exemple, si quand le bit 2 de c6 est à 1, le bit 18 de C4 a toujours la même valeur.

    Si c'est pas le cas, f n'est pas aussi simple (exemple : combinaison de 3 bits -> 2bits).

  9. #9
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par Graffito
    Bonjour,

    Avec beaucoup de données, on peut déjà voir pour tous les bits de la chaine 6, si il existe un bit correspondant dans la chaine4.
    Par exemple, si quand le bit 2 de c6 est à 1, le bit 18 de C4 a toujours la même valeur.

    Si c'est pas le cas, f n'est pas aussi simple (exemple : combinaison de 3 bits -> 2bits).
    En voici quelques unes (tout en hexa, même si ya pas le 0x devant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    b71184 -> 32d5
    a920b8 -> 785d
    35496e -> 5fc4
    1cfcbd -> 3b30
    472a03 -> 87ba
    cef35f -> 4423
    babc71 -> 930b
    25141a -> bb6a
    fefa78 -> 7df3
    7122a5 -> 0dd2
    7733ae -> 47be
    41b03e -> ce12
    e97ba4 -> df72
    2d8f2c -> 4316
    f13590 -> 8a4f
    c26ff9 -> db59
    442f90 -> e8aa
    Je ne vois vraiment pas...

  10. #10
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Je pensais à un programme pour tester la correspondance entre chaque bit de C6 et ceux de c4 : soit construre un tableau de (6x8)x2x(4x8) de "données" - le "x2" correspond à 0 ou 1 dans le bit de la chaine C6.

    Les "données" indiqueront le nombre de 0 et de 1 trouvés dans C4 pour l'ensemble des correspondances. Si on a toujours des 1 ou toujours des zéros et que le nombre d'occurence est significatif, alors Bingo.... pour une correspondance 1 bit C4 -> 1 bit C6, sinon c'est que c'est plus complexe.

  11. #11
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Une idée, il serait probable (mais c'est pas sûr) que chaque fonction puisse se simplifier comme ceci :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    b71 -> 3
    b71 -> 2
    b78 -> d
    b74 -> 5
    À mon avis, les 4 derniers chiffres du membre de droite correspondent respectivement aux 4 du membre de droite...

    Mais je ne trouve quand même pas de relation

    Donc par exemple, il faudrait trouver cette relation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    b71 -> 3
    b71 -> 2
    b78 -> d
    b74 -> 5
    a92 -> 7
    a90 -> 8
    a9b -> 5
    a98 -> d

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    b71 -> 3
    b71 -> 2
    Ceci n'est ni surjectif ni injectif : ce n'est pas une fonction!

    Si votre hypothèse est vraie, il faut adjointre un info supplémentatire comme le rang du chiffre testé ( ou autre chose )
    alors
    (b71,3) -> 3
    (b71,4) -> 2

  13. #13
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par j.p.mignot
    Ceci n'est ni surjectif ni injectif : ce n'est pas une fonction!
    Une fonction peut être ni injective, ni surjective...

    Cependant, je suis d'accord avec toi, ceci n'est pas une fonction...

    Citation Envoyé par j.p.mignot
    Si votre hypothèse est vraie, il faut adjointre un info supplémentatire comme le rang du chiffre testé ( ou autre chose )
    alors
    (b71,3) -> 3
    (b71,4) -> 2
    Bon ça ne doit pas être ça alors... mon hypothèse doit être fausse...

    Bon faut trouver autre chose

  14. #14
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    je ne connais pas de méthode directe. Mais à mon avis, tu devrais commencer par déterminer la partition f-1 de h^6: pour tout y de h^4, regarde les y de h^6 vérifiant f(x)=y. Peut-être ont-ils une forme spécifique qui va te permettre de comprendre f...

    Basiquement, tu peux essayer de chercher des propriétés de liaisons: que vaut f(x1+x2), f(x1x2),f(alpha.x),...

    Ton problème est de trouver ta fct f : {0,1}^24 --> {0,1}^16. Tu peux essayer de regarder bit à bit...

    Bref, pas facile, ce n'est pas un problème simple en approche directe.

    Personnellement, je partirai plus sur un algo génétique: si tu penses que ta fct f peut s'exprimer à partir d'une combinaison de fct de bases (or,and,ajout d'une constante,...), tu peux essayer la programmation génétique, cela marche aussi assez bien...

  15. #15
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Si tu peux forcer la valeur du paramètre de la fonction avec des valeurs particulières (genre 0x000000, 0xFFFFFF, 0x000001, 0x000100, ...) et voir ce que cela donne, ça peut être interessant.

    Sinon, affiche les nombres en binaires, tu y veras peut-être plus clair.

    Enfin, regarde le code assembleur.

  16. #16
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Bit à bit j'ai essayé, mais il n'y a pas de relation flagrante...

    Sinon, non je ne peux pas obtenir des valeurs telles que 0x000000...
    En fait je peux récupérer un couple (x,y) tel que f(x) = y, mais c'est "au hasard"...

  17. #17
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    T'es sur que ce n'est pas une fonction mathématique (genre cos(), ou sin(), ou dans ce genre) ?
    Tu as dit que tu peux avoir beaucoup de valeurs, tu peux les poster toutes (voire en fichier attaché...), et dedans, rien de remarquable (le hasard peut faire les choses bien ) ?

    À propos de l'asm, tu n'as pas le code (compilé) ?

  18. #18
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par ®om
    Bit à bit j'ai essayé, mais il n'y a pas de relation flagrante...

    Sinon, non je ne peux pas obtenir des valeurs telles que 0x000000...
    En fait je peux récupérer un couple (x,y) tel que f(x) = y, mais c'est "au hasard"...
    T'as classé par paquets de x ayant tous un même y?

  19. #19
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    @Nemerle
    Non, je n'ai aucun exemple ou deux y sont identiques (c'est aléatoire le couple x,y que j'obtiens).

    @D[r]eadLock
    Je ne pense pas que ça soit une telle fonction (cos et sin sont de R dans R, et là c'est de Z dans Z).

    Je n'ai pas l'ASM, en fait c'est sur un site, un script php dont les images affichées ne dépendent que d'une clé, contenue dans l'url de l'image...

  20. #20
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Je ne sais pas si tu as tenté cela mais ca peut être une idée.
    Un exemple du type de chiffrement que cela pourrait être:
    b71184 -> 32d5
    (b7 + un decalage modulo de 0xFF) xor 11 = 32 => decalage = 6b
    (b7 + un decalage modulo de 0xFF) xor 84 = d5 => decalage = 99

    Faire ceci avec tes autres nombres en h^6 et voir s'il y a un lien dans les décalages avec la valeur de l'octet de poids fort.

    Mais tenter aussi en prennant l'octet du milieu ou de début comme masque suivi d'un décalage:
    b71184 -> 32d5
    (11 + un decalage modulo de 0xFF) xor b7 = 32 => decalage = ?
    (11 + un decalage modulo de 0xFF) xor 84 = d5 => decalage = ?

    Voir même tenter cela:

    (b7 + un decalage modulo de 0xFF) xor 84 = 32 => decalage = ?
    (b7 + un decalage modulo de 0xFF) xor 11 = d5 => decalage = ?

    Enfin voilà, ca peut être des pisteset j'esseairais de trouver un lien mais c'est pas gagné...

    Bon courage

Discussions similaires

  1. Résultat bizarre d'une fonction numérique simple
    Par feynman dans le forum Fortran
    Réponses: 9
    Dernier message: 19/11/2007, 22h07
  2. Trouver une fonctions dans des DLL
    Par Mercenary Developer dans le forum Langage
    Réponses: 2
    Dernier message: 08/09/2005, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo