Welcome

首页 / 软件开发 / .NET编程技术 / 远线程运行汇编代码

远线程运行汇编代码2011-06-06 博客园 zcsorVB.NET 2008 写的代码,主要是前几天看人家写的VB6什么的代码,运行起来 不错,可改成VB.NET 2008一写,直接坏事了,在XP系统D325的U上跑的都挺好, 可放到VISTA系统TK55的本子上,VB6的还行,.NET的直接非法。针对这个,完整 重写了一下代码。

简单介绍步骤:

1、通过ID获取进程句柄,并替它申请一块内存:

"获取对方进程
RemoteProcess = Process.GetProcessById (PID)
"为对方进程申请4KB内存
AllocBaseAddress = VirtualAllocEx (RemoteProcess.Handle, 0, MEM_SIZE, MEM_COMMIT Or MEM_RESERVE, PAGE_EXECUTE_READWRITE)

2、构建汇编代码,这里分两种情况

A、添加代码

"添加整型
Protected Sub AddInt2Code(ByVal Value As Integer)
Dim bytes() As Byte = BitConverter.GetBytes(CInt (Value)) "获取字节内容
Add2Memory(bytes, PtrAddressOffset) "写入参数堆栈
PtrAddressOffset += 4 "堆栈位置指针向后移动
End Sub
"添加字节型
Protected Sub AddByte2Code(ByVal Value As Byte)
Dim bytes(0) As Byte
bytes(0) = Value
Add2Memory(bytes, PtrAddressOffset)
PtrAddressOffset += 1
End Sub

"添加字节数组
Protected Sub AddBytes2Code(ByVal Value As Byte())
Add2Memory(Value, PtrAddressOffset)
PtrAddressOffset += Value.Length
End Sub

B、添加数据

Add2Memory(Value, ObjAddressOffset) " 将数据写入“数据区”
Dim odata As New mData "记录每个数据(地址和长度)
odata.prt = ObjAddressOffset + AllocBaseAddress
odata.len = Value.Length
DataArraylist.Add(odata)
ObjAddressOffset += Value.Length "堆栈数据指针向后移动
ObjAddressOffset += ObjAddressOffset Mod 4 "四字节对齐