Bem-vindo de volta.
Então, falamos sobre o Invoke direct, que se refere a métodos privados e públicos.
Falamos sobre invocar virtual, que se refere a métodos públicos.
A única coisa que está faltando são os métodos estáticos no momento.
Então, vamos dar uma olhada.
Aqui temos algum código para que possamos ver que agora não temos uma classe de jogador.
Temos uma classe de nível, temos o nível de valor estático e temos esse método no próximo nível.
Esse próximo nível aumenta o valor estático aqui.
Está bem.
Se chamarmos esse método, ele terá a seguinte aparência.
Não é necessário criar uma instância para isso.
Então, simplesmente pegamos o nome da classe, que é level.
Em seguida, adicionamos esse ponto e o nome do método no próximo nível.
E o bom desse é que não precisamos preencher, registrar uma instância para chamá-lo, portanto,
podemos chamá-lo onde quisermos em nosso aplicativo.
Os métodos estáticos são incríveis e também não são difíceis.
Então, vamos dar uma olhada na parte do smiley relacionada a um método estático.
Bem, aqui estamos em nossa atividade principal.
Podemos ver isso no oncreate e não nos importamos com isso.
Este, este e este.
Tudo o que nos interessa é este aqui.
Linha 17.
Se você quiser chamar um método estático, basta usar invoke static.
E, caso não tenhamos nenhum parâmetro, também não precisamos de um registro yeah para isso, pois
não temos nenhum parâmetro nesse registro, simplesmente deixamos esses colchetes vazios,
vírgula, L maiúsculo, nosso nível de referência de tipo, depois o ponto do próximo nível e isso é tudo.
Podemos usá-lo onde quisermos em nosso código de aplicativo e podemos fazer coisas realmente incríveis com ele.
E é isso que faremos nos próximos vídeos.
Preparei vários aplicativos que vamos hackear.
Alguns deles são fáceis, porque podemos simplesmente obter as informações do código Java, mas alguns
deles também usam o SDK, o kit de desenvolvimento nativo.
Portanto, as informações são armazenadas no código C, C plus plus, e não são tão fáceis
de analisar, mas como podemos chamar métodos estáticos, usamos isso para obter as informações importantes.
Mas antes de fazermos isso, vamos dar uma olhada em um exercício prático agora mesmo.
Bem, aqui estamos de volta à VM do Ubuntu.
Vamos fazer um exercício prático sobre isso.
Esse foi o último exemplo.
Agora vamos criar um novo método estático.
Public static void set invisible.
Ok, linha de impressão do sistema.
Agora somos invisíveis.
Vamos criar esse aplicativo.
Ok, vamos descompilar essa estática e agora faremos o mesmo novamente.
Então, pegamos nosso código e executamos o método estático sem implementá-lo em nosso aplicativo
aqui.
Então, aqui podemos ver.
Nós o introduzimos aqui em nossa classe de jogador, mas não o chamamos aqui e vamos inseri-lo agora mesmo
neste ponto.
Portanto, também abrimos essas classes smarty estáticas com o código do Visual Studio.
Tudo bem.
Em seguida, entramos em nossa atividade principal e, dessa vez, não temos um método para copiar.
Portanto, temos que escrevê-lo em nossa própria atividade principal.
Aqui está.
Java.
Certo, então, neste ponto aqui, queremos fazer a chamada.
Vejamos.
Queremos chamar o Player Dot Set de Invisible.
Sim.
Está bem.
E este é do Type Ward.
Portanto, se você quiser chamar um método estático, vamos dar uma olhada nele.
Invoke static invoca um método estático com parâmetros.
Portanto, invoque colchetes estáticos.
Em seguida, temos nossos parâmetros e a chamada do método.
Muito bem, então temos o invoke static.
Desta vez, não temos um parâmetro e também temos um método estático.
Portanto, também não precisamos nesse caso.
Então, ainda precisamos de nossa referência de tipo, cujo método estático queremos chamar.
Vamos supor que temos várias classes com o nome do método definido como invisível.
Isso não é absolutamente nenhum problema porque, sim, temos a referência de classe para isso.
Vou mostrar isso rapidamente.
Portanto, uma nova classe Java, vamos chamá-la de teste aqui dentro.
Também podemos definir um novo método.
Conjunto invisível.
Retorno nulo.
Está bem.
Esse também é um método estático público e estamos retornando void.
Vamos verificar isso.
Sim, esse é o nome do método.
E vamos ver.
Está bem.
Portanto, agora temos dois métodos.
Ambos são chamados de set invisible na classe de teste e na classe de jogador aqui.
Portanto, é absolutamente necessário fornecer a referência do nosso tipo sobre qual classe estamos agindo
e qual método em qual classe estamos usando.
Portanto, precisamos.
Com App hacking smiley three player type definition ends.
Ainda temos nosso ponto de referência porque estamos chamando o player dot set invisible e agora só precisamos
do protótipo da nossa função.
Portanto, definir invisível, sem parâmetros, retornar o tipo void e pronto.
É assim que podemos chamar um método estático.
E sim, o bom é que não temos um objeto aqui, então vamos supor que não teríamos esse
objeto aqui.
Este aqui.
Desculpe, este aqui.
Sabe de uma coisa?
Sim.
Vamos simplesmente excluir isso.
Então, por que não?
Portanto, não temos um objeto no momento.
E isso agora é completamente diferente em relação ao nosso código de aplicativo aqui, mas isso não
importa.
Talvez eu exclua esse aqui rapidamente.
Está bem.
Esse é o código do nosso aplicativo.
Criamos um novo objeto de jogador e aumentamos a potência.
Mas agora removemos isso e estamos chamando o player dot set de invisível.
E você vê que está funcionando.
Portanto, não há erro ou coisas do gênero porque podemos chamar métodos estáticos sem ter um objeto.
É por isso que temos um método estático.
Vamos voltar ao código original.
Este aqui.
E sim.
Então, primeiro instalamos esse aplicativo.
Nós o testamos rapidamente, depois criamos nosso aplicativo aqui e vemos se sim.
Se nossa correção tiver sido aplicada corretamente e isso for tudo.
É assim que podemos chamar métodos estáticos e, sim, podemos chamar esse método onde quisermos, portanto,
podemos simplesmente colocá-lo em cada função ou classe.
Queremos executar isso agora mesmo.
Ok, então vamos voltar.
Primeiro, vamos verificar esse código de aplicativo aqui.
Parece que não está conectado.
Está bem.
Tudo bem.
Essa parece ser a nossa versão antiga.
Sim, cortamos muitos aumentos de nível aqui.
Vamos desinstalar isso.
Ah, o ADB está faltando.
E agora instalamos esse aplicativo.
Tudo bem.
E podemos ver.
Ok, eu deveria ter limpado o medalhão antes, porque, sim, agora ele está um pouco mais sujo.
É um pouco complicado.
Então ADB Logcat dash C Ok, vamos iniciar esse aplicativo mais uma vez.
Tudo bem.
Podemos ver que criamos um novo objeto e nosso nível de energia é 900.
Exatamente.
O que há lá dentro?
Então, vamos criar novamente o outro aplicativo.
Este aqui e, sim, instale-o e veja se removemos nossa referência de objeto.
E se pudermos chamar esse método aqui.
Então, vejo você em alguns instantes.
A propósito, estou com o seguinte erro agora e isso se deve ao fato de eu ter deixado este comentário.
Portanto, se você fizer um patch inteligente, talvez não escreva esses comentários.
Então, sim, você pode evitar erros como esse porque, com esses comentários, a sintaxe do smiley não
é válida.
Essa é a nossa tela.
ADB uninstall com app hacking smali three adb logcat dash c para limparmos a saída do logcat.
Agora, instalamos nossa nova versão e também ativamos o logcat.
Usamos o grep para system out e, agora, sem nenhum problema, basta abri-lo.
Muito bem, agora estamos invisíveis e podemos ver as chamadas de método ou as linhas de impressão relacionadas
ao objeto em si.
Portanto, corrigimos esse aplicativo com êxito.
Sim.
Como queríamos ter.
Vamos abrir com a Jade rapidamente para verificar isso.
Com smiley três atividades principais.
Aqui está.
Exatamente o que queríamos ter.
Portanto, escrevemos nosso próprio método estático neste momento no aplicativo.
Tudo bem.
Portanto, na próxima seção, usaremos essa abordagem.
Portanto, usaremos métodos estáticos para imprimir determinadas instruções de depuração ou, por exemplo, para imprimir determinados
valores importantes.
E temos muitos aplicativos nos quais praticamos e, finalmente, voltamos ao nosso aplicativo de banco de espaço, porque
assim aprendemos tudo o que precisamos saber sobre aplicação de patches.
Smiley E sim, podemos modificar esse aplicativo da maneira que quisermos.
Podemos tornar nosso jogador invisível, invencível.
Podemos desativar o sistema de colisão, podemos desativar o comportamento dos alienígenas, podemos adicionar novos alienígenas,
podemos adicionar vários disparos, bloquear a taxa de disparo, definir taxas de disparo, todas essas coisas incríveis.
Portanto, temos um pouco de teoria, mas ainda temos toneladas de exercícios práticos.
E essa será a parte mais divertida deste curso até chegarmos à seção gratuita, porque lá também nos divertiremos
novamente quando escrevermos nosso próprio instrutor.
Está bem.
Mas antes de nos entusiasmarmos demais, sim, precisamos fazer a parte teórica primeiro.
Está bem.
A última coisa que quero mencionar em relação a dois métodos estáticos é que, se tivermos alguns parâmetros,
por exemplo, dois números inteiros, precisaremos primeiro configurar o registro, é claro.
Portanto, isso é o mesmo em relação a todos os métodos.
Precisamos preparar os registros ou os parâmetros.
Nesse caso, poderíamos simplesmente escrever const v1 zero x dez const v2 e zero x 16.
Está bem.
Dessa forma, podemos configurar esses valores e, sim, temos que tomar cuidado para não sobrescrever os registros
existentes e coisas assim, mas faremos isso também para objetos mais complexos nos exercícios práticos.
E isso é tudo por enquanto.
Tudo bem.
Então, vejo você no próximo vídeo.