WhiteFile Offset Table Generate Shellcode

简介

这篇文章是我还比较菜的时候(虽然现在也很菜),当时看到的时候惊为天人,大概说可以通过计算shellcode需要字符在白文件中的偏移位置,通过记录偏移位置,在不硬编码的情况下还原出shellcode,今天突然想起来,就复现一下。

流程

  1. 寻找一个全windows都包含且不变的文件(C:\Windows\Fonts\wingding.ttf)

  2. 遍历文件确认存在全字符(0x00-0xff)

  3. 计算shellcode在文件内的偏移表

  4. 基于偏移表还原shellcode

代码

计算偏移表的代码是用py写的,不是专业写算法的,这个计算可能比较low。


dict = open('wingding.ttf','rb+').read();
char =0
for i in range(256):
        for p in range(len(dict)):
                if  ord(chr(dict[p])) == ord(chr(i)):
                        char +=1
                        print(char)
                        break

if char == 256:print("this file has full chars table");

通过一段已有的shellcode生成偏移表,我们古典主义脚本小子还是比较喜欢弹个窗。

可以还原出来,现在我们在c++把木马写出来。

可以看到还原出了shellcode。

脚本小子的任务完成了。

抽象成算法

这个时候,仔细详细我们真的需要这个作为字符字典的文件么,我们真的需要月亮么(不好意思串戏了),如果我们找不到这也的文件怎么办,其实我们并不是真的需要这样一个字典,而且我确实没有找到从xp-win10不变的文件。

其实我们只是需要一张能作为字典的字符表,这样我们的这个思路就抽象成了凯撒密码算法(略略略),万物基于算法定律呗。

我们把这张替换表硬编码进木马内,就避免作为参照物的文件失效,具体代码如下:

这样就避免了使用白名单文件作为参考字典,然后把木马也改改,古典主义脚本小子以弹窗为准。

最后更新于

这有帮助吗?