python注入进程_向进程中注入Python代码

我想把Python代码注入到一个进程中,当它注入时,它似乎会使我的进程崩溃。我没有在我自己的程序中得到任何错误,但目标进程停止工作。被调用的非托管api没有给我任何错误,并且似乎已经正确地执行了它们的执行。在[DllImport("kernel32")]

public static extern IntPtr CreateRemoteThread(IntPtr hProcess,IntPtr lpThreadAttributes,uint dwStackSize, IntPtr lpStartAddress,IntPtr lpParameter,uint dwCreationFlags, out uint lpThreadId);

[Flags]

enum ProcessAccessFlags : uint

{

All = 0x001F0FFF,

Terminate = 0x00000001,

CreateThread = 0x00000002,

VMOperation = 0x00000008,

VMRead = 0x00000010,

VMWrite = 0x00000020,

DupHandle = 0x00000040,

SetInformation = 0x00000200,

QueryInformation = 0x00000400,

Synchronize = 0x00100000

}

[DllImport("kernel32.dll")]

static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);

[Flags]

public enum AllocationType

{

Commit = 0x1000,

Reserve = 0x2000,

Decommit = 0x4000,

Release = 0x8000,

Reset = 0x80000,

Physical = 0x400000,

TopDown = 0x100000,

WriteWatch = 0x200000,

LargePages = 0x20000000,

VIRTUAL_MEM = (0x1000 | 0x2000)

}

[Flags]

public enum MemoryProtection

{

Execute = 0x10,

ExecuteRead = 0x20,

ExecuteReadWrite = 0x40,

ExecuteWriteCopy = 0x80,

NoAccess = 0x01,

ReadOnly = 0x02,

ReadWrite = 0x04,

WriteCopy = 0x08,

GuardModifierflag = 0x100,

NoCacheModifierflag = 0x200,

WriteCombineModifierflag = 0x400,

PAGE_EXECUTE_READWRITE = 0x00000040

}

[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]

static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, AllocationType flAllocationType, MemoryProtection flProtect);

[DllImport("kernel32.dll", SetLastError = true)]

static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);

[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]

static extern bool VirtualFreeEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint dwFreeType);

[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]

internal static extern Int32 WaitForSingleObject( IntPtr handle,Int32 milliseconds);

[DllImport("kernel32.dll")]

public static extern Int32 CloseHandle(IntPtr hObject);

private void InjectCode(string shellcode = "print('Hello, World!')")

{

foreach (Process proc in Process.GetProcesses())

{

if (proc.ProcessName == "Toontown")

{

int shellcode_length = shellcode.Length;

IntPtr h_process = OpenProcess(ProcessAccessFlags.All, false, (int)proc.Id);

IntPtr shellcode_address = (IntPtr)VirtualAllocEx(h_process, (IntPtr)0, (uint)shellcode_length, AllocationType.VIRTUAL_MEM, MemoryProtection.PAGE_EXECUTE_READWRITE);

byte[] bytes = new byte[shellcode.Length * sizeof(char)];

Buffer.BlockCopy(shellcode.ToCharArray(), 0, bytes, 0, bytes.Length);

UIntPtr bytesout;

uint t_id;

bool Written = WriteProcessMemory(h_process, shellcode_address, bytes, (uint)shellcode_length, out bytesout);

IntPtr hThread = (IntPtr)CreateRemoteThread(h_process, (IntPtr)null, 0, (IntPtr)shellcode_length, (IntPtr)shellcode_address, 0, out t_id);

int Result = WaitForSingleObject(hThread, 10 * 1000);

if (Result == 0x00000080L || Result == 0x00000102L || Result == 0xFFFFFFFF)

{

if (hThread != null)

{

CloseHandle(hThread);

}

}

Thread.Sleep(1000);

VirtualFreeEx(h_process, shellcode_address, (UIntPtr)0, 0x8000);

if (hThread != null)

{

CloseHandle(hThread);

}

}

}

}

如您所见,我已经将非托管API的返回值保存到变量中,这些变量用于查看它是否正常工作,它似乎运行良好,但它会导致目标进程崩溃,日志中没有记录任何与之相关的错误。

托管程序能否注入非托管进程?我投错变量类型了吗?外壳代码是否被错误地转换成字节数组?请告诉我,谢谢。在

编辑:它在CreateRemoteThread崩溃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软将在新西兰建设其第一个数据中心区域

昨天新西兰各IT群都被一条消息刷屏了:详情可见:https://news.microsoft.com/en-nz/2020/05/06/aotearoa-disclosure/NZ的第一个Azure region region 是云计算的一个术语,也就是各大云运营商机房部署的位置。目前微软、亚马逊、谷歌等比较大的…

Sorting It All Out (易错题+拓扑排序+有向图(判环+判有序)优先级)

这道题目考察了拓扑排序的基本思想:每一步寻找一个入度为0的结点,然后 删除之。将这个结点指向的结点入度减1。删除从这个结点出发的所有边 同时考察了对于一个有向图是否有环、是否严格有序的判断。(当发现多个结点的度 为0时,则…

[PAT乙级]1011 A+B 和 C

给定区间 [−2​31​​,2​31​​] 内的 3 个整数 A、B 和 C,请判断 AB 是否大于 C。 输入格式: 输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以…

用python输出12和8的最大公_重点汇总-python常见问题1

1. 简述函数式编程解释一: 在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使fliter(),map(),reduce(),apply()函数来支持函数式编程。解释二: 廖---函数是P…

A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)

题意: 有一个数组,有两种操作。1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c。 题目: You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to a…

使用 kind 快速搭建一个 Kubernetes 测试环境

使用 kind 快速搭建一个 Kubernetes 测试环境Introkind(Kubernetes IN Docker) 是一个基于 docker 构建 Kubernetes 集群的工具,非常适合用来在本地搭建基于 Kubernetes 的开发/测试环境。想写一篇 kind 的文章很久了,但是之前的 …

[PAT乙级]1013 数素数

令 P​i​​ 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​,请输出 P​M​​ 到 P​N​​ 的所有素数。 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。 输出格式: 输出从 P​M​​ 到 P​N​​ 的所有素数&#xf…

D. 关灯问题(规律或二分)

题目描述 今年就这么结束了, zdw感到十分失望 蓝桥杯写错签到题, cf rating狂掉, 最后区域赛打铜, 还突然变成JBer了 失落的zdw准备睡觉(真咸鱼), 他想关灯, 然而发现开关坏了 zdw愤怒地敲击着开关, 然后发现一个很神奇的事情: 如果灯之前已经关过了xx次, 那么下一次打开它…

麻雀虽小,五脏俱全

入职三年, 除了参与公司核心产品研发外,另外负责了一个2C的小项目:调用API拿到解析结果 & 计费。❝项目最初是.NetCore 1.0-Previewsqlite部署在IIS上,闲来没事,这个项目已经被我完全重写,在此记录一些…

[PAT乙级]1016 部分A+B

正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​。例如:给定 A3862767,D​A​​6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。 现给定 A、D​A​​…

java循环语句_java中循环语句

java中的循环语句主要包括while (){}语句,for(){}语句,do{}while()语句一、while语句:while语句的使用情况是不知道循环次数的是使用。格式:while(判断条件){循环体;}解读:当条件为真时,会执行循…

内存迟迟下不去,可能你就差一个GC.Collect

一:背景1. 讲故事我们有一家top级的淘品牌店铺,为了后续的加速计算,在程序启动的时候灌入她家的核心数据到内存中,灌入完成后内存高达100G,虽然云上的机器内存有256G,然被这么划掉一半看着还是有一点心疼的…

Mayor's posters POJ - 2528 (离散化+线段树)

题意: 在1~10000000这个区间中读取n个海报的区间信息,后面的海报会覆 盖前面的海报,问最后能看到几张海报.(本题是一道bug题下面会提) 题目: The citizens of Bytetown, AB, could not stand that the c…

[PAT乙级]1017 A除以B

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 ABQR 成立。 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 输出格式: 在一行中依次…

服务器程序的Xamarin-Java.Interop体验(一)

这几天需要写一个用到Java模块的程序,但是Java是不可能写的,这辈子都不可能写的,只能搞搞interop了。目前市面上已有的基本上是IKVM.NET和JNBridgePro,后者没太了解技术细节,前者看起来是只有单向的互操作(…

A Walk Through the Forest HDU - 1142(dijkstra+动态规划)

题目大意: 给你一个图,找最短路。但是有个非一般的的条件:如果a,b之间有路, 且你选择要走这条路,那么必须保证a到终点的所有路都小于b到终点的 一条路。问满足这样的路径条数 有多少。。。 解题思路 : 1.…

[PAT乙级]1018 锤子剪刀布

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。 输入格式: 输入第 1 行给出正整数 …

java 开源控件_一些好用的开源控件

工作两年,一直都在做些编码方面的表面功夫,实现了很多很炫的功能,在此写下一些体验。有些比较小的dll文件我会发上来,如果是开源组织的代码我会把地址附上,毕竟人家是会更新的。大家还有什么好用的开源控件欢迎补充。一…

揭秘 .NET 5 和Java 互操作

早早的.NET团队就立下了.NET和Java互操作的flag,如果你去翻一翻dotnet/runtime库,丝毫看不出来仓库内在搞支持。xamarin/java.interop库一直有Mono和Java互操作的实现,那么100%的实现.NET和Java互操作就是它,这两篇文章就是和你一…

[PAT乙级]1019 数字黑洞

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174&…