冰楓論壇

 找回密碼
 立即註冊
ads_sugarbook
搜索
查看: 1957|回覆: 0
打印 上一主題 下一主題

[開源] c++實現的一種代碼膨脹變形殼

[複製鏈接]

366

主題

35

好友

1984

積分

金牌會員

飛翔至夢想的彼端~

Rank: 6Rank: 6

UID
86990
帖子
7161
主題
366
精華
0
積分
1984
楓幣
2398
威望
1881
存款
0
贊助金額
150
推廣
0
GP
70
閱讀權限
70
性別
保密
在線時間
1310 小時
註冊時間
2014-12-27
最後登入
2023-2-14

積分勳章 解說達人 在線終極王 論壇支持王 論壇粉絲 發帖達人 懶人勳章 太陽勳章 長老勳章 神手勳章 2016年紀念勳章 私服達人 音樂勳章 2017年紀念勳章 2017端午節紀念勳章 Android勳章 2018年紀念勳章 VIP會員 熱心助人 2018萬聖節紀念勳章 聖誕節紀念勳章 聖誕節紀念勳章2 2020年紀念勳章

跳轉到指定樓層
1
發表於 2017-12-29 22:52:30 |只看該作者 |倒序瀏覽
本帖最後由 xxx9638527410 於 2017-12-29 21:17 編輯

主要實現3個功能:
1.代碼膨脹
2.代碼變形
3.對地址常量包括字符串常量進行加密

代碼膨脹:
代碼膨脹無非就是指令等價替換,不過這裡沒條指令最好能有多個膨脹規則,這樣會加大還原難度。
原始程序大小為6kb,經過5次混淆後,大小變為66kb.
624198_wo7v3n27ujpg2hn
混淆前代碼:
624198_uoznqohalhhqwhx

混淆後代碼:
624198_gldb2dx7yp0p3gu
624198_m42w3e0kk7jpsyk
從上圖會發現有大量的垃圾代碼生成。

說一下代碼變形:
1.有分支跳轉改成無分支跳轉。
在逆向分析時主要是通過條件跳轉來確定函數的流程,根據跳轉的目標地址來確定這是一個分支還是一個循環。如果將所有條件跳轉改成無分支跳轉,那麼程序只有在動態執行時,才能確定流程。這大大提高了逆向分析的難度。另外,ida在進行還原偽c代碼時,遇到無分支跳轉,會進行截斷,導致後面指令無法還原偽c代碼。這對靠f5吃飯的人說就gameover了。因為此時已經控制了代碼流程, 如果在後面加一些垃圾指令,會導致後面的代碼全部識別錯亂,只有運行時才確定要跳到哪個位置。

另外對jmp imm, call imm和call [imm](一般這種間接call都是api調用) 也改成無分支跳轉。
本來沒打算對這類指令進行處理,但是發現效果還挺好,乾脆就加上吧。因為jmp imm也可以作為判斷分支或者循環的依據,而call也是一個比較關鍵的指令,尤其是call api,在逆向分析時,通過觀察api的前後代碼來確定代碼到底在幹嘛。這樣一處理,你靜態分析時看不到任何條件跳轉,看不到任何call調用(除了call reg,當然了,靜態分析你也看不出來call reg)。

另外對條件跳轉和call這類指令的下一條指令加一些垃圾代碼,會導致後面的整段指令識別錯誤。也會給別人留下個坑,比如一般人想步過這個函數調用,會在函數的下一條指令地址處下斷點,但這條指令實際上永遠不會執行。

實現思路:
1.將跳轉目標地址保存到一個地址數組表裡面,在建一個索引表記錄地址表的索引,在對索引進行隨機加密。運行時根據條件碼得到正確的索引表地址,在對索引進行解密,得到正確的目標地址偏移。
代碼變形前:
624198_db143rqu6fkfo2e

代碼變形後:

624198_l6uynalbvpv8g7o
兩幅圖對比發現call memset 變成了一大串指令,最後以ret結尾。這一大串做了一個事情,去索引表找到地址表的索引,在根據這個索引去地址表找到正確偏移值,加上基地址,得到目標地址。同時會把返回地址壓棧,實際上返回地址是可以隨意更改的,我是按照代碼塊進行處理的,隨意加一些垃圾指令, 把後面的代碼塊往下移動一點就好了,這個自己改,另外索引加密這個我註釋掉了,去掉就可以。大家發現這裡先push了2個寄存器,在這裡偷了點懶,實際上最好應該是用反彙編引擎掃一下當前哪些寄存器是被佔用的,再從沒被佔用的寄存器中隨機分配2個寄存器。如果沒有可利用的寄存器,在這麼做。

call memset是一個立即數,再來看下scanf (call [imm])
代碼變形前:
624198_hr32bljae3qq269

代碼變形後:

624198_kf2ynuwm8spg93j

再來看下f5後的代碼:
代碼變形前:
624198_2tsjqpnjxchrw4p

代碼變形後:
624198_xp7wbimk35cb0tt
從上圖可以發現變形後,ida根本就沒有識別完整個函數,只識別了一點點。ida遇到無條件跳轉會截斷當前函數。

對地址常量包括字符串常量進行加密:
在進行逆向分析時,很多人第一反應會去看看有沒有一些敏感字符串,根據ida的交叉引用來確定目標地址。
另外一些地址值可能也比較關鍵,比如回調函數。而這類常量賦值一般都是mov指令和push指令,對mov imm,push imm這類指令的立即數做隨機加密,就可以起到一個保護的作用。
加密前:
624198_gzdxm1v2glvfrml
加密後:

624198_co8f722ur7fkr4z


以上純屬個人見解,有對代碼保護(代碼膨脹變形,vmp)比較感興趣的,可以去wprotect群(群號:210887170)互相交流。在這裡提前祝大家元旦快樂。


轉至看雪
by淡淡的熒光
[發帖際遇]: xxx9638527410 因吃了太多「垃圾食物」,「胃全」是垃圾,就診後獲得醫療理賠 1 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1骰子
https://www.youtube.com/watch?v=vajUsmisNFQ  運命の人
https://www.youtube.com/watch?v=W1N1DYewwsk -螢
https://www.youtube.com/watch?v=abIRuMGldi8 一番の宝物
https://www.youtube.com/watch?v=HyyXq3GDJq0 Your Beats
https://www.youtube.com/watch?v=Turf7WDB3iY Angel Beats
https://www.youtube.com/watch?v=iyCFdilBCPw   -花篝
https://www.youtube.com/watch?v=Qae1QVgXrP8  -崩壞小丑
https://www.youtube.com/watch?v=mAEPs2PvyrQ  -Doll
https://www.youtube.com/watch?v=zyJJlPSeEpo  -世界的盡頭
https://www.youtube.com/watch?v=qhDMohNzxvo  -After Dark
https://www.youtube.com/watch?v=VpdLEk4MwmU  -雪の華
https://www.youtube.com/watch?v=q30xr2IH4pw  -Even Heaven
https://www.youtube.com/watch?v=mw9abYUxEwg  -夜行列車
https://www.youtube.com/watch?v=t6wBKcYIFGE  -緣結空蟬
https://www.youtube.com/watch?v=dfbBh-0LTHo   - April Showers
https://www.youtube.com/watch?v=ojG9C6L61oA  -君に最後の口づけを
https://www.youtube.com/watch?v=0Y4KXMjDJjU  -君がくれたもの
https://www.youtube.com/watch?v=Re6JJ_njYR4  -歌に形はないけれど
https://www.youtube.com/watch?v=TLWkm-SNDS8  -太陽と向日葵
https://www.youtube.com/watch?v=xV5B4fzBy9c  -他の誰かより悲しい恋をしただけ
https://www.youtube.com/watch?v=2k9Rk0-O2xE  -煙
https://www.youtube.com/watch?v=e4oVMSEPpww  -Letter Song
https://www.youtube.com/watch?v=em7yXGreZ_M  -最初の淚
https://www.youtube.com/watch?v=zW8_NGpjcnw  -温馨的家
https://www.youtube.com/watch?v=csGCZvNEOKc  -モトカレ
https://www.youtube.com/watch?v=XxTIrpWEh1o  -ねぇ/吶
https://www.youtube.com/watch?v=Ua9Ek1kE8dA -ゴシック
https://www.youtube.com/watch?v=HWgxbptCcuA  Violet Cry
https://www.youtube.com/watch?v=qIoDWTF0qSo 深い森
https://www.youtube.com/watch?v=JwCF0ueGmVM 緋弾のアリア「Scarlet Ballest」
https://www.youtube.com/watch?v=vYV-XJdzupY Hitohira No Hanabira
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-4-20 06:32

回頂部