Answer the question
In order to leave comments, you need to log in
Function hook in Android shared object?
There is an android application that loads two libraries (that is, two .so) files. I need to use the code in the second library to replace the function from the first library - that is, in simple words, to make a hook on my function.
There is the address of the desired function, its disassembled version (that is, I know that there is enough space to install the hook), and the following code is written:
void hook(unsigned int address, unsigned int function) {
unsigned char hookProc[] = {
0xFA, 0x46,
0xF0, 0x00, 0xF8, 0x5F,
0x00, 0x00, 0x00, 0x00
};
// Функция хукаемой библиотеки использует THUMB режим инструкций"
// Первые два байта - это инструкция 'mov r10, pc' - чтобы знать, куда возвращаться после выполнения своего кода.
// Следующие 4 байта - это инструкция 'ldr pc, [pc, #-4]' - загрузка в PC адреса куда нужно перейти. Следующие после этого 4 байта и есть этот адрес для перехода.
*(unsigned int*)&hookProc[6] = function; // Заменить 4 байта нужным адресом.
mprotect((void*)(address & 0x0xFFFFF000), sizeof(hookProc), PROT_READ | PROT_WRITE);
// "снять защиту" с участка памяти чтобы иметь возможность записи туда.
memcpy((void*)address, (void*)hookProc, sizeof(hookProc));
// Скопировать код хука по указанному адресу.
__builtin___clear_cache((char*)address, (char*)(address + sizeof(hookProc)));
// ClearCache в версии для андроида.
mprotect((void*)(address & 0x0xFFFFF000), sizeof(hookProc), PROT_READ | PROT_EXEC);
}
push {r1, lr} sub
sp, #4
blx _Foobar
mov r1, #1
...
mov r10, pc
ldr pc, [pc, #-4]
blx _Foobar
mov r1, #1
...
Answer the question
In order to leave comments, you need to log in
*(unsigned int*)&hookProc[6] = function; // Заменить 4 байта нужным адресом.
memcpy(hookProc + 6, &function, sizeof(function))
.(void*)(address & 0x0xFFFFF000), sizeof(hookProc)
(void*)(address & 0xFFFFF000), ((address + sizeof(hookProc) + 0xfff) & 0xfffff000) - (address & 0xfffff000)
.it can be seen that the transition instruction with the mode change has not changed.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question