Fuzz这个词汇行内的都懂,fuzz工具我就不多说了。

今天,说说fuzz前的准备工作--如何对软件进行修改实现可自动化和无人值守fuzz.

  很多软件会有试用期、弹窗、覆盖提示、人机交互等等,这些都会造成无人值守的fuzz平台无法继续。

1.对于 注册激活提醒弹窗,我们可以直接爆破掉验证函数,也可以分析注册流程,写注册机。

2.对于解压缩这种软件可能会出现覆盖提示,如果程序中有设置最好了;如果可以爆破提示框,这样也行,但是对于提示框,选项超级多的时候就麻烦了,分析每个按钮,下拉列表功能,就太麻烦吗;面对这种

情况,我给程序添加了新节,并修改了OEP,在新节中放入shellcode,shellcode功能是根据传入的命令行,找到要解压的路径,遍历清空要解压到的文件夹,这样就不会提示覆盖了。(我遇到的情况比这个还复杂)

记录下详情:1.添加节: 利用zeroadd.exe,网上有,随便添加个节。2.修改新节属性为可读可写可执行:利用exescope工具找到新节属性位置(Section Flags ),并看看其他text节的属性,利用hexworkshop工具,利用ctrl+g功能快速找到属性所在位置,修改成和text节一样的属性即可。3:将shellcode复制到新节位置:利用hexworkshop工具,快速地位到新节在文件中的位置(Pointer to Raw Data ) ,直接利用hexeworkshop打开shellcode的bin文件,复制粘贴过来就行。4,别忘记修改新节点的大小,大小一定要比shellcode大,如果太小,会造成shellcode无法完全载入到内存中,Virtual Size 和 size of raw data 都要修改一般都是200 400 800 这种。5.修改OEP:OEP位于optional header 中的Entry Point RVA 直接修改为新节 RVA/Offse属性值,就行,还是利用hexworkshop快速定位OEP位置修改保存 。6.跳回真正的OEP:保留个源程序的副本,od跟踪下真正的地址记录下来,shellcode要预留jmp xxxx 的空间,先预留几个nOp,使用od跟踪,在shellcode执行完 将预留的Nop 就改为jmp 记录的真正OEP地址(别忘记修复堆栈平衡)利用od的保存工嗯那个将文件保存下来。

04-30 00:47