IDA Android v tako oddaljenih datotekah za odpravljanje napak
Ida Android Remote Debugging Files
Predgovor:
IDA uporablja dinamično odpravljanje napak, tako da obstajata dva načina za odpravljanje napak v načinu zagonskega načina odpravljanja napak, razhroščevalec lahko odstrani napake jni_onload, koda init_array na, privilegij za odpravljanje napak lahko dobite prej, ponavadi prej, ko začnete z odpravljanjem napak. drugi pa je priklop razhroščevalnika, pripenjanje razhroščevalnika je dodatna odpravljanje napak, ko APP že deluje in odpravljanje napak teh dveh načinov za zagon v sistemu Windows in dodatni koncept odpravljanja napak je zelo podoben, zato moramo vaditi naslednje ...
Okolje za vadbo: Windows 10 + IDA Pro 7.0 + Nexus5 ( 4.4.4)
besedilo:
Prvi zagon odpravljanja napak:
1. Zaganjalnik načinov za odpravljanje napak (to lahko jni_onload, init_array ob okvari)
adb shell am start -D -n com.yaotong.crackme / .MainActivity
2. V glavnem imeniku IDA dbgsrv imenika poiščite android_server, kopiran v telefonski imenik data / local / tmp /
adb push (imenik android_server) / data / local / tmp
3. Uporabite dovoljenja za izvrševanje chmod za spreminjanje programa android_server in izvedbo:
adb lupina chmod 755 / data / local / tmp / android_server
Izvedba android_server
lupina adb
svoje
cd data / local / tmp
./android_server
4. odprite novo okno cmd Za posredovanje vrat uporabite program forward:
adb naprej tcp: 23946 tcp: 23946
5. Odprta metoda odpravljanja napak:
Odprite IDA, izberite meni Razhroščevalnik -> Priloži -> Odstranjevalec napak ARM Linux / Android
6. Ime gostitelja izpolnite 127.0.0.1 ali locahost (je pomen)
Vrata se samodejno napolnijo 23946
7. Izberite zagon APP
Ok, nato pritisnite enter vmesnik za odpravljanje napak, upoštevajte, da tokrat ne more biti dinamičnega odpravljanja napak ...
8. V pojavnem oknu Dogodki kliknite meni Razhroščevalnik-> Možnosti razhroščevalnika, izberite nastavitev razhroščevalnika Začasno ustavi vnos procesa in Zaustavi na zagonu / izstopu niti in Začasno ustavi ob nalaganju / razkladanju knjižnice in kliknite V redu za izhod. S tem lahko nastavite, da program samodejno prekine pri ustvarjanju nove niti in tako nalaganju.
Številke vrat DDMS, pridobljene z ustreznim postopkom, in nato uporabite jdb -connect com.sun.jdi.SocketAttach: ime gostitelja = 127.0.0.1, port = XXXX (DDMS na številko vrat poizvedbe, običajno po posredovanju vrat ddms je 8700)
Če se jdb -connect DDMS na ikoni uspešno izvede, bodo zelene napake ...
Ko je povezava IDA s pritiskom F9 na čakanje na razhroščevalnik samodejno izginila, bi tokrat moral biti prekinjen v novi niti ali ob nalaganju.
9. Zdaj lahko pritisnete bližnjico IDA CTRL + S, da vidite, ali odpravljate napake, tako da je bil naložen, če ne F9, dokler se ne naloži, če že imate, zabeležimo začetni položaj so, nato odpremo novo analizo ida. torej knjižnica, poiščite odmični naslov JNI_ONLOAD, potem je naslov JNI_OnLoad realna funkcija v procesu so.start + JNI_OnLoad_Offset.
0x753030000 + 0x1B9C = 0x75304B9C (naslov JNI_OnLoad v procesu APP)
Upoštevati je treba, da: v dveh bližnjicah CTRL + S je lahko v oknu isto ime, zato moramo izbrati dovoljenje RX, RX je navadno odrezek, RW običajno podatkovni segment.
10. če želite vnesti pravi naslov, pritisnite bližnjično tipko, da skočite na ta naslov G v IDA, in nato pritisnite bližnjično tipko F2 JNI_OnLoad izpolnjeno v vnosu funkcije prelomne točke. Če izvorne funkcije delujejo neposredno na točki prekinitve, nato pa se odprejo s pogledom IDA statičnega naslova funkcije in nato pretvorijo v dinamični naslov za nalaganje, potem lahko naslov prekinitve na G
11. Ponovno pritisnite F9, v JNI_OnLoad razčlenjeno, potem je to lahko vrsta operacij za odpravljanje napak ...
Potem govorimo o drugem, dodatnem načinu odpravljanja napak, tako da:
1. Kopirajte android_server
# adb push (android_server odkazalo) / data / local / tmp
2. Spremenite dovoljenja za izvajanje in zaženite
# adb lupina chmod 755 / data / local / tmp / android_server
# adb lupina
# svoje
# cddata / local / tmp
# ./android_server
4. Posredovanje vrat
adb naprej tcp: 23946 tcp: 23946
5. Zaženite android_server
Tu sem našel rahlo težavo, prenehanje po ponovnem zagonu, android_server ni blizu, spet je razlog, da se lahko povežete, vendar se ne morem povezati, tukaj so znova odpravljene napake, morate znova zagnati android_server
Kot sledi: (14061 je pid)
root @ xxxxx: / # ps | grep android_server
root 14061 13574 11180 9504 ffffffff 40183da0 S / data / local / tmp / android_server
root @ xxxxx: / # kill -s 9 14061
6 Odprite IDA, izberite meni Razhroščevalnik -> Priloži -> Odstranilnik napak ARM Linux / Android
Ime gostitelja izpolnite 127.0.0.1 ali locahost (je pomen)
Vrata se samodejno napolnijo 23946
Izberite aplikacijo, ki jo želite odpraviti
Po pridobitvi naslova postopka pritisnite bližnjično tipko G, da skočite na ta naslov v IDA, nato pa pritisnite bližnjično tipko F2 JNI_OnLoad izpolnjeno v vnosu funkcije prekinitvene točke. Če želite izvorno funkcijo pod neposredno mejno točko, nato pa jo odprete s statičnim pogledom IDA naslov funkcije in nato pretvorite v naslove, ki se dinamično naložijo, potem se lahko G na ta naslov pokvari:
Zaženite funkcijo, določeno s programom, sproži se točka prekinitve, nato lahko pridete do funkcije za odpravljanje napak, hej ...