远线程运行汇编代码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 SubB、添加数据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 "四字节对齐