ELF-DUMP-FIX
Este RESP inclui dois utilitários sobre dumping e fixação do ARM ELF32/ELF64 da memória.
- jogar fora
- Execute no Android, pode despejar Elf de uma memória de processo e consertá -lo, reconstrua o cabeçalho da seção para obter uma melhor análise da IDA.
- Sofix
- Execute no PC, pode corrigir um arquivo ELF despejado da memória e reconstruir o cabeçalho da seção para obter uma melhor análise da IDA.
O alvo principal é reconstruir o cabeçalho da seção de um elfo por memória despejada.
Construir
jogar fora
- O caminho de saída é APP/LIBS/ARMABI-V7A/DUMP
Sofix
- No Linux/Mac, verifique se o CLANG/GCC está instalado, basta executar ./build-fix.sh
- No Windows, ele pode ser construído em Mingw, mas não testado.
HowTouse
- Sofix
- params <src_so_path> <base_addr_in_memory_in_hex> <out_so_path>
- <SRC_SO_PATH> O arquivo ELF despejado da memória. (Você pode usar o DD ou o IDA Depurger despejando um arquivo ELF do processo Android)
- <base_addr_in_memory_in_hex> A base de memória para o arquivo ELF despejada da memória, se você não sabe, o passe 0 está ok
- <O out_so_Path> o arquivo de saída
- exemplo
- ./sofix despejado.so 0x6f5a4000 b.so também
- jogar fora
- Isso é executado no telefone Android
- Verifique se o seu telefone tem acesso root.
- empurre -o para/dados/local/tmp e concessão +x assim
- adb push app/libs/armeabi-v7a/dump/data/local/tmp/&& adb shell chmod 777/data/local/tmp/dump
- Use o shell adb para inserir seu telefone e alternar para o usuário root pelo comando SU.
- Params <Sase_Hex> <end_hex> [IS-Stop-Process-Before-Dump] [Is-Fix-So-After-Dump]
- O ID do processo que você deseja despejar
- <FASTE_HEX> O endereço inicial do ELF que você deseja despejar na memória do processo, você pode obter isso por
cat /proc/<pid>/maps - <END_HEX> O endereço final do ELF que você deseja despejar na memória de processo, você pode obter isso por
cat /proc/<pid>/maps - O caminho de saída fixo do elfo no seu telefone.
- [IS-STOP-Process-Before-Dump] 0/1 deve enviar Sigal para o processo antes de fazer o trabalho de despejo, útil em algum aplicativo anti-dumping. Se não houver anti -dumping no seu processo de destino, 0 está ok
- [IS-FIX-SO-ADTER-DUMP] 0/1 deve fazer o trabalho de correção e a reconstrução do cabeçalho da seção, se você passar, ele tentará corrigir o elfo após o despejo.
- exemplo
- Se você quiser despejar libc.so e seu/proc/[pid]/mapas 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
- Despeje para 40160000 e não 40152000 é porque a memória ELF .BSS, se existir, também deve ser despejada, o processo de correção depende disso.
Compare entre sem fixação e elfo fixo

