发布于 

LLVM 简介、编译流程、CLion 调试

LLVM 项目概述

LLVM是于2002年创建的一个模块化和可重用的编译器和工具链技术的集合。它能够编译UNIX的内核,并用于漏洞挖掘LLVM包括了多个核心组件,其中关键的包括:

核心库(LLVM Core) - 优化器

  • 负责将源码优化到LLVM的中间语言(Intermediate Representation, IR)。

Clang

  • LLVM的前端编译器,将C/C++代码编译成汇编语言和可执行文件。
  • 兼容C语言,支持C++11C++14标准。`

LLVM还拥有众多子项目,包括链接器、各种语言的前端等。

实际操作步骤

下载LLVM

配置编译环境

Debug编译指令

mkdir build_debug
cd build_debug
cmake -G Ninja ../llvm
````

**Release编译指令**:
```shell
mkdir build_release cd build_release cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_PROJECTS="clang" ../llvm ninja -j8

Clion项目配置

  • 使用Clion打开llvm目录下的CMakeLists.txt文件。
  • Setting -> CMake,添加release构建目录并配置CMake。

CMake配置示例

shellxw

cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang"

测试和调试

  • 定位到clang -> tools -> driver -> main,进行测试运行和调试。

处理头文件问题

如果发现 stdio.h 头文件找不到的问题,在CMake中添加以下配置:

cmake

set(MACOSX_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
include_directories(${MACOSX_SDK_PATH}/usr/include)
  • 设置后重新编译项目。

QA

1.fatal error: ‘stdio.h’ file not found

2.Clion 运行llvm 中的clang子项目提示 fatal error: ‘stdio.h’ file not found #include <stdio.h> ^~~~~~~~~ 1 error generated.

3.xcrun --show-sdk-path 获取了sdk路径之后,如何使用 include_directories 加载路径 解决stdio找不到的问题

研究方向

  1. 彻底搞懂 OLLVM:因为OLLVM(Obfuscator-LLVM)涉及底层编译技术和高级代码混淆技术,这对于增强逆向安全性非常重要。通过理解和移植OLLVM,您能更好地分析和逆向混淆后的代码,这对提升逆向分析技能至关重要。
  2. 高级调试之 VMP:VMP(Virtual Machine Protection)是一种先进的代码保护技术。学习VMP的分析方法以及如何使用相关工具(如Hyperpwn)对受VMP保护的应用进行调试,将有助于您在逆向工程领域进一步提升。
  3. Unicorn_unidbg:学习Unicorn模拟器和Unidbg的使用能增加您在分析运行时代码逻辑方面的能力,特别是对JNISO文件的调用和模拟。这将是移动逆向分析领域的重要技能。
  4. Frida 高级逆向:由于您对Frida的了解还处在初级阶段,深入学习Frida的高级用法将有助于您进行更复杂的动态分析。学会如何使用Frida分析OLLVM混淆和追踪非标准算法的执行过程将提高您处理动态环境下的复杂情况的能力。
  5. Frida_FART 全自动脱壳机:对加壳技术的深入理解和脱壳技术的掌握对于逆向工程师来说是基础且关键的。FART(Fast-Android-Runtime)脱壳技术整合了Frida的动态分析能力,掌握它对于自动化脱壳机的开发与应用逆向具有重要意义。

除了上述领域外,需要一定时间逐步熟悉的还有:

  1. FRIDA 高级逆向
  2. FART 全自动脱壳机: 这些内容与上文提到的09和10知识点相关,并提供了进一步分析和开发工具的信息。
  3. ARM&&C++ 算法还原原理: 如果您对低级别的ARM汇编和C++逆向不够精通,这将是理解程序执行和开发反汇编器工具的基础。
  4. C11 && ART 虚拟机开发: 对高级C特性和ART虚拟机的理解将加深您对Android系统和它的运行时行为的理解,有助于您开发更高效的逆向工具。