Dans le billet de blog précédent, nous avons présenté le niveau de données abstraites de l'interface de rappel passif et implémenté une fonction de base efficace pour convertir les entités en XML. Les développeurs attentifs trouveront une option appelée « Méthode de cryptage et de décryptage des messages » lors de la première modification de la configuration de base du compte officiel. Les valeurs disponibles pour la sélection après expansion sont : « Mode texte clair » (par défaut), « Mode de compatibilité » et « Mode sans échec (recommandé) ». Alors, quel est ce mode sans échec ? Comment s'adapter au mode sans échec ? Avec ces questions à l’esprit, entrons dans le troisième voyage d’exploration de l’accès WeChat.
Abominable détournement de trafic. Au début de l'article, laissez-moi vous montrer deux captures d'écran de téléphones portables en utilisation normale :
Sur le côté droit de l'écran Vous verrez un ballon d'eau vert dans le coin inférieur, ce qui est incompatible avec l'image à afficher, et n'est évidemment pas réalisé par le concepteur. Cliquez sur le ballon d'eau pour afficher les détails du trafic restant dans le package de communication actuel.
Du réseau local domestique à Internet en passant par l'intranet de la salle informatique IDC, nos liaisons de données regorgent de processus de transfert. Nos données peuvent être conservées et enregistrées lorsqu'elles sont transmises par n'importe quel appareil. L’intranet de votre bureau est-il sécurisé ? Les pirates qui se cachent autour de vous peuvent recevoir une copie de toutes les données du réseau local en configurant une certaine carte réseau du réseau local en mode promiscuité. Peut-être que vous ne trouvez rien, mais vos données privées ont été volées par d'autres.
Utilisez le mode sans échec pour protéger la confidentialité des utilisateurs
Lorsque le mode sans échec est activé, les messages reçus par l'interface de rappel passif changent considérablement, comme indiqué ci-dessous :
<xml> <ToUserName><![CDATA[gh_38a2de904e09]]></ToUserName> <Encrypt><![CDATA[i7b8ccNA9OWDhau/F26aUWKFJ6Jd0imsDQIFPSdSfAg8mHT7rL0kIWSVpcqf6/dVSoOQOQK4T/CS3w96j4k3qcg89M6xn2RGZBs+9JkrsdRig5yhcia1B59akWb1t9QdutXqnl4edAqtXEh8SIs+N2HkOTTVldtOUHpdwLqRYuC4F6ejUoXui4xKuc3oyODR9edfL+xzZ7JfMJ1KUNF/YBJMj/Ba9y/CLLYmdFYOtCMH7tMUz8h+S0XKkHKN6r0ELLCIZJ9+PPlHZcfSGhwMLUeRF1nMIjXGEKHkI0uMcruh7wD96lMU/RFgJDjAk26xbmUYfa3l+34p+txw4R8iD3Q58S8Yekiy3lUsbk+C6eDeefGs1ck23BQ8xWU3AReWH2dEsY6SYIkb3ANeyJmcoIKZfpc/31njp0KcHAxL1Lk=]]></Encrypt> </xml>
Il On peut voir que la partie en texte brut conserve l'ID original du compte public du message : gh_38a2de904e09, et le reste est du texte crypté (cette structure permet au même système backend d'accéder à plusieurs comptes publics, puis d'utiliser chaque numéro de compte public. les paramètres sont décryptés séparément). Étant donné que la structure de cryptage n'est pas clairement expliquée dans le document officiel (http://qydev.weixin.qq.com/wiki/index.php?title=Encryption and Decryption Library Download and Return Code), je vais vous donner une explication détaillée ici. .
Si le lecteur a déjà développé des protocoles réseau, il devrait être facile de comprendre cette structure, un message typique de longueur variable. Il doit y avoir une marque pour indiquer la longueur de la zone de longueur variable. Cette valeur prévaudra lors de la lecture, et un certain nombre d'octets seront lus après les données de longueur fixe. Au début de la structure, il y a un nombre aléatoire de 16 octets. Cette partie des données n'a aucune signification pratique et peut être utilisée comme données de remplissage de nombres aléatoires lors du renvoi ultérieur de messages cryptés.
Méthode de vérification de signature en mode sans échec
L'interface de rappel passive de WeChat est en fait une requête HTTP POST Nous savons tous que les requêtes HTTP sont divisées en en-têtes de requête et en corps de requête. WeChat place intelligemment les données XML cryptées dans le corps de la requête et place les paramètres utilisés lors de la vérification de la signature dans l'en-tête de la requête.
POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nonce=1372623149 HTTP/1.1 Host: qy.weixin.qq.com Content-Length: 613 <xml> <ToUserName><![CDATA[wx5823bf96d3bd56c7]]></ToUserName> <Encrypt><![CDATA[RypEvHKD8QQKFhvQ6QleEB4J58tiPdvo+rtK1I9qca6aM/wvqnLSV5zEPeusUiX5L5X/0lWfrf0QADHHhGd3QczcdCUpj911L3vg3W/sYYvuJTs3TUUkSUXxaccAS0qhxchrRYt66wiSpGLYL42aM6A8dTT+6k4aSknmPj48kzJs8qLjvd4Xgpue06DOdnLxAUHzM6+kDZ+HMZfJYuR+LtwGc2hgf5gsijff0ekUNXZiqATP7PF5mZxZ3Izoun1s4zG4LUMnvw2r+KqCKIw+3IQH03v+BCA9nMELNqbSf6tiWSrXJB3LAVGUcallcrw8V2t9EL4EhzJWrQUax5wLVMNS0+rUPA3k22Ncx4XXZS9o0MBH27Bo6BpNelZpS+/uh9KsNlY6bHCmJU9p8g7m3fVKn28H3KDYA5Pl/T8Z1ptDAVe0lXdQ2YoyyH2uyPIGHBZZIs2pDBS8R07+qN+E7Q==]]></Encrypt> </xml>
Le processus de génération de signature :
Grâce au calcul ci-dessus, la signature calculée_sign du message crypté actuel est maintenant obtenue, puis obtenue à partir du paramètre d'en-tête de requête msg_signature, si calculate_sign et msg_signature sont identiques, cela signifie que le message n'a pas été falsifié. Les problèmes mathématiques utilisés par cette stratégie de signature sont :
1. L'algorithme de résumé SHA1 calcule toutes les données, et toute modification entraînera une modification du résumé final
2. Le jeton est défini à l'avance et est traité pendant le processus ; le processus de transmission n'est pas inclus et ne peut pas être craqué ;
3. L'introduction d'horodatages et de caractères aléatoires rend le texte chiffré différent à chaque fois, même si le texte en clair est le même, ce qui rend plus difficile le cryptage AES
Vérification de la signature réussie Vous pouvez alors utiliser en toute sécurité le texte brut déchiffré. Le format du texte brut est cohérent avec le format introduit dans l'article précédent, de sorte que la logique de traitement métier déchiffrée peut être réutilisée.
En réponse au mode sans échec, le format XML renvoyé doit également être crypté. L'ensemble du processus de cryptage est dans le sens opposé au processus de décryptage, je n'entrerai donc pas dans les détails ici.
Pour plus d'articles sur l'exploration de l'accès WeChat et le traitement des messages cryptés, veuillez prêter attention au site Web PHP chinois !