现在在尝试用hook的方式从一个dll文件中dump出里面的一些算法函数,使用的代码是通过AheadlibPlus(john)生成的hook然后修改,大致的内容形式如下:
PVOID(*pfnN8JDllMain)(PVOID p0, PVOID p1, PVOID p2, PVOID p3, PVOID p4, PVOID p5, PVOID p6, PVOID p7, PVOID p8, PVOID p9, PVOID p10, PVOID p11, PVOID p12, PVOID p13 )
inline void WINAPI initAddress()
{
pfnN8JDllMain = (decltype(pfnN8JDllMain))GetAddress("N8JDllMain")
*****
}
ALCDECL AheadLib_N8JDllMain(PVOID p0, PVOID p1, PVOID p2, PVOID p3, PVOID p4, PVOID p5, PVOID p6, PVOID p7, PVOID p8, PVOID p9, PVOID p10, PVOID p11, PVOID p12, PVOID p13 )
{
prevFunc()
java_defineClass((JNIEnv*)p0,
(jclass)p1,
(jstring)p2,
(jbyteArray)p3,
(jint)p4,
(jobject)p5,
(jstring)p6, p7, p8, p9, p10, p11, p12, p13)
setFunc(pfnN8JDllMain)
endFunc()
}
jclass __stdcall java_defineClass(JNIEnv* env, jclass cls, jstring name, jbyteArray data, jint length, jobject pd, jstring source, LPVOID p7, LPVOID p8, LPVOID p9, LPVOID p10, LPVOID p11, LPVOID p12, LPVOID p13)
{
return (jclass)pfnJava_java_lang_ClassLoader_defineClassImpl((LPVOID)env, (LPVOID)cls, (LPVOID)name, (LPVOID)data, (LPVOID)length, (LPVOID)pd, (LPVOID)source, p7, p8, p9, p10, p11, p12, p13)
}
这里只是描述一下基础的代码构成,在这个java_defineClass
方法里面也没有进行任何操作,现在的问题是,这个dll劫持之后,只能dump出一部分的方法函数,然后就报错弹出。
因为是另外一个程序启动的时候调用的dll文件,不方便调试,求助一下这个可能是因为什么原因,有什么处理思路。