- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#
C# 也谈 dll 注入 - haCk214 的专栏 - CSDN 博客
C#
C# 也谈 dll 注入 - haCk214 的专栏 - CSDN 博客
hack214
因为以前的代码不太规范,所
以我又重新写了一遍,
面的代码是新的 ,我给的那个链接是
旧代码)
前段时间研究了了一下
dll 注入,虽然这项技术已经被写烂
了,而且现在而言,这项技术已经落后了,基本上编程都到 内核的级别了,不过再过时的技术对于我们刚学编程的菜鸟 来说都是新鲜的,我们还是要一点一点的来学,先把基础的 东西学会了,以后才能成为大鸟吗! ,我开始用 vb 编了一个
dll 注入的程序,事实上 dll 注入很简单,无非就是调用
virtualAllocEx,WriteProcessMemory,OpenProcess,Create
RemoteThread 等API函数,因为我是学c#的,所以也想看
F C#这方面的文章,但在网上找了半天,没有找到一篇,
也许是C#刚兴起的缘故,学C#的并不多,没办法,只好自 己移植一下,因为凡是用到 API 函数,所有的编程的语言都
是相同的,这就为我们的移植带来了方便, 学C#的一般应该 对API的调用概念很淡,因为C#通常不会去调用 API函数,
因为这些已经被封装了,在 vb,vC++ 等语言中要结束一个进 程,首先就必须要得到这个进程的句柄,然后才能进行相应 的关闭进程等操作, 得到句柄要用到 OpenProCess API 函数,
[DllImport(kernel32.dll)]
[DllImport(kernel32.dll)]
CreateRemoteThread(IntPtr hwnd, int attrib, int size, int
CreateRemoteThread(IntPtr hwnd, int attrib, int size, int
address, int par, int flags, int threadid);
结束进程要用到 TerminateProcess API 函数,但是在 c# 中 你根本不需要知道这些 API 函数就能完成同样的功能, 所以
你要是想了解一下 API 的相关知识,学一点 vb 是一个很好 首先需要加入以下 API 函数:
的选择。好了!下面就开始我们的c# dll
的选择。好了!下面就开始我们的
c# dll 注入之旅吧!
[DllImport(kernel32.dll)] public static extern int VirtualAllocEx(IntPtr
hwnd, Int32 lpaddress, int size, int type, Int32 tect);
[DllImport(kernel32.dll)] public static extern Boolean
WriteProcessMemory(IntPtr hwnd, int baseaddress, string buffer, int nsize, int filewriten );
[DllImport(kernel32.dll)] public static extern int GetProcAddress(int hwnd,
string lpname);
[DllImport(kernel32.dll)] public static extern int GetModuleHandleA(string
name);
[DllImport(kernel32.dll)] public static extern IntPtr
public static extern Int32
WaitForSingleObject(IntPtr hHandle, UInt32 dwMilliseconds);
[DllImport(kernel32.dll)] public static extern Boolean VirtualFree(IntPtr
lpAddress, Int32 dwSize,Int32 dwFreeType);
C#声明API比较复杂,因为是调用非托管的 dll,所以要用
到 DllImport 来调用非托管的 dll, 他还有很多属性在这就不多 说了,网上有很介绍,可以去查一下,不过 c# 调用自身的变 得动态链接库是倒是很方便,直接加个引用就 ok 了,调用
dll 要用的一个引用: using System.Runtime.InteropServices;
这个不要忘了加上,下面是编好的所有代码:
using System;
using System.Collections.Generic;
using System.Co
原创力文档


文档评论(0)