能力值:
( LV7,RANK:105 )
|
-
-
26 楼
小舟舟
有道理啊[em_40]
搞完了吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
yegu
搞完了吗?
没有呢,大佬你搞下吧
|
能力值:
( LV1,RANK:0 )
|
-
-
28 楼
.
最后于 2022-2-17 11:21
被wx_罗罗_882编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
29 楼
。
最后于 2022-2-18 10:52
被wx_罗罗_882编辑
,原因:
|
能力值:
( LV1,RANK:0 )
|
-
-
30 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
31 楼
|
能力值:
( LV1,RANK:0 )
|
-
-
32 楼
联系方式发我私信
|
能力值:
( LV1,RANK:0 )
|
-
-
33 楼
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include<windows.h>
#include "shlwapi.h"
#pragma comment(lib,"Shlwapi.lib")
PVOID LoadExAddr;
BYTE HookCode[] = { 0xe9,0x0,0x0, 0x0, 0x0, };
BYTE SaveCode[5] = { 0 };
void HookMain();
//DLL
WCHAR rawPath[] = L"123.dll";
WCHAR newPath[] = L"C:\\321.dll";
//targetStrAddr 是栈地址
WCHAR* targetStrAddr = NULL;
//在str1中搜索是否存在str2
BOOL myStrStrIW(WCHAR* str1, WCHAR* str2) {
int i = 0;
int j = 0;
int str2len = lstrlenW(str2);
WORD wstr1 = *(WORD*)str1;
WORD wstr2 = *(WORD*)str2;
while (wstr1 != 0)
{
wstr1 = *((WORD*)str1 + i);
WORD temp1 = wstr1;
WORD temp2 = wstr2;
while (temp1 == temp2 && j < str2len)
{
j++;
temp1 = *((WORD*)str1 + i + j);
temp2 = *((WORD*)str2 + j);
}
if (j == str2len) {
return TRUE;
}
else
{
j = 0;
}
i++;
}
return FALSE;
}
void UnHook() {
DWORD OldProtect = 0;
VirtualProtect(LoadExAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtect);
memcpy(LoadExAddr, SaveCode, 5);
VirtualProtect(LoadExAddr, 5, OldProtect, &OldProtect);
}
void pathCmp() {
if (myStrStrIW((WCHAR*)(*(DWORD*)targetStrAddr), rawPath)) {
WCHAR* temp = newPath;
_asm {
mov eax, temp;
mov ecx, targetStrAddr;
mov [ecx], eax;
}
UnHook();
}
}
void _declspec(naked) HookMain() {
_asm {
mov eax, esp
add eax,4
mov targetStrAddr, eax
}
_asm {
push ebp
push esp
mov eax,pathCmp
call eax
pop esp
pop ebp
push ebp
mov ebp,esp
}
_asm {
mov eax, LoadExAddr
add eax, 5
jmp eax
}
}
void HookLoadLibraryEx(const char* name) {
//Kernel32.dll
HMODULE hKer = LoadLibraryA(name);
LoadExAddr = GetProcAddress(hKer, "LoadLibraryExW");
if (LoadExAddr == NULL) {
MessageBoxA(0, name, "失败", 0);
return;
}
memcpy(SaveCode, LoadExAddr, 5);
//计算偏移
DWORD offset = (BYTE*)HookMain - (BYTE*)LoadExAddr - 5;
memcpy((BYTE*)HookCode + 1, &offset, 4);
DWORD OldProtect = 0;
VirtualProtect(LoadExAddr, 5, PAGE_EXECUTE_READWRITE, &OldProtect);
memcpy(LoadExAddr, HookCode, 5);
VirtualProtect(LoadExAddr, 5, OldProtect, &OldProtect);
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH: {
HookLoadLibraryEx("kernelbase.dll");
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
wx_罗罗_882
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include &a ...
大佬还在吗?之前联系方式发你私信了你没加我啊。方便的话加我帮我远程搞下,谢谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
你可以重定向加载
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
直接重定向啊
|
能力值:
( LV2,RANK:10 )
|
-
-
37 楼
直接chong定向
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
直接DLL定位
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
这个不是 很难
|
能力值:
( LV1,RANK:0 )
|
-
-
40 楼
我可以帮你搞定
|