by Anonymous » 01 Feb 2025, 09:07
Ich habe dieses Problem erst kürzlich angefangen. Das Problem tritt auf, wenn ich versuche, mono_assembly_load_from_full aufzurufen. Es bricht nur. Es gibt keinen Fehler und nichts kehrt zurück - es hört nur auf. Es könnte an der Größe der Baugruppe zurückzuführen sein, aber ich habe es mit Baugruppen von weniger als 10 KB ausprobiert, und es funktioniert immer noch nicht. und das hat gut funktioniert. Ich weiß nicht, warum es nicht mit bestimmten Baugruppen funktioniert. Ich habe auch die neue Versammlung ausprobiert, die nicht mit dem alten Code funktioniert. Nur der alte arbeitete. Ich habe sowohl die funktionierenden als auch die nicht arbeitenden Baugruppen unten verknüpft. Hier ist der Code, den ich benutze. Und bevor jemand fragt, ja, die nicht arbeitende Baugruppe ist gültig und lädt, wenn ich sie zersetze. Die Monofunktionen sind gültig und es hat zuvor funktioniert. Es funktioniert jetzt einfach nicht mit der nicht arbeitenden Baugruppe. < /p>
Ich verstehe mit. Hoffentlich ist jemand anderes auf dieses Problem gestoßen und eine Lösung gefunden. Vielen Dank! MonoDomain* mDomain = mFunctions.MonoGetRootDomain();
if (mDomain == nullptr) {
printf("[ DllMain ] Failed to get Mono root domain!\n");
return false;
}
MonoThread* mThread = mFunctions.MonoThreadAttach(mDomain);
if (mThread == nullptr) {
printf("[ DllMain ] Failed to attach thread to Mono domain!\n");
return false;
}
MonoImageOpenStatus imageStatus;
MonoImage* mRawImage = mFunctions.MonoOpenAssemblyFromData((char*)data.data(), data.size(), true, &imageStatus);
if (imageStatus != MONO_IMAGE_OK) {
printf("[ DllMain ] Failed to load Mono assembly from data.\n");
return false;
}
printf("[ DllMain ] Assembly loaded successfully.\n");
MonoImageOpenStatus status;
MonoAssembly* mAssembly = mFunctions.MonoLoadAssemblyFromData(mRawImage, ("\0"), &status, false);
if (mAssembly == nullptr) {
printf("[ DllMain ] Failed to load Mono assembly from image.\n");
return false;
}
if (status == MONO_IMAGE_OK)
{
printf("[ DllMain ] Image is ok.\n");
}
else if (status == MONO_IMAGE_IMAGE_INVALID)
{
printf("[ DllMain ] Image is not ok.\n");
}
< /code>
Mono -Funktionsinitialisierung < /p>
typedef struct MonoFunctions {
mono_thread_attach MonoThreadAttach;
mono_get_root_domain MonoGetRootDomain;
mono_image_open_from_data MonoOpenAssemblyFromData;
mono_assembly_load_from_full MonoLoadAssemblyFromData;
mono_assembly_get_image MonoAssemblyGetImage;
mono_class_from_name MonoGetClassFromName;
mono_class_get_method_from_name MonoGetMethodFromClass;
mono_runtime_invoke MonoRuntimeInvoke;
mono_string_new MonoStringNew;
} MonoFunctions;
void SetupMonoFunctions(const HMODULE& mHandle, MonoFunctions& mFunctions) {
mFunctions.MonoThreadAttach = (mono_thread_attach)GetProcAddress(mHandle, xorstr_("mono_thread_attach"));
mFunctions.MonoGetRootDomain = (mono_get_root_domain)GetProcAddress(mHandle, xorstr_("mono_get_root_domain"));
mFunctions.MonoOpenAssemblyFromData = (mono_image_open_from_data)GetProcAddress(mHandle, xorstr_("mono_image_open_from_data"));
mFunctions.MonoLoadAssemblyFromData = (mono_assembly_load_from_full)GetProcAddress(mHandle, xorstr_("mono_assembly_load_from_full"));
mFunctions.MonoAssemblyGetImage = (mono_assembly_get_image)GetProcAddress(mHandle, xorstr_("mono_assembly_get_image"));
mFunctions.MonoGetClassFromName = (mono_class_from_name)GetProcAddress(mHandle, xorstr_("mono_class_from_name"));
mFunctions.MonoGetMethodFromClass = (mono_class_get_method_from_name)GetProcAddress(mHandle, xorstr_("mono_class_get_method_from_name"));
mFunctions.MonoRuntimeInvoke = (mono_runtime_invoke)GetProcAddress(mHandle, xorstr_("mono_runtime_invoke"));
mFunctions.MonoStringNew = (mono_string_new)GetProcAddress(mHandle, xorstr_("mono_string_new"));
}
< /code>
Wenn dies eine Art Dupelikat gibt, lassen Sie mich wissen, dass ich nichts über das Problem finden konnte. Die "nicht funktionierende" Versammlung, die nicht oBfuscated funktioniert, aber verschleiert es, ist es nicht ein Verschleierungsproblem, wenn es eine Möglichkeit gibt, dieses Problem zu lösen, in dem es mit jeder Größe funktioniert, aber im Moment werde ich die Optimierung der Dateigröße
Ich habe dieses Problem erst kürzlich angefangen. Das Problem tritt auf, wenn ich versuche, mono_assembly_load_from_full aufzurufen. Es bricht nur. Es gibt keinen Fehler und nichts kehrt zurück - es hört nur auf. Es könnte an der Größe der Baugruppe zurückzuführen sein, aber ich habe es mit Baugruppen von weniger als 10 KB ausprobiert, und es funktioniert immer noch nicht. und das hat gut funktioniert. Ich weiß nicht, warum es nicht mit bestimmten Baugruppen funktioniert. Ich habe auch die neue Versammlung ausprobiert, die nicht mit dem alten Code funktioniert. Nur der alte arbeitete. Ich habe sowohl die funktionierenden als auch die nicht arbeitenden Baugruppen unten verknüpft. Hier ist der Code, den ich benutze. Und bevor jemand fragt, ja, die nicht arbeitende Baugruppe ist gültig und lädt, wenn ich sie zersetze. Die Monofunktionen sind gültig und es hat zuvor funktioniert. Es funktioniert jetzt einfach nicht mit der nicht arbeitenden Baugruppe. < /p>
Ich verstehe mit. Hoffentlich ist jemand anderes auf dieses Problem gestoßen und eine Lösung gefunden. Vielen Dank! MonoDomain* mDomain = mFunctions.MonoGetRootDomain();
if (mDomain == nullptr) {
printf("[ DllMain ] Failed to get Mono root domain!\n");
return false;
}
MonoThread* mThread = mFunctions.MonoThreadAttach(mDomain);
if (mThread == nullptr) {
printf("[ DllMain ] Failed to attach thread to Mono domain!\n");
return false;
}
MonoImageOpenStatus imageStatus;
MonoImage* mRawImage = mFunctions.MonoOpenAssemblyFromData((char*)data.data(), data.size(), true, &imageStatus);
if (imageStatus != MONO_IMAGE_OK) {
printf("[ DllMain ] Failed to load Mono assembly from data.\n");
return false;
}
printf("[ DllMain ] Assembly loaded successfully.\n");
MonoImageOpenStatus status;
MonoAssembly* mAssembly = mFunctions.MonoLoadAssemblyFromData(mRawImage, ("\0"), &status, false);
if (mAssembly == nullptr) {
printf("[ DllMain ] Failed to load Mono assembly from image.\n");
return false;
}
if (status == MONO_IMAGE_OK)
{
printf("[ DllMain ] Image is ok.\n");
}
else if (status == MONO_IMAGE_IMAGE_INVALID)
{
printf("[ DllMain ] Image is not ok.\n");
}
< /code>
Mono -Funktionsinitialisierung < /p>
typedef struct MonoFunctions {
mono_thread_attach MonoThreadAttach;
mono_get_root_domain MonoGetRootDomain;
mono_image_open_from_data MonoOpenAssemblyFromData;
mono_assembly_load_from_full MonoLoadAssemblyFromData;
mono_assembly_get_image MonoAssemblyGetImage;
mono_class_from_name MonoGetClassFromName;
mono_class_get_method_from_name MonoGetMethodFromClass;
mono_runtime_invoke MonoRuntimeInvoke;
mono_string_new MonoStringNew;
} MonoFunctions;
void SetupMonoFunctions(const HMODULE& mHandle, MonoFunctions& mFunctions) {
mFunctions.MonoThreadAttach = (mono_thread_attach)GetProcAddress(mHandle, xorstr_("mono_thread_attach"));
mFunctions.MonoGetRootDomain = (mono_get_root_domain)GetProcAddress(mHandle, xorstr_("mono_get_root_domain"));
mFunctions.MonoOpenAssemblyFromData = (mono_image_open_from_data)GetProcAddress(mHandle, xorstr_("mono_image_open_from_data"));
mFunctions.MonoLoadAssemblyFromData = (mono_assembly_load_from_full)GetProcAddress(mHandle, xorstr_("mono_assembly_load_from_full"));
mFunctions.MonoAssemblyGetImage = (mono_assembly_get_image)GetProcAddress(mHandle, xorstr_("mono_assembly_get_image"));
mFunctions.MonoGetClassFromName = (mono_class_from_name)GetProcAddress(mHandle, xorstr_("mono_class_from_name"));
mFunctions.MonoGetMethodFromClass = (mono_class_get_method_from_name)GetProcAddress(mHandle, xorstr_("mono_class_get_method_from_name"));
mFunctions.MonoRuntimeInvoke = (mono_runtime_invoke)GetProcAddress(mHandle, xorstr_("mono_runtime_invoke"));
mFunctions.MonoStringNew = (mono_string_new)GetProcAddress(mHandle, xorstr_("mono_string_new"));
}
< /code>
Wenn dies eine Art Dupelikat gibt, lassen Sie mich wissen, dass ich nichts über das Problem finden konnte. Die "nicht funktionierende" Versammlung, die nicht oBfuscated funktioniert, aber verschleiert es, ist es nicht ein Verschleierungsproblem, wenn es eine Möglichkeit gibt, dieses Problem zu lösen, in dem es mit jeder Größe funktioniert, aber im Moment werde ich die Optimierung der Dateigröße