CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ - Auto modifier un programme

le-linuxien
le-linuxien
Niveau 3
25 novembre 2014 à 23:58:19

:salut:

J'ai besoin de faire un système de sauvegarde pour mon programme, et je veux pas passer par des fichiers texte pour faire mon système de sauvegarde.

Je veux directement modifier le code source du programme, depuis le programme.

Par exemple:
une calculatrice qui calcule la somme de deux entiers,et quand on exécute la calculatrice, elle garde l'expression précédemment calculé dans une variable.

J'exécute la calculatrice, je calcule 1+1, je ferme la calculatrice, je la re exécute, et dans l'historique des expressions je veux voir mon dernier calcule, cet à dire: 1+1

:hap:

Sporophore
Sporophore
Niveau 5
26 novembre 2014 à 00:57:55

Tu ne veux pas modifier le code source du programme depuis le programme en lui-même ; ça c'est de la réflexivité, ou de la métaprogrammation pour être plus général, ce n'est pas ce que tu veux. Ce que tu voudrais c'est sauvegarder l'état-même du processus pour ensuite le restaurer à la prochaine exécution du programme, une sorte d'hibernation en quelque sorte, c'est du checkpointing. C'est faisable, CryoPID le proposait mais il a été abandonné à cause des nouvelles sécus du kernel.

La sérialisation est la solution la plus adaptée à ce type de problème et est beaucoup moins coûteuse en ressources.

123_bou
123_bou
Niveau 10
26 novembre 2014 à 02:02:38

J'ai besoin de faire un système de sauvegarde pour mon programme, et je veux pas passer par des fichiers texte pour faire mon système de sauvegarde.

:d) Je comprend pas pourquoi tu ne veux pas utiliser des fichiers textes ou des fichiers binaires... Une contrainte ?

godrik
godrik
Niveau 30
26 novembre 2014 à 13:45:37

le plus simple est certainement de faire un systeme de plugin et d'ecrire et conpiler du code que tu charges par plugin a la volee.

le-linuxien
le-linuxien
Niveau 3
26 novembre 2014 à 17:14:31

123_bou :d) Et bien comme ça, je peux apprendre de nouvelle technique :hap:

godrik :d) j'ai pas compris :hap:

le-linuxien
le-linuxien
Niveau 3
26 novembre 2014 à 17:15:10

je me renseigne sur la serialisation

Mysqli
Mysqli
Niveau 8
26 novembre 2014 à 17:22:25

Ça pue le malware tout ça, et tous ces smileys Hap n'y sont pas pour rien.

le-linuxien
le-linuxien
Niveau 3
26 novembre 2014 à 18:19:49

J'ai besoin d'éclaircir la définition de sérialisation.
La sérialisation, c'est le stockage de donnée sous forme d'information plus petite, en gros c'est ça ? :hap:

Seulement si je sérialise les différentes données de mon programme à sauvegarder dans un fichier, l'utilisateur du programme pourra facilement bidouiller le fichier contenant les données sérialisé et pourra les modifier et c'est pas se que je souhaite. :hap:

Comment pallier ce problème ? :hap:

Amirdine
Amirdine
Niveau 3
26 novembre 2014 à 19:36:47

:d) le-linuxien

Posté le 26 novembre 2014 à 18:19:49

J'ai besoin d'éclaircir la définition de sérialisation.
La sérialisation, c'est le stockage de donnée sous forme d'information plus petite, en gros c'est ça ? :hap:

Seulement si je sérialise les différentes données de mon programme à sauvegarder dans un fichier, l'utilisateur du programme pourra facilement bidouiller le fichier contenant les données sérialisé et pourra les modifier et c'est pas se que je souhaite. :hap:

Comment pallier ce problème ? :hap:
=========

En java, la Sérialisation c'est le fait de stocker un objet (attribut, list, methode, etc ...) dans une sorte de fichier binaire. Je présume qu'en C++, c'est la même chose.

Et crois-moi, pour modifier un fichier sérialisé, c'est pas simple. Surtout, si tu ne connais pas le programme et que t'es un simple client. Et que t'as stocké ce fichier de sauvegarde dans un dossier obscure. Exemple, dis-moi où est stocker l'historique du navigateur Google Chrome.

:d) http://superuser.com/questions/459426/where-does-chrome-store-its-cookie-file
:d) http://openclassrooms.com/courses/serialisation-avec-boost

le-linuxien
le-linuxien
Niveau 3
26 novembre 2014 à 19:58:27

Amirdine :d) Mais pour l'application que je programme en ce moment, il n'y aura pas beaucoup de fichier ou de dossier, il y aura peut-être même un seul fichier
( voila pourquoi je tenais à modifier directement le code source du programme depuis le programme afin d'y modifier les propriétés de mon programme, ainsi il seront toujours là à sa prochaine exécution)

car créer un dossier pour une application avec un éxécutable et un fichier sérialisé c'est...mmm...j'aime pas :hap:

Si je stocke des données sérialisé dans un fichier json. Puis quand j'ai besoin j'ouvre le fichier json et je me sers, ba l'utilisateur, il repère facilement le fichier json, bidouille les valeurs et peut facilement hacker mon programme. :(

Sporophore
Sporophore
Niveau 5
26 novembre 2014 à 19:59:28

Il est tout simplement impossible d'éviter la modification du fichier en question côté client. En théorie, quoique tu fasses pour sécuriser ce fichier, la sécurité sera illusoire puisque le client l'utilise directement. Tu peux faire un XOR sur les données sérialisées, puis chiffrer ces données en AES ou autre, les écrire dans un fichier dans un endroit caché, chiffrer le fichier en lui-même, tout ce que tu veux, ça n'y changera absolument rien ! Si la protection doit être cassée, elle le sera.

le-linuxien
le-linuxien
Niveau 3
26 novembre 2014 à 20:09:33

L'idéal pour pas que le programme se fasse hack ça serait de chiffrer les données sérialisé, avec un système de chiffrement asymétrique.

Le programme possède les deux clés. D'abord il chiffre toute les données à sérialisé avec la clé publique. Puis il les stocke dans un fichier json ou xml.

Puis pour charger la sauvegarde, il prend la clé privé et déchiffre les valeurs sérialisé, pour les dé sérialisés.

Cependant, pour sauvegarder les paramètres d'un éditeur de texte, ce système est peut-être pas assez éfficace. Car le chiffrement, et le déchiffrement des données ralentit l'éxécution du programme.

Et, en tant que puriste, je me dois de trouver la meilleur solution possible, pour améliorer les performances du programme, la fléxibilité du programme et son design pattern.

Que faire ?

godrik
godrik
Niveau 30
27 novembre 2014 à 00:19:43

si le programme fait a la fois l'encryption et la decryption, il n'y a rien de sur que tu peux faire. Il suffit a Charlie de lire la cle dans le programme et il peut forger de fausse sauvegarde ou decoder une sauvegarde existante. Si les donnee transite par la machine, il n'y a rien a faire, les donnees sont interceptables.

le-linuxien
le-linuxien
Niveau 3
27 novembre 2014 à 01:22:52

Vous me découragez là :hap:

Imaginons un contexte:

J'achete Grand Theft Auto 5. À l'aide de je ne sais pas quelle technique j'arrive à accéder aux données du jeux sur mon PC.

À partir de ce moment là, à grand coup de reverse engineering je peux localiser, déchiffrer, et modifier la sauvegarde et diverse donnée du jeux ou le studio de jeux qui a fait GTA 5 a utilisé un système malin pour cacher la sauvegarde ?

le-linuxien
le-linuxien
Niveau 3
27 novembre 2014 à 16:16:37

:question:

nounoursheureux
nounoursheureux
Niveau 10
27 novembre 2014 à 19:07:56

Tout ce qui se passe côté client peut être modifié par l'utilisateur. Ça inclut donc les sauvegardes. Mais en quoi est-ce que ça te gène que le joueur cheate, tant que ça reste sur son PC ? Si tu veux préserver un classement en ligne, je pense que la meilleure chose à faire est de vérifier les données qu'envoie le client.
Personnellement ce que je ferais c'est:
:d) fichier de sauvegarde chiffré (ça n'arrête pas quelqu'un qui s'y connait, mais ça décourage celui qui n'y connait rien)
:d) vérification des données côté serveur: si le client arrive à modifier ses données locales, alors éviter que celles-ci s'affichent dans ton classement en ligne en vérifiant ce qu'il t'envoie.

Mais de toute façon le système complètement sécurisé n'existe pas (et n'existera probablement jamais), même les plus grandes sociétés de JV avec des professionnels n'arrivent pas à empêcher les hackeurs de faire n'importe quoi.
Et faire un code qui se modifie lui-même n'est pas une bonne idée (en tous cas pour ce que tu souhaites faire). C'est vraiment se compliquer la tâche pour pas grand-chose.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment