Potrebbe tornare.
Nell'ultimo video abbiamo improvvisamente invertito, ingegnerizzato e reso più complessa la funzione.
Ora vogliamo inserire i valori reali.
In seguito, adattiamo il nostro codice Java ed eseguiamo questa funzione con questi valori e capiremo se abbiamo
eseguito correttamente il reverse engineering di questa funzione.
Non l'ho preparato in questo modo, quindi sono anche super entusiasta se funziona.
Diamo quindi un'occhiata.
Ok, ecco il nostro codice.
Questa è una versione più pulita del codice che abbiamo analizzato nell'ultimo video.
È lo stesso codice, ma è un po' più pulito.
Cerco di migliorare il mio stile di scrittura per evitare che in futuro diventi così disordinato.
Ok.
Va bene.
Abbiamo quindi scelto alcuni valori per questi registri.
Insomma, possiamo anche o solo influenzare questi parametri.
Tutti gli altri valori verranno calcolati da soli.
Quindi vediamo, abbiamo P uno, che è uno, P due è tre, tre e P tre è sette.
Ora emuleremo questa funzione e la eseguiremo con questi tre valori e poi calcoleremo
il valore di ritorno qui.
Quindi eseguiamo questa funzione nella nostra applicazione Android e verifichiamo se i valori sono uguali.
Se questo è il caso, allora congratulazioni.
Abbiamo realizzato il reverse engineering della nostra prima applicazione Mali più complessa.
Non l'ho ancora preparato, quindi sono anche un po' eccitata per la bontà di questo piatto.
Diamo un'occhiata.
Ok, quindi noi zero è a questo punto zero che va bene per noi vogliamo è a questo . 23.
Adesso abbiamo be tre e V tre è V tre come adesso p uno più p due, uno più 33, uno
più 33.
Ok, questo significa che ne abbiamo 34.
Bene, allora vediamo.
Ora abbiamo B tre e B tre è 34 moltiplicato per sette.
Va bene.
Potrebbe volerci un po' di tempo.
Ci vediamo tra qualche secondo.
Oh, non importa.
Quindi non mi interessa questo.
Ok, ho calcolato con tre e B tre è 238 non è stato così difficile, ad essere onesti.
Va bene.
Poi abbiamo tre, tre e questo è ora 238 meno uno.
Vediamo.
Sì, possiamo farlo.
237.
Bene, allora abbiamo questo qui.
Vediamo p uno, che è uno, ma sembra essere semplicemente sovrascritto in questo caso.
Ok.
Quindi non stiamo usando questo qui e poi abbiamo B tre diviso P due.
Quindi sovrascriviamo P uno qui con 200.
No, cos'è il B33.
237.
Esatto.
Diviso per 33.
Va bene.
Quindi datemi solo un secondo.
Lo rifaccio velocemente, solo nella mia mente, e poi torniamo indietro.
Va bene.
Ok.
In questo caso ho dovuto usare la calcolatrice, ma sì.
Quindi avremmo potuto farlo da soli, ma è un po' più veloce.
Quindi cosa abbiamo?
Abbiamo sette, diciotto, diciotto, diciotto, quello che vuoi.
Ok.
Quindi P uno è.
Ops.
Le sette virgole anteriori 18, 18, 18.
E credo che a noi.
Già.
Non è vero che non dovremmo essere precisi in questo caso.
Va bene, allora dobbiamo essere zero zero era zero.
Finora non abbiamo usato il V zero.
Quindi stiamo riutilizzando la v3v0 in questo momento e questo significa che lo zero è ora v3v3 è ancora 237 oh bene, so che c'è questo punto
in cui qualcosa va storto.
Vediamo come 207 X cosa con questo valore, come va bene questo.
Va bene.
Questo deve essere fatto nel nostro terminale perché, sì, sarà un po' complicato.
Altrimenti, diamo un'occhiata.
Quindi prendiamo questo valore qui.
Pitone 3.
Sì.
È un elenco.
Nulla di ciò che vogliamo avere.
Va bene.
Dobbiamo usare il punto.
237.
E con questo?
Sì.
Questo non funziona perché stiamo usando un numero intero e un numero flottante.
Presumo che non funzioni.
Vediamo.
Presumo di sì, la CPU o il programma eseguiranno questa dichiarazione.
Taglierà i numeri in virgola mobile.
Quindi sì, a questo punto non possiamo usare la virgola mobile, ma in Excel.
Ero piuttosto curioso di saperne di più.
Ma sì, forse se abbiamo due numeri in virgola mobile possiamo ottenere una migliore rappresentazione in bit e
possiamo fare i conti.
Ma in questo caso, se abbiamo int e float, i numeri in virgola mobile verranno tagliati.
E questo è il nostro risultato.
234.
Mm hmm.
Ok.
Quindi 7. 18, 18, 18, anche.
In questo caso, però, il taglio avverrà comunque.
Quindi è abbastanza buono che non siamo stati così precisi in questo caso prima d'ora.
Quindi non ha molta importanza a questo punto.
Ok.
Ora la nostra V0 è 234.
E questo può essere anche il valore di ritorno sotto forma di double.
Tutto qui.
La nostra funzione restituirà 234.
Va bene.
Per questo motivo, esamineremo questo aspetto tra un attimo.
Ma per ora voglio mostrarvi qualcosa, perché ho avuto qualche difficoltà in un punto.
E a questo punto, c'era questo qui.
Perché?
Perché abbiamo P1 uguale a qualcosa e P1 è un parametro e abbiamo un valore nel nostro parametro, il valore
uno.
Questo mi ha confuso per un attimo, ma osservando il codice ho capito che a p uno viene assegnato
un nuovo valore.
Ciò significa che il valore uno verrà sovrascritto a questo punto.
Quindi non utilizzeremo più il valore uno in questo registro.
Più avanti nel codice si può vedere che qui è stato usato p one.
Ecco il valore uno.
Allora facciamo così.
E poi lo usiamo anche qui.
Ma qui lo sovrascriviamo con il valore b tre diviso per p due.
Quindi non abbiamo una dichiarazione.
Qualcosa come questo è uguale a B tre diviso per p due, perché questo non ha importanza.
A questo punto.
Stiamo riassegnando questa variabile o questo registro qui, in modo da ottenere un nuovo valore in questo
e questo valore in questo verrà sovrascritto.
Va bene.
Basta attenersi al codice così com'è e non si possono commettere errori.
Cioè.
Sì, ok.
Si tratta di un messaggio davvero stupido, perché bisogna sapere cosa si sta facendo in quel punto e bisogna anche sapere cosa
significa questa istruzione.
Ma se si pensa troppo a queste funzioni e si portano avanti le proprie intenzioni e ciò che questa istruzione
fa, allora si commettono degli errori.
Pertanto, è sufficiente attenersi alle istruzioni così come sono riportate in ogni riga.
E poi, sì, non possiamo sbagliare.
Ok, allora controlliamo questo valore e altrimenti devo registrare di nuovo il video e trovare l'errore
che c'è.
Spero davvero che sia corretto.
Quindi vediamo.
Abbiamo il valore di ritorno 234.
Diamo un'occhiata.
Ok, ecco di nuovo la vm di ubuntu.
Qui possiamo vedere il calcolo matematico.
Apriamo quindi Android studio verso Android.
Studio pen bash, studio dot, O. S..
Va bene.
Quindi la chiave è stata caricata al termine.
Diamo un'occhiata al codice del giocatore.
E questo ora è super eccitante.
Sovrapporrò il nostro codice a questo qui, per vedere come appare il nostro approccio di reverse engineering
e come appare il codice reale.
Bene, ci siamo.
Questa era la funzione e questo è l'aspetto del codice originale.
Diamo un'occhiata al nostro codice.
Va bene.
Per ora sembra abbastanza buono.
L'unica differenza potrebbe riguardare le parentesi e il fattore di moltiplicazione.
Questo avviene in una sola riga.
Ma anche le istruzioni della nostra CPU sono suddivise o il codice assembly è suddiviso in diverse istruzioni.
Quindi, molto bello.
Un taglio piuttosto buono.
Va bene.
Eseguiamo questo codice e sapremo se il nostro approccio manuale al reverse engineering ha avuto successo come
l'analisi del codice.
Diamo un'occhiata.
Sono anche piuttosto eccitato se dovessi registrare nuovamente questo video e sì, se abbiamo commesso un errore, ovviamente
ve lo farò sapere.
Quindi vediamo.
Abbiamo il nostro oggetto giocatore.
Tutti Quindi, sì, possiamo semplicemente usare player at power e poi dobbiamo inserire questi parametri.
Uno, tre, tre, sette.
Va bene?
E dobbiamo stampare questo valore.
Quindi utilizziamo ancora una volta la linea di stampa system out.
Il potere del giocatore Smiley è uguale a oops in questo modo.
E abbiamo bisogno di questa parentesi alla fine.
Effettuiamo la connessione alla macchina virtuale, il nostro dispositivo orbitale.
Collegare il tutto.
Ora eseguiamo la nostra applicazione.
Eseguiamo quindi l'applicazione e assicuriamoci di utilizzare la configurazione remota all'interno delle
configurazioni IT.
Possiamo andare in remoto in questo punto e inserire l'indirizzo IP del nostro sistema e cambiare
la porta in cinque, cinque, cinque, cinque.
La porta predefinita in questo conflitto è 5005, ma questa è la porta ADB predefinita.
Ok, dopo aver fatto questo, possiamo fare clic su Esegui ed eseguire l'applicazione.
Possiamo anche aprire l'uscita bloccata da ADB e così, ecco fatto.
Ok, un piccolo errore.
Sarò assolutamente onesto con voi.
Il valore di ritorno è doppio.
Pertanto, non restituiremo il 234.
Stiamo tornando a 234. 0, credo.
Ok.
Ad essere sinceri, è stato un mio errore.
Ok, allora mi prendo la colpa per questo.
Dobbiamo assicurarci che anche per quanto riguarda i valori di ritorno siamo il più precisi possibile, credo, oppure sono abbastanza
sicuro che questo non faccia differenza.
Oppure potrebbe essere così per quanto riguarda la confusione di battitura o cose del genere.
Quindi, ad esempio, se abbiamo un INT e ci basiamo su questo per avere il numero 234, ma in tempo
reale abbiamo il numero 234 zero, che è doppio.
In questo modo non possiamo mischiarli insieme in seguito nel nostro codice.
Quindi, come già detto, mi assumo la colpa.
Questo è stato il mio errore.
Sono molto felice di non dover registrare nuovamente questo video.
E sì, sono ancora più felice che siamo riusciti a decodificare una funzione più complessa
basata sul somalo.
Quindi sì, non abbiamo cercato o non abbiamo nemmeno cercato il codice una volta che questo è qui.
E se date un'occhiata a questo, si tratta di una braciola piuttosto sorprendente.
Siamo all'inizio di questo capitolo e abbiamo fatto il reverse engineering di questa funzione.
Quindi potete essere davvero orgogliosi di voi stessi.
E sì, questo è un buon punto per andare avanti con un piccolo quiz.
Questo quiz sarà forse un po' troppo facile per voi.
Tuttavia, eseguiamo questo quiz e poi applichiamo una patch alla nostra applicazione di ping spaziale.
Ora possiamo già attivare alcune funzioni interessanti.
E sì, sono super entusiasta di farlo dopo.
Ma prima di tutto, diamo un'occhiata al quiz.
Va bene.
Ti vedo lì.