fix de elfo
Este RESP incluye dos UTILS sobre el vertido y la fijación del brazo ELF32/ELF64 de la memoria.
- vertedero
- Ejecute en Android, puede volcar ELF de una memoria de proceso y arreglarlo, reconstruir el encabezado de sección para un mejor análisis de IDA.
- sofix
- Ejecute en PC, puede solucionar un archivo ELF descargado de la memoria y reconstruir el encabezado de la sección para un mejor análisis de IDA.
El objetivo principal es reconstruir el encabezado de sección de un elfo por memoria arrojado.
Construir
vertedero
- La ruta de salida es APP/LIBS/Armeabi-V7A/Dump
sofix
- En Linux/Mac, asegúrese de que esté instalado Clang/GCC, simplemente ejecute ./build-fix.sh
- En Windows, se puede construir en Mingw, pero no probado.
Sin duda
- sofix
- Params <Src_So_Path> <BASE_ADDR_IN_MEMORY_IN_HEX> <Out_SO_PATH>
- <Src_SO_PATH> El archivo ELF descargado desde la memoria (puede usar el depurador DD o IDA que descarga un archivo ELF desde el proceso de Android)
- <Dase_addr_in_memory_in_hex> La base de memoria para el archivo ELF descargado desde la memoria, si no lo sabe, PASS 0 está bien
- <Out_so_path> el archivo de salida
- ejemplo
- ./SOFIX Dumped.SO 0x6F5A4000 B.SO
- vertedero
- Esto se ejecuta en el teléfono Android
- Asegúrese de que su teléfono tenga acceso a la raíz.
- Empujelo en/Data/Local/TMP y Grant +X como este
- ADB Push App/Libs/Armeabi-V7A/dump/data/local/tmp/&&&db shell chmod 777/data/local/tmp/dump
- Use el shell ADB para ingresar a su teléfono y cambiar a Root User por el comando SU.
- parámetros <BASE_HEX> <End_hex> [is-stop-process-before-dump] [is-fix-so-after-dump]
- la identificación del proceso que desea volcar
- <Base_hex> La dirección de inicio de ELF que desea descargar en la memoria de proceso, puede obtener esto por
cat /proc/<pid>/maps - <End_hex> La dirección final de ELF que desea volcar en la memoria de proceso, puede obtener esto por
cat /proc/<pid>/maps - La ruta de salida de ELF fija en su teléfono.
- [IS-Stop-Process-Before-Dump] 0/1 debe enviar Sigal al proceso antes de hacer el trabajo de volcado, útil en alguna aplicación anti volcado. Si no hay anti vertido en su proceso objetivo, 0 está bien
- [IS-FIX-SO-A-DUMP] 0/1 debe hacer la reconstrucción de trabajo de trabajo y encabezado de sección, si pasa, intentará arreglar el elfo después del volcado.
- ejemplo
- Si quieres volcar libc.so, y tu/proc/[pid]/maps como este
40105000-4014c000 r-xp 00000000 b3:19 717 /system/lib/libc.so
4014c000-4014d000 ---p 00000000 00:00 0
4014d000-4014f000 r--p 00047000 b3:19 717 /system/lib/libc.so
4014f000-40152000 rw-p 00049000 b3:19 717 /system/lib/libc.so
40152000-40160000 rw-p 00000000 00:00 0
- ./dump 1148 0x40105000 0x40160000 ./out.so 0 1
- Volcar a 40160000, no 40152000 se debe a que la memoria ELF .BSS si existe también debe verse, el proceso de corrección depende de ello.
Comparar entre elfo no-fix y fijo

