Comment puis-je voir la valeur d’une chaîne stockée dans une variable privée? [dupliquer]

nipponese

Comment puis-je voir la valeur d’une chaîne stockée dans une variable privée? [dupliquer]


Cette question a déjà une réponse ici:

J’ai lu à plusieurs reprises que les données sensibles ne devraient jamais être stockées dans une transaction, mais, en particulier, comment la valeur d’une variable d’état serait-elle lue si elle était marquée comme private ?

ivicaa

Depuis Solidity, vous ne pouvez pas lire les variables privées. Pour un accès direct au stockage, voir ethereum.stackexchange.com/questions/13910/…

Réponses


 smarx

Pour l’exemple de contrat que vous avez donné, il semble qu’il y ait une variable d’état bytes32 à l’emplacement 1 avec la valeur « Un mot de passe secret très fort 🙂 ».

J’ai trouvé cela en appelant simplement getStorageAt à quelques reprises:

 > web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 0, (e, v) => console.log(v)) 0x0000000000000000000000000000000000000000000000000000000000000001 > web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 1, (e, v) => console.log(v)) 0x412076657279207374726f6e67207365637265742070617373776f7264203a29 > web3.eth.getStorageAt('0x6260319bcbcbf33f84397ae0000e49b0f50ee075', 1, (e, v) => console.log(web3.toAscii(v))); A very strong secret password :) 

Si nous avions le code source du contrat, ce serait beaucoup plus facile. Et si le contrat était obscurci, ce serait un peu plus difficile.

Mais l’essentiel est que tout sur la blockchain (y compris les variables d’état privées) est public.

Zack McGinnis

Intéressant. Bon travail!

nipponese

@smarx les marques > indiquent-elles que vous utilisez geth pour cela? Je ne peux pas obtenir une session de console attachée pour prendre js (coffeescript?) Comme ça

smarx

Je faisais ça dans Chrome. Je ne sais pas quelle version de geth JavaScript prend en charge, mais il n’aime probablement pas la syntaxe lambda. À geth , pas besoin de rappel de toute façon. Seul web3.eth.getStorageAt('<address>', 1) devrait fonctionner.


 Zack McGinnis

Tout code de contrat déployé sur la blockchain peut être lu / consulté par n’importe qui. Cela inclut les variables / fonctions déclarées private La seule chose que private fait est de restreindre l’accès de cette variable / fonction au contrat dans lequel elle est déclarée.

De la documentation: entrez la description de l'image ici

nipponese

Ma question demande à quelqu’un de montrer les étapes de visualisation d’une variable d’état arbitraire marquée private .

Zack McGinnis

Dans ce cas, vous devez afficher le code de contrat / ABI sur etherscan et déterminer vous-même la valeur de la variable.

nipponese

Ainsi, par exemple, ropsten.etherscan.io/address/… s’il n’y a pas d’ABI affiché, les données de la chaîne ne sont pas lisibles?

Zack McGinnis

Cette question est un doublon possible de ethereum.stackexchange.com/questions/188/… . Sans code de contrat / ABI, je ne pense pas qu’il soit possible de récupérer des valeurs spécifiques en utilisant uniquement des opcodes / bytecode (surtout si le code a été compilé à l’aide de l’optimiseur).

smarx

C’est bien sûr possible , mais la difficulté monte. (Voir ma réponse pour savoir à quel point ce contrat est facile.)

 

[dupliquer], #(une, #la, chaîne, comment, d’une, dans, privée, Puis-je, stockée, valeur, variable, voir

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *