WEBVTT

00:00.000 --> 00:04.650
Olá a todos e bem-vindos de volta à nossa nova série, que trata da solução de alguns desafios de captura

00:04.650 --> 00:05.850
da bandeira em conjunto.

00:05.850 --> 00:10.080
No último vídeo, resolvemos o validador de licenças do Android, o que foi muito divertido.

00:10.080 --> 00:13.410
E agradeço a Bernhard Müller por ter proposto esse desafio.

00:13.410 --> 00:20.670
E nesse vídeo, talvez seja sério, porque parece que há muitas outras vulnerabilidades.

00:20.670 --> 00:24.150
Resolveremos o Android Gold ou, pelo menos, tentaremos resolvê-lo.

00:24.150 --> 00:25.680
Então, vamos dar uma olhada.

00:26.010 --> 00:30.690
O Android Gold é um desafio sobre o qual não tenho a menor ideia.

00:30.690 --> 00:34.890
Eu ainda não o instalei, portanto, ele será completamente novo para mim.

00:34.890 --> 00:36.870
É um código aberto, vulnerável.

00:37.290 --> 00:40.290
É uma história de código aberto.

00:40.290 --> 00:44.340
Mais uma vez, trata-se de um aplicativo de código aberto, vulnerável e inseguro que usa Kotlin.

00:44.790 --> 00:48.480
E isso também é muito interessante porque recebo muitos comentários sobre o Kotlin.

00:48.480 --> 00:53.370
E veremos ou descobriremos que, na verdade, não importa se é Java ou Kotlin.

00:53.370 --> 00:55.350
Com relação à reversão desse aplicativo.

00:56.340 --> 00:57.450
Vamos seguir em frente.

00:57.450 --> 01:02.130
Esse aplicativo tem uma ampla gama de vulnerabilidades relacionadas à fixação de certificados, esquemas de URL personalizados,

01:02.130 --> 01:06.720
configurações de segurança de rede do Android, uso da Web, detecção de rotas e mais de 20 outras.

01:06.750 --> 01:09.090
Tudo bem, parece ser muito divertido.

01:09.090 --> 01:13.470
Hum, e neste ponto, obrigado a todos os autores por fornecerem esses aplicativos.

01:13.470 --> 01:14.700
Então, vamos dar uma olhada.

01:14.700 --> 01:15.750
Ele está disponível aqui.

01:18.260 --> 01:19.310
Tudo bem.

01:19.610 --> 01:22.190
Hum, não há liberação.

01:23.570 --> 01:24.710
Está bem.

01:25.280 --> 01:26.030
Um.

01:26.030 --> 01:26.600
Download.

01:26.600 --> 01:27.260
Muito bem.

01:27.350 --> 01:32.150
Caso contrário, teríamos que criá-lo por conta própria, mas acho que podemos baixá-lo aqui.

01:32.180 --> 01:33.230
Muito bem, vamos ver.

01:35.830 --> 01:36.550
Sim.

01:36.550 --> 01:37.570
Parece bom.

01:42.630 --> 01:45.390
Pronto, já fizemos o download.

01:45.420 --> 01:48.480
Não tenho certeza se precisamos de algo.

01:48.480 --> 01:49.410
Vejamos.

01:50.670 --> 01:52.830
Código aberto usando Kotlin e assim por diante.

01:52.830 --> 01:54.900
Está bem, está bem.

01:56.570 --> 01:57.380
Tudo bem.

01:57.770 --> 02:01.070
Não tenho certeza se ele é executado em uma máquina virtual.

02:01.070 --> 02:06.050
Se você precisar de um dispositivo real, se tiver que configurar algum servidor da Web como esse, nós resolveremos

02:06.050 --> 02:06.890
isso juntos.

02:06.890 --> 02:07.610
Muito bem.

02:07.610 --> 02:08.420
Está bem.

02:08.990 --> 02:14.000
Então, baixamos esse aplicativo e temos nossa máquina virtual em execução.

02:14.000 --> 02:16.940
E vamos ver no código.

02:17.750 --> 02:20.270
Vamos colocar isso em nosso CTF.

02:21.600 --> 02:25.440
Ah, vamos renomear esse validador de licenças.

02:25.980 --> 02:28.770
E este é Andrew Goat.

02:30.960 --> 02:31.500
Sim.

02:31.530 --> 02:32.010
Está bem.

02:32.010 --> 02:34.650
Vamos instalar esse aplicativo e depois veremos.

02:38.490 --> 02:39.240
Está bem.

02:41.010 --> 02:42.390
Uh oh.

02:42.390 --> 02:42.840
É aqui.

02:42.870 --> 02:43.350
Veja!

02:43.350 --> 02:44.640
Logotipo incrível.

02:44.730 --> 02:45.870
E essa fonte.

02:48.360 --> 02:49.470
Hum, esse é o autor.

02:49.500 --> 02:51.480
Obrigado por fornecer esse aplicativo.

02:53.170 --> 02:54.040
Está bem.

02:54.040 --> 02:57.460
Então, tudo bem, isso está fora do readme, eu acho.

03:01.280 --> 03:02.030
Está bem.

03:04.730 --> 03:10.430
Ok, então acho que podemos escolher nossos desafios, o que também parece incrível.

03:10.430 --> 03:14.900
Eu sugeriria que começássemos com a detecção de rota ou emulador.

03:14.900 --> 03:15.830
Vamos fazer as duas coisas.

03:15.830 --> 03:17.600
Acho que são idênticos.

03:17.600 --> 03:19.190
Vamos ver se temos rota.

03:20.440 --> 03:21.520
Dispositivos roteados.

03:21.520 --> 03:23.140
Ok, já fomos pegos.

03:24.070 --> 03:26.170
Vamos ver a detecção do emulador.

03:27.820 --> 03:28.390
Está bem.

03:28.390 --> 03:32.080
Ele também diz que é um emulador, portanto, estamos completamente perdidos.

03:32.110 --> 03:34.000
Acho que fizemos besteira nesse ponto.

03:34.180 --> 03:37.240
Portanto, vamos descobrir como podemos fazer melhor.

03:37.360 --> 03:38.200
Tudo bem.

03:38.200 --> 03:40.030
Começamos com a detecção da raiz.

03:40.120 --> 03:43.750
Portanto, primeiro descompilamos esse aplicativo.

03:43.750 --> 03:51.940
Vamos tentar a GUI do CD, caso a GUI do jcs falhe em determinados pontos, e recomendo enfaticamente o uso do Andrew Card.

03:51.970 --> 03:53.980
O descompilador de bate-papo.

03:54.160 --> 03:58.780
Desculpe, mas o descompilador do pai é muito melhor em alguns casos.

03:58.780 --> 04:01.840
Vejamos.

04:01.960 --> 04:05.020
Hum, sim, vamos fazer isso desafio por desafio, eu acho.

04:05.020 --> 04:08.740
Mas se eu voltar atrás, esses não são 20 desafios.

04:08.740 --> 04:13.840
Portanto, acho que teremos que descobrir o restante mais tarde, navegando por esse aplicativo.

04:13.840 --> 04:19.420
Vamos dar uma olhada rápida no manifesto do Android para ter uma visão geral do que está acontecendo.

04:19.420 --> 04:23.950
Podemos ver que ele usa a permissão de direito da Internet e lê o armazenamento externo.

04:23.950 --> 04:24.850
Muito interessante.

04:24.850 --> 04:28.120
Temos que descobrir o que está acontecendo no armazenamento externo aqui.

04:28.480 --> 04:34.360
Em seguida, temos nossa atividade principal, que é a atividade de entrada, que é a atividade inicial.

04:34.690 --> 04:35.950
Aqui temos o principal.

04:35.950 --> 04:37.360
Aqui temos a detecção da raiz.

04:37.360 --> 04:39.040
Portanto, vamos nos concentrar nesse caso.

04:39.870 --> 04:43.260
Temos registro inseguro de XSS, injeção de SQL.

04:43.260 --> 04:43.800
Está bem.

04:45.730 --> 04:46.990
O que é esse aqui?

04:47.320 --> 04:48.850
Atividade de controle de acesso.

04:48.850 --> 04:51.040
É interessante porque é exportado.

04:51.040 --> 04:55.690
E aqui podemos ver que ele está usando o filtro de intenção com dados de categoria de ação.

04:55.690 --> 05:03.490
Portanto, isso pode estar relacionado a deep links ou links da Web, nesse caso, porque temos um esquema e um host que não me incomodam.

05:03.490 --> 05:05.890
Mas os provedores de conteúdo também são incríveis.

05:05.890 --> 05:09.280
Então, sim, eu sugeriria que esse parece ser um começo incrível.

05:09.280 --> 05:15.640
Portanto, vamos dar uma olhada na atividade de detecção de rota, ok, vamos começar por aqui.

05:15.640 --> 05:17.530
E podemos ver que isso vem do Kotlin.

05:17.530 --> 05:19.120
Mas simplesmente ignore isso.

05:19.120 --> 05:21.010
Portanto, não estamos vendo isso.

05:21.010 --> 05:22.690
E podemos simplesmente seguir em frente.

05:23.830 --> 05:25.180
Hum, ok.

05:25.180 --> 05:27.250
E aqui temos nosso método Oncreate.

05:27.250 --> 05:31.840
Então, podemos ver que temos um botão conectado.

05:32.620 --> 05:35.530
Esse pode ser o botão raiz do nosso layout.

05:35.530 --> 05:35.860
Talvez.

05:35.860 --> 05:37.570
Vamos colocar os dados lado a lado.

05:37.570 --> 05:46.300
Portanto, se você for para a detecção de raiz, verifique a possibilidade de raiz, então poderemos ver a atividade de detecção de raiz com um clique.

05:46.300 --> 05:47.950
Este é um dispositivo com root.

05:47.950 --> 05:49.870
Este dispositivo não tem root, ok.

05:49.870 --> 05:51.610
Vamos ver a detecção de raiz.

05:51.610 --> 05:53.170
Isso está enraizado.

05:54.210 --> 05:55.950
Se você entrar nessa.

05:57.440 --> 05:59.090
Ah, essa era a atividade.

05:59.090 --> 05:59.870
Existe um método.

05:59.870 --> 06:01.370
Este é o que estou procurando.

06:01.370 --> 06:02.030
Está bem.

06:02.030 --> 06:03.830
Podemos ver o padrão familiar.

06:03.830 --> 06:08.000
Ele procura o apk bin do superusuário como se fosse algo assim.

06:09.320 --> 06:10.730
Começamos com falso.

06:10.730 --> 06:12.680
E se esse arquivo existir.

06:13.910 --> 06:15.140
Obtemos o resultado.

06:15.140 --> 06:19.100
Se o resultado for positivo, retornaremos um booleano que é verdadeiro.

06:19.100 --> 06:23.720
E então sabemos que está bem enraizado e aqui estamos executando no comando.

06:23.750 --> 06:27.410
Estamos executando o comando rescue e, em seguida, os dados do LHS.

06:27.410 --> 06:29.660
Dados se recebermos dados de volta.

06:31.530 --> 06:34.890
Ou, se ele não lançar uma exceção, também saberemos que está enraizado.

06:34.890 --> 06:41.160
Portanto, o que precisamos fazer é corrigir os dois valores de retorno aqui.

06:42.340 --> 06:45.550
Também podemos ajustar sua raiz aqui.

06:45.610 --> 06:52.630
Não importa, mas eu gosto de corrigir as detecções iniciais de roteamento porque, se elas

06:52.630 --> 07:00.160
forem usadas de outra forma no aplicativo, podemos ter certeza de que não serão detectadas como

07:00.160 --> 07:03.070
roteadas também em outras funções.

07:03.100 --> 07:03.880
Muito bem.

07:03.880 --> 07:04.660
Está bem.

07:04.660 --> 07:07.000
Portanto, vamos fazer isso.

07:07.060 --> 07:07.570
Um.

07:10.080 --> 07:11.850
Precisamos descompilar esse aplicativo.

07:11.850 --> 07:14.760
Quer dizer, podemos usar a Frieda, podemos usar o smiley patching.

07:14.760 --> 07:17.730
Gosto de usar o smiley, eu acho.

07:17.730 --> 07:24.450
Sim, porque se tivermos alguma detecção de manipulação em tempo de execução mais tarde, poderemos lidar com elas separadamente.

07:24.810 --> 07:25.740
Muito bem.

07:25.740 --> 07:26.130
Um.

07:26.130 --> 07:27.240
Vejamos.

07:28.700 --> 07:33.050
O apktool o decodifica.

07:35.100 --> 07:39.330
A propósito, atualize sua ferramenta APK porque ela tem uma vulnerabilidade.

07:39.930 --> 07:41.190
Que.

07:42.270 --> 07:46.500
Leva à execução remota de código se você descompilar um aplicativo malicioso.

07:46.500 --> 07:49.140
Portanto, a versão corrigida é a 2. 2.

07:49.290 --> 07:51.630
Desculpe, 2. 9. 2.

07:51.660 --> 07:52.470
Sim.

07:52.950 --> 07:57.120
A versão vulnerável era a 2. 9. 1, eu acho.

07:57.810 --> 08:02.430
Podemos também fazer um vídeo separado sobre isso, mas agora estamos aqui para resolver alguns desafios.

08:02.460 --> 08:02.850
Tudo bem.

08:02.850 --> 08:03.990
Então, aqui está.

08:03.990 --> 08:05.520
O que precisamos fazer, pessoal.

08:05.520 --> 08:07.590
Podemos ver que temos o diretório smiley.

08:07.590 --> 08:10.140
Vamos abri-lo com o Visual Studio Code.

08:12.510 --> 08:14.790
Ok, então vamos dar uma olhada rápida.

08:14.940 --> 08:18.330
Hum, sim, eu confio no autor.

08:20.070 --> 08:21.840
Estamos dentro.

08:24.160 --> 08:28.960
OWASp, S. A. T. , r atividade de detecção de raiz de cabra.

08:28.960 --> 08:32.470
Ok, OWASp, srt goat.

08:32.470 --> 08:32.860
Está bem.

08:32.860 --> 08:34.630
E depois a detecção de raiz.

08:37.170 --> 08:38.190
Onde o temos?

08:38.190 --> 08:38.730
Aqui.

08:40.590 --> 08:42.570
Ok, escolhemos Java.

08:44.610 --> 08:45.240
Está bem.

08:45.240 --> 08:45.840
E podemos ver.

08:45.840 --> 08:51.630
Sim, parece um pouco mais bagunçado com todos esses caracteres Unicode, mas não nos preocupamos com

08:51.630 --> 08:52.050
isso.

08:52.050 --> 08:53.460
Esses são apenas metadados.

08:53.460 --> 08:54.570
Nós ignoramos isso.

08:55.370 --> 08:56.030
Está bem.

08:56.030 --> 08:58.220
Qual é a função?

08:58.220 --> 09:01.430
A função was está enraizada.

09:01.430 --> 09:03.200
Muito bem, vamos ver.

09:06.400 --> 09:07.240
Hum, vamos lá.

09:07.240 --> 09:07.840
Ah, tudo bem.

09:07.840 --> 09:08.320
É aqui.

09:08.320 --> 09:13.900
Já reconheci esses padrões, portanto, podemos ver que se trata de um conjunto de retornos enraizados.

09:13.900 --> 09:22.210
O caminho mais curto, eu acho, é excluir todo esse código e simplesmente ir até o valor de retorno e substituí-lo.

09:24.100 --> 09:28.600
Portanto, não vamos torná-lo mais complexo ou tentar flexibilizá-lo de uma determinada maneira.

09:28.600 --> 09:30.670
Vamos simplesmente manter as coisas fáceis.

09:32.050 --> 09:37.600
Certo, então acho que temos que excluir esse código e vamos ver como podemos, hum.

09:37.600 --> 09:39.820
Sim, é isso que estamos procurando.

09:40.000 --> 09:44.290
Const slash v e, em seguida, o registro e zero.

09:44.320 --> 09:44.980
Está bem.

09:46.240 --> 09:49.930
Portanto, vamos nos livrar desse também.

09:52.290 --> 09:53.010
Const.

09:53.010 --> 09:57.210
Quero dizer, se você não está fornecendo algo, então sabemos que é essa largura de bit.

09:57.210 --> 10:01.200
Então, vamos escolher simplesmente para um, porque precisamos apenas de um bit.

10:01.200 --> 10:02.400
Não importa.

10:02.460 --> 10:05.970
E então nós um e 0X0 ok.

10:06.570 --> 10:08.130
O mesmo padrão.

10:08.990 --> 10:11.300
Ou seja, também podemos escolher a v0.

10:11.300 --> 10:12.260
Isso realmente não importa.

10:12.260 --> 10:17.750
Temos muitos registros locais, portanto, isso não importa.

10:18.440 --> 10:20.720
Aqui temos um enraizado.

10:22.680 --> 10:23.730
Esse é o comando?

10:23.730 --> 10:24.990
Sim, esse é o comando.

10:24.990 --> 10:26.880
Então, simplesmente fazemos o mesmo aqui.

10:30.490 --> 10:31.390
Tudo bem.

10:33.050 --> 10:35.090
E acho que é isso.

10:36.320 --> 10:37.970
Portanto, essa é a nossa solução.

10:37.970 --> 10:38.930
Vejamos.

10:40.670 --> 10:47.240
Nós o salvamos e agora voltamos e o construímos.

10:50.370 --> 10:51.630
É bom ser.

11:04.100 --> 11:06.320
Até o momento, não há erros, o que é bom.

11:06.770 --> 11:08.510
E vamos dar uma olhada na distância.

11:08.540 --> 11:10.400
Agora precisamos sibilar.

11:13.570 --> 11:18.400
Portanto, esse é o nosso bode Andrew.

11:18.430 --> 11:19.060
Está bem.

11:19.060 --> 11:22.540
E agora precisamos assiná-lo com o assinador de APK.

11:24.550 --> 11:25.450
Está bem.

11:25.450 --> 11:28.180
E agora precisamos desinstalar.

11:34.760 --> 11:36.800
E, em seguida, reinstale-o.

11:46.900 --> 11:48.130
Então, tudo bem.

11:48.130 --> 11:48.790
Vejamos.

11:51.590 --> 11:53.240
O aplicativo parece começar a funcionar.

11:56.720 --> 11:59.870
E a detecção de raiz verifica a exceção de raiz.

11:59.870 --> 12:01.640
Nenhum dispositivo não tem root.

12:01.670 --> 12:02.900
Fácil, não é?

12:02.930 --> 12:06.230
Vamos fazer a mesma abordagem para o emulador.

12:07.410 --> 12:08.610
Detecção de emulador.

12:08.610 --> 12:12.300
Então, vamos simplesmente abrir o Visual Studio Code mais uma vez.

12:14.500 --> 12:15.220
E.

12:15.220 --> 12:16.000
Ah, desculpe.

12:16.360 --> 12:19.690
Talvez tenhamos que descobrir isso, mas acho que é o mesmo padrão.

12:19.720 --> 12:20.620
Mas, mesmo assim.

12:20.620 --> 12:21.310
Vejamos.

12:22.270 --> 12:25.810
Detecção de emulador.

12:31.030 --> 12:31.510
Aqui.

12:31.960 --> 12:32.740
Está bem.

12:34.150 --> 12:35.080
Sim.

12:35.080 --> 12:36.550
Temos esse emulador.

12:36.550 --> 12:39.190
Podemos ver se essa função retorna verdadeiro.

12:39.190 --> 12:45.640
Em seguida, ele é um emulador e executa algumas compilações, impressões digitais do dispositivo, marca do modelo e assim por diante.

12:45.640 --> 12:49.420
E então, hum, string zero.

12:51.730 --> 12:55.930
Para todos os retornos, a string contém utilitários de compilação e assim por diante.

12:55.930 --> 12:56.530
Tudo bem.

12:56.530 --> 13:02.650
Portanto, mais uma vez, o booleano é emulador verdadeiro ou falso, dependendo de determinadas verificações.

13:04.000 --> 13:05.380
Podemos ver essas verificações aqui.

13:06.100 --> 13:08.920
X86 e chaves de teste.

13:08.950 --> 13:10.090
Peixe dourado.

13:11.000 --> 13:11.660
Sim.

13:11.660 --> 13:12.410
Tudo bem.

13:12.410 --> 13:15.920
Portanto, eu sugeriria que fizéssemos a mesma abordagem.

13:15.920 --> 13:16.580
Está bem.

13:16.760 --> 13:18.650
Hum, emulador.

13:20.660 --> 13:21.710
Detecção.

13:25.170 --> 13:29.460
E agora podemos ver que temos aqui duas atividades.

13:30.280 --> 13:33.910
Quero dizer, temos a mesma atividade, mas aqui temos o oncreate.

13:33.910 --> 13:35.620
Porque esse é o caso.

13:35.620 --> 13:38.110
Se tivermos uma classe interna, o que é interessante.

13:38.890 --> 13:40.900
Hum, appcompat.

13:40.900 --> 13:41.500
Está bem.

13:41.500 --> 13:42.790
Oncreate.

13:43.030 --> 13:48.220
Certo, então nosso código pode estar no original deste aqui.

13:48.220 --> 13:51.250
E o oncreate parece ser terceirizado aqui.

13:52.360 --> 13:52.870
Um.

13:54.190 --> 14:00.190
Não tenho 100% de certeza de por que terceirizamos o onClick.

14:07.970 --> 14:10.670
E também o método Oncreate.

14:13.550 --> 14:14.840
Aqui está a parte.

14:14.840 --> 14:16.070
O emulador é verdadeiro?

14:16.250 --> 14:16.580
Desculpe.

14:16.580 --> 14:17.810
Vamos ativar o Java.

14:19.490 --> 14:22.130
Sim, mas essa é apenas a chamada da função.

14:22.310 --> 14:24.260
Hum, não é isso que nos interessa.

14:24.770 --> 14:26.570
Estamos interessados nessa parte.

14:27.130 --> 14:29.050
Então, vamos dar uma olhada.

14:32.960 --> 14:34.040
Está bem.

14:34.550 --> 14:36.830
O emulador está funcionando bem?

14:37.310 --> 14:38.360
Isso deveria ser.

14:38.360 --> 14:41.480
Essa função aqui é um emulador booleano ok.

14:41.480 --> 14:44.750
E sim, vamos fazer a mesma abordagem.

14:46.550 --> 14:50.150
Então, removemos tudo.

14:52.560 --> 14:56.160
Seu VBox Genymotion x86.

14:56.190 --> 14:58.350
Também podemos corrigir essas chaves.

14:59.520 --> 15:02.970
Mas nós simplesmente removemos tudo.

15:05.630 --> 15:07.700
Renomeamos isso para zero.

15:07.730 --> 15:15.650
Fazemos isso dessa forma e, em seguida, dizemos "devolva-me zero" e também excluímos o restante.

15:15.740 --> 15:23.420
A abordagem de exclusão é, na minha opinião, a mais fácil e funciona se não estivermos criando algo aqui.

15:23.420 --> 15:27.920
Portanto, se esse for o caso, basta entrar nessa função, realizar algumas verificações e sair.

15:27.920 --> 15:33.980
Então, podemos simplesmente excluí-lo, caso tenhamos algo como entrar nessa função, criar alguns objetos e

15:33.980 --> 15:36.980
usá-los mais tarde, então não poderemos excluí-los.

15:36.980 --> 15:41.840
Temos que corrigir a lógica que está retornando sempre falso e coisas desse tipo.

15:41.870 --> 15:42.560
Muito bem.

15:42.560 --> 15:43.430
Está bem.

15:44.390 --> 15:47.720
Então, voltando a este, este emulador.

15:47.720 --> 15:49.250
Isso também deve ser bom.

15:49.610 --> 15:50.750
Então vamos ver.

15:51.710 --> 15:53.330
Nós voltamos.

15:53.660 --> 15:54.410
Está bem.

15:54.740 --> 15:57.320
Apktool B we build it.

16:08.620 --> 16:09.220
Está bem.

16:09.220 --> 16:11.380
Em seguida, vamos para o diretório do disco.

16:12.970 --> 16:22.300
Removemos os antigos, sibilamos, assinamos e agora podemos reinstalá-lo porque o aplicativo existente foi assinado

16:22.300 --> 16:24.670
com o mesmo certificado.

16:24.670 --> 16:26.500
Portanto, podemos simplesmente sobrescrevê-lo.

16:26.500 --> 16:29.050
E agora devemos ter resolvido a segunda parte.

16:29.050 --> 16:29.800
Vejamos.

16:34.970 --> 16:38.360
Verificação da detecção do emulador.

16:38.780 --> 16:39.950
Não se trata de um emulador.

16:39.950 --> 16:40.610
Perfeito.

16:40.610 --> 16:41.750
Parece bom.

16:42.350 --> 16:45.440
Hum, então o que queremos usar?

16:45.440 --> 16:50.120
Validação de entrada, armazenamento inseguro de dados, aplicativo desprotegido, componentes do Android.

16:50.120 --> 16:51.920
Parece tudo muito incrível.

16:51.920 --> 16:54.080
Mas, no momento, estamos usando patches binários.

16:54.080 --> 16:56.570
Portanto, eu sugeriria que fizéssemos a correção binária.

16:57.210 --> 17:00.090
Obter acesso à funcionalidade de administrador.

17:00.090 --> 17:02.640
Desculpe, mas você não tem acesso a esse recurso.

17:02.640 --> 17:06.270
Isso é algo que também encontrei em um aplicativo do mundo real.

17:06.270 --> 17:09.510
Não se tratava de um recurso de administrador, mas de um recurso de depuração.

17:09.510 --> 17:15.240
E ao definir ou não o sinalizador de depuração, o usuário tem essas opções ou não.

17:15.240 --> 17:21.390
Na compilação de produção, esse sinalizador de depuração não foi definido, mas, ao defini-lo, você passou

17:21.390 --> 17:26.160
a ter acesso a ele e a certas chamadas de API ainda novas, o que foi incrível.

17:26.160 --> 17:29.370
Então, sim, esse é um bom exemplo.

17:29.760 --> 17:30.210
Está bem.

17:30.210 --> 17:30.690
Vejamos.

17:30.690 --> 17:31.830
Aplicação de patches binários.

17:32.400 --> 17:35.610
Temos isso aqui?

17:35.610 --> 17:39.720
Acho que esta visão geral é a mais fácil de encontrar todos esses desafios.

17:39.720 --> 17:42.270
E então temos que descobrir como alcançar o restante.

17:42.480 --> 17:44.550
Não tenho certeza sobre isso.

17:45.090 --> 17:49.290
E o cache de teclado também é incrível, mas vamos ver.

17:49.290 --> 17:50.400
Aplicação de patches binários.

17:53.520 --> 17:54.330
Está bem.

17:54.330 --> 17:56.280
Podemos ver que se trata de um administrador.

17:56.280 --> 17:56.670
Está bem.

17:56.670 --> 17:58.080
Retorna esse booleano de administrador.

17:58.080 --> 18:00.270
Get is admin.

18:00.270 --> 18:01.890
Essa função é mesmo chamada aqui?

18:01.890 --> 18:04.170
Acho que não.

18:07.050 --> 18:08.070
Encontrar uso.

18:08.070 --> 18:09.810
Não, não está sendo chamado de "ok".

18:09.810 --> 18:12.240
Portanto, temos que definir isso por nós mesmos.

18:24.280 --> 18:29.440
Certo, precisamos corrigir esse problema no início, caso contrário.

18:30.620 --> 18:31.070
Sim.

18:31.070 --> 18:34.370
Se essa função não estiver sendo chamada, simplesmente a alteramos.

18:34.400 --> 18:34.670
Sim.

18:34.670 --> 18:37.460
Também podemos alterar essa instrução if aqui, ok.

18:37.460 --> 18:40.850
Portanto, mais uma vez, muitas funções.

18:42.370 --> 18:44.440
Desculpe-me, são muitas possibilidades.

18:44.440 --> 18:48.490
Quando estou concentrado, às vezes me deparo com coisas estranhas.

18:48.490 --> 18:51.670
Então, por favor, tenha paciência comigo.

18:53.300 --> 18:54.650
Um, patching binário.

18:54.650 --> 18:55.280
Está bem.

18:56.420 --> 18:56.990
Java.

18:59.600 --> 19:00.770
Um.

19:00.770 --> 19:01.640
Vejamos.

19:04.700 --> 19:05.270
É administrador.

19:05.270 --> 19:08.330
Quer dizer, podemos remendar isso aqui para retornar.

19:08.330 --> 19:11.690
É verdade, mas isso não importa.

19:14.360 --> 19:17.090
Porque se isso não estiver sendo usado, então.

19:17.090 --> 19:17.600
Sim.

19:17.600 --> 19:17.960
Uh.

19:20.030 --> 19:21.050
Vamos verificar isso.

19:23.050 --> 19:24.160
Ele está sendo usado.

19:24.160 --> 19:26.080
Eu já havia perdido isso antes.

19:27.370 --> 19:27.820
Eu sinto muito.

19:27.820 --> 19:28.660
Erro meu.

19:34.450 --> 19:36.550
Não, essa não é a função.

19:39.900 --> 19:40.680
Está bem.

19:42.780 --> 19:43.950
Então vamos voltar.

19:44.850 --> 19:46.020
O que acontece aqui?

19:46.020 --> 19:47.490
Estamos buscando o campo de instância.

19:47.490 --> 19:52.650
Sim, é P0, então estamos buscando o campo de instância de P0 é admin.

19:52.650 --> 19:55.530
Não é a chamada de função, é o campo de instância.

19:55.590 --> 19:56.430
Este aqui.

19:59.000 --> 20:00.440
E depois.

20:00.440 --> 20:01.370
Ops, desculpe.

20:01.700 --> 20:03.140
E então verificamos.

20:10.010 --> 20:12.470
Se esse for o mesmo que V0.

20:14.850 --> 20:20.340
Se não for igual, passamos para a condição zero, o que significa.

20:22.720 --> 20:23.950
Estamos aqui.

20:23.950 --> 20:25.510
E este aqui é.

20:26.680 --> 20:28.300
O botão de administração.

20:31.410 --> 20:36.330
Ok, mais uma vez, vamos limpar isso e voltar.

20:36.360 --> 20:37.110
Tudo bem.

20:38.190 --> 20:40.200
Temos o método Oncreate.

20:40.200 --> 20:43.320
Temos essa estranha constante na versão 0.

20:45.700 --> 20:47.980
Em seguida, invocamos o virtual com isso.

20:48.400 --> 20:48.700
Está bem.

20:48.700 --> 20:50.500
Essa é a visualização do conteúdo, ok.

20:50.620 --> 20:52.480
Agora temos o I get boolean.

20:52.480 --> 20:56.830
Buscamos isso em V0 e temos v1, que é codificado por hardware.

20:56.830 --> 20:57.970
Então, isso significa.

20:58.540 --> 21:00.700
Dependendo de qual é o administrador.

21:00.700 --> 21:03.160
Sim, se este for um deles.

21:05.490 --> 21:05.850
Está bem.

21:05.850 --> 21:08.070
Mais uma vez, nós.

21:08.100 --> 21:09.930
Isso também ainda me confunde.

21:09.930 --> 21:15.240
Se v um não for igual a v zero, saltamos para a condição zero.

21:16.390 --> 21:18.820
E isso é algo que não queremos ter.

21:18.820 --> 21:23.140
Portanto, v0 e v1 precisam ser iguais, o que significa que precisamos retornar um.

21:23.140 --> 21:32.110
Sim, a lógica faz sentido, o que significa que v0 precisa ser um e v0 é simplesmente.

21:33.870 --> 21:35.760
É interessante.

21:35.760 --> 21:37.290
É um valor estranho.

21:37.290 --> 21:41.760
Portanto, não vamos entrar nesse assunto agora.

21:41.760 --> 21:42.540
Está bem.

21:42.540 --> 21:45.060
Portanto, temos algumas possibilidades.

21:45.060 --> 21:49.080
O mais estranho seria usar este.

21:49.080 --> 21:54.120
Não tenho certeza se isso funcionaria, mas, pela lógica atual, talvez funcione.

21:54.120 --> 21:58.920
Portanto, o registro foi usado para uma visualização de referência inteira.

21:58.920 --> 22:05.730
E se for exatamente o mesmo valor, ignoraremos essa verificação de administração, que é algum tipo de otimização

22:05.730 --> 22:09.240
do compilador, porque essa função aqui nunca foi usada.

22:09.420 --> 22:09.630
Uh.

22:10.800 --> 22:11.370
Aqui.

22:11.370 --> 22:14.100
Espero não estar confundindo-o neste momento.

22:14.580 --> 22:16.920
Portanto, vamos simplificar isso.

22:17.010 --> 22:18.330
Eles precisam ser os mesmos.

22:18.330 --> 22:21.210
E nós somos um só.

22:21.210 --> 22:30.210
Portanto, vamos simplesmente substituir nosso V0 aqui também por um.

22:32.220 --> 22:34.200
Então, ambos são iguais.

22:35.550 --> 22:37.710
E aqui estamos sobrescrevendo.

22:43.810 --> 22:44.980
E zeramos mais uma vez.

22:44.980 --> 22:51.100
Portanto, não importa se já o substituímos diretamente antes, então estamos substituindo-o aqui de qualquer forma.

22:51.100 --> 22:53.950
Portanto, podemos escolher o que quisermos aqui.

22:53.950 --> 22:56.920
Esta é a minha abordagem no momento.

22:56.920 --> 23:04.630
Você também pode inverter a lógica da instrução if aqui, o que significa que, se não for igual, precisa ser se for igual,

23:05.110 --> 23:12.520
sempre entraríamos nessa parte e, somente se tivermos acesso de administrador, entraríamos no caminho errado.

23:12.520 --> 23:14.890
Portanto, isso inverteria a lógica.

23:16.330 --> 23:19.240
E, sim, também podemos remover essa instrução if.

23:19.330 --> 23:21.070
Essa também pode ser uma abordagem fácil.

23:21.070 --> 23:25.270
Assim, teríamos acesso direto a esse código aqui, ok, ok.

23:25.270 --> 23:28.150
Portanto, esta é a solução para mim no momento.

23:28.150 --> 23:29.620
Você pode brincar com isso.

23:29.620 --> 23:31.630
Mas acho que isso deve funcionar dessa forma.

23:32.730 --> 23:34.800
Muito bem, vamos ver.

23:38.280 --> 23:39.540
E vamos voltar.

23:43.160 --> 23:44.960
Vamos criar esse aplicativo.

23:48.060 --> 23:53.820
Em seguida, remova o restante e, então, vamos ver.

23:53.880 --> 23:59.250
Alinhar o sinal e instalar.

24:02.360 --> 24:05.030
Certo, vamos começar e ver.

24:12.330 --> 24:13.710
Aplicação de patches binários.

24:16.470 --> 24:20.250
O Batman agora e o Batman Seeds parecem estar ativos.

24:20.250 --> 24:21.030
Vamos clicar.

24:22.800 --> 24:28.200
Ok, acho que não há nada que aconteça depois, mas podemos ver que resolvemos esse desafio com

24:28.200 --> 24:29.280
sucesso também.

24:29.310 --> 24:32.070
Muito bem, já temos três.

24:32.100 --> 24:32.700
Talvez.

24:32.700 --> 24:34.650
Vamos examinar o problema do código rígido.

24:34.650 --> 24:41.370
Se for relacionado à aplicação de patches, então vamos usar este vídeo.

24:42.490 --> 24:50.590
Caso contrário, sugiro que cortemos a série aqui, chamemos esse patch binário e continuemos em outro vídeo.

24:50.620 --> 24:52.150
Muito bem, perfeito.

24:52.420 --> 25:00.280
Portanto, descubra como nosso código promocional Pro é codificado e nosso código promocional para obter a produção abaixo de graça.

25:00.310 --> 25:03.580
Ok, este não é um patch binário.

25:03.580 --> 25:05.140
Esse é um desafio inverso.

25:05.140 --> 25:06.460
Portanto, eu sugeriria.

25:08.020 --> 25:09.070
Sim.

25:09.160 --> 25:10.870
Cortamos esse vídeo aqui.

25:10.870 --> 25:16.840
Nomeie a primeira como correção binária e, em seguida, passe para a análise secreta, algo assim.

25:16.840 --> 25:17.710
Muito bem.

25:17.860 --> 25:18.460
Está bem.

25:18.460 --> 25:21.310
Portanto, estou ansioso para vê-lo na próxima parte.
