Ollvm混淆与反混淆: goron框架字符串加密的实现原理
函数实现逻辑在llvm/lib/Transforms/Obfuscation/StringEncryption.cpp文件中,IndirectBranch,集成自类ModulePass,实现了runOnModule函数
函数实现逻辑在llvm/lib/Transforms/Obfuscation/StringEncryption.cpp文件中,IndirectBranch,集成自类ModulePass,实现了runOnModule函数
很多App实现的定制ollvm框架中都有goron框架的影子,或多或少的借鉴了它的功能,包括
间接跳转,并加密跳转目标(-mllvm -irobf-indbr) 间接函数调用,并加密目标函数地址(-mllvm -irobf-icall) 间接全局变量引用,并加密变量地址(-mllvm -irobf-indgv) 字符串(c string)加密功能(-mllvm -irobf-cse) 过程相关控制流平坦混淆(-mllvm -irobf-cff) 想要了解怎么针对这些混淆功能完成去混淆,势必要先对其混淆过程有所了解,那么第一步就是对goron框架的编译使用
Lua是一个小巧的脚本语言,其设计目的是为了通过灵活嵌入应用程序中从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。
汇编语言中的程序控制流常依赖于处理器的状态标志来进行决策。在x86架构中,ZF(Zero Flag)、OF(Overflow Flag)和SF(Sign Flag)是在执行比较和算术指令后设置的重要标志位。本文将探讨这些标志位以及与之相关的常用条件跳转指令,并提供代码案例以加深理解。
在汇编语言中,程序的流程控制是通过各种跳转指令来实现的。跳转指令分为条件跳转和无条件跳转。本文将深入探讨汇编中等于条件跳转(je/jz)和无条件跳转(jmp)的使用,并通过代码示例展现它们的实际应用。
在汇编语言中,根据程序中的条件来决定执行流程是一项基本的操作。理解并有效地使用条件跳转指令,是编写高效汇编代码的关键。本文将重点讲解不等条件跳转指令 jne(Jump if Not Equal)和 jnz(Jump if Not Zero),包括它们的工作原理和一些实用的代码示例。
在C++中,有四种类型转换操作符:static_cast, dynamic_cast, const_cast和reinterpret_cast。它们的作用和区别是什么呢?
最近不清楚使用原因,原本使用的好好vscode ssh远程连接,无法正常的的连接到远程服务器上。去查看vscode的文档,发现新增了tunnel模式。经过测试,可以正常的连接使用。