Hook dll에서 함수 내보내기, 원하는 인삼 또는 인삼 내보내기
3430 단어 역방향
https://download.csdn.net/download/liutianheng654/10754049
자신의 dll에 대해 hook을 하려면 수정해야 할 파일 부분은 다음과 같습니다.
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "gDC_ApiHook.h"
#include
#include
#include
#include
#pragma comment(lib,"ws2_32.lib") //
gDC_ApiHook g_objScaleHook;
gDC_ApiHook g_objCoreHook;
FILE *fp = NULL;
char buf[] = {0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05 };
char zero[] = {0x00, 0x00, 0x00,0x00, 0x00, 0x00,0x00, 0x00, 0x00,0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00}; // , , 。
typedef unsigned int (*AOUT_FILTERSPLAY) (int *in, __m128 *out, unsigned int flag, int param, const __m128i *param2); // 。 hook , 。 , stdcall 。
// , 。 。
unsigned int gDC_aout_FiltersPlay (int *in, __m128 *out, unsigned int flag, int param, const __m128i *param2)
{
AOUT_FILTERSPLAY oldFileterPlay = NULL;
oldFileterPlay = (AOUT_FILTERSPLAY)(g_objCoreHook.GetCallAddress());
CString str;
if(flag == 5)
{
int len = *in;
int length = ntohl(len);
fwrite(buf,1,16,fp);
str.Format("%d",length);
MessageBox(NULL, str,"len", MB_OK);
int temp = length%16+2;
str.Format("%d",temp);
MessageBox(NULL, str,"yu", MB_OK);
fwrite(in,1,length,fp);
fwrite(zero,1,temp,fp);
fwrite(param2,1,16,fp);
}
//
// ,
unsigned int p = oldFileterPlay(in, out, flag, param, param2);
if(flag == 5)
{
fwrite(buf,1,16,fp);
fwrite(out,1,64,fp);
fwrite(buf,1,16,fp);
fflush(fp);
}
return p;
}
void hook()
{
fp = fopen("C:\\Users\\liuti\\Downloads\\out\\test", "wb");
// , 。 , 。
/*HMODULE hMod = GetModuleHandle("libvlccore.dll");
if (NULL == hMod)
{
MessageBox(NULL, "no Core module", "tip", MB_OK);
return ;
}
int addr = (int)GetProcAddress(hMod, "aout_FiltersPlay");
g_objCoreHook.HookApi((char*)addr, (char*)gDC_aout_FiltersPlay);*/
HMODULE hMod = GetModuleHandle("WeChatWin.dll");//dll
if (NULL == hMod)
{
MessageBox(NULL, "no Scale module", "tip", MB_OK);
return ;
}
int addr = ((int)hMod) + 0x215A0;//
g_objCoreHook.HookApi((char*)addr, (char*)gDC_aout_FiltersPlay);
//g_objScaleHook.HookApi((char*)addr, (char*)gDC_DoWork);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hook();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
fclose(fp);
break;
}
return TRUE;
}
모두 두 개의exe로 나뉘는데, 하나는 훅의 dll이고, 바로 위의 긴 코드가 생성된 것이다.
하나는 dll 주입 함수입니다. 위에서 작성한 훅을 dll로 exe에 주입하는 데 사용됩니다. 사용 방식은 다음과 같습니다.
InjectDll.exe 276748 C:\Users\liuti\Downloads\ApiHook\ApiHook\Release\ApiHook.dll
이 중 276748은 주입된 exe의 현재 Pid입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AWS 역방향 신청 절차(rDNS)EC2에서 이메일을 보내고 싶다면 AWS에 신청해야 합니다. 메일 발송 제한 해제 신청 역방향 설정 신청 또한 역방향 설정 신청을 하면 동시에 메일 송신 제한 해제도 되므로 신청은 실질적으로 하나로 문제 없습니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.