How to launch an Executable from within memory

CIV 如何在自己的程序中调用外部程序 缘由:因为一些原因要调用其他公司的应用程序,到处找相关资料,到一个论坛上找到了,最后坛主给了我一个写好的应用程序,很想吐槽,我要他干嘛,我要的是源码,源码啊!!,最后还是自己在NI官网上找到了答案,并不复杂很简单。 官网相关问题的地址:http://digital.ni.com/public.nsf/allkb/5BB6381FC21C01C78625750D003F8BE9 界面: 阅读详情

 How to launch an Executable from within memory

 

#define WIN32_NO_STATUS
#include <windows.h>
#undef WIN32_NO_STATUS


namespace NT {
    extern "C" {


#pragma warning(disable: 4005) // macro redefinition
#include <ntddk.h>
#pragma warning(default: 4005)


    }
}
using NT::NTSTATUS;


typedef struct _DEBUG_CONTROL {
    ULONG L0 : 1;
    ULONG G0 : 1;
    ULONG L1 : 1;
    ULONG G1 : 1;
    ULONG L2 : 1;
    ULONG G2 : 1;
    ULONG L3 : 1;
    ULONG G3 : 1;
    ULONG LE : 1;
    ULONG GE : 1;
    ULONG : 3;
    ULONG GD : 1;
    ULONG : 2;
    ULONG RWE0 : 2;
    ULONG LEN0 : 2;
    ULONG RWE1 : 2;
    ULONG LEN1 : 2;
    ULONG RWE2 : 2;
    ULONG LEN2 : 2;
    ULONG RWE3 : 2;
    ULONG LEN3 : 2;
} DEBUG_CONTROL, *PDEBUG_CONTROL;

 

VOID preppatch()
{
    CONTEXT context = {CONTEXT_DEBUG_REGISTERS};


    PDEBUG_CONTROL dr7 = PDEBUG_CONTROL(&context.Dr7);


    context.Dr0 = ULONG(GetProcAddress(GetModuleHandle("ntdll.dll"),
"ZwCreateThread"));


    dr7->L0 = 1, dr7->RWE0 = 0, dr7->LEN0 = 0;


    SetThreadContext(GetCurrentThread(), &context);
}


LONG patch(PEXCEPTION_POINTERS ep)
{
    if (ep->ExceptionRecord->ExceptionCode == EXCEPTION_SINGLE_STEP) {


        HANDLE hProcess = PHANDLE(ep->ContextRecord->Esp)[4];


        PCONTEXT context = ((PCONTEXT*)(ep->ContextRecord->Esp))[6];


        NT::PROCESS_BASIC_INFORMATION pbi;


        NT::NtQueryInformationProcess(hProcess, NT::ProcessBasicInformation,
&pbi, sizeof pbi, 0);


        PVOID x; ReadProcessMemory(hProcess, PCHAR(pbi.PebBaseAddress) + 8,
&x, sizeof x, 0);


        NT::ZwUnmapViewOfSection(hProcess, x);


        HRSRC hRsrc = FindResource(0, "Image", "EXE");


        HGLOBAL hGlobal = LoadResource(0, hRsrc);


        PVOID p = LockResource(hGlobal);


        PIMAGE_NT_HEADERS nt = PIMAGE_NT_HEADERS(PCHAR(p) +
PIMAGE_DOS_HEADER(p)->e_lfanew);


        PVOID q = VirtualAllocEx(hProcess,
                                 PVOID(nt->OptionalHeader.ImageBase),
                                 nt->OptionalHeader.SizeOfImage,
                                 MEM_RESERVE | MEM_COMMIT,
PAGE_EXECUTE_READWRITE);


        WriteProcessMemory(hProcess, PCHAR(q), PCHAR(p), 0x1000, 0);


        PIMAGE_SECTION_HEADER sect = IMAGE_FIRST_SECTION(nt);


        for (ULONG i = 0; i < nt->FileHeader.NumberOfSections; i++)


            WriteProcessMemory(hProcess,
                               PCHAR(q) + sect[i].VirtualAddress,
                               PCHAR(p) + sect[i].PointerToRawData,
                               sect[i].SizeOfRawData, 0);


        WriteProcessMemory(hProcess, PCHAR(pbi.PebBaseAddress) + 8, &q,
sizeof q, 0);


        context->Eax = ULONG(q) + nt->OptionalHeader.AddressOfEntryPoint;


        ep->ContextRecord->Dr7 = 0;


        return EXCEPTION_CONTINUE_EXECUTION;
    }


    return EXCEPTION_CONTINUE_SEARCH;
}


int main(int argc, char *argv[])
{
    PROCESS_INFORMATION pi;
    STARTUPINFO si = {sizeof si};


    __try {
        preppatch();


        CreateProcess(0, "Explorer", 0, 0, FALSE, 0, 0, 0, &si, &pi);
    }
    __except (patch(GetExceptionInformation())) {}


    return 0;
}

 

 

傀儡进程 插入 BOOL InjectProcess(LPTSTR VictimFile,LPTSTR InjectExe) { HANDLE hFile; DWORD dwFileSize; //文件大小 IMAGE_DOS_HEADER DosHeader; IMAGE_NT_HEADERS NtHeader; PROCESS_INFORMATION pi; STARTUPINFO si; 阅读详情

相关推荐

[Win32] 服务程序开发(1)基本概念和服务程序的框架

一。服务程序基本概念 二。服务程序的编写框架 1。StartServiceCtrlDispatcher函数 BOOL WINAPI StartServiceCtrlDispatcher( _In_ const SERVICE_TABLE_ENTRY *lpServiceTable ); 函数功能:连接到服务控制管理器 参数:一个SERVICE_TABLE_ENTRY结构的指针

zuishikonghuan的博客 9970

CVI调用外部程序

#include &lt;USERINT.H&gt;    #include "CVIShell.h"    #include &lt;WINDOWS.H&gt;            #include &lt;SHELLAPI.H&gt;    #include &lt;UTILITY.H&gt;    //#include &lt;WINUSER.H&gt;    //#include &lt..

魑魅魍魉的博客 4065

TIFF文件渲染避坑指南:Three.js与Cesium的5个关键差异点

本文深入对比了Three.js与Cesium在渲染TIFF文件时的5个核心差异点,包括坐标系处理、内存管理、着色器系统、性能优化策略和错误处理机制。重点解析了Cesium的全球WGS84坐标系与Three.js局部坐标系对地理空间数据渲染的根本影响,并提供了针对性的性能优化与调试方案,帮助开发者根据项目需求选择合适的3D引擎并有效避坑。

weixin_29243279的博客 334

ROS launch 启动文件的使用方法

ROS launch 启动文件的使用方法 参考:古月21讲 launch文件介绍 launch文件:通过XML文件实现多节点的配置和启动(可自启动ROS Master)。 正常一套程序运行时节点是很多的,不可能每次运行都要一个一个手动打开。所以需要launch来启动所有节点和功能。 launch文件内的语法为xml <launch>\ <machine>\ <node>\ …,这些叫做标签。 name\ address\ type\ …,这些叫做属性。 每一个no

qq_43569735的博客 6263

详解Unity中的粒子系统Particle System (三)

上一篇我们详细讲解了有关主模块的全部内容,已经对粒子系统的基本运作有了足够的了解,本篇就来讲一下被粒子系统默认启用的Emission、Shape、Renderer模块又在粒子系统中扮演着怎么样的作用吧。

梦小天幼的博客 1万+

uniapp 开发微信小程序请求问题 , 真机调试正常,开发工具正常,但是使用扫码预览接口都是不通的,发布到体验版也是请求失败

uniapp开发小程序体验版接口请求失败(真机可以)

weixin_60408555的博客 3954

由浅到深理解ROS(5)- launch启动文件的理解与编写

ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。事实上,在ROS功能包中,启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。 每个XML文件都...

weixin_30737433的博客 521

DolphinScheduler工作流中ChunJun任务保存失败的深度解析与实战修复

本文深度解析了在DolphinScheduler工作流中创建ChunJun任务时遭遇“parameter invalid”保存失败的普遍问题。其根源在于前端表单的`customConfig`参数默认值与后端校验逻辑不匹配。文章提供了两种实战修复方案:一是修改前端源码并重新编译,二是热更新已部署的JS文件,并对比了其适用场景与风险,帮助用户彻底解决此集成障碍。

weixin_29010003的博客 398

无痕HOOK方式=硬断+VEH

无痕HOOK方式=硬断+VEH

YuHengZuo的博客 1万+

基于STM32+OneNet设计的物联网智慧路灯(100)

本次设计的智能路灯采用STM32芯片和OneNet物联网平台进行连接,开发出支持太阳能充电锂电池供电、GPS定位上传位置信息、手动/自动控制路灯开关、环境光照调节、红外传感器检测周围人员、空气质量监测等多项功能。同时,当路灯发生异常情况时,系统可以自动发送邮件或短信到指定邮箱或电话。

7729

2026年数字IC设计禾赛科技笔试带答案解析

本文介绍了一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含15道单选题(30分)、10道填空题(20分)和5道简答/编程题(50分),总分100分,考试时长120分钟。单选题涉及同步时序电路、Verilog语法、跨时钟域设计、FPGA优化、存储器层次、功耗优化等知识点;填空题考查环形振荡器、工艺参数、时序约束、LUT结构等基础概念。试题重点考察应聘者对数字电路设计核心概念的理解和实际工程应用能力,特别是针对激光雷达芯片设计中的关键技术点进行考核。

Open 125

CANN/asc-devkit确定性计算示例

This example first introduces the necessity and specific implementation scheme of deterministic computation in the scenario of data movement with inline atomic operations, and then describes how to ap

gitblog_00488的博客 880

手把手教你学 MATLAB 实战训练(6.9):卷积神经网络(CNN)模型来进行图像分类任务(预训练的 ResNet-50 模型)

加载数据集数据预处理加载预训练模型修改和扩展预训练模型设置训练选项训练模型测试模型。

xiaoheshang_123的博客 646

世界-语言-动作模型:统一世界建模、语言推理与动作合成

Yi Yang 1,2,†, Zhihong Liu 1,†, Siqi Kou 1,†, Yiyang Chen ¹, Yanzhe Hu³, Jianbo Zhou ⁴, Boyuan Zhao 5, Zhijie Wei 6, Xiao Xia 1, Xueqi Li 2,7, Pengfei Liu 1,2, Zhijie Deng 1,1SJTU, 2SII, HUST, 4SCUT, 5ECUST, 6SHU, 7NJUPT †Equal Contribution, †Corresponding

u013250861的博客 75

(第14天)Veritas NetBackup(NBU) 配合 RMAN 脚本备份 Oracle 数据库

NBU(Veritas Netbackup)是企业中比较常用的备份软件,通常用于备份企业使用中的系统,数据库,文件等等,通常是搭配 Oracle RMAN 来进行备份 Oracle 数据库。

LuciferLiu_DBA 1643

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ROS2实用工具

1. 将ROS2的Bag文件转换为CSV、JSON等1. 将ROS2的Bag文件转换为CSV、JSON等。

caokaifa的博客 4331

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Win32状态(sc-win32-status)说明

在iis的日志里面,有一项是sc-win32-status,这个的中文名字就是Win32状态,那么,该状态不同的数值代表什么呢?成功完成的时候该状态数值为0,其他的状态数值代表的意思如下:函数不正确 系统找不到指定的文件 系统找不到指定的路径 系统无法打开文件 拒绝访问 句柄无效 存储控制块被损坏 存储空间不足,无法处理此命令 存储控制块地址无效 环

summer_grass的专栏 6501

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Windows内核EPATHOBJ 0day漏洞源码分享

#ifndef WIN32_NO_STATUS # define WIN32_NO_STATUS #endif #include #include #include #include #include #ifdef WIN32_NO_STATUS # undef WIN32_NO_STATUS #endif #include #pragma comment(lib, "gdi32")

关注互联网安全的小虾米一枚 1977

Constant definitions for the NTSTATUS values.

由于在msdn中没有列出所有ntstatus的值,为了调试程序方便,以下从ntstatus.h中抽出了部分ntstatus的值。  26 /*27 * Exception codes28 */29 30 #define STATUS_SUCCESS                   ((NTSTATUS) 0x00000000)31 #define STATUS_SEVERITY_SUC

AMK 的专栏 3198

Win32_baseboard 主板 参数说明

Caption  --简短说明 ConfigOptions   --数组,表示位于在底板上跳线和开关的配置。 CreationClassName  --表示类的名称(就是Win32_baseboard类) Depth   --以英寸为单位的物理封装。 Description  --对象的描述(底板) Height  --用英寸表示的物理包的高度 HostingBoard  --如果为T

yeyingss的专栏 7741

直接运行内存中的程序

哈哈,想不到有人居然把这种代码也搞出来了。     Windows的PE加载器在启动程序的时候,会将磁盘上的文件加载到内存,然后做很多操作,如函数导入表重定位,变量预处理之类的。这位仁兄等于是自己写了一个PE加载器。直接将内存中的程序启动。记得以前的“红色代码”病毒也有相同的特性。     直接启动内存中的程序相当于加了一个壳,可以把程序加密保存,运行时解密到内存,然后启动,不过对于增加破解难

自由空间,实现思想的自由之地 1019

使用 ZwUnmapViewOfSection 卸载并替换内存镜像

The ZwUnmapViewOfSection routine unmaps a view of a section from the virtual address space of a subject process. NTSTATUS ZwUnmapViewOfSection( IN HANDLE ProcessHandle, IN PVOID BaseAddress ); 这个函数在 wdm.h 里声明,它的功能是卸载进程的内存镜像(Image Buff...

weixin_41875267的博客 2347

草牛傀儡进程代码

*********************************************************************    Author: Polymorphours    Date: 2005/1/10    Modified by: XiCao    Date: 2006/10/31    另一种将自己代码注入傀儡进程的方法,配合反弹木马,可绕过防火墙的

3315

神秘的加密工具

喜欢就关注我吧,订阅更多最新消息我一直认为,在黑客世界里,加密技术是一种很神秘的艺术,是一种很隐晦的东西,我们可以查找资料来进行研究。当然,它在黑客世界中已经变得非常普遍,尤其是在201...

蚁景网安学院 759

windowsPE加载器,替换进程内存,

http://topic.youkuaiyun.com/u/20091103/11/c38fd755-6ff6-4b8b-a7bc-9aa1c94774c4.htmlhttp://bbs.eyuyan.com/read.php?tid=150015&page=2 Windows的PE加载器在启动程序的时候,会将磁盘上的文件加载到内存,然后做很多操作,如函数导入表重定位,变量预处理之类的。这位仁兄等于是

lionzl的专栏 1089
上一篇: 程序逆向技术之二变量和常量
下一篇: 得到函数 RVA
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值