日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TLS实现代码段加密

發布時間:2025/6/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLS实现代码段加密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 剛開始見到這個思路是看到周大師用這個東西做的免殺,當時感覺這個想法很好,但是由于當時對PE結構了解的少,看到二進制的東西就打怵,所以當時也沒能成功的去實現這個思路,只是簡單的記錄了一下TLS的特性,直到最近在看核心編程的某一章,里面又提到了TLS,讓我想起了當時沒有成功實現的那個思路,所以就又嘗試了一次,用了一下午實現了這個TEXT代碼段加密的思路。

? ? 功能就是把PE文件的TEXT段進行加密,隱藏他的靜態代碼段特性,在運行的時候搶在main函數執行之前把代碼段直接在內存里面解密(不然就崩潰了),從而達到靜態代碼隱藏功能。

? ? 先說下TLS(線程本地存儲),這個東西平時用的并不多,分為靜態TLS和動態TLS,主要是為了給程序做預處理以及實現存儲隔離的思路,就是比如一個全局變量,N個線程同時訪問,可以不上鎖,大家通過TLS自己每人有一個自己的備份等等.然而今天用的不是這方面,今天要用的是靜態TLS,靜態TLS也有很多特性和功能,這里不廢話,需要的可以自行搜索,就用到一點,TLS可以在main函數執行之前加載并且調用,也就是在干活之前先執行TLS然后在進入main函數做事情,這個就是重點,這樣的話就可以通過先按代碼段加密,然后在TLS部分進行代碼解密,這樣靜態PE文件看上去就是一個text段被加密的了。

說下實現思路(細節并不固定,很多地方可以DIY.

(1)首先找到一個位置存自己的密碼(用于加解密代碼),再找一個地方存一個key,這個key用來標記這個PE文件是不是已經被我們加密過了,防止二次加密。


我是直接在DOS頭里面存的,在1的位置存的一個KEY用于標記這個東西是不是被自己處理過了,這個地方并沒有寫成一個固定的值,不然感覺很容易暴露,寫的是一個隨機計算出來的值,最后我會根據這個地方的值是否滿足自己的公式來確定這個文件是不是自己處理過的,當然這個地方默認是0x90這么寫也容易暴露,后續可以換位置寫。2的位置是用來存密碼的,用于加解密代碼段內容。

(2)然后就是在自己的代碼段里面留一個用于確定TLS代碼大體位置的值:

?

? ? 注意這個地方是用匯編寫的,不要用變量或者其他,匯編寫的目的是防止數據被編譯到數據段里面去,這樣寫直接在TEXT段里面找這個序列,然后根據這個序列的位置大體確定TLS函數的位置,然后在向兩邊擴展一個長度,用于猜測TLS函數代碼部分,防止加密的時候誤傷了這部分代碼。還有就是一定要注意一個問題:


?上面兩個是對應的,但是仔細觀察里面的序列對應關系,...表示今天下午被這個地方坑了好一會。

????當然這個key的序列可以不寫死,畢竟寫死之后也會留下特征,由于時間原因我是臨時寫死了,其實可以這樣,自己寫一個遞增的式子,然后每次隨機生成一個滿足式子的序列,在校驗的時候我們每次固定取出來長度,然后依次校驗這段長度是否全部滿足地推公式,這樣來判斷key的位置,之前我這么干過,當時因為寫的是遞減的式子,吃了不少虧,記住要遞增,原因是?5?/?2?=?2??這種情況下在結合概率,很容易出現誤判。

這樣的話,我們把key序列寫到TLS代碼里之后整個代碼段大體是這樣樣子:


? ? 紅色的部分,標記的位置是通過key序列找到的TLS代碼定位坐標,然后前面擴展0x200,后面擴展0x1000這樣得到的區域是自己估算的TLS函數區域,這個部分是處于代碼段里但是不能進行加解密的部分(0x2000x1000這個可以自己根據實際情況定義),然后兩端的部分可以通過XOR或者其他方式直接處理,在編譯完成之后,通過輔助程序把編譯好的PE文件加載到內存里,然后找到代碼段,然后找到key序列坐標計算出保護區域,然后把這個代碼段除了保護區域的其他部分全都加密,最后再把相關信息,比如加密的密碼以及標記等填充在相關位置上(這里我是填在DOS頭里面了),這樣加密部分就搞定了(通過輔助程序),解密的話代碼是直接寫在TLS里面的,同樣的思路,只不過的是自己所在的進程空間的地址而已。


然后看一個處理過和處理前的PE文件的大體區別:

存儲標記和加密key




修改代碼段讀寫權限


加密代碼段


受保護的TLS函數段:


? ? 最終達到PE文件的代碼段記性加密的思路,用在靜態免殺和夾克程序里。

大體思路就是上面那些,很多細節和坑點都沒有寫,太多了不寫了,對于這樣的東西提示一個大家容易犯的通病,就是忽略:

1.了解思路

2.親自實現出來

3.產品化,發版出去

這三個的區別,很多人以為一看,嗯,這個思路可以了。然后就拉倒了,其實你不一定能寫出來,就算你寫出來了,也不一定能達到穩定發版的水平,這個是平時最容易犯的錯誤(包括我),當然至于做到什么程度,要看小伙伴們的初衷及其需求,上面做的那些就是為了讓小伙伴達到1的目的,至于23大家就自己實現把,只有去嘗試寫才能理解和發現這里面到底有啥坑點,總之我不會告訴別人?今天被一個SB錯誤坑了好幾個小時,一直誤以為是內存加密有問題。

傳了一下下午寫的一個實現代碼,沒有經過強測試,自己在家寫著玩的。僅供大家思路參考:

?http://download.csdn.net/detail/u013761036/9726645

總結

以上是生活随笔為你收集整理的TLS实现代码段加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。