能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这不就是傀儡进程?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
https://bbs.pediy.com/thread-259969-1.htm 其实这个不算傀儡进程,你应该找一个内存Dll加载的开源代码来修改,区别在于最后一步的入口函数定义:WinMain,就是你上面那个 //跳转到入口点开始执行 Entry = (void (*)())(entryPoint); Entry();
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
bestbird
https://bbs.pediy.com/thread-259969-1.htm
其实这个不算傀儡进程,你应该找一个内存Dll加载的开源代码来修改,区别在于最后一步的入口函数定义:WinMain, ...
大佬又来啦,感谢回复,其实WinMain这个我没有太明白。我调试的时候就是转到入口点这一步不行。我是在某视频中学到的,他没有用开源的代码,就是读取了一个exe程序,和我这个一样,但是我就是不知道最后一步转到入口点执行要怎么弄。大佬可以详细说一下嘛,万分感谢!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
// HighRun.cpp : 定义控制台应用程序的入口点。 //
#include "stdafx.h"
#include "DEFINE.h" #include "GgetPE_Info.h" #define szFileName "C:/Src.exe"
int _tmain(int argc, _TCHAR* argv[]) {
//当前进程在高地址运行 //读取目标文件到内存 拉伸 贴入0x400000 读取他的IAT表 需要的DLL LOAD进来 修复IAT表 JMP过去运行
//读取文件到内存 PVOID pImage=0; if(!ReadFileToImage(szFileName,&pImage)) { Sleep(5000); return -1; } PVOID pNewBuffer=0;
//拉伸为运行时的状态 ImageBufferToNewBuffer(pImage,&pNewBuffer); //释放读取时的内存 free(pImage);
//获取ImageBase和OEP PVOID pOptionHeader=0; GetPEOptionHeader(pNewBuffer,&pOptionHeader); DWORD dwSizeOfImage=((PIMAGE_OPTIONAL_HEADER)pOptionHeader)->SizeOfImage; DWORD dwEntryOfPoint=((PIMAGE_OPTIONAL_HEADER)pOptionHeader)->AddressOfEntryPoint; DWORD dwOldImageBase=((PIMAGE_OPTIONAL_HEADER)pOptionHeader)->ImageBase; PVOID pAllocAddr=(PVOID)0x400000;
//在0x400000处申请内存 PVOID pAllocBuffer= VirtualAlloc(pAllocAddr,dwSizeOfImage,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE); PVOID pRelocTable=0; if (!pAllocBuffer) { //如果申请失败就在任意位置申请内存 pAllocBuffer=VirtualAlloc(0,dwSizeOfImage,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE); } //把拉伸后的数据贴入申请到的位置 memcpy_s(pAllocBuffer,dwSizeOfImage,pNewBuffer,dwSizeOfImage);
//如果没有申请到原来的ImageBase 进行重定位 已经拉伸为内存状态 if((DWORD)pAllocBuffer!=dwOldImageBase) { RelocImageBuffer(pAllocBuffer,(DWORD)pAllocBuffer); }
if(!RepairImportTable(pAllocBuffer)) { MessageBox(0,TEXT("修复导入表失败"),TEXT("警告"),0); return false; } //修改县城上下文 HANDLE hThread=GetCurrentThread(); CONTEXT ct; ct.ContextFlags=CONTEXT_FULL; GetThreadContext(hThread,&ct); ct.Eax=dwEntryOfPoint; memcpy_s((PVOID)(ct.Ebx+8),4,&pAllocBuffer,4);//这句注释掉也能运行 SetThreadContext(hThread,&ct); DWORD dwJmpAddr=dwEntryOfPoint+(DWORD)pAllocBuffer; _asm { jmp dwJmpAddr } getchar(); return 0; }
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
麻木的时间
// HighRun.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "DEFINE.h" ...
我检查了代码,修复IAT没有问题呀,不知道为啥就是运行不了呀。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
你代码肯定出问题了呀,我当时写这个的时候是可以运行的。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
麻木的时间
你代码肯定出问题了呀,我当时写这个的时候是可以运行的。
检查了好几遍。。。。大佬可不可以帮忙看一下代码
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
球球 加 857305819 我把全部代码还给你。你自己查。
|
|
|