This commit is contained in:
nitrogenoliquido committed 2026-10-14 22:51:32 -05:00
1 parent 82004f6b5e
commit e0347fe1cb
8 files changed
+97 -13

No files matched your search

+17 -5
View File
@@ -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:
+6 -6
View File
@@ -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);