Bem-vindo de volta.
E uma coisa que você pode ter encontrado ao brincar com esse
aplicativo é que há uma diferença entre conectar-se a um processo em execução
ou fornecer nosso script na inicialização.
A diferença entre esses dois é o momento.
E esse é um ponto muito importante da liberdade, sobre o qual precisamos falar.
Sabe de uma coisa?
É exatamente para isso que serve este vídeo e, portanto, vamos voltar para a VM do Ubuntu e descobrir
qual é o problema no momento.
Esta é a nossa VM do Ubuntu, este é o nosso script e este aqui.
Então, aqui podemos ver que estamos conectando esses parâmetros, a cadeia de caracteres e também o valor inteiro, e o valor de retorno
não será impresso agora como a cadeia de caracteres, mas, para ser honesto, tudo o que você precisa fazer
é simplesmente usar essa referência de classe e fazer o typecasting como fizemos aqui.
Concluiremos isso no início do próximo vídeo aqui.
Gostaria de falar sobre o momento.
E então, qual é a diferença se você estiver abrindo esse aplicativo?
Então, vejamos, ele ainda está sendo aberto.
E se agora você estiver se conectando a esse aplicativo com liberdade, portanto, livre hoje,
ao invadir e decair a liberdade, poderemos aplicar nosso script
e tudo funcionará perfeitamente bem.
Podemos ver que temos nosso ponteiro e clicamos no script.
Aqui temos nossos parâmetros.
Hackeamento do aplicativo do YouTube e o valor para o bem.
E isso também funciona se você estiver fornecendo o script aqui como um parâmetro para a liberdade.
Então, se voltarmos, se estiver usando o script, este aqui, vamos ver.
Este está sendo armazenado em aplicativos e a liberdade em decadência e decadência.
Sim.
Então, podemos ver que ele está sendo executado automaticamente.
E, mais uma vez, temos o ponto de vista de que, se pressionarmos corrigir mais uma vez, obteremos esses valores de parâmetro
e tudo ficará bem.
Tudo bem.
Agora estamos relançando esse aplicativo, mas desta vez estamos dizendo ao Frieda para iniciá-lo e estamos fornecendo
nosso script como parâmetro de inicialização.
Então, vamos para cá e encerraremos esse caso.
E agora vamos ver.
Dizemos à Frieda para reiniciar esse aplicativo e fornecemos nosso script na inicialização desse aplicativo.
Muito bem, vamos ver o que acontece.
Começo isso em três, dois, um e pronto.
Temos uma seta que se espera que seja um ponteiro.
E também podemos perceber agora mesmo por que esse é o caso.
O aplicativo foi inicializado.
Tudo bem.
Mas agora estamos procurando por essas funções exportadas, esta aqui e esta aqui.
E isso não está disponível no momento porque o código ainda não foi executado e, portanto, também não podemos
encontrá-los.
E é por isso que estamos recebendo o erro esperado.
Um ponteiro porque este está vazio.
Nossas funções exportadas.
Acho que também podemos imprimir isso.
É isso aí.
Sim, este é nulo porque não há módulos.
Desculpe, não há exportações a serem enumeradas com esse módulo de comando enumerate exports.
E, portanto, também não podemos nos apegar a nada aqui.
Por que adicionar este?
Então, talvez possamos colocar isso à direita.
Está bem.
Então, o que acontece é o seguinte.
Estamos tentando enumerar essas exportações a partir dessa biblioteca.
Não conseguimos encontrar nada porque esse aplicativo não foi inicializado e, portanto, esse valor
está vazio.
Se esse valor estiver vazio, esse valor também estará vazio aqui.
Mas, em seguida, estamos tentando anexar a este com o interceptor attach, e é por isso que estamos recebendo
um erro aqui.
Obviamente, esse também é o caso se você reiniciar esse aplicativo e não fornecer nenhuma pausa.
Então, para retomar automaticamente esse aplicativo, vamos ver.
Sim, aqui temos a expectativa de um ponteiro.
E o problema agora é que, se clicarmos no script, veremos que ele está funcionando aqui.
Mas não estamos apegados a essa função nativa no momento.
É claro que esse também é o caso, desculpe aqui, se você estiver usando a interface de linha de comando.
Portanto, se estivermos iniciando esse aplicativo pela interface de linha de comando e se estivermos
tentando aplicar nosso script a ele, poderemos ver um ponteiro esperado mais uma vez; se estivermos retomando, não estaremos
anexados à função nativa.
Se você clicar em clip sorry, poderemos ver que está funcionando.
Mas não há produção aqui.
Esse é um problema em muitas situações, mas descobriremos como lidar com ele em um instante.
Por enquanto, tudo o que posso recomendar é o seguinte.
Se estiver usando o interceptor attach, inicie este aplicativo até que ele esteja em execução e, em
seguida, usando a interface de linha de comando, aplique o script a este ao selo aqui.
É muito chato copiar e colar isso o tempo todo no terminal aqui.
Mas se você estiver usando um script e ficar sobrescrevendo ou recarregando o script o tempo todo, isso causará
uma grande confusão e o aplicativo, mais cedo ou mais tarde, travará.
Isso é muito chato, eu sei, mas infelizmente essa é a única maneira no momento.
Está bem.
Agora, voltaremos aos nossos slides, desenharemos nossa linha do tempo e descobriremos o que está acontecendo.
E também veremos qual é a solução para esse caso aqui.
E essa será uma solução muito boa que funcionará o tempo todo.
Por isso, incluí uma seção de bônus inteira só para esse caso aqui.
Vamos voltar aos slides e depois daremos uma olhada nisso.
Ok, aqui estamos de volta aos slides e agora vamos recapitular isso aqui.
Então, desenhamos nossa linha do tempo e temos esses dois eventos principais, temos o início e temos
os eventos intermediários.
Agora está acontecendo muita coisa.
E, por exemplo, este aqui, neste ponto, as bibliotecas serão carregadas.
Essa é a nossa biblioteca de carga do sistema.
E então temos métodos, por exemplo, D on create em nossa atividade principal e, após esse, nossa função
indie k será executada.
Portanto, não há um botão que o acione.
Ele será executado diretamente após o método on create.
E, por enquanto, temos as duas opções a seguir para conectar esse método.
Poderíamos tentar no início, para que possamos usar o freedom this free the hook no início e iniciar
esse aplicativo com a opção dash f.
O problema que vimos neste momento é que nenhuma biblioteca será carregada.
Portanto, nosso módulo enumerate exports estará vazio e não teremos acesso a essa função.
Isso definitivamente não funcionará.
E a outra opção é se conectar ao sistema em funcionamento.
Processar diretamente aqui, mas também aqui estamos tendo um problema porque o método já foi executado.
Portanto, estamos muito atrasados neste momento se estivermos tentando conectá-lo aqui.
O que precisamos fazer é o seguinte.
Precisamos anexar o depurador à biblioteca de carregamento do sistema diretamente aqui.
Portanto, precisamos aprovar esse aplicativo e, em seguida, podemos avançar para que possamos sinalizar cada instrução ali
contida.
Podemos fazer uma única etapa para que a biblioteca seja carregada e, então, tenhamos acesso a essas funções
aqui.
Podemos aplicar nosso gancho de liberdade e, depois, retomar o aplicativo, o que significa que ele
será carregado.
Nosso free the hook pode ocorrer porque esse módulo de biblioteca foi buscado e a função, se estiver sendo
chamada, será observada agora mesmo, o que é absolutamente incrível.
E, para mim, neste momento, essa é a única maneira de lidarmos com esse problema.
E isso é realmente uma configuração altamente avançada, que será mostrada na seção de bônus.
Está bem.
Por enquanto, gostaria apenas de salientar que não podemos iniciar nosso aplicativo, mas nosso script
gratuito está sendo anexado.
Também não podemos substituir nosso script de teste gratuito o tempo todo enquanto estivermos anexando ao processo em execução,
pois isso bagunçará toda a abordagem de interceptação e anexação.
Já vimos isso no passado e talvez veremos isso também nos próximos vídeos, anulando uma interceptação,
a anexação.
Mas isso será uma grande bagunça e não é absolutamente recomendado.
Felizmente, o que temos de fazer é reiniciar o aplicativo manualmente até que ele seja inicializado.
Em seguida, podemos aplicar nosso script ou nosso gancho na interface de linha de comando do freedom.
Se você já está encontrando essas mensagens de erro esperando um ponteiro, sabe agora
qual é o motivo?
Portanto, você está tentando carregar ou enumerar módulos que não foram carregados no momento e, portanto,
o ponteiro está vazio em nosso interceptor dot attach.
E isso é tudo para este vídeo agora.
Gostaria apenas de salientar que você não está sempre se deparando com esse erro.
Concluiremos isso na seção de bônus, quando falarmos sobre depuração e aplicativos.
Mas, por enquanto, vamos continuar modificando esses parâmetros ou valores de retorno.
Tudo bem.
Está bem.
Portanto, estou ansioso para vê-lo no próximo vídeo.