黑產代碼解密-利用canvas載入代碼
前段時間獲取到黑產的一些代碼,不得不感嘆黑產的代碼實在在寫的是好得很,思路巧妙,環環相扣。不得不說,技術不好,黑產都做不了了。雖然分析了好多天,但是也只是一知半解。這裡抽出一小部分來講一下。二話不說,先上代碼:
最初的代碼是經過混淆的,代碼經過整理如下:
這段代碼的主要目的是通過使用一個圖片的連接,將這個圖片載入到 canvas 中,再利用 canvas 去獲取惡意代碼並執行。通過圖片去隱藏信息是一種常見的做法,這段代碼就是通過 canvas 去執行圖片中隱含的惡意代碼。代碼還支持傳入回調函數,若回調函數存在,則執行回調函數。
在這裡還利用一個計算機圖像的知識,即像素中的 RGBA 值。Canvas 中的 ImageData 對象中每一個像素都包含了4個信息,即 RGBA 值。
R - 紅色 (0-255)
G - 綠色 (0-255)
B - 藍色 (0-255)
A - alpha 通道 (0-255; 0 是透明的,255 是完全可見的)
通過將代碼轉化為 ascii 碼,將其隱藏在圖片中的 RGB 信息中,黑產的 alpha 值都設置的為255。這樣非常巧妙地就實現了代碼信息和圖片之間的轉換。
這裡涉及到一個 canvas 和圖片之間的相互轉化。下面提供兩個相互轉化的函數:
所以黑產也是通過將惡意代碼放入到圖片之中,從而以後可以通過 canvas 去讀取惡意代碼。下面寫一個小的 demo 來複現這樣一個簡單的過程:
函數可以將任意字元串轉化為一個圖片,接著通過 canvas 去載入代碼。不過這裡面有一個問題,就是通過 函數生成的圖片是一個 base64 圖片,不能夠直接被載入,這個圖片必須被存儲為 png 格式才能夠通過另一個函數去載入代碼。
還有其他的一些黑產的代碼,思路都比較獨特,魯棒性也很好,比一般成寫出來的代碼應該好多了。所以道高一尺魔高一丈,還得多多學習才是。
以上。


TAG:madMen |