-
-
[旧帖] [原创]添加内存修改器到任务管理器 0.00雪花
-
发表于: 2008-12-19 01:27 3047
-
第一步:添加相应资源
用ResHacker打开taskmgr.exe添加内存修改器的菜单,文件位于:X:\WINDOWS\system32目录下
原来的:
添加后:
菜单ID : 40035(0x9C63)记起来先,后面要用到。
第二步:添加响应代码
用OD加载taskmgr.exe,查找常量:0x9C5C,这个是“结束进程”菜单ID 40028
找到一处:
测试查找是否正确,在100CF29处下断,运行taskmgr.exe,在进程项随便选一个进程,按下“结束进程”菜单,这时OD会断下:
跟到这里基本结束,[eax+8]是我们所要的,记起来先!
找到空白的地方写上API调用时所用到的字符串:
找个空白地址来写我们的代码:
第三步:写一个简单的内存修改器
打开VC6,新建“MFC AppWizard(dll)”工程
定义一个全局变量来保存所选的进程ID
stdafx.h
MemEdit.cpp
添加输出函数:
按键响应事件:
EditForm.cpp
编译。。。,将其投入X:\WINDOWS\system32目录下
运行修改后的任务管理器,测试!
完成。。。
用ResHacker打开taskmgr.exe添加内存修改器的菜单,文件位于:X:\WINDOWS\system32目录下
原来的:
POPUP "Banana"
{
MENUITEM "结束进程(&E)", 40028
MENUITEM "结束进程树(&T)", 40105
MENUITEM "调试(&D)", 40027
MENUITEM SEPARATOR
POPUP "设置优先级(&P)"
{
MENUITEM "实时(&R)", 40029
MENUITEM "高(&H)", 40031
MENUITEM "高于标准(&A)", 40030
MENUITEM "标准(&N)", 40032
MENUITEM "低于标准(&B)", 40033
MENUITEM "低(&L)", 40034
}
MENUITEM "关系设置(&A)...", 40055
}
添加后:
POPUP "Banana"
{
MENUITEM "结束进程(&E)", 40028
MENUITEM "结束进程树(&T)", 40105
MENUITEM "调试(&D)", 40027
MENUITEM "内存修改器(&H)", 40035
MENUITEM SEPARATOR
POPUP "设置优先级(&P)"
{
MENUITEM "实时(&R)", 40029
MENUITEM "高(&H)", 40031
MENUITEM "高于标准(&A)", 40030
MENUITEM "标准(&N)", 40032
MENUITEM "低于标准(&B)", 40033
MENUITEM "低(&L)", 40034
}
MENUITEM "关系设置(&A)...", 40055
}
菜单ID : 40035(0x9C63)记起来先,后面要用到。
第二步:添加响应代码
用OD加载taskmgr.exe,查找常量:0x9C5C,这个是“结束进程”菜单ID 40028
找到一处:
0100CF29 BA 5C9C0000 mov edx, 9C5C
测试查找是否正确,在100CF29处下断,运行taskmgr.exe,在进程项随便选一个进程,按下“结束进程”菜单,这时OD会断下:
0100CF29 BA 5C9C0000 mov edx, 9C5C ; "结束进程"的菜单ID
0100CF2E 3BCA cmp ecx, edx ; ecx为所选的菜单ID,这里判断是否为9C5C
0100CF30 74 AD je short 0100CEDF ; 是的话就跳
0100CF32 7E BB jle short 0100CEEF
0100CEDF 85C0 test eax, eax
0100CEE1 74 0C je short 0100CEEF
0100CEE3 6A 00 push 0
0100CEE5 FF70 08 push dword ptr [eax+8] ; 所选的进程ID
0100CEE8 8BCE mov ecx, esi
0100CEEA E8 8EF2FFFF call 0100C17D
0100CEEF 5E pop esi
0100CEF0 5D pop ebp
0100CEF1 C2 0800 retn 8
跟到这里基本结束,[eax+8]是我们所要的,记起来先!
找到空白的地方写上API调用时所用到的字符串:
01000332 4D 65 6D 45 64 69 74 2E 64 6C 6C 00 MemEdit.dll.
0100033E 4C 6F 61 64 44 4C 4C 00 LoadDLL.
找个空白地址来写我们的代码:
0100CF29 BA 5C9C0000 mov edx, 9C5C
修改为:
0100CF29 E9 BF7F0000 jmp 01014EED ;插入新加的菜单ID判断
01014EED BA 639C0000 mov edx, 9C63 ; 内存修改器的菜单ID
01014EF2 3BCA cmp ecx, edx ; 是否修改器菜单?
01014EF4 74 0A je short 01014F00 ; 是的话就跳
01014EF6 BA 5C9C0000 mov edx, 9C5C ; 补回原来被破坏的
01014EFB E9 2E80FFFF jmp 0100CF2E ; 继续判断其他ID
01014F00 85C0 test eax, eax
01014F02 74 0D je short 01014F11
01014F04 60 pushad ; 保存环境
01014F05 FF70 08 push dword ptr [eax+8] ; 所选的进程ID
01014F08 E8 0B000000 call 01014F18 ; 调用内存修改器
01014F0D 83C4 04 add esp, 4
01014F10 61 popad ; 恢复环境
01014F11 5E pop esi
01014F12 5D pop ebp
01014F13 C2 0800 retn 8
01014F16 90 nop
01014F17 90 nop
01014F18 68 32030001 push 01000332 ; ASCII "MemEdit.dll"
01014F1D FF15 E4100001 call dword ptr [<&KERNEL32.LoadLibraryA>]
01014F23 68 3E030001 push 0100033E ; ASCII "LoadDLL"
01014F28 50 push eax
01014F29 FF15 04110001 call dword ptr [<&KERNEL32.GetProcAddress>]
01014F2F FF7424 04 push dword ptr [esp+4]
01014F33 FFD0 call eax ; 执行
01014F35 83C4 04 add esp, 4
01014F38 C3 retn
第三步:写一个简单的内存修改器
打开VC6,新建“MFC AppWizard(dll)”工程
定义一个全局变量来保存所选的进程ID
stdafx.h
extern DWORD ProcessID;
MemEdit.cpp
DWORD ProcessID = NULL;
添加输出函数:
extern "C" __declspec(dllexport) void LoadDLL(DWORD dwProcessID)
{
ProcessID = dwProcessID;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CEditForm* EditForm = new CEditForm;
EditForm->Create(IDD_DIALOG1,NULL);
EditForm->ShowWindow(SW_SHOW);
EditForm->UpdateWindow();
}
按键响应事件:
EditForm.cpp
void CEditForm::OnButton1()
{
// TODO: Add your control notification handler code here
DWORD dwWritten;
CString Text1, Text2;
LPVOID x1;
DWORD x2;
GetDlgItemText(IDC_EDIT1,Text1);
GetDlgItemText(IDC_EDIT2,Text2);
sscanf(Text1,"%08X",&x1);
sscanf(Text2,"%08X",&x2);
if ( Text1 == "" | Text2 == "")
{
AfxMessageBox("请输入地址和数据!!");
return;
}
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, false, ProcessID );
if ( hProcess == NULL )
{
AfxMessageBox("打开进程出错!!");
return;
}
WriteProcessMemory( hProcess, x1, &x2, 1, &dwWritten );
if ( dwWritten != 1 )
{
AfxMessageBox("写入失败!!");
return;
}
CloseHandle( hProcess );
}
编译。。。,将其投入X:\WINDOWS\system32目录下
运行修改后的任务管理器,测试!
完成。。。
赞赏
他的文章
- [求助]ASProtect 脱壳求助,谢谢。。。 2294
- [无聊]OllyDbg顺利加载VMP。。。 4172
- [原创]添加内存修改器到任务管理器 3048
看原图
赞赏
雪币:
留言: