跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

(Heap)加密给BeaconEye


TxxT

推荐的帖子

最近Heap加密对BeaconEye很火,我自己正好在写C2,所以简单记录一下。
过程
遍历进程拥有的堆。
编译堆分配的块。
XOR 分配块中的数据。


过程
首先使用 GetProcessHeaps 获取进程拥有的所有堆句柄。
DWORD GetProcessHeaps(
DWORD 堆数,
PHANDLE 进程堆
);
然后使用 HeapWalk 枚举所有分配的堆块。 (这个功能设计的很好,终于不用First Next了)
(heapEntry.wFlags & PROCESS_HEAP_ENTRY_BUSY)
布尔堆走(
处理 hHeap,
LPPROCESS_HEAP_ENTRY lpEntry
);

sadasd1231ds32a.png.c22a65631016385eab9bb34ae3afaffa.pngimage12313213.png.a74902b79e6c37d82e4648f20dcdda49.png


代码
 

#include <windows.h>
 
#include <stdio.h>
 
 
VOID Xor(char* buffer, size_t buffer_size) {
 
char key[9] = { 1,2,3,4,5,6,8,0 };
 
 
for (size_t i = 0; i < buffer_size; i++)
 
{
 
buffer[i] ^= key[i % sizeof(key)-1];
 
}
 
}
 
 
 
VOID FuckHeap() {
 
PROCESS_HEAP_ENTRY heapEntry = { 0 };
 
HANDLE hHeap = GetProcessHeap();
 
while (HeapWalk(hHeap, &heapEntry))
 
{
 
if (heapEntry.wFlags & PROCESS_HEAP_ENTRY_BUSY)
 
{
 
Xor((char*)heapEntry.lpData, heapEntry.cbData);
 
}
 
}
 
}
 
 
 
int main()
 
{
 
 
 
LPVOID WorkPath = malloc(MAX_PATH);
 
GetCurrentDirectoryA(MAX_PATH, (LPSTR)WorkPath);
 
printf("%s\n", (char*)WorkPath);
 
FuckHeap();
 
 
 
//printf("%s\n", (char*)WorkPath);
 
FuckHeap();
 
printf("%s\n", (char*)WorkPath);
 
 
 
}
 
 
链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...