Tigress是C语言的多元化虚拟化器/混淆器,它支持许多新颖的防御措施,以防止静态和动态反向工程和脱发攻击。特别是,Tigress通过生成具有多种类型的指令调度的口译员以及通过插入反别名分析的代码来生成任意复杂性和多样性的虚拟指令集,来防止静态脱虚拟化。 Tigress通过将真实代码与虚假函数合并,插入隐式流以及创建缓慢执行的重新输入解释者来保护动态脱虚拟化。 Tigress通过使用运行时代码生成来实现自己的代码包装版本。最后,Tigress的动态转换提供了一种持续运行时代码修改的广义形式。
Tigress团队提供了一些挑战,我们可以找到其他类型的保护
所有挑战都以输入为数字并返回哈希。例子:
$ ./ obfuscated_binaries/tigress-2--challenge-2 1234 202180712448 $ ./ obfuscated_binaries/tigress-2--challenge-2 823748 50564355584 $ ./ obfuscated_binaries/tigress-2--challenge-2 2834723 50714072576
哈希计算函数被混淆。可能的攻击类型:
我们的目标是:
所有这些都只有一个通用脚本:)。为此,我们按以下顺序进行:
如果您需要更多信息,则可以查看我们的solve-vm.py脚本。

但是,我们已经在此存储库中推动了所有结果,但是如果您想自己复制此分析,您只需要像这样执行solve-vm.py :
$ ./solve-vm.py ./obfuscated_binaries/_binary_
例子:
$ ./solve-vm.py ./tigress-challenges/tigress-0-challenge-0 [+]加载0x400040-0x400238 [+]加载0x400238-0x400254 [+]加载0x400000-0x400f14 [+]加载0x601E28-0x602550 [+]加载0x601E50-0x601Fe0 [+]加载0x400254-0x400298 [+]加载0x400DC4-0x400E08 [+]加载0x000000-0x000000 [+]加载0x601E28-0x602000 [+]挂接printf [+]挂钩__libc_start_main [+]钩子 [+]开始仿真。 [+] __libc_start_main挂钩 [+] argv [0] = ./ tigress-challenges/tigress-0-challenge-0 [+] argv [1] = 1234 [+] Strtoul挂钩 [+]象征strtoul返回 [+] printf挂钩 3035321144166078008 [+]切片终点用户表达式 [ - ]不支持指令:0x400539:HLT [+]执行指令:39816 [+]执行唯一指令:458 [+] PC Len:0 [+]仿真完成。 [+]生成Symbolic_expressions/Tigress-0-Challenge-0.py [+]将符号表达式转换为LLVM模块... [+] LLVM模块在llvm_expressions/tigress-0-challenge-0.ll中写了 [+]重新编译的二进制... [+] DEOBFUSCATED BINARY重新编译:DeoBfuscated_Binaries/Tigress-0-Challenge-0.Deobfusccated
然后,可以在此处找到符号表达式,可以在此处找到LLVM表示形式,并且可以在此处找到重编译的二进制文件。
使用Docker:
$ git clone [email protected]:jonathansalwan/tigress_protection.git $ cd/path/to/tigress_protection $ docker build -t image_tigress_protection。 $ docker run -v/path/to/tigress_protection:/root/root/tigress_protection -ti -name = tigress_protection -ulimit ='stack = -1:-1'image_tigress_tigress_protection
在Docker容器中进行测试
#cd〜/tigress_protection #./solve-vm.py tigress-challenges/tigress-0-challenge-0
随着我们简化并重新编译了新的二进制文件,我们必须提供原始二进制文件的相同行为。因此,为了测试我们的二进制版本,我们使用此脚本。
$ ./scripts/testing_equality.py./tigress-challenges/tigress-0-challenge-0 ./deobfuscated_binaries/tigress-0-challenge-0.deobfuscated [...] [+]成功的272966812638982633 [+]成功获得2304147855662358786 [+]成功获得15697842028176298504 [+]成功获得15273138908025273913 [+]成功的17329851347176088980 [+]成功获得12160831137213706322 [+]成功获得3489058267725840982 [+]成功获得6474275930952607745 [+]成功的7363567981237584398 [+]成功获得3685039181436704621 [+]成功:100.00
基本上,该脚本运行了混淆的和Deobfust的二进制文件,并随机输入并检查它们是否具有相同的输出结果。

关于比率表,在解决Tigress的挑战之后,我们要求基督徒Collberg的挑战来源,以比较原始资源和我们的Devirtuality版本的规模。请注意,应基督徒的要求,我们将无法提供老虎挑战的来源,如果您想要这些来源,请直接向他询问:)。
我们还选择了20种哈希算法(10种知名,10种来自Tigress挑战),我们使用46种不同的Tigress保护措施保护了这些算法中的每种算法(请参见下一节)。最后,我们有920个受保护的二进制文件的测试台。这些受保护的二进制文件中的每一个都使用solve-vm.py脚本成功地进行了贬低。这些哈希算法可以在样本目录中找到,并在DeoBfuscated_Binaries目录中找到它们的Devirtualizations版本。下表是我们关于920个样本的结果的摘要。

有关这些选项的更多信息,请参见第1页和第2页。