在談到瑞數js代碼逆向之前,我們需要先了解一下JavaScript混淆技術。JavaScript混淆技術是指將JavaScript代碼通過各種方式進行壓縮、混淆、加密,以達到保護JavaScript代碼不被惡意破解、竊取的目的。但是,這種保護措施往往會給開發人員帶來一定的閱讀和調試難度。所以,在逆向一個瑞數js代碼之前,我們需要先學習一些有關JavaScript混淆技術的知識。
一、JavaScript混淆技術
1、變量替換混淆技術
function a(b,c,d){b=c===d?b.replace(/[\d\D]/g,function(a){return n(a.charCodeAt(0))}):b.replace(/[a-zA-Z]/g,function(a){return String.fromCharCode((a=a.charCodeAt(0))+1+(a++,a));});return b;}
變量替換混淆技術是指將JavaScript代碼中的變量名通過替換的方式改變,使代碼的閱讀難度大大提高。在上述代碼中,變量b、c、d通過替換後變成了靜態的,以一串隨機字符代替。
2、字符串加密混淆技術
function b(c){var d="";for(var f=0;f<c.length;f++){var e=c.charCodeAt(f)^"12345678".charCodeAt(f%8);d+=String.fromCharCode(e);}return d;}
字符串加密混淆技術是指將JavaScript代碼中的字符串通過加密的方式改變,使代碼的閱讀難度大大提高。在上述代碼中,字符串c經過加密後變成了未知的一串字符。
3、調用堆棧混淆技術
(function(){ var a=function(b){ if(b<2147483647){ return a(b+1); }else{ return b; } }; a(0); })();
調用堆棧混淆技術是指將JavaScript代碼中的函數調用通過遞歸的方式進行混淆,使代碼的閱讀難度大大提高。在上述代碼中,函數a被遞歸調用,形成了一個調用堆棧。
二、瑞數js代碼逆向
逆向瑞數js代碼的過程主要包括以下幾個步驟:
三、實例分析
下面我們來看看一個瑞數js代碼的示例:
function a(){var b=["$","(","t#","-","$)","#","+","&","@"],c=document,d=b[1],e=b[6],f=b[0]+b[2]+b[4]+b[3]+b[8]+b[7]+b[5];if(!c.getElementById(d)){return }var g=c.getElementById(e);if(!g){return }g.onclick=function(){var h=this,k=h.getElementsByTagName(b[2])[0],l=k.getAttribute("id"),m=k.getAttribute("href");if(m.indexOf(f)!=-1&&l){h.removeChild(k);}};}
通過對上述示例代碼的分析,我們可以得到以下信息:
1、該代碼是用JavaScript語言編寫的。
2、該代碼被混淆過,變量名、字符串以及函數調用都被加密。
3、代碼的主要功能是通過DOM操作,去除指定類名的元素。
四、總結
瑞數js代碼逆向並不是一件容易的事情,需要具備深入的JavaScript知識以及豐富的逆向經驗。在逆向之前,我們需要了解JavaScript代碼混淆技術,可以藉助一些工具對加密的代碼進行解密,然後逐步分析加密後的代碼,最終還原出原始的JavaScript代碼。
原創文章,作者:DXFCZ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/361171.html