Learning LLVM Part 2

UnderstandingLLVMPart2 咕咕咕,接上篇《LearningLLVMPrat1》。这篇大概梳理一下这两个月摸鱼时候遇到的坑。一些坑如果要编译成功 LLVM 树,那么熟练的使用各种方式把代码拖下来,再用合适的环境编译必不可少。其实编译这个巨大的东西,还需要好一点的硬件设备(一般我们会都卡在硬盘 IO 上,IO 卡住了就会 Cache 在内存里,然后内存爆炸,PC 就什么也动不了了),比如在目前的这个工

控制流完整性(CFI)发展简述

控制流完整性(CFI)发展简述 0x00 从 shellcode 说起在二进制安全中,大部分的漏洞利用方式是劫持控制流,接着使程序按照攻击者的攻击思路运行下去,使得攻击者获得目标程序的控制权,甚至还可以进行提权来全面控制目标机器。在软件安全保护技术还不是很发达的年代,我们如果想劫持程序的控制流,一般的思路是通过栈溢出控制程序中某个函数的返回地址,然后在该地址上布置 shellcode,将控制流劫持至 shell

Learning LLVM Part-1

(这个还没写完 TAT)LLVM 不仅仅是一个编译器,而是一个有很多特性的编译框架,比如 JIT、支持了很多非类 C 语言,如 Rust 等等,此外,还是一种 AppStore 上的发布方式。LLVM 和其他编译器不同的地方是:LLVM 的中间表示,即 LLVMIR 是一个创新,有了比汇编语言更好的可读性 LLVM 比其他的编译器更加模块化 LLVM 不仅仅可以实现编译优化,还可以做到:架构模拟、动态二进制分析工具、源代码变换(抽象

详解 LLVM 混淆器

作者:KareemEl-Faramawi|ToshiPiazza 译:SkyeLLVM 混淆器是一个工业级的混淆器,在近几年的 CTF 比赛中频频出现。这篇博文主要包括了我们在理解混淆器本身的设计方面的工作,以及在模糊处理的实现中可能存在的弱点。我们使用 BinaryNinja 及其插件来使这方面的工作自动化。引言开源的 LLVM 混淆器显示为三个 3 个相对独立的 LLVM 分支,都是为了执行掩盖 CFG 的混淆模式,或是以