LLVM Pass编写 一、LLVMLLVM的架构图如下: 它由以下三部分组成: 前端 前端负责解析源码,验证源码的正确性,然后生成IR代码,交付给优化器。LLVM支持两种前端:clang和基于GNU编译器集合解析器的前端 优化器(亦称为中端) 优化器负责删除IR代码中的冗余代码和死代码、简化控制流图等。之后将结果传送给后端。 后端 根据目标架构生成高效的汇编代码 LLVM独立于语言和平台。如果需要支持一种新 2024-04-22 LLVM and OLLVM #LLVM Pass
阅读笔记 —— 《ObfuscatorDynamic-LLVM》 一些基本概念动态分析技术 调试(debugging) 内存分析(memory profiling) 模糊测试(fuzzing) 动态符号执行(dynamic symbolic execution,简称DSE) 动态符号执行使用自动化方法,执行引擎使用输入的符号表示来求解和引导执行沿着两个分支进行,它会将分支条件作为约束条件,然后使用SMT solver求解所需的输入。它有3个致命缺点: 路径爆 2024-04-19 论文研读 > OLLVM #OLLVM #论文研读
记一次VMware平台虚拟机启动黑屏问题 一、前言不知怎么的,我电脑上VMware软件启动虚拟机变得十分慢,每次启动黑屏,等到用户登录界面出现时,已经花了4分钟左右,而且在用户登入界面输入密码回车后,又有一段时间的黑屏,最终才会显示桌面。 按照网络上的教程,大都走了个遍,花费了大量的时间,仍然无济于事。 我执行过如下指令来查看开机启动项的时间记录 1systemd-analyze blame 结果发现最高的也才8秒左右,这显然不是启动 2024-04-18 #环境配置
阅读笔记 —— 《Obfuscator-LLVM — Software Protection》 LLVMLLVM独立于语言和平台。它由以下三部分组成: 前端 前端负责解析源码,验证源码的正确性,然后生成IR代码,交付给优化器。LLVM支持两种前端:clang和基于GNU编译器集合解析器的前端 优化器(亦称为中端) 优化器负责删除IR代码中的冗余代码和死代码、内联函数、展开循环、删除死循环、简化控制流图等。之后将结果传送给后端。 后端 根据目标架构生成高效的汇编代码 OLLVMOLL 2024-04-17 论文研读 > OLLVM #OLLVM #论文研读
阅读笔记 —— 《改进的基于底层虚拟机混淆器的指令混淆框架》 改进该论文对于LLVM-IR层的混淆进行了如下两种改进: 指令加花 指令替换 指令加花该论文提出了两种指令加花方法: 叠加跳转 虚假循环 以上花指令以基本块形式进行添加,首先需要对原有的基本块进行拆分,然后在拆分后的基本块之间插入构造的花指令基本块,并通过不透明谓词进行有效的整合。 基本块拆分算法123456789101112131415算法1 Dependency Analysis Al 2024-04-17 论文研读 > OLLVM #OLLVM #论文研读
OLLVM移植到NDK 一、前言一开始是直接将ollvm4源码编译后移植到ndk上,按照跟着铁头干混淆2 ubuntu20.04编译ollvm - 简书 (jianshu.com)上的步骤走,结果仍然报错: 1Android Studio fatal error: 'stdarg.h' file not found 而且如果直接将OLLVM的bin,lib,include目录覆盖到NDK中的对应的目 2024-04-17 LLVM and OLLVM #OLLVM #代码混淆 #LLVM
OLLVM移植到LLVM14 一、前言由于OLLVM只支持到版本4后就不再更新了,然而LLVM已经更新到了版本18了。故本文主要目的是将OLLVM移植到LLVM14上。这里参考了https://github.com/buffcow/ollvm-project。 根据项目中的提交记录,可以将修改分为三步: 移植ollvm/obfuscator/lib/Transforms/Obfusca 2024-04-17 LLVM and OLLVM #OLLVM #代码混淆 #LLVM
OLLVM源码编译和使用 一、准备阶段1.1 工具配置编译ollvm需要用到的工具如下: cmake gcc 8.x g++ 8.x gcc和g++的版本得是8.x的版本,通过如下指令安装: 1sudo apt-get install gcc-8 g++-8 -y 如有多个版本的gcc和g++,需配置优先级: 12345sudo update-alternatives --install /usr/bin/gcc g 2024-04-17 LLVM and OLLVM #OLLVM #代码混淆
NDK开发学习笔记 一、NDK项目新增内容使用Android Studio直接创建一个默认的NDK项目,会发现新增了如下部分: 多了加载本地库的代码和本地库中方法的声明代码。 在项目的main目录下多了cpp目录,包含CMakeLists.txt配置文件以及native-lib.cpp代码实现文件。 buid.gradle配置文件中多了native层的编译配置。 二、NDK模板代码分析借助上面这个模板 2023-12-26 Android #NDK
Frida入门练习(二) - KGB Message 题目附件:tlamb96/kgb_messenger: An Android CTF practice challenge (github.com) MainActivity 这里我们需要跟踪一下R.string.User,直接点击,可以知道对应的资源id为: 1public static final int User = 0x7f0d0000; 根据这个资源id在resources 2023-12-21 Android #Frida