2023年6月27日发(作者:)
OLLVM代码混淆移植与使⽤简介移植OLLVM如果⾃⼰想拿最新版的LLVM和Clang进⾏移植功能其实也并不是很难,整理⼀下其实改动很⼩,接下来将会讲⼀下移植的⽅法。个⼈整理下载LLVM#下载llvm源码wget /llvm-mirror/llvm/zip/release_70unzip llvm-release_ llvm-release_70 llvm#下载clang源码wget /llvm-mirror/clang/zip/release_70unzip clang-release_ clang-release_70 llvm/tools/clang添加混淆代码如果⽤git的话只需要执⾏git cherry-pick xxxx把xxxx换成对应的我的版本上的提交哈希填上即可。极度推荐⽤git搞定。如果⼿动⼀点点加的话,第⼀步就是把我改过的OLLVM⽂件夹⾥/include/llvm/Transforms/Obfuscation和/lib/Transforms/Obfuscation移动到刚才下载好的llvm源码⽂件夹相同的位置。git clone /heroims/ obfuscatorgit checkout llvm-7.0cp include/llvm/Transforms/Obfuscation llvm/include/llvm/Transforms/Obfuscationcp lib/Transforms/Obfuscation llvm/lib/Transforms/Obfuscation然后⼿动修改8个⽂件如下:编译mkdir buildcd build#如果不想跑测试⽤例加上-DLLVM_INCLUDE_TESTS=OFF
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_CREATE_XCODE_TOOLCHAIN=ON ../obfuscator/make -j7使⽤这⾥原版提供了3种混淆⽅式分别是控制流扁平化,指令替换,虚假控制流程,⽤起来都是加cflags的⽅式。下⾯简单说下这⼏种模式。控制流扁平化这个模式主要是把⼀些if-else语句,嵌套成do-while语句-mllvm -fla:激活控制流扁平化-mllvm -split:激活基本块分割。在⼀起使⽤时改善展平。-mllvm -split_num=3:如果激活了传递,则在每个基本块上应⽤3次。默认值:1指令替换这个模式主要⽤功能上等效但更复杂的指令序列替换标准⼆元运算符(+ , – , & , | 和 ^)-mllvm -sub:激活指令替换-mllvm -sub_loop=3:如果激活了传递,则在函数上应⽤3次。默认值:1虚假控制流程这个模式主要嵌套⼏层判断逻辑,⼀个简单的运算都会在外⾯包⼏层if-else,所以这个模式加上编译速度会慢很多因为要做⼏层假的逻辑包裹真正有⽤的代码。另外说⼀下这个模式编译的时候要浪费相当长时间包哪⼏层不是闹得!-mllvm -bcf:激活虚假控制流程-mllvm -bcf_loop=3:如果激活了传递,则在函数上应⽤3次。默认值:1-mllvm -bcf_prob=40:如果激活了传递,基本块将以40%的概率进⾏模糊处理。默认值:30上⾯说完模式下⾯讲⼀下⼏种使⽤⽅式直接⽤⼆进制⽂件直接使⽤编译的⼆进制⽂件build/bin/clang test.c -o test -mllvm -sub -mllvm -fla -mllvm -bcfNDK集成这⾥分为⼯具链的制作和项⽬⾥的配置。制作Toolchains这⾥以修改最新的ndk r18为例,⽼的ndk版本⽐这更容易都在ndk-bundle/toolchains⾥放着需要修改的⽂件。#复制ndk的toolschain⾥的llvmcp -r Android/sdk/ndk//toolchains/llvm Android/sdk/ndk//toolchains/ollvm#删除prebuilt⽂件夹下的⽂件夹的bin和lib64,prebuilt⽂件夹下根据系统不同命名也不同rm -rf Android/sdk/ndk//toolchains/ollvm/prebuilt/darwin-x86_64/binrm -rf Android/sdk/ndk//toolchains/ollvm/prebuilt/darwin-x86_64/lib64#把我们之前编译好的ollvm下的bin和lib移到我们刚才删除bin和lib64的⽬录下mv build/bin Android/sdk/ndk//toolchains/ollvm/prebuilt/darwin-x86_64/binmv build/lib Android/sdk/ndk//toolchains/ollvm/prebuilt/darwin-x86_64/lib64#复制Android/sdk/ndk/
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687841972a49987.html
评论列表(0条)