VB.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 '四字节对齐