Rover12421's Blog

The End.

DAT文件的输入表特征码修改

      江民现在把灰鸽子的特征码定位在了输入表上,我定位到的是wsock32.dll中的recv和listen,经测试,只要在输入表所在的区段中出现这两个函数名就会被杀。连输入表重建后覆盖原来的输入表,都被杀了。

      输入表修改一般可以用重建达到目的,生成exe文件重建输入表确实达到了免杀效果,但是DAT却不行。分析下原因:

image

      首先看下区段表,经过比较ROffset(文件位置)发现,.idata就是输入表的区段,.rsrc是资源区段,生成的exe文件会添加配置信息,这段配置信息也是加在.rsrc资源段上的,.idata在.rsrc前面,每当生成exe文件后,.rsrc区段会增大,这也是为什么输入表的区段要在前面的重要原因。如果把DAT文件重建输入表,会在最后添加一个区段,这个区段是在.rsrc后面,一旦生成exe文件,随着.rsrc区段的增大,新加的区段就会后移,这样输入表就不对了,导致了生成的exe文件不能运行了。

      实在是没办法,就想把.idata区段增大,然后把.rsrc区段后移,可总是报错,修改了资源段参数用OD载入DAT文件是不报错,但是生成exe又是错误不可运行的文件。

image

           弄了两天最终还是找到了解决办法,虽然这法子并不完美。在无意中在目录信息中发现了一个“版权”,点开一看,太眼熟了。

image

image

      版权信息是在变化的.rsrc资源段和输入表.idata之间的,说明这中间的版权也是一个段,通过查看区段信息,对比长度和位置,确定这确实是一个区段-—.rdata。通过查看目录表信息,可以看到版权信息的文件地址和长度,只有11(B)个字节的长度,确实够短的。不管他,先来把版权信息去掉。

image

只要全部写0保存就去掉了。下面来测试下,到底有多少字节是我们可以用的。用2E填充,然后用OD加载,加载不出错,说明是可以使用的区域,最后我找到的可以使用区域如下(2E填充部分).

image

现在我们把recv和listen写入到这个区域,然后把原来的删除,注意保持一定的空隙。

image

修改好后用OD载入,肯定会报错的,还需要用LordPE修改下Thunk值。

image

      Thunk值要怎么修改能?我们对比下原来的值,发现Thunk值等于内存地址去掉前面的400000再减2。修改好Thunk值,再用OD载入,没有错误了。最后生成EXE测试看下,一切正常。

                    recv.                                                  listen..
                    文件地址 : 内存地址   : Thunk值           文件地址 : 内存地址   : Thunk值
原来的值:   000A71B8:004AAFB8:000AAFB6       000A71C8:004AAFC8:000AAFC6
修改后的值:000A7619:004AD019:000AD017        000A761E:004AD01E:000AD01C

      :本文只是说了一种思路,并非只针对鸽子一种,其实方法都是这些,就看你怎么运用了。

Comments