加密與逆向的那些事

加密與逆向的那些事

起源

有幾個程序員不是被遊戲外掛和酷炫的黑客技術所吸引入行的呢?(你非要說高薪?那你還能來看這篇文章?)算法

修改器二三事

從初中我纔有第一臺電腦,那個時候仍是windows95系統連互聯網尚未普及,那個時候還只有一些單機小遊戲,最火的也就是紅色警惕。個人第一款大型單機遊戲是西山居的《劍俠情緣外傳月影傳說》,當時使用4張cd光盤安裝(我也不知道是否是正版)。遊戲打通關以後就想着有沒有別的玩法,在搜索的時候就發現了修改器這個東西,當時比較流行的說法叫金手指。一開始是用別人作好的修改器,到後來就本身用金山遊戲本身製做修改器。從那時起就以爲作修改器遠比遊戲自己有意思。windows

修改器進階

後來網遊興起,手裏的金山遊俠忽然就不香了,雖然能改本地顯示可是數據自己沒有改變,因而新的技術出現了,CE修改器。接觸到CE修改器後才知道原來還有基址和偏移量這種東西,有些遊戲取得仍是客戶端的數據可是和顯示的數據不是用的同一個內存地址,經過CE找到基址和偏移量就能改一些設計不嚴密的網遊。可是畢竟網遊的重要數據全在服務端,手中的CE還沒發光發熱而後又不香了。而後新的技術又出現了!修改遊戲封包,經過僞造客戶端數據來欺騙服務器。然而沒有不少時間去學習這種技術了,由於上高中要努力學習(英雄聯盟出現了!這遊戲真香)。安全

逆向二三事

高中起知道一些研究破解的論壇(這裏就不點名了),起初是爲了一些"好用"的軟件去逛這些地方,後來就翻了翻一些技術文章,全是看不懂的,相似:脫殼,斷點,爆破,關鍵跳。。。這些漢字我都認識就是組到一塊兒不知道什麼東西。因而就泡在這些知識的海洋裏潛水,畢竟要以學業爲重(打英雄聯盟)!直到大學才正式去研究這些東西,它叫逆向。服務器

逆向乾貨

學習逆向必定要爲了學習而不是要作違法的事!!!
因此這裏只有思路沒有具體操做網絡

逆向目的有兩個:學習

  1. 找到軟件的受權點(關鍵跳)破解軟件受權
  2. 分析算法
    大部分狀況下是找關鍵跳進行爆破(跳過受權判斷)。分析算法通常是要作註冊機或者有多個關鍵跳再就是暗樁太多,作安全方面的大手子是分析程序的行爲從而找到應對辦法。

逆向分爲動態和靜態,動態就是將程序啓動起來進行逆向,靜態是直接分析程序指令(彙編語言)分析算法。編碼

動態分析逆向:加密

  1. 查殼
  2. 弱殼直接脫強殼帶殼破:
    1. 如今軟件通常都用vmp之類的強殼,這種殼脫完以後修復也極其困難,因此新手小白之類的強殼不要想着脫。
    2. 弱殼通常都有脫殼腳本,直接用就能夠(我沒研究過殼,因此我都是帶殼破)
  3. 找關鍵跳
  4. 爆破或分析算法
  5. 有暗樁的要修復暗樁

靜態分析逆向:操作系統

  1. 查殼
  2. 脫殼(說了我不熟悉這方面了)
  3. 靜態分析器加載庫或者執行程序解出彙編碼
  4. 找到要分析的方法
  5. 根據彙編碼分析邏輯

動態分析VS靜態分析

動態分析有個先天的優點,能夠在運行時自動脫殼,因此動態分析是首選。  
靜態分析通常是跨平臺沒法進行動態分析或者很是困難,好比Android和IOS的動態庫。  
動態分析廣泛用於windows操做系統軟件逆向(你非要跟我槓Kali?那你贏了)  
靜態分析我暫時只用在分析不一樣平臺的動態庫

研究加密的起源

大學畢業以後放棄本行工做(工地搬磚)轉行加入程序員大軍(網上搬磚),起先從事遊戲行業,如今從事物聯網行業。  
在遊戲行業一般要借鑑別人家的資源,而別人家的資源一般是加密過,好比cocos經常使用的xxtea加密。這種加密屬於算法公開而隱藏祕鑰的方式,只要獲取到祕鑰就能夠解開資源,須要增長破解難度。  
如今的工做是物聯網平臺開發,給客戶的都是可執行程序,因此須要進行軟件受權,就須要研究多種加密算法。

加密乾貨

接下來就軟件受權和個人逆向經驗來簡單分析下各類加密方式。

不管是軟件受權仍是互聯網傳輸,對於用戶一方來講消息都是透明的。互聯網傳輸本就是服務器與用戶之間通訊,不管發出消息仍是接收消息用戶都是能夠監聽到,即便採用非對稱加密方式也只是防止第三方竊取。軟件受權就比較難監聽,可是畢竟是軟件讀取受權信息而後再解釋稱軟件能用的配置,只要監視軟件內部就能夠獲取到受權消息,只不過期間成本大小。因此不管哪一種狀況用戶均可以獲取到消息,那隻能讓獲取的難度增大,時間成本增長。

加密方式:

  1. 對稱加密(算法公開隱藏祕鑰):
    1. xxtea:這個算法是我在cocos遊戲引擎那裏知道的加密方式,是基於全文內容的一種加密方式。(2019-11-27如今仍是處於不知道祕鑰沒法解的狀態)
    2. AES:最經常使用的對稱加密算法,一套祕鑰進行加密解密
    3. 異或運算:最簡單的對稱加密算法,可是能夠很靈活的變種,好比對一組祕鑰循環異或
    4. 自定義碼錶:凱撒碼錶,將原字符用其餘字符替換
    5. 動態碼錶:密碼隨時間或條件動態改變
    6. base64:這沒什麼好說的吧
  2. 非對稱加密:
    非對稱加密在互聯網上能夠防止第三方竊取,而在軟件受權上只能用做驗證,由於不管是公鑰仍是私鑰都是能夠在軟件內部獲取其中一個,並且最終信息都是要被解密,因此失去了非對稱加密的特性。

    1. RSA:引用百度百科的其中一句「只要其鑰匙的長度足夠長,用RSA加密的信息其實是不能被解破的。」惋惜在軟件受權裏全部信息都是要被解密的。
    2. 橢圓曲線加密算法(ECC):引用網絡一句「210位ECC加密安全性至關於2048位RSA加密。」
    3. 國密算法:SM1,SM2,SM3,SM4
  3. 自定義算法:
    能夠根據已有算法進行改動來建立本身的加密算法

受權方式:

  1. 受權文件:
    程序直接讀取受權文件進行配置解析
  2. 網絡受權:
    經過網絡請求來下發受權信息,好處是能夠動態更改受權,缺點是無網絡環境下沒法受權。下發受權信息後行爲和受權文件方式相同

以上提到的加密算法和受權方式是我所遇到的和比較常見的,其餘的一些算法不是已經失去加密性質再就是我還沒遇到。(槓精退散)

重要性 不高 的軟件受權加密建議:2種以上對稱加密加一種非對稱加密。非對稱加密驗籤,對稱加密解密,能加殼就加殼最好能加花指令和添加無用指令。(你說運行速度慢了?那必定是你選的加密方式有問題)

重要性 高 的軟件受權加密建議:去買專業作安全的商業產品吧

結語

加密和逆向一直是矛與盾的關係,加密算法一直在改進,逆向的方法也在改進。安全這方面我也只是個小白,只是分享下工做總結和以往的心得。但不管是作什麼都不要損害別人的利益,不要觸犯國家的法律,想要提升逆向水平在各個論壇都有教程和一些專門用來練習破解的Creakeme。

相關文章
相關標籤/搜索