当前位置: 首页 > news >正文

网站开发与解决技巧小程序登录页面

网站开发与解决技巧,小程序登录页面,安卓手机app开发工具,桂林论坛网站建设OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目#xff0c;该项目旨在提供一套开源的针对LLVM的代码混淆工具#xff0c;以增加对逆向工程的难度。OLLVM是基于LLVM实现的#xff0c;LLVM是一个编译器框架#xff0c;它也采用经典的三段…OLLVM简介OLLVM(Obfuscator-LLVM)是瑞士西北应用科技大学于2010年6月份发起的一个项目该项目旨在提供一套开源的针对LLVM的代码混淆工具以增加对逆向工程的难度。OLLVM是基于LLVM实现的LLVM是一个编译器框架它也采用经典的三段式设计。前端可以使用不同的编译工具对代码文件做词法分析以形成抽象语法树AST然后将分析好的代码转换成LLVM的中间表示IR(intermediate representation)中间部分的优化器只对中间表示IR操作通过一系列的Pass对IR做优化后端负责将优化好的IR解释成对应平台的机器码。LLVM的优点在于不同的前端语言最终都转换成同一种的IR。OLLVM的混淆操作就是在中间表示IR层通过编写Pass来混淆IR然后后端依据IR来生成的目标代码也就被混淆了。得益于LLVM的设计OLLVM适用LLVM支持的所有语言(C, C, Objective-C, Ada 和 Fortran)和目标平台(x86, x86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, SystemZ, 和 XCore)。OLLVM的几种混淆方式OLLVM默认支持 -fla -sub -bcf 三个混淆参数这三个参数可以单独使用也可以配合着使用。-fla 参数表示使用控制流平展(Control Flow Flattening)模式-sub参数表示使用指令替换(Instructions Substitution)模式-bcf参数表示使用控制流伪造(Bogus Control Flow)模式-sub instruction substitution(指令替换)-fla control flow flattening(控制流平坦化)-bcf bogus control flow(控制流伪造)此外OLLVM支持对单个函数进行混淆即Functions annotations模式以下分别介绍这几种方式并举例说明instruction substitution(指令替换)指令替换是一种比较简单的混淆方式OLLVM将一些简单的运算复杂化但这种方式容易被代码优化给去除目前OLLVM只实现对整数运算的混淆。加法混淆例如 a b c 可以被混淆为12341. a b - (-c)2. a -(-b (-c))3. r rand (); a b r; a a c; a a - r4. r rand (); a b - r; a a b; a a r减法混淆例如 a b-c 可以被混淆为1231. a b (-c)2. r rand (); a b r; a a - c; a a - r3. r rand (); a b - r; a a - c; a a rAND运算混淆a b c a (b ^ ~c) bOR运算混淆a b | c a (b c) | (b ^ c)XOR运算混淆a a ^ b a (~a b) | (a ~b)如果一种运算对应多种混淆方式OLLVM将会随机选择一种以下为使用OLLVM进行指令替换后的前后对比源码12345int test(int a,int b){int c a b;return c2;}sub前sub后分析汇编指令得出ab2 运算变成了 -(-b-(a2))control flow flattening(控制流平坦化)control flow flattening(控制流平坦化)通过多个case-swich结构将程序的控制流变成扁平形状打破原有的逻辑结构增加逆向的难度。例如对于以下代码123456789#include int main(int argc, char** argv) {int a atoi(argv[1]);if(a 0)return 1;elsereturn 10;return 0;}OLLVM将把它变为如下结构12345678910111213141516171819202122#include int main(int argc, char** argv) {int a atoi(argv[1]);int b 0;while(1) {switch(b) {case 0:if(a 0)b 1;elseb 2;break;case 1:return 1;case 2:return 10;default:break;}}return 0;}从代码中可以看到OLLVM将源代码分割为几个基本块并放在一个while循环结构中无线循环程序的流程由变量b控制。以下是使用OLLVM进行控制混淆后的前后对比源码123456789#include int main(int argc, char** argv) {int a atoi(argv[1]);if(a 0)return 1;elsereturn 10;return 0;}fla之前fla之后F5之后的代码由此可见fla之后的控制流比较复杂通过分析fla之后的代码我们发现代码中的result仅仅受v7的影响但分析起来着实费力。bogus control flow(控制流伪造)bogus control flow通过在源程序的控制流中添加一些基本块这些基本块仅仅起了连接作用并不影响实际的执行逻辑。以下为使用OLLVM进行控制流伪造后的对比源码123456789#include int main(int argc, char** argv) {int a atoi(argv[1]);if(a 0)return 1;elsereturn 10;return 0;}bcf之前![upload successful](/images/pasted-128.png)bcf之后![upload successful](/images/pasted-131.png)F5之后的代码![upload successful](/images/pasted-132.png)由此看出bcf的方式在程序中增加了一个代码块这个代码块对函数返回值没有任何影响但对于逆向人员来说增加了其逆向分析的无用功。Functions annotations有时候为了提高效率开发者仅需要对指定的函数进行混淆OLLVM的Functions annotations模式支持对单个函数进行混淆。比如想对函数func()使用bcf混淆只需要给函数func()增加bcf属性即可。1int func() __attribute((__annotate__((bcf))));OLLVM的flasub和bcf三个属性可以搭配使用只需要添加对应的编译选项即可。利用OLLVM进行Android native代码混淆1.下载并编译ollvm12345$ git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git$ mkdir build$ cd build$ cmake -DCMAKE_BUILD_TYPERelease ../obfuscator/$ make -j72.配置NDK以支持ollvm新建编译链在 android-ndk-r14b/toolchains 下新建目录 ollvm-4.0/prebuilt/darwin-x86_64(我的环境是mac)把前一步编译生成的结果拷贝到此目录下(主要是bin和lib)配置编译链在 android-ndk-r14b/build/core/toolchains 目录下新建目录 arm-linux-androideabi-clang-ollvm4.0拷贝目录 arm-linux-androideabi-clang 下的文件 config.mk 与 setup.mk 到 arm-linux-androideabi-clang-ollvm4.0 中修改setup.mk文件。123456789############################ 原始配置 #############################LLVM_TOOLCHAIN_PREBUILT_ROOT : $(call get-toolchain-root,llvm)#LLVM_TOOLCHAIN_PREFIX : $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/############################################################################################# 修改后 #############################OLLVM_NAME : ollvm-4.0LLVM_TOOLCHAIN_PREBUILT_ROOT : $(call get-toolchain-root,$(OLLVM_NAME))LLVM_TOOLCHAIN_PREFIX : $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/#其他配置不做修改3.使用ollvm进行编译使用 ollvm 进行 ndk 的编译需要对 Application.mk 和 Android.mk 文件做相应的修改。Android.mk 中添加混淆编译参数1LOCAL_CFLAGS -mllvm -sub -mllvm -bcf -mllvm -flaApplication.mk 中配置 NDK_TOOLCHAIN_VERSION12APP_ABI : x86 armeabi-v7a x86_64 arm64-v8a armeabi mips64NDK_TOOLCHAIN_VERSION : clang-ollvm-4.0参考资料
http://www.zqtcl.cn/news/641532/

相关文章:

  • 随州网站建设公司wordpress怎样上传主题
  • 做外链等于网站更新么台州椒江网站建设
  • 自己搭建一个博客网站网络营销是什么大类
  • 10元网站备案php企业网站开发实训报告
  • 建筑网站设计大全wordpress模板死循环
  • 网站优化排名软件泌阳网站建设
  • 网站反向绑定域名企业网站的建立网络虚拟社区时对于企业
  • 重庆大渡口网站建设解决方案梓潼 网站建设 有限公司
  • 高端平面网站东营住房和城乡建设厅网站
  • 品牌网站建设e小蝌蚪易时代网站
  • 做搜狗手机网站点击软网站建设有哪些种类
  • 想自学做网站太原要做网站的公司
  • 站内seo优化淘宝网站推广策划方案
  • 福建建设执业注册中心网站网址格式怎么写
  • 网站开发外包公司坑襄垣城乡建设管理局的网站
  • 网络公司怎么做网站常州新北区网站建设
  • 扬州专业外贸网站建设推广做详情页上什么网站找素材
  • 北京做网站设计招聘深圳市住房和建设局官网平台
  • 冻品网站建设网站头图设计
  • 手机网站分辨率做多大h5微网站建设多少钱
  • 网站制作软件下载公司怎么注册邮箱帐号
  • 做婚纱网站的图片园林设计
  • 濮阳公司建站淮北城市住建网
  • 建设银行网站打不开 显示停止工作专门做地图的网站
  • 有没有人一起做网站app网站建设方案
  • 洛阳网站建设兼职企业网站建设文案
  • 动漫制作贵州seo策略
  • asp网站建设项目实训该怎么跟程序员谈做网站
  • 网站软件资源iis不能新建网站
  • 网站设计的发展趋势西安市建设工程交易网