自己写马子太痛苦了。
然后发现了,cs,msf这些工具又很香。只是碍于这些东西。
没办法,重!启!上!线!
免杀什么的其实都是小意思。主要还是重启上线等一堆功能。
所以就打算在这里记录一下,从零开始的,打造一款无弹窗免杀的shellcode吧。
为了不吊大家胃口,我就直接写出原理吧。
其实也不难。
就是一个写一个shellcode带有socket+rc4加密跑远端加密后的cs的payload下载下来后执行。然后利用启动项劫持技术,绕过杀软的启动保护。
再高级一点的话,就是把启动项劫持,改成用masm编写超迷你型的shellcode装载器,然后插入目标的PE空隙中,然后修改OEP指向我们的空隙然后执行完shellcode后再跳转到入口点。
启动项劫持的原理就是,360虽然禁止对启动项进行增改,但是删和查是可以的,并且对于启动项/服务项中的目标程序并没有进行保护。所以我们可以对启动项的程序进行劫持替换修改都是没问题的。或者不对启动项劫持进行替换,而是找到一个运行中的服务,kill掉它的进程,然后对服务源程序进行劫持也是可以的。原理都差不多。
总之就是这样,考完了应该会去研究一波。
至于payload,有两个方案。
可以自己写,难度有点高,可以参考
但是这种东西,一般顶天给你整个下载者。和cs那种全部功能纯shellcode还是不一样的。你下载者最终还是需要下载的你的二进制文件,达不到"负载无文件"(不是纯无文件,毕竟你的shellcode还是需要的),可能会导致你的马子被检测到。
payload难主要难在,对于API地址的定位,不过一般只要找到LoadLibrary的地址,其实还算是好说的啦。
还有难就难在栈平衡这些。
下次研究一波。
实在不行,直接整个PELOADER,自建一个RVA导入,不过传输EXE的话可能会被杀软拦截emmm,但是都能传shellcode了,传个加密的PE到内存理论上也是没关系的吧,
所以还是推荐直接使用cs或者msf,简单粗暴。
最后研究出的地址在这里
带有直接运行和服务启动效果。
怎么用我懒得说了,只能说不添加 启动的话,能无弹窗过360+主防吧。
目前发现还不能过诺顿,待我研究一波。
同时吐槽一下遇到的一些坑。
c++的string,是非常的香的。不需要free(char );(char )malloc();这种操作的。
但是,还是碍于X问题,0会被截断。
千万不要使用str开头的函数来处理std::string.c_str()的东西。str开头的函数遇到0会自动截断,被这东西坑了好久= =
建议使用mem开头的,而且带_s,指定长度,合理控制内存。