fox
This commit is contained in:
1 parent
82004f6b5e
commit
e0347fe1cb
8 files changed
+97
-13
No files matched your search
@@ -6,11 +6,7 @@
|
||||
|
||||
static HMODULE g_hModule = nullptr;
|
||||
|
||||
DWORD WINAPI SlinkyNativeWorkerThread(LPVOID lpParam) {
|
||||
HMODULE hModule = (HMODULE)lpParam;
|
||||
|
||||
SlinkyNative::Logger::Initialize(hModule);
|
||||
|
||||
static DWORD RunWorker(HMODULE hModule) {
|
||||
if (!SlinkyNative::JvmManager::Initialize()) {
|
||||
SlinkyNative::Logger::Log(L"FINAL STATUS: FAILED");
|
||||
return 1;
|
||||
@@ -27,6 +23,22 @@ DWORD WINAPI SlinkyNativeWorkerThread(LPVOID lpParam) {
|
||||
return (status == SlinkyNative::InjectionStatus::Success || status == SlinkyNative::InjectionStatus::AlreadyRunning) ? 0 : 1;
|
||||
}
|
||||
|
||||
DWORD WINAPI SlinkyNativeWorkerThread(LPVOID lpParam) {
|
||||
HMODULE hModule = (HMODULE)lpParam;
|
||||
SlinkyNative::Logger::Initialize(hModule);
|
||||
|
||||
DWORD ret = 1;
|
||||
__try {
|
||||
ret = RunWorker(hModule);
|
||||
}
|
||||
__except (EXCEPTION_EXECUTE_HANDLER) {
|
||||
SlinkyNative::Logger::Log(L"SlinkyNativeWorkerThread crashed with exception 0x%08X", GetExceptionCode());
|
||||
SlinkyNative::Logger::Log(L"FINAL STATUS: FAILED");
|
||||
ret = 1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
|
||||
switch (fdwReason) {
|
||||
case DLL_PROCESS_ATTACH:
|
||||
|
||||
@@ -355,11 +355,7 @@ bool PayloadLoader::DefinePayloadClasses(JNIEnv* env, jobject classLoader, const
|
||||
env->ReleaseStringUTFChars(nameStr, nameChars);
|
||||
|
||||
if (entryName.rfind("dev/slinky/", 0) == 0 && entryName.size() > 6 && entryName.substr(entryName.size() - 6) == ".class") {
|
||||
// Convert "dev/slinky/Foo.class" -> "dev.slinky.Foo"
|
||||
std::string className = entryName.substr(0, entryName.size() - 6);
|
||||
for (char& c : className) {
|
||||
if (c == '/') c = '.';
|
||||
}
|
||||
std::string internalName = entryName.substr(0, entryName.size() - 6);
|
||||
|
||||
// Read bytes
|
||||
jobject inputStream = env->CallObjectMethod(jarObj, jarGetInputStream, entry);
|
||||
@@ -375,7 +371,11 @@ bool PayloadLoader::DefinePayloadClasses(JNIEnv* env, jobject classLoader, const
|
||||
jsize byteLen = env->GetArrayLength(classBytesArr);
|
||||
jbyte* rawBytes = env->GetByteArrayElements(classBytesArr, nullptr);
|
||||
if (rawBytes) {
|
||||
jclass definedClass = env->DefineClass(nullptr, classLoader, rawBytes, byteLen);
|
||||
jclass definedClass = env->DefineClass(internalName.c_str(), classLoader, rawBytes, byteLen);
|
||||
if (!definedClass) {
|
||||
env->ExceptionClear();
|
||||
definedClass = env->DefineClass(nullptr, classLoader, rawBytes, byteLen);
|
||||
}
|
||||
if (definedClass) {
|
||||
definedCount++;
|
||||
env->DeleteLocalRef(definedClass);
|
||||
|
||||
Reference in new issue
Block a user