做CTF中的VM题一直都是在python中手写一遍所有的handler来模拟执行VM,然后打log并结合代码来猜测逻辑
然后慢慢地产生一个想法、本身程序也有在执行这个VM,何苦还要再手写VM呢,反正大多数情况下需要的只是log–再具体说的话就只是程序的reg和data而已
通过在VM的每次loop之间插桩拿到data,也同样可以打出log
由于CTF中的VM大多数情况下都不会很复杂,因此完全可以通过观察input数据和data的变化来猜测算法
于是以前两天的鹏城杯为例,写出了这个工具(的雏形)
由于缺乏项目经验,所以完善度比较差_(:з」∠)_还请大佬见谅
简单来说给定地址和长度,即可将数据send回py的callback函数,然后通过py进行格式化输出,可选参数都在代码开头部分,linux下基于py2
- program_name
程序名称 - hook_addr
要Hook的地址,一般位于VM_loop的开头 - data_addr
要dump的数据地址 - data_length
数据的长度 - data_fromat
打印数据的进制,仅接受16和10 - test_input
猜测的输入 - input_length
输入长度,当test_input小于该长度时会以comp_char补足 - anti_debug
程序若有反调试代码,则需要根据实际情况进行反调试。由于Frida是通过ptrace来实现的,因此对于ptrace(TRACE_ME)会没有办法。最简单的办法当然是Patch,如果不便需要Hook的话,本程序提供了LD_PRELOAD
的方法来绕过一些函数。将下述代码编