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

英文美食网站怎么做泰安集团网站建设多少钱

英文美食网站怎么做,泰安集团网站建设多少钱,怎么做社交网站,响应式网站seo1#xff0e;主要开展的工作 研究对LLVM IR层面进行代码混淆#xff0c;分析IR的指令 #xff0c;并且实现混淆 从LLVM代码混淆的角度出发#xff0c;函数之间的正常调用构成了待混淆程序的原始控制流#xff0c;不同的基础代码块构成了一个个的函数#xff0c;每个基础…1主要开展的工作 研究对LLVM IR层面进行代码混淆分析IR的指令 并且实现混淆 从LLVM代码混淆的角度出发函数之间的正常调用构成了待混淆程序的原始控制流不同的基础代码块构成了一个个的函数每个基础代码块又是由一条一条程序语句构成的每条程序语句可以看做是一条指令。这些细节可以帮助理解算法并实现代码混淆基于LLVM的代码混淆就是通过对函数、代码块、程序语句和指令的处理来混淆程序的控制流、数据流和逻辑等 2.研究成果 2.1实验环境的搭建 操作系统 Ubuntu 20.04.6 编译器版本 Obfuscator-LLVM 4.0.1 前端 Clang、clang、others 编程语言 C、C 目标平台 x86_64-unknown-linux-gnu 安装LLVM的方式有很多可以从官方上下载预编译好的包也可以用源码进行编译。这里我们用源码进行编译版本是4.0.1的版本 我们使用如下命令进行了构建 $cd llvm-project $mkdir build cd build $cmake -G “Unix Makefiles” -DLLVM_ENABLE_PROJECTS“clang” -DCMAKE_BUILD_TYPERelease -DLLVM_TARGETS_TO_BUILD“X86” -DBUILD_SHARED_LIBSOn …/llvm $make -G 指定为 Unix Makefiles 使用 DCMAKE_BUILD_TYPE 选项指定编译的版本为 Release一共有四种模式可选分别为Debug, Release, RelWithDebInfo和MinSizeRel。使用 Release 可以节省空间省略调试信息。 DLLVM_TARGETS_TO_BUILD 指定目标平台的架构。 -DLLVM_ENABLE_PROJECTS表明还需要编译的项目这里指定 clang可以根据需要加入其他子项目。 -DBUILD_SHARED_LIBS 指定使用动态链接来链接LLVM的库默认取值Off代表静态链接 2.2 LLVM IR LLVM的核心就是LLVM IRLLVM项目从一系列围绕LLVM IR工具 IR有三种等价的表达形式 1.内存表示Instruction类等 2.被压缩的磁盘表示位码文件 3.人工可读文本的磁盘表示LLVM汇编文件 我们用编写的sum.c样本作为示例 int sum(int x,int y) { return xy; } 生成位码 clang sum.c -emit-llvm -c -o sum.bc 生成汇编 clang sum.c -emit-llvm -s -c -o sum.ll 汇编上述LLVM IR 汇编文本 llvm-as sum.ll -o sum.bc 从位码转换为IR汇编文本反汇编程序 llvm-dis sum.bc -o sum.ll 在LLVM IR中只有 .ll文件是人为可读的文件 2.3 LLVM IR基本块分割技术 基本块分割即将一个基本块分割为等价的若干个基本块在分割后的基本块之间加上无条件跳转 基本块分割不是纯正的代码混淆技术但是在以基本块为基本单位的代码混淆技术中基本块的数量越多进行代码混淆后的复杂度越大通过人为增加基本块的数量可以达到提高代码混淆效果的目的。其实现思路即判断和遍历每个函数中不包含PHI指令的基本块研究根据指定的一个基本块会被分裂成几个基本块的个数计算出对每一个基本块进行分割的次数再进行分割即可 待混淆的函数F混淆后的函数为O(F) 输入待混淆函数F 输出混淆后的函数O(F) 步骤 Begin if(toObfuscate(F))then do split(Function F) for basic blocks in iterator do containsPHI() shuffle() …… splitBasicBlock() end endif end 主要函数 功能描述 bool toObfuscate(Function F) 检测是都启动了split功能 bool containsPHI(BasicBlock *b) 检测如果它的size(即包含的指令数)只有1个或者包含PHI节点则不分割该block Void shuffle(std::vectorint vec) 用shuffle打乱指令的顺序 BasicBlock *splitBasicBlock(Instruction *I, const Twine BBName “”,bool Before false) 基本块分割即将一个基本块分割为等价的若干个基本块在分割后的基本块之间加上无条件跳转 给出指令 $clang sum.c -S -emit-llvm -o sum.ll $clang sum.c -S -emit-llvm -o sumpass.ll -mllvm -split 以sum.c为示例 2.4控制流平坦化混淆技术 算法生成一个选择指令swtichl并将原有的基本块均作为switch指令的后继跳转由选择指令的选择变量switchVtr参数决定在每一次的选择中哪一个基本块作为其后继跳转。 为了实现这一目标在所有原基本块的开头增加选择标识数指令在基本块的尾部添加新生成选择变量的指令。此外算法还生成一个调度分发块作为所有原基本块的后续跳转。调度分发块的后继节点为选择指令调度分发块会将所有原基本块传递的选择变量传递给选择指令选择指令继续下一个循环直到将所有原基本块执行完毕。 此外由于LLVM IR作为一种静态单赋值SSA形式的代码表示[9]即每个变量都只能被赋值一次而控制流平坦化算法在执行后所有原基本块的前驱块都变成了分发块因此PHI指令发生了损坏。同时平坦化后原基本块之间会不存在确定的前后关系由分发块决定因此某些变量的引用可能会损坏称之为逃逸变量这些逃逸变量在编译时会出现分不清定义和引用顺序的问题。所以在算法的最后需要修复所有的PHI指令和逃逸变量。 这种混淆算法可以有效增加程序的复杂性和安全性大大提升逆向分析者的分析难度。混淆后程序的控制流为 1从入口块进入执行入口块然后跳转到分发块 2根据分发块中switch指令跳转到对应的基本块 3执行完分发的基本块后跳转到统一的返回块 4返回块跳转到分发块分发块读取基本块中switch指令的case值继续进行下一次分发和跳转。 待混淆函数为F混淆后的函数为O(F) 步骤 Begin createLowerSwitchpass() for basic block in function iterator do save original basic block end AllocaInst() and ConstantInst::Get(…) BasicBlock::Create() SwitchInst::Create() caesVar loopEntry loopEnd for basic blocks in original basic block iterator do put all basic block in switch, change terminator instruction, addCase(numCase,i) reaalculate switch variable end end 主要函数 功能描述 createLowerSwitchPass() LLVM底层Switch指令创建口 AllocaInst() LLVM创建指令并为指令分配地址空间创建了一个switch用的变量 ConstantInst::get() 创建常量并为常量赋值 BasicBlock::Create() 创建基本块的接口 SwithchInsCreatef-begin(), swDefault, 0, loopEntry 创建上层Switch指令接口 addCase(numCase,i) 创建Switch指令的各个分支的接口 给一个样例test.c进行展示 int test(int a, int b) { while(a!0) { aab; } if (b5) { b-1; bab; } return 0; } 给出指令: $clang test.c -S -emit-llvm -o test.ll $clang test.c -S -emit-llvm -o testpass.ll -mllvm -split -mllvm -fla 2.5 LLVM IR指令替换技术 指令替换技术可以将指定的IR指令替换为功能相同但更复杂的指令从而实现对IR的混淆。 指令替换的方式众多其中最主要的方式是对运算指令的替换。在对运算指令的替换中首先遍历需要混淆的函数或基本块中的指令当检测到指定的指令后在对应的位置创建混淆的指令并取代原来的指令。同样的运算指令可以有多种不同的替换方式混淆的强度主要取决于具体的实现过程将不同的替换方式进行搭配可以提高代码混淆的效果。 待混淆的指令I混淆后的指令为O(I) 输入待混淆的指令I 输出混淆后的指令O(I) 步骤 Begin if(I.getOpcode() Instruction::**) Substitution(I) ToRemove(I) endif end 主要函数 功能描述 unsigned getOpcode() const { return getValueID() - InstructionVal; } 检测指令的运算类型 void Substitution(Instruction I) 对指令进行替换 void ToRemove(Instruction I) 删除原有的指令 以test.c为例进行两种不同的指令替换 #include stdio.h int main() { int x 0; int y x 1; printf(“%d\n”, y); return 0; } $clang test.c -s -emit-llvm o -test.ll $clang test.c -s -emit-llvm -subtest -o -test.ll
http://www.zqtcl.cn/news/145580/

相关文章:

  • html 网站添加悬浮二维码瑜伽网站设计
  • 帮别人做网站的单子制作图片库
  • 网站注册步骤律师在线咨询免费24小时电话
  • 经典的网站设计工具怎么做网站表格
  • 韩文网站建设wordpress 置顶顺序
  • 做网站好还是做app好做房产的网站排名
  • 纯静态网站部署服务器如何做高端网站建设
  • 特色食品网站建设策划书网站建设丶seo优化
  • 安徽省六安市建设局网站网络服务提供者知道网络用户利用其网络服务侵害
  • 珠海建设局网站东莞市建设信息网
  • 已有域名怎么做网站wordpress二维码制作教程
  • 做招生网站网站织梦后台一片白
  • wordpress 表单录入优化网站的技巧
  • 域名注册网站的域名哪里来的信息型网站
  • 商贸网站建设常见的网站结构有哪些
  • 网站开发概要设计模板网站qq获取
  • 关键词网站推广王野摩托车是什么牌子
  • 网站建设管理工作的总结网站做网站词怎么推广
  • 通过网站的和报刊建设在网站建设工作会上的讲话
  • 建设部网站举报壹搜网站建设优化排名
  • 做软件界面的网站洛可可成都设计公司
  • 微信建立免费网站app网站制作软件
  • 上海工程建设造价信息网站黑帽seo易下拉霸屏
  • 网站建设公司需要申请icp吗网站续费
  • 宁波快速建站公司滕州网站设计
  • logo成品效果图网站网站意见反馈源码
  • 宁志网站两学一做高端网站建设代码
  • 企业做可信网站认证的好处电影网站制作
  • 大学网站建设课程课综温州网站推广好不好
  • 做电影ppt模板下载网站有什么网站可以做海报