使用writeprocess写机器码改变代码执行状态
2009-08-28 16:11
337 查看
#include <windows.h>
#include <tchar.h>
#include <windef.h>
typedef int (*PFNMESSAGEW)(HWND,LPCWSTR,LPCWSTR,UINT);
int sum(int a,int b);
LPCWSTR STR_OK=_T("ok");
LPCWSTR STR_WORDS=_T("it work well");
PFNMESSAGEW pfnMessageBoxW=NULL;
int WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lpCmdLine,int nShowCmd)
{
DWORD dwNum=0;
BYTE OBJ_CODE[]={0xe9,0x0,0x0,0x0,0x0};//jmp code
HMODULE hUser32=::LoadLibraryA("user32");
pfnMessageBoxW=(PFNMESSAGEW)GetProcAddress(hUser32,"MessageBoxW");
//获取__MESSAGEBOX地址
DWORD dwMessageAddr=0;
_asm
{
push ebx
mov ebx, __MESSAGEBOX
mov dwMessageAddr,ebx
pop ebx
}
//计算改变后的地址地址
dwMessageAddr-=(DWORD)sum+5;
memcpy(&OBJ_CODE[1],&dwMessageAddr,sizeof(DWORD));
DWORD dwSumAddr=(DWORD)sum;
::WriteProcessMemory(::GetCurrentProcess(),(LPVOID)dwSumAddr,OBJ_CODE,5,&dwNum);
int s=sum(3,5);
_asm
{
__MESSAGEBOX:
push MB_OK
push STR_OK
push STR_WORDS
push 0
call pfnMessageBoxW
add esp,16
}
FreeLibrary(hUser32);
return 0;
}
int sum(int a,int b)
{
return 5;
}
#include <tchar.h>
#include <windef.h>
typedef int (*PFNMESSAGEW)(HWND,LPCWSTR,LPCWSTR,UINT);
int sum(int a,int b);
LPCWSTR STR_OK=_T("ok");
LPCWSTR STR_WORDS=_T("it work well");
PFNMESSAGEW pfnMessageBoxW=NULL;
int WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lpCmdLine,int nShowCmd)
{
DWORD dwNum=0;
BYTE OBJ_CODE[]={0xe9,0x0,0x0,0x0,0x0};//jmp code
HMODULE hUser32=::LoadLibraryA("user32");
pfnMessageBoxW=(PFNMESSAGEW)GetProcAddress(hUser32,"MessageBoxW");
//获取__MESSAGEBOX地址
DWORD dwMessageAddr=0;
_asm
{
push ebx
mov ebx, __MESSAGEBOX
mov dwMessageAddr,ebx
pop ebx
}
//计算改变后的地址地址
dwMessageAddr-=(DWORD)sum+5;
memcpy(&OBJ_CODE[1],&dwMessageAddr,sizeof(DWORD));
DWORD dwSumAddr=(DWORD)sum;
::WriteProcessMemory(::GetCurrentProcess(),(LPVOID)dwSumAddr,OBJ_CODE,5,&dwNum);
int s=sum(3,5);
_asm
{
__MESSAGEBOX:
push MB_OK
push STR_OK
push STR_WORDS
push 0
call pfnMessageBoxW
add esp,16
}
FreeLibrary(hUser32);
return 0;
}
int sum(int a,int b)
{
return 5;
}
相关文章推荐
- 2.response跳转: a.客户端跳转,地址栏改变; b.所有代码执行完毕后跳转; c.跳转后的页面不能使用上一个页面的request属性; d.使用地址重写传递参数(respon
- 使用header发送状态代码
- Android app中所有页面的特定颜色,被改变为另一状态,只因使用了getBackground().set…
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- AngularJs讲师代码点击状态值改变背景色
- RDS服务器消息:执行RDS命令时出错,状态代码404
- 牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止
- java 中使用ScriptEngine执行javascript脚本代码和使用中应该注意的事项
- Android应用被卸载后,自动使用 浏览器打开指定连接(或编写C代码执行其他操作)
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。
- 「Unity」使用协程延时执行代码
- 47-使用用UIApplication对象,设置应用程序的桌面提醒数字,联网状态,OpenUrl,状态栏(代码封装)
- iOS:使用代理模式监听开关状态改变事件
- JVM执行篇:使用HSDIS插件分析JVM代码执行细节
- 执行一个命令,将其输出截获的代码-使用无名管道
- 如何使用ordered提示改变SQL执行计划
- error:使用同样的代码,两次执行效果居然不一样。。。
- VS2005 DEBUG状态下修改代码(VS2005 使用技巧)
- android 在函数中使用return,让后面的代码不再执行
- JVM执行篇:使用HSDIS插件分析JVM代码执行细节--转