能力值:
( LV8,RANK:120 )
|
-
-
2 楼
韬哥解释下吧,代码看着挺累的。。
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
果断支持韬兄。
|
能力值:
( LV15,RANK:520 )
|
-
-
4 楼
添加了说明。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
.......我觉得这样问题很大。。。确定这样行?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
关注中,求解决方案!
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
滔哥好牛B啊!完全看不懂你在讲啥!求滔哥指点
|
能力值:
( LV15,RANK:520 )
|
-
-
8 楼
黑哥太谦虚了
|
能力值:
( LV15,RANK:520 )
|
-
-
9 楼
这都是论坛中的大牛玩过时的玩意了,我从以前的帖子的EXE里面给趴出来了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
恩。你的文章写的挺好的。支持一下。。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
THEMIDA 的壳子确实是这样的,
|
能力值:
( LV8,RANK:130 )
|
-
-
12 楼
大概看了一下代码总感觉有问题啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
实在是看不明白啊,。。
|
能力值:
( LV11,RANK:180 )
|
-
-
14 楼
|
能力值:
( LV11,RANK:180 )
|
-
-
15 楼
#include <windows.h>
DWORD ReGetProcAddress(HMODULE hModule, HMODULE hOldModule, LPCSTR lpProcName)
{
DWORD MyApiAddr;
DWORD ApiOffset;
DWORD ReApiAddr;
MyApiAddr = (DWORD)GetProcAddress(hOldModule, lpProcName);
ApiOffset = MyApiAddr - (DWORD)hOldModule;
ReApiAddr = (DWORD)hModule + ApiOffset;
return (ReApiAddr);
}
HMODULE RemapLibrary(LPCSTR lpModuleName)
{
HMODULE hMod;
DWORD ImageSize;
BYTE* Virtual;
PIMAGE_DOS_HEADER DosHeader;
PIMAGE_NT_HEADERS NtHeader;
hMod = GetModuleHandleA(lpModuleName);
if(!hMod)
{
return (0);
}
DosHeader = (PIMAGE_DOS_HEADER)hMod;
NtHeader = (PIMAGE_NT_HEADERS)((DWORD)DosHeader + (DWORD)DosHeader->e_lfanew);
ImageSize = (DWORD)NtHeader->OptionalHeader.SizeOfImage;
Virtual = (BYTE*)VirtualAlloc(NULL, ImageSize, MEM_COMMIT, PAGE_READWRITE);
if(!Virtual)
{
return (0);
}
VirtualLock(Virtual, ImageSize);
memcpy(Virtual, (PBYTE)hMod, ImageSize);
return ((HMODULE)Virtual);
}
typedef DWORD (WINAPI *MSGBOX)(HWND,LPSTR,LPSTR,UINT);
void main()
{
HMODULE hOldMod, hNewMod;
MSGBOX MyMessageBox;
printf("开始动态加载User32.dll\n");
hOldMod = LoadLibrary("user32.dll");
printf("User32.dll加载成功!\n");
printf("开始重新映射User32.dll\n");
hNewMod = RemapLibrary("user32.dll");
printf("User32.dll重新映射成功!\n按任意键继续...\n");
getchar();
printf("开始释放原User32.dll\n");
FreeLibrary(hOldMod);
printf("User32.dll释放成功!\n按任意键继续...\n");
getchar();
MyMessageBox = (MSGBOX)ReGetProcAddress(hNewMod, hOldMod, "MessageBoxA");
MyMessageBox(NULL, "ReMapLibrary OK!", "Test", 0);
printf("调用MessageBoxA成功!");
}
|
能力值:
( LV7,RANK:100 )
|
-
-
16 楼
不知道Safengine是不是也是这种方法,是的话od里ctrl+s搜索特征码就能中断了
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
话说OD暂停 然后单步也可以找到
|
能力值:
( LV15,RANK:520 )
|
-
-
18 楼
多谢封装!
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
代码很不认识
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
来顶下滔哥
|
能力值:
( LV8,RANK:130 )
|
-
-
21 楼
最简单的内存对齐,重定位,IAT,这些你都没做的嘛。
另外,这和Themida有啥关系。
|
能力值:
( LV15,RANK:520 )
|
-
-
22 楼
找下和这标题相同的帖子吧,看了就知道怎么了!
|
能力值:
( LV8,RANK:130 )
|
-
-
23 楼
……
|
能力值:
( LV9,RANK:140 )
|
-
-
24 楼
hhee 楼上的给力哥
|
能力值:
( LV8,RANK:130 )
|
-
-
25 楼
内存RVA到 文件VA的转换过程。。TMD查找关键API函数调用的一个快捷途径。。
|
|
|