本篇文章是对 wondeekun 大佬文章《三年了,还是VT全绿,它到底凭什么?》的学习,文中提到直接 patch原始二进制,保留原文件的字符串、统计特征、资源等,防止被杀软识别的方法吸引了我的注意,最近抽出时间搞了一下,发现效果很好,轻轻松松就可以 vt 全绿,下面是对手动 patch 一些要点的记录。首先我们要找一个白程序,在 qq,微信,浏览器,腾讯会议等等常见的软件安装目录下随便找一个就行,但是要注意,我们这里要找的白 exe 是不能依赖于其他 dll 的,比如我这里找了一个百度网盘的 exe,把它单独拉出来之后双击直接报错:那我们就要换一个 exe 了,找到任意一个双击之后无反应的 exe 即可。接下来我们把 exe 放到 cff explorer 或者任意一个 pe 查看工具中,看一下是多少位的程序,这关乎我们后面写的 shellcode,很显然,下面的程序是 64 位接下来我们给它丢到 ida 里面寻找 patch 点看到 winmain 最后跳转到另外一个函数里面,跟进我们直接在这里进行 patch 即可,当然也可以继续往后跟,但是有几点是要注意的,在进入到这个函数之前的程序执行流经过的所有字节我们是不能动的,同时 patch 的字节也不能超过 text 段位置,所以我们要找的函数应该有以下几点要求:
直接 patch原始二进制,保留原文件的字符串、统计特征、资源等,防止被杀软识别
接下来就要定位函数在磁盘中的位置了,ida 给我们的是 va,我们要将其转换成 foa利用 cff 工具即可轻松转化再去 ida 里面看一下对应的二进制值,没问题接下来在 010 或者其他 hex 编辑器中找到对应位置即可然后就可以开始编写 shellcode 了,我们尽量不要用 pe_to_shellcode 这样的工具将 exe 转成 shellcode,这类工具的原理大多是在原来的 exe 中添加 stub 来引导 exe 自己在内存中展开自己,原理和 rdi 一样的,然后在返回到 entrypoint,这样做的缺点是 shellcode 有点大,所以我们可以自己写 shellcode 然后提取 text 段字节即可,关于编写 shellcode 的内容就不多说了,可以参考https://github.com/clownfive/CppDevShellcode 这个项目来进行开发,一些注意事项作者也都进行了说明。另外尽量不要直接将 cs 的 shellcode 写进去,太大了,很容易出问题,因此这种 patch 的方法尽量采取远程拉取的策略,或者也可以利用一些资源修改工具将 cs 的 shellcode 写到资源中,然后我们自己写一段从资源中加载 shellcode 的 shellcode 即可,这里不再展开。我们这里直接修改对应字节,然后保存文件即可这样此种 patch 手法仅仅是在静态上进行一定的规避效果,需要配合一定的动态规避手段才能达到较好的效果。最后看一下效果:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
Genes 就是在section缝里写shellcode。。。总感觉在哪看过。 以前也整过,就是这种程序吧,一个特别明显的特征的就是破坏了它的签名。
ShaShen4404 其实也不一定会破坏 sha1的话 shellcode写在pe 签名标识的后面就可以了 因为他检查的是签名标识前面的数据
Genes 翻了翻历史记录,这文章原来是一个叫影域实验室发的。不知道lz和那有啥关系。 https://mp.weixin.qq.com/s/b0mphQG-nny0X087JsjsKQ
公众号是我朋友的,给他发了