在Mac&iOS App中使用ollvm

Ollvm,是C/C++的跨平臺混淆方式泪喊,它提供了指令平坦化的能力棕硫,可以吧邏輯變得相當(dāng)復(fù)雜從而阻止逆向工程。網(wǎng)上有很多關(guān)于在Android平臺使用ollvm的方法袒啼,而Windows/iOS/Mac/Linux上則很少介紹哈扮,下面對于其他系統(tǒng)簡略介紹操作方法,重點介紹Mac/iOS APP的混淆方法

  • 指令替換 -mllvm -sub
  • 控制流偽造 -mllvm -bcf
  • 控制流平坦化 -mllvm -fla

默認(rèn)會變換所有函數(shù)蚓再,加密單個函數(shù):

int foo() __attribute((__annotate__(("fla"))));
int foo() {
   return 2;
}

獲得OLLVM

目前有以下版本在git上放出:

(1) 作者放出的原版OLLVM
包括llvm-3.3, llvm-3.4, llvm-3.5, llvm-3.6.1這幾個版本灶泵,下載編譯:

$ git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
$ make

(2) 上海交大改版OLLVM
增加了字符串編譯時混淆-mllvm -sobf,對應(yīng)llvm4.0版本对途,下載編譯:

$ git clone https://github.com/GoSSIP-SJTU/Armariris.git
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
$ make

(3) 第三方改版OLLVM
好事者在上海交大的基礎(chǔ)上赦邻,增加了llvm5.0 llvm6.0版本,下載編譯方式同上
ollvm6.0 https://github.com/Qrilee/Obfuscator-LLVM.git
ollvm5.0 https://github.com/Qrilee/llvm-obfuscator.git

編譯OLLVM

注意实檀,LLVM支持Windows/iOS/Mac/Linux/Android等全平臺惶洲,OLLVM同理。只要你的工程使用LLVM-Clang進(jìn)行編譯膳犹,自然可以用OLLVM做混淆恬吕。如果只支持GCC編譯則需要做調(diào)整

上述編譯方式是普通編譯,在編譯后得到可執(zhí)行文件Clang就是用作混淆的须床,用它來替換編譯使用的clang程序即可铐料,clang路徑可以從編譯時命令行參數(shù)得到。如果使用make/cmake的工程豺旬,可以通過設(shè)置某些選項設(shè)置clang編譯器钠惩。然后通過暴力替換clang達(dá)到同樣的效果

  • 直接編譯
    path_to_the/build/bin/clang test.c -o test -mllvm -sub

  • make/cmake編譯

CC=path_to_the/build/bin/clang
CFLAGS+="-mllvm -fla"     或     CXXFLAGS+="-mllvm -fla" 
./configure
make

android ndk使用ollvm

首先要設(shè)置編譯器為clang

    • ndk-build方式,修改android.mk
      NDK_TOOLCHAIN_VERSION := clang
    • cmake方式族阅,修改build.gradle
android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                arguments '-DANDROID_PLATFORM=android-9',
                          '-DANDROID_TOOLCHAIN=clang'
                // explicitly build libs
                targets 'gmath', 'gperf'
            }
        }
    }
    ...
}

cmake下替換clang程序篓跛,在CMakeLists.txt中修改 set(LOCAL_CFLAGS " -mllvm -fla")
ndkbuild下替換clang程序,在Android.mk中加入?yún)?shù)LOCAL_CFLAGS := -mllvm -fla

visual studio使用ollvm

編譯ollvm的時候坦刀,使用cmake-gui選擇visual studio2015或者命令行選擇cmake -G "Visual Studio 14 2015" -DCMAKE_BUILD_TYPE=Release ../obfuscator/
然后cmake會產(chǎn)生一個visual studio工程愧沟,用vs編譯即可!
至于將Visual Studio的默認(rèn)編譯器換成clang編譯鲤遥,參考https://www.ishani.org/projects/ClangVSX/

Visual Studio2015起官方開始支持Clang沐寺,具體做法:
新建項目->已安裝->Visual C++->跨平臺->安裝Clang with Microsoft CodeGen
Clang是一個完全不同的命令行工具鏈,這時候可以在工程配置中盖奈,平臺工具集選項里找到Clang混坞,然后使用ollvm的clang替換該clang即可

xcode編譯(用于編譯OSX/iOS app)

編譯方式比較特殊,由于xcode本身比較特殊卜朗,需要編譯一套工具鏈給xcode

cmake -G Ninja -DLLVM_CREATE_XCODE_TOOLCHAIN=On -DCMAKE_INSTALL_PREFIX=$PWD/install
ninja install-xcode-toolchain

最后得到一個后綴含toolchain的大文件(如LLVM6.0.0.git.xctoolchain)拔第,大概8G咕村,將文件mv到/Application/Xcode.app/Contents/Developer/Toolchains/下场钉。重啟Xcode將會在菜單->Xcode出現(xiàn)Toolchains菜單項蚊俺。選擇里面的llvm即可切換到新的工具鏈。如果直接編譯逛万,會產(chǎn)生error:cannot specify -o when generating multiple output files錯誤泳猬,這時候通過逐步排查可以得知將Build Settings->Build Options->Enable Index-While-Building Functionality設(shè)置為No即可成功編譯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宇植,隨后出現(xiàn)的幾起案子得封,更是在濱河造成了極大的恐慌,老刑警劉巖指郁,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忙上,死亡現(xiàn)場離奇詭異,居然都是意外死亡闲坎,警方通過查閱死者的電腦和手機(jī)疫粥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腰懂,“玉大人梗逮,你說我怎么就攤上這事⌒辶铮” “怎么了慷彤?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怖喻。 經(jīng)常有香客問我底哗,道長,這世上最難降的妖魔是什么锚沸? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任艘虎,我火速辦了婚禮,結(jié)果婚禮上咒吐,老公的妹妹穿的比我還像新娘野建。我一直安慰自己,他們只是感情好恬叹,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布候生。 她就那樣靜靜地躺著,像睡著了一般绽昼。 火紅的嫁衣襯著肌膚如雪唯鸭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天硅确,我揣著相機(jī)與錄音目溉,去河邊找鬼明肮。 笑死,一個胖子當(dāng)著我的面吹牛缭付,可吹牛的內(nèi)容都是我干的柿估。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼陷猫,長吁一口氣:“原來是場噩夢啊……” “哼秫舌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绣檬,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤足陨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后娇未,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墨缘,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年零抬,在試婚紗的時候發(fā)現(xiàn)自己被綠了镊讼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡媚值,死狀恐怖狠毯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褥芒,我是刑警寧澤嚼松,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站锰扶,受9級特大地震影響献酗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坷牛,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一罕偎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧京闰,春花似錦颜及、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痊土,卻和暖如春肄扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工犯祠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留旭等,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓衡载,卻偏偏與公主長得像搔耕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子月劈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容