Вызов функции в неуправляемой введенной DLL

Я пытался решить эту проблему в течение нескольких дней, и я до сих пор не могу заставить ее работать.
Я успешно ввел неуправляемую DLL в удаленный процесс. Внутри dll есть функция testfunction, которую я пытаюсь вызвать через CreateRemoteThread.

У меня есть адрес (0x6B610000) для введенной DLL в процессе и смещение функции (0x70802), что означает, что функция в DLL находится в (0x6B680802).

Я экспортировал функцию также в DLL:

LIBRARY test
EXPORTS
testfunction

Вот как я пытаюсь вызвать функцию:

    public uint CallFunction()
{
IntPtr _functionPtr = IntPtr.Add(this.modulePtr, 0x70802); //this.modulePtr = 0x6B610000
uint threadID;
IntPtr hThread = CreateRemoteThread(this.processHandle, IntPtr.Zero, IntPtr.Zero, _functionPtr, IntPtr.Zero, 0, out threadID);
// wait for thread to exit
WaitForSingleObject(hThread, 0xFFFFFFFF);

// get the thread exit code
uint exitCode = 0;
GetExitCodeThread(hThread, out exitCode);

// close thread handle
CloseHandle(hThread);

return exitCode;
}

Это мой источник DLL:

#include "stdafx.h"#include <iostream>
#include <fstream>
#include <string>

DWORD WINAPI testfunction(LPVOID *param); //<--- the test function im trying to call
DWORD WINAPI T_HkThread(LPVOID);
void WriteToLog(std::string _message);void WriteToLog(std::string _message)
{
std::ofstream out;
// std::ios::app is the open mode "append" meaning
// new data will be written to the end of the file.
out.open("C:/test/log.txt", std::ios::app);

std::string str = _message + "\n";
out << str;
}

DWORD WINAPI testfunction(LPVOID *param)
{
WriteToLog("YES YOU CALLED THE FUNCTION");
return 0;
}DWORD WINAPI T_HkThread(LPVOID)
{
//Loading CLR INTO PROCESS
WriteToLog("Thread created...");
return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
WriteToLog("Injection done: Creating Thread...");
CreateThread( NULL, NULL, T_HkThread, NULL, NULL, NULL );
}
case DLL_THREAD_ATTACH:
{

}
case DLL_THREAD_DETACH:
{

}
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

Удаленное приложение (winamp) в этом примере загружает dll (я вижу тот же адрес в хакере процессов), но мгновенно падает, когда я пытаюсь вызвать функцию «testfunction» внутри dll.

winamp caused an Access Violation (0xc0000005) in module winamp.exe at 0023:64bc0802.

Что я делаю неправильно?

заранее спасибо

0

Решение

Что ж, хорошая идея — не закрывать ProcessHandle в предыдущей функции, если вы собираетесь использовать его позже 🙂

Также добавление 0x69772 вместо 69772 не было хорошей идеей. Функция вызывается сейчас без ошибок.

0

Другие решения


По вопросам рекламы [email protected]