所以我正在为一个游戏(Minecraft)制作一个C ++ Dll作弊/黑客。我创建了一个小样本JNI项目,只是为了测试一下,但是在注入dll后几秒钟,Minecraft停止响应一个' win32未处理的异常'。我没有足够的C ++经验或使用JNI来理解我做错了什么......
这是我的示例代码(实际上并不是黑客,只是想尝试调用clickMouse函数来查看我是否在正确的轨道上):
DWORD WINAPI Main_Thread(LPVOID lpParam)
{
HMODULE m_hDllInstance = LoadLibraryA("jvm.dll");
JavaVM *jvm;
JNIEnv *env;
typedef jint(JNICALL * GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
GetCreatedJavaVMs jni_GetCreatedJavaVMs =
(GetCreatedJavaVMs)GetProcAddress(m_hDllInstance, "JNI_GetCreatedJavaVMs");
jint size = 1;
jint vmCount;
jint ret = jni_GetCreatedJavaVMs(&jvm, size, &vmCount);
jint rc = jvm->AttachCurrentThread((void **)& env, NULL);
jclass Minecraft = env->FindClass("net.minecraft.client.Minecraft");
jmethodID constructor = env->GetMethodID(Minecraft, "<init>", "()V");
jobject mc = env->NewObject(Minecraft, constructor);
jmethodID clickMouse = env->GetMethodID(Minecraft, "clickMouse", "()V");
while (!GetAsyncKeyState(VK_END))
{
env->CallVoidMethod(mc, clickMouse);
}
jvm->DestroyJavaVM();
return S_OK;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID
lpReserved)
{
if (ul_reason_for_call == DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, Main_Thread, 0, 0, NULL);
}
return TRUE;
}
造成这种情况的原因是什么?我该如何解决?
P.S:对不起,如果代码看起来有点搞笑,在这里粘贴它有点麻烦。
编辑:我尝试在崩溃时运行调试器,它出现了这个:http://imgur.com/a/Uot9K。我还不确定如何解决这个问题......