色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OLLVM和LLVM功能介紹

我快閉嘴 ? 來源:小道安全 ? 作者:小道安全 ? 2022-09-19 15:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

基礎知識

LLVM是lowlevel virtual machine的簡稱,它誕生于2003.10伊利諾伊大學香檳分校,創始人是ChrisLattner,它是一個完整的編譯器框架,它兼容大部分主流開發語言例如:C, C++, Objective-C等等,它也兼容大部分主流的平臺:x86, x86-64, PowerPC, PowerPC-64,ARM,Thumb等等。

6cfbf7ec-372d-11ed-ba43-dac502259ad0.png

(圖片來源網絡)

LLVM會先將源碼生成為與目標機器無關的LLVMIR代碼,然后把LLVMIR代碼先優化,再向目標機器的匯編語言而轉換。LLVM編譯器主要細分為前端、中層優化和后端的3部分構成。

6d154cf6-372d-11ed-ba43-dac502259ad0.png

(圖片來源網絡)

OLLVM就是在LLVM的基礎上增加了obfuscator(混淆), Obfuscator-LLVM (OLLVM) 是2010 年 6 月由 Yverdon-les-Bains 的瑞士西北應用科技大學安全實驗室針對LLVM編譯組件開發的代碼混淆工具,該工具完全開源,這個OLLVM主要為了增加逆向工程的難度,保證代碼的安全性。

Obfuscator-LLVM (OLLVM)集成了LLVM編譯器,并且兼容LLVM支持的所有語言(C,C++, Objective-C, Ada and Fortran)和平臺(x86, x86-64, PowerPC,PowerPC-64,ARM,Thumb,SPARC,Alpha,CellSPU,MIPS, MSP430, SystemZ,XCore)。

OLLVM的混淆原理,就是在不改變源代碼功能前提下,將C或C++代碼中的控制語句if、while、for、do等轉換成switch分支語句。這樣實現的優勢是,它可以模糊switch中case代碼塊之間的關系,從而增加逆向分析代碼難度。

混淆的具體實現思路,首先將要實現代碼平坦化的函數分成多個基本塊(就是case代碼塊)和一個入口塊,并為每個基本塊設置編號,并讓這些基本塊都有共同的前驅模塊和后繼模塊。前驅模塊主要是進行基本塊的分發,后繼模塊的分發通過改變switch變量來實現。

OLLVM和LLVM主要的功能的代碼差異點如下圖所示

6d27261a-372d-11ed-ba43-dac502259ad0.png

OLLVM功能介紹

OLLVM全面模式支持以下四種代碼包含模式

1、-mllvm -fla: 控制流化扁平化

2、-mllvm -sub:指令替換

3、-mllvm -bcf: 控制流程

4、-mllvm -sobf: 字符串加密

以OLLVM保護后的功能效果都在文章的后部分進行展示。

-mllvm -fla中fla的全稱:Control Flow Flattening,它也稱為控制流扁平化,這個功能模式主要原理就是把一些if-else語句,嵌套成do-while語句。

它支持以下3種保護功能模式:

-mllvm -fla: 激活控制流扁平化

-mllvm -split:激活基本塊分裂。一起使用時提高平整度。

-mllvm -split_num=3:如果激活通行證,則在每個基本塊上應用 3 次。默認值:1

-mllvm -sub,它的全稱Instructions Substitution,它又稱為指令替換,這個的原理可以理解為就是不改變功能的前提下,將簡單的指令替換成更復雜的指令,當有多個等效指令序列可用時候,會隨機選擇一個指令進行替換。這個混淆它并不會增強過多的安全性,因為它可以通過重新優化生成的代碼輕松刪除,如果選擇使用隨機生成器以不同數值作為種子,指令替換會在生成的二進制文件中帶來多樣性。

它支持以下的2種模式功能:

-mllvm -sub:激活指令替換

-mllvm -sub_loop=3:如果激活了傳遞,則在函數上應用3次。默認值:1

-mllvm -bcf,它的全稱Bogus Control Flow,也稱為虛假控制流。這個主要原理就是在當前基本塊之前添加一個新的基本塊用來修改函數調用圖,這個新的基本塊包含一個不透明的謂詞,通過有條件地跳轉到原來的基本塊。原始的基本塊也會被克隆并填充隨機的垃圾指令。

這虛假控制流代碼保護模式主要通過在不改變代碼功能前提下往代碼里面嵌套幾層的判斷邏輯,這種模式下會大大影響程序的性能,因為它在代碼下混雜著真真假假的代碼。

這個模式下它支持3種功能選項:

-mllvm -bcf: 激活偽造的控制流通道

-mllvm -bcf_loop=3: 如果 pass 被激活,在一個函數應用 3 次。默認值:1

-mllvm -bcf_prob=40:如果激活通行證,一個基本塊將以 40% 的概率被混淆。默認值:30

-mllvm -sobf也稱為字符串混淆,主要實現將代碼中的字符串做加密,使得無法通過靜態逆向方式直接看到字符串信息。

它主要支持2種功能模式選項:

-mllvm -sobf:編譯時候添加選項開啟字符串加密

-mllvm -seed=0xdeadbeaf:指定隨機數生成器種子流程

OLLVM編譯

編譯OLLVM前需要以下的工具和代碼:

1、OLLVM源碼(基礎之源)

https://releases.llvm.org/download.html

2、cmake工具(將OLLVM轉換為sln項目)

https://cmake.org/download/

3、Visual studio工具(編譯OLLVM源碼)

https://visualstudio.microsoft.com/zh-hans/

在window環境下編譯OLLVM的源碼主要需要經歷2個步驟

1、通過利用cmake將OLLVM的源碼轉換為sln的項目

可以通過利用cmake工具或者用命令行方式轉換,下面以命令行方式轉換的

cmake -Thost=x64 -G "Visual Studio 16" E:ollvm9obfuscator-llvm-9.0.1obfuscator-llvm-9.0.1

上面要主要的是Visual Studio 16這個代表你環境中安裝的vs版本,我安裝2019版本的,所以用它。

通過執行以上命令后就會出現下圖的效果

6d3f5078-372d-11ed-ba43-dac502259ad0.png

2、用Visual studio 2019 直接編譯前面生成的OLLVM項目,主要編譯Release版本。編譯后正確情況下會生成bin和lib兩個文件夾。

6d52743c-372d-11ed-ba43-dac502259ad0.png

OLLVM集成

通過前面的編譯后生成的bin和lib文件夾,集成到NDK中,并通過android studio編譯器進行so代碼保護的應用。

將vs編譯生成后的bin和lib文件夾,替換到NDK中的llvm文件夾下面toolchainsllvmprebuiltwindows-x86_64(替換之前切記做下備份,萬一出問題了還能回滾)

6d5d9a88-372d-11ed-ba43-dac502259ad0.png

通過配置Android.mk文件進行設定需要對so文件采用什么方式的全局代碼保護。

可能大家會覺得保護強度越強越好,代碼虛擬化、字符串混淆、指令替換等等都給用下去,那樣就安全了,其實不是這樣的,這些強度雖然上去了但是會給項目帶來非常大的負擔。往往會帶來負面性能影響。

個人建議:可以針對字符串做個混淆(-mllvm -sobf),外加指定核心函數進行做代碼保護。這樣強度也有了,對應用的性能影響方面也相對較小。

6d6ab9ac-372d-11ed-ba43-dac502259ad0.png

上圖中Android.mk設置的保護方式屬于全局的保護,設置后整個so就都會基于設置的保護。

通過配置Application.mk文件,進行指定ollvm的clang具體版本數據(這個具體版本數據也可以lib文件夾下clang文件夾下查看)。

6d7a73ce-372d-11ed-ba43-dac502259ad0.png

OLLVM保護效果

為了更好展示分析ollvm保護后的效果,主要通過基于__attribute((__annotate__(("sub"))))這種方式,對指定函數進行做保護,而沒有進行配置全局的保護。

下圖的代碼功能效果僅是為了測試OLLVM的虛假指令保護后的實現效果

6d864622-372d-11ed-ba43-dac502259ad0.png

下圖是基于IDA工具的原始和虛假控制流的代碼保護流程圖,可以看到代碼的執行流程已被調整變得相對復雜化,這樣就大大強化了代碼的安全強度,這種逆向分析其代碼至少靜態分析起來就費勁了。

6da08960-372d-11ed-ba43-dac502259ad0.png

下圖是通過指定函數進行設置指令替換的功能的代碼展示

6db4227c-372d-11ed-ba43-dac502259ad0.png

通過下圖IDA靜態的代碼流程圖可以很清晰分析到,它實際上代碼流程是沒有任何變化的,所以這種保護模式下的代碼保護功能時沒有很明顯的效果的。

6dcbd822-372d-11ed-ba43-dac502259ad0.png

下圖的代碼是通過調用ollvm的控制流扁平化功能進行對函數保護的代碼展示

6dd66076-372d-11ed-ba43-dac502259ad0.png

通過下圖IDA的代碼流程圖,可以看到代碼控制流扁平化保護后,整個流程就變得復雜化了。這就讓代碼的安全性上升一個層次了,這樣逆向分析還原代碼功能的成本就大大提高了。

6df3938a-372d-11ed-ba43-dac502259ad0.png

小結

通過上文OLLVM的一系列的原理集成、編譯、配置、集成、代碼生成、效果展示,主要為了給SO代碼的防破解防逆向增加點門檻,提高點安全性。這系列的代碼保護對于專業搞逆向的人員來說,它們可以通過基于Trace、unicron、frida這些方式去還原和去除OLLVM的混淆保護。

對于代碼的安全性思考,不過在安全攻防對抗的過程中防御一直屬于被動狀態的也是相對滯后的。安全防護也是隨著對抗去不斷去提高變強。

代碼安全防護方面可以借助于OLLVM然后進行做定制魔改,現有的逆向工具更多是基于標準化進行做反匯編,那么我們可以對這些逆向工具做些防護(可以多個方案結合),然后調整成為一些非標準化的,這樣會大大增加逆向分析的成本。

只要逆向分析成本超過所破解后所獲取的收益,那么你的代碼就相對安全了。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4898

    瀏覽量

    70586
  • 編譯器
    +關注

    關注

    1

    文章

    1661

    瀏覽量

    50147

原文標題:一種高端的APP代碼保護方案

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問ubuntu 14.04 編譯am57xx SDK , 發生nativesdk-ti-llvm3.6異常是為什么?

    本帖最后由 一只耳朵怪 于 2018-6-5 14:11 編輯 ubuntu 14.04 編譯am57xx SDK , 發生nativesdk-ti-llvm3.6 異常, 求高手
    發表于 06-04 11:31

    LLVM編譯器編譯過程

    LLVM 編譯器 原理解析, 插件編寫
    發表于 04-28 08:15

    LLVM clang 公開 -std=c++23

    合入 LLVM 17 倉庫的代碼對 Clang 編譯器使用 -std=c++23 代替了 -std=c++2b。 隨著 ISO C++ 委員會投票決定 C++23 標準已達到其技術完整狀態
    發表于 05-27 11:29

    GPS功能介紹

    GPS功能介紹 功能介紹
    發表于 01-29 10:35 ?5043次閱讀

    在Swift中使用LLVM的四個要點

    本文主要內容是演示如何在Swift中使用LLVM,其包含了如下四個要點: 獲取最新版本的LLVM使用CMake和llvm-config編譯程序編寫簡單的Swift程序,編譯并與LLVM
    發表于 10-13 16:55 ?0次下載
    在Swift中使用<b class='flag-5'>LLVM</b>的四個要點

    四個不同的系統上進行LLVM/Clang 6.0 和 5.0 的編譯器Benchmark測試

    參與測試的 LLVM 5.0.1 和 LLVM 6.0.0 穩定版都是來自 apt.llvm.org。測試期間,每個系統都將其 CFLAGS/CXXFLAGS 設置為 "-O3 -march
    的頭像 發表于 03-29 15:25 ?8035次閱讀

    LLVM終身程序分析與轉換的編譯框架的詳細資料說明

    本文描述了LLVM(Low Level Virtual Machine)編譯器框架,它通過在編譯時、鏈接時、運行時和運行之間的空閑時間向編譯器轉換提供高級信息,支持對任意程序進行透明的、終身的程序
    發表于 06-08 08:00 ?0次下載
    <b class='flag-5'>LLVM</b>終身程序分析與轉換的編譯框架的詳細資料說明

    微軟與LLVM、Rust達成合作,將CFG支持添加到編譯器

    微軟方面宣布,該公司已與 LLVM 和 Rust 開發團隊達成合作,將對 Windows Control Flow Guard(CFG)平臺安全功能的支持添加到了 Clang 和 Rustc 編譯器
    的頭像 發表于 08-20 11:44 ?3175次閱讀

    llvm-mctoll將二進制文件轉換為LLVM IR

    ./oschina_soft/llvm-mctoll.zip
    發表于 06-22 11:35 ?0次下載
    <b class='flag-5'>llvm</b>-mctoll將二進制文件轉換為<b class='flag-5'>LLVM</b> IR

    淺談LLVM LibFuzzer工具和實踐

    一種強大且智能的測試方式呢?答案是肯定的,它就是出自 LLVM 編譯器框架的 LibFuzzer 工具。
    的頭像 發表于 10-27 10:57 ?2737次閱讀

    LLVM源碼淺析-1

    作為一個優秀的開源編譯器框架,llvm的代碼比gcc代碼的可讀性更好。因此無論是學習c++,還是學習編譯原理、設計模式、數據結構,都是一個很好的學習目標。
    的頭像 發表于 03-02 16:06 ?2571次閱讀
    <b class='flag-5'>LLVM</b>源碼淺析-1

    LLVM國際開源軟件社區發布正式支持LoongArch架構的版本

    發行版將可以直接基于上游社區版本進行構建,標志著LoongArch軟件生態建設將迎來快速發展的新階段。 LLVM介紹 LLVM是如今設計和開發編譯器的最重要的框
    的頭像 發表于 03-21 09:45 ?2032次閱讀

    LLVM16的新增功能介紹

    除了對今年架構的標準支持外,我們還完成了對可擴展矩陣擴展(SME和SME2)的匯編級支持。
    的頭像 發表于 05-18 10:07 ?2314次閱讀
    <b class='flag-5'>LLVM</b>16的新增<b class='flag-5'>功能</b><b class='flag-5'>介紹</b>

    什么是LLVMLLVM的優勢和特點有哪些?

    LLVM是一個開源的編譯器基礎設施項目,它以"Low-Level Virtual Machine"的縮寫命名,盡管名稱中包含了"虛擬機"一詞,但LLVM不僅僅是一個虛擬機,而是一個綜合的編譯器工具鏈。
    的頭像 發表于 06-11 15:54 ?1.1w次閱讀

    使用LLVM-embedded-toolchain-for-Arm-17.0.1開發STM32

    LLVM-embedded-toolchain-for-Arm 是一個 ARM 公司開源的適用于 32 位ARM芯片的工具鏈,支持多種ARM指令集架構,包括最新的 CM85 內核。
    的頭像 發表于 10-23 16:46 ?2590次閱讀
    使用<b class='flag-5'>LLVM</b>-embedded-toolchain-for-Arm-17.0.1開發STM32
    主站蜘蛛池模板: 99re精品视频在线播放视频 | 新影音先锋男人色资源网 | 绝对诱惑在线试听 | 国产精品久久久久久免费播放 | 99精品视频免费在线观看 | 一二三四电影完整版免费观看 | 国产在线观看成人免费视频 | 国产亚洲视频在线观看 | 免费高清在线影片一区 | av影音先锋天堂网 | WWW国产精品人妻一二三区 | 国产精品丰满人妻AV麻豆 | 人妖干美女 | 免费精品国偷自产在线在线 | 8X拨牐拨牐X8免费视频8 | 嫩B人妻精品一区二区三区 内射一区二区精品视频在线观看 | 久久免费看少妇级毛片蜜臀 | 国产在线精品亚洲一品区 | 亲女乱h文小兰第一次 | 精品夜夜澡人妻无码AV蜜桃 | 国内精品自产拍在线少密芽 | 久久久久久极精品久久久 | 在线视频免费观看 | 青春草国产成人精品久久 | 亚洲高清在线天堂精品 | 国产精品97久久AV麻豆 | 国产免费播放一区二区三区 | 九九色精品国偷自产视频 | 久久亚洲精品专区蓝色区 | 国产成人无码AV麻豆 | 91看片淫黄大片.在线天堂 | 嘟嘟嘟WWW在线观看视频高清 | 天堂岛www天堂资源在线 | 日本高清片免费观看 | 亚洲日本乱码中文论理在线电影 | 三级黄色在线观看 | 少妇连续高潮抽搐痉挛昏厥 | 办公室的秘密2中文字幕 | 久久影院午夜理论片无码 | 免费韩国伦理2017最新 | 亚洲成人免费在线 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品