利用c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程...
c#通过调用windows API函数,可以很轻松的完成非托管WIN32程序的注入、内存读写等操作,以下为c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程的源码:(注:c#内嵌汇编其实是用一个类开实现汇编与机器码之间的转换关系。)
2 {
3 int pHandle = 0;
4 int pid = 0;
5 int value = 0;
6 int baseAddress = 0x452BD4;
7 Process controlProcess = null;
8
9 public Form1()
10 {
11 InitializeComponent();
12 }
13
14
15
16 private void timer1_Tick(object sender, EventArgs e)
17 {
18 Win32API.API.ReadProcessMemory(pHandle, baseAddress, out value, 4, 0);
19 label1.Text = value.ToString();
20 }
21
22 private void asmcall(int addr)
23 {
24 AsmClass asm = new AsmClass();
25 asm.Pushad();
26 asm.Mov_EAX(5555);
27 asm.Mov_EBX(addr);
28 asm.Call_EBX();
29
30 asm.Popad();
31 asm.Ret();
32 asm.RunAsm(this.pid);
33 }
34 private void btnCallTest_Click(object sender, EventArgs e)
35 {
36 int addr = Convert.ToInt32(txtCallAddress.Text, 16);
37 this.asmcall(addr);
38 }
39
40 private void btnSelectProcess_Click(object sender, EventArgs e)
41 {
42 FrmProcessSelect frmProcessSelect = new FrmProcessSelect();
43 if (frmProcessSelect.ShowDialog() == DialogResult.OK)
44 {
45 controlProcess = frmProcessSelect.resultProcess;
46 txtProcessName.Text = controlProcess.ProcessName;
47 }
48 else
49 {
50 frmProcessSelect.Dispose();
51 return;
52 }
53 frmProcessSelect.Dispose();
54
55 pid = controlProcess.Id;
56 pHandle = Win32API.API.OpenProcess(Win32API.API.OPEN_PROCESS_ALL, 0, pid);
57
58 if (pHandle <= 0)
59 {
60 lblMsg.Text = "打开进程失败!";
61 return;
62 }
63 else
64 {
65 lblMsg.Text = "进程创建成功!";
66 groupBox1.Enabled = true;
67 timer1.Interval = 100;
68 timer1.Start();
69 }
70 }
71
72 private void btnAddCall_Click(object sender, EventArgs e)
73 {
74 AsmClass asm = new AsmClass();
75 asm.Pushad();
76
77 asm.Mov_EBX(0xD53BE4);
78 asm.Mov_EAX(0xD51F28);
79 asm.Mov_EDX_DWORD_Ptr_EBX_Add(0x214);
80 asm.Mov_DWORD_Ptr_EAX_Add_EDX(0x24C);
81 asm.Mov_EAX_EBX();
82
83 asm.Mov_EBX(0x430020);
84 asm.Call_EBX();
85
86 asm.Popad();
87 asm.Ret();
88 asm.RunAsm(this.pid);
89 }
90
91 private void btnSubtractCall_Click(object sender, EventArgs e)
92 {
93 AsmClass asm = new AsmClass();
94 asm.Pushad();
95
96 asm.Mov_EBX(0xD53F8C);
97 asm.Mov_EAX(0xD51F28);
98 asm.Mov_EDX_DWORD_Ptr_EBX_Add(0x214);
99 asm.Mov_DWORD_Ptr_EAX_Add_EDX(0x24C);
100 asm.Mov_EAX_EBX();
101
102 asm.Mov_EBX(0x430020);
103 asm.Call_EBX();
104
105 asm.Popad();
106 asm.Ret();
107 asm.RunAsm(this.pid);
108 }
109 }
测试程序演示下载:http://files.cnblogs.com/myjece/CallTest.rar
转载于:https://www.cnblogs.com/myjece/archive/2008/09/01/1281386.html
利用c#实现远程注入非托管WIN32程序,并利用嵌入汇编调用非托管WIN32程序中的内部过程...相关推荐
- WinAPI【远程注入】利用远程线程注入DLLDelphi版
{ WinAPI[远程注入]利用远程线程注入DLLDelphi版} (okwary) 小叹的学习园地 ( SDK文档里是这样描述的:进程是一个正在运行的程序,它拥有自己的地址空间,拥有自己的 ...
- 远程注入利用远程线程直接注入
利用远程线程无DLL直接注入 (okwary) 小叹的学习园地 注入代码到其他进程地址空间的方法是使用WriteProcessMemory API.这次你不用编写一个独立的DLL而是直接复制你的代码到 ...
- C#调用非托管C++DLL:直接调用法
在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用re ...
- DLL的远程注入技术详解
DLL的远程注入技术详解 2008-12-01 20:28 DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中, 在系统启动的时候,一个EXE程序会将 ...
- 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
因客户需求,与第三方对接,调用非托管DLL,之前正常对接的程序,却总是报"内存已损坏的异常",程序进程直接死掉,折腾到这个点(2018-05-11 00:26),终于尘埃落定,直接 ...
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...
- 远程注入【注入分类】
注入分类 所谓注入就是将代码放进某个进程的地址空间并使它成为该进程的一部分:为了对某个进程进行操作,如获取某进程的数据,或者修改进程的私有数据结构等:则需将自己的代码放在目标进程的地址空间中运行,这时 ...
- %3c xml 和php冲突,[原创]WEB安全第五章 漏洞学习与利用11 xml实体注入
WEB安全第五章 漏洞学习与利用11 xml实体注入 XXE Injection即XML External Entity Injection,也就是XML外部实体注入攻击.漏洞是在对非安全的外部实体数 ...
- python dll注入监听_HOOK -- DLL的远程注入技术详解(1)
DLL 的远程注入技术是目前 Win32 病毒广泛使用的一种技术.使用这种技术的病毒体通常 位于一个 DLL 中,在系统启动的时候,一个 EXE 程序会将这个 DLL 加载至某些系统进程 (如 Exp ...
最新文章
- SQL Server 2005 连接本地端口1433开启远程连接/登陆18456错误的解决方法
- pythonsys模块介绍_sys 模块介绍 - Clarkhedi的个人空间 - OSCHINA - 中文开源技术交流社区...
- 用python替换文件中内容的两种方法
- python喜马拉雅收费_python抓取喜马拉雅免费专辑
- QML与Qt C++ 交互机制详解
- redhat6.8链路聚合
- First Steps with TensorFlow代码解析
- 任务管理平台_软件品质评测系统任务分发管理平台
- (10)FPGA跨时钟域处理
- kvm虚拟机安装esxi服务器,VMware vSphere虚拟机迁移至KVM virt-v2v方案
- 关于举办2017年暑期全国高校教师 “Python编程及应用”培训班通知
- selenium 示例_Selenium findElement和findElements示例
- kA*与(kA)*的行列式计算
- java镜像_012 制作Java基础镜像
- 我想用计算机计算数,数字计算器
- 去天翎咨询myapps2.4的问题
- 百度Clouda的初步探索
- 全球与中国泄漏吸收枕头市场深度研究分析报告
- 华为mate50os鸿蒙,华为Mate50将如期发布,屏下镜头+鸿蒙OS,再见iPhone12
- 【BZOJ 4242】水壶
热门文章
- python集合的定义方式_11-Python基础知识学习—集合类型
- 2018蚂蚁金服NLP用户意图的精准识别,复赛f1 = 0.7327
- 叙述计算机网络的分类与拓扑结构,计算机的网络中有线网络和无线网络最主要的区别是()。...
- 如何做好一位合格qc_如何做好一个合格的热缩产品
- matlab gpu 编程 macOS,MATLAB GPU编程基础
- leetcode两数之和,三数之和,四数之和问题
- spring boot 配置网关时404错误_Kong中使用grpcweb插件代理grpc服务时遇到的坑
- android 数据持久化——File
- Ext.form.DateField简单用法及日期范围控制
- php语言中不能包含html标签,在邮件主题中包含html标签[PHP]