https://bbs.125.la/thread-14670632-1-1.html
不知不覺玩這個領域已經有點年頭了,一直想推動這個領域發展,奈何靠某個人是很難實現的,所以我創辦了編程喵的群,找了一些志同道合的伙伴一起推進js逆向領域的發展,並且開發配套的工具,錄制了一些公開教程,偶爾也會直播公開課。這是淺談js系列 只說一些個人的看法以及介紹一下這個領域的技術。
js攻防也就近幾年發展的比較迅速,像08年-14年的時候 小網站大部分還都是靜態為主,中型網站會摻雜少量的原生加密,大網站也只是在原生加密上做一些變種,混淆的代碼不是沒有,不過也都是一些變量的混淆。(常規加密算法md系列 aes系列 3des rsa 等等)
美好的事情總會破滅,后面隨着前端技術的發展 h5的崛起,以及很多開發者對IE兼容的煩惱,產生了很多工具用來進行語法轉換,瀏覽器兼容,而這些工具大部分都是AST的產物,隨着一些前端安全工程師技術的進步,出現了例如 薩滿 sojson 這種 語法級別的混淆,其特征在於常量的統一封裝加密,語法的混淆,邏輯的混淆。這種類型的混淆后面被統一為ob混淆。
自從有了這種混淆器,各大廠商開始進行了一波技術更新,其中以淘寶這些大站做的最全,也就出現了以邏輯平坦流為邏輯混淆的技術,當然這些東西早在很久就被應用在 匯編代碼的混淆了。
后來各個廠商發現光混淆好像不能解決實際的問題,因為大家都是用的AST做的混淆器,難免就會出現反混淆器,所以各個廠商又在反調試技術上下了功夫。
什么無限debugger, 歷史記錄轟炸,死循環,檢測開發工具層出不窮,可把做逆向的頭疼不已。
並且防守方也知道,光在瀏覽器上做反調試是遠遠不夠的,因為隨着攻擊方的技術提升,可以利用的工具也就變多 如:fd本地替換 node調試 離線v8 等等。
防守方意識到也要檢測離線環境,檢測node特征,檢測無頭瀏覽器特征,檢測開發者工具協議,檢測瀏覽器環境 bom dom ,當然攻擊方也不傻也可以很好的應對。
最近防守方似乎意識到他們的混淆器混淆的方式強度遠遠不夠,jsvm技術開始興起,那就要說說什么是jsvm了 其實就是把js的代碼翻譯成二進制的數據,然后自己實現了一個解釋器用來解釋這個二進制運行。其實jsvm也不是獨一份,所謂技術的進步就是 借鑒,這可不是我說的 有問題問鵝廠,我本身是一個游戲開發架構師,看着游戲從pc到web到移動端,在web端的時候性能問題就產生了,asm.js wasm技術橫空出世, 其提速效果是當時純js的10倍以上,其原理就是把C++代碼編譯成匯編類似的語法,瀏覽器解釋運行。
說了這么多 你還覺得js逆向簡單的話- - 那么確實很簡單,如果你覺得js逆向難的話 有的時候也是很無奈的,這里說的js逆向是說的純本地js引擎能脫機運行的技術,別和我說拿一個瀏覽器控件或者調用起瀏覽器做一些模擬操作或者利用開發者遠程協議進行一些操作的方式,這些方式不是不可以,但是脫離了js逆向的范疇。當然現在大部分公司會從成本和實現成本上考慮這種技術,但是對個人的技術成長沒有幫助。
最后希望有更多的人可以關注這個領域的技術。