Cómo evitar que se descompile el código Unity3D
1. Abra libmono.so en IDA Pro y cambie mono_image_open_from_data_with_name a
mono_image_open_from_data_with_name_0,
2. ,
3.
2. Reemplazar implementar mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...); /p>
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...) ;
//Buscar encabezado del archivo de datos que no sea el prefijo DLL y luego descifrarlo img-gt; raw_data, modifique img-gt; raw_data_len en consecuencia
return img;
}
3. Vuelva a empaquetar libmono.so;
4. Escriba otra herramienta de cifrado e implíquela en el entorno de compilación (MonoDeveloper o VS, agregue una fase de compilación empaquetada para cifrar la DLL (JIT está deshabilitado en IOS y el estado sólido usa compilación AOT). no hay código lógico, así que no hay necesidad de preocuparse);
Desde AndroidManifest.xml, podemos ver que la transformación de Tencent debería consistir en modificar y reemplazar las entradas en Classes.dex, reemplazando la entrada anterior UnityPlayerProxyActivity con com. .tencent.tauth.AuthActivity. Luego cargue varios so personalizados: libNativeRQD.so.so.so. Está bien pensado y protegido para evitar que terceros confíen el descifrado a libmono. Aún no he analizado la implementación, pero creo que sigue siendo lo mismo de siempre.
mono_image_open_from_data_with_name en libmono.so ha sido reemplazado por mono_image_open_from_data_with_name_0.
Descifrado (android):
Método 1. ROOT el sistema Android (preferiblemente un teléfono móvil, no use un emulador, es muy lento) y monte el gancho API LD_PRELOAD para implementarlo.
Método 2: Extraer códigos de características de la memoria, simple, eficiente e incomparable; si la máquina puede leerlos, tú también;