minhas informações de contato
Correspondência[email protected]
2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
O formato de arquivo executável mach-O é um formato de arquivo binário usado nos sistemas operacionais macOS e iOS da Apple.
Em algumas verificações de segurança do iOS, pode ser necessário obter o local de chamada específico de uma função, o que pode orientar os usuários a localizar vulnerabilidades com mais precisão.
Agora pegue a função NSLog como exemplo e pesquise estaticamente o local de chamada específico da função de link dinâmico em macho.
Procure o local específico onde a função NSLog é chamada no aplicativo macho.
Todo o processo de pesquisa é um processo de análise de arquivos machos e de análise de dados binários em estruturas de dados apropriadas.
Várias partes de macho são usadas:
Mesa de Cordas
Tabela de Símbolos
Tabela de Símbolos Dinâmicos
Seção64(TEXTO,tocos)
Seção64(TEXTO,texto)
Encontre LC_SYMTAB em Load Commands, você pode determinar o deslocamento e o tamanho de StringTable e também pode encontrar o deslocamento e o número da tabela de símbolos:
O deslocamento da tabela de símbolos é 0x18c478
O número de símbolos é 0x9a2d
O deslocamento da tabela de strings é 0x2273b0
O tamanho da tabela de strings é 0x108d58
Como cada comprimento de dados de símbolo é de 16 bytes, que é 0x10,
Portanto, o tamanho da tabela de símbolos é 0x9a2d*0x10 = 0x9A2D0
O endereço inicial da Tabela de Símbolos é 0x18c478
O endereço final é 0x18c478 0x9A2D0 = 0x226748
O endereço inicial da tabela de strings é 0x2273b0
O endereço final é 0x2273b0 0x108d58 = 0x330108
Como o comprimento da string não é fixo, o comprimento de cada dado na tabela de strings não é fixo.
Ao ler dados da tabela de strings em binário, você pode usar 'x00' como delimitador de string.
Você pode primeiro ler os dados da tabela de strings em macho e usar 'x00' como separador para gerar uma matriz de strings.
Percorra a matriz de strings e determine se cada dado é igual a "_NSLog".
_NSLog foi encontrado em 0x23331b e o código de máquina "5F4E534C6F6700" é a string "_NSLogn".
49003 (0xBF6B em hexadecimal) é o número de índice da string atual, que é provisoriamente determinado como strTab_index = 49003.
O número de índice 49003 é calculado a partir do endereço inicial 0x2273b0 da tabela de strings, o 49003º byte,
0x2273b0 49003 = 0x23331B, que é o endereço inicial de _NSLog.
No MachOView você pode ver que o endereço 0x00224988 corresponde a _NSLog.
Como encontrar dados correspondentes da tabela de símbolos por meio do número de índice 49003?
Conhecido na etapa 1:
O endereço inicial da Tabela de Símbolos é 0x18c478,
O endereço final da tabela de símbolos é 0x226748.
Neste macho, o tamanho dos dados de uma única tabela de símbolos é 0x10.
O valor dos primeiros quatro bytes do 38993º dado na Tabela de Símbolos é 0xBF6B, que é 49003.
É igual ao número de índice da string _NSLog na Tabela de Strings, portanto este dado corresponde a "_NSLog":
38993 é o número de índice dos dados atuais na Tabela de Símbolos, provisoriamente symTab_index = 38993,
0x18c478 38993 * 0x10 = 0x224988 é exatamente o endereço dos dados atuais.
A localização dos símbolos indiretos pode ser determinada em LC_DYSYMTAB em Load Commands in Macho:
Endereço inicial: 0x226748, existem 794 dados e o tamanho de cada dado é 0x4.
Percorra cada dado em Símbolos Indiretos. O 111º dado armazena 38.993.
Portanto, esses dados correspondem a "_NSLog", defina dySymTab_index = 111
0x226748 111*0x4 = 0x226904