-
-
[求助]线程起始地址修改
-
发表于:
2013-7-8 13:29
5345
-
最近做一个注入的东东,当我注入后启动线程会被被注入程序结束掉,据说是该程序有检测线程起始地址。于是我想改变线程的起始地址,思路就是修改线程的起始地址为一个合法地址,然后在合法地址加入跳转到真实的线程代码段执行,以逃避在线程启动时被注入程序对起始地址的检测。但问题来了,我该怎么去找一个合法的地址呢?我做了如下尝试:
(DWORD)VirtualAlloc(NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);这样申请一个地址,但是该地址依旧被认为非法。于是按照某文章说的找一个API。我就找了user32.dll中的DestroyAcceleratorTable(随便找的)。但我发现直接HOOK这个函数地址处会失败。于是加入修改内存页的读写属性 BOOL br = VirtualProtect((LPVOID)funaddr, 0x10, PAGE_EXECUTE_READWRITE, &oldp);。可是修改属性函数也失败。现在想请教各位大侠,怎么才能动态获取一个合法地址。比如在exe模块的。或者其他明显的合法模块(user32.dll 等)。还有就是为什么我调用VirtualProtect这个会失败,VirtualAlloc这个api的第一个参数(不为NULL)怎么理解。比如我这样调用DWORD addr = (DWORD)VirtualAlloc((LPVOID)0x401000, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); 是什么意思。他是指我想在0x401000地址处申请4096大小的空间,还是说以0x401000为开始,往后查找满足条件的空间呢?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)