02 2023 档案
摘要:利用angr的SM(Simulation Managers)模拟管理器,通过调用SM的step()方法可以寻找到被混淆函数所有active状态的基本块(可达的基本块)。去除虚假控制流混淆的思路就是:先找到目标函数所有的基本块,然后将可达的基本块去除之后剩下的就是不可达的基本块,最后将不可达的基本块以
阅读全文
摘要:编译环境搭建 wsl + vscode + c++IntelliSense 下载源码后进入到llvm子目录中进行编译(wsl编译环境依赖自行设置), 这里使用的是生成makefile文件进行编译。 mkdir build_debug cd build_debug cmake -G "Unix Mak
阅读全文
摘要:去混淆思路 先找到函数中所有的基本块 确定状态变量是保存在宿主寄存器中还是栈中(局部变量) 观察判断控制块的特点,将所有控制块剔除。剔除之后基本块中还包含真实块(如果不存在虚假控制流) 确定各个真实块的执行路径,即一个真实块能跳转到哪几个块(1/2个块),通常通过unicorn模拟执行或者angr符
阅读全文
摘要:对于自定义linker加固so而言,为了防止整体dump并对修复重定位表的脱壳方式(upx的脱壳),可以将一些重要的结构信息在内存中进行抹去和移动。 抹去 ELF文件头在so文件加载后就不需要使用了,所以可以在加载完so文件后直接将其抹去。 .rel.plt/.rela.plt和.rel.dyn/.
阅读全文
摘要:其实自实现linker加固so与之前研究windows平台的PE文件的加密壳原理很相似。主要就是自定义文件格式加密so,然后壳代码实现将加密的so文件加载,链接重定位并修正soinfo(三部曲)。 自定义文件格式 格式可以自己定义,只要在壳代码加载so时能够知道正确的格式就可以,下面是对标准的ELF
阅读全文
摘要:自定义linker加固so是主流的加壳方式,通过实现linker程序来加载,链接加固后的so文件。最后为了让加固后的so中的代码能与其他模块交互,需要修正壳(自定义linker)的soinfo为加固so。我在编写自定义linker代码时,在将加固的后的so加载,链接和修复soinfo后尝试通过dlo
阅读全文
摘要:# ELF可执行文件脱壳 使用upx对ELF文件进行加壳,加壳后的文件不包含动态链接信息,也就是说加壳后的可执行文件是一个纯静态链接文件。对于纯静态链接的可执行文件而言,linux内核在将此elf文件加载到内存后会直接修改应用层入口为此elf文件的入口函数,不再需要动态链接器的参与。 ![](htt
阅读全文