Jump to content

Android DEX iegūšana no NDK C++ koda


nemirst
 Share

Recommended Posts

Esmu sācis apgūt Android izstrādi, precīzāk ar Android NDK. Esmu izveidojis Android Native bibliotēku (*.so) ar NDK un gribu no šīs bilbliotēkas pārbaudīt, vai to izmanto no oriģinālās aplikācijas. Bija ideja pārbaudīt DEX signature. Palasīju, ka ir tāds /proc/self/maps fails, no kura var iegūt adrešu range, kurā atrodas DEX fails. Kaut ko laikam nesaprotu pareizi, jo mēģinot nolasīt datus nedabūju gaidītos "magic" baitus "dex...."(https://source.android.com/devices/tech/dalvik/dex-format.html#definitions)

 

Šeit ir maps faila rindiņas, kuras satur .dex un zem katras izdrukāju pirmos 32 baitus, bet tajos neredzu "magic" baitus. Izskatās, ka manas aplikācijas dex fails ir sadalīts 4 atmiņas apgabalos.

 

"a419e000-a4484000 r--p 00000000 b3:17 185315     /data/dalvik-cache/arm/data@app@...test_app-2@base.apk@classes.dex"
"\x7fELF\x01\x01\x01\x03\0\0\0\0\0\0\0\0\x03\0(\0\x01\0\0\0\0\0\0\04\0\0\0"

"a4484000-a4642000 r-xp 002e6000 b3:17 185315     /data/dalvik-cache/arm/data@app@...test_app-2@base.apk@classes.dex"
"\xb0&\x02\0\x11A\0\0\xb0E\x05\0 \0\0\0`\x80\0\0\0\0\0\0<\0\0\0\xbd�

"a4642000-a4643000 rw-p 004a4000 b3:17 185315     /data/dalvik-cache/arm/data@app@...test_app-2@base.apk@classes.dex"
"\x04\0\0\0x\x01\0\0\x05\0\0\0\x14\x01\0\0\x06\0\0\0�

"b3de6000-b3de7000 r--p 00000000 b3:17 185315     /data/dalvik-cache/arm/data@app@...test_app-2@base.apk@classes.dex"
"\x7fELF\x01\x01\x01\x03\0\0\0\0\0\0\0\0\x03\0(\0\x01\0\0\0\0\0\0\04\0\0\0"
 
Kur varētu būt problēma? Varbūt ir kāds gatavs risinājums? Vismaz es atradu tikai kodu, kas no C++ caur JNI izsauc Java.
Link to comment
Share on other sites

Es esmu mēģinājis darīt tieši to pašu. Bet tas nestrādās, jo tad, kad dex fails tiek lādēts atmiņā, tas tiek "optimizēts". Tur tiek visādas lietas gan metadatos, gan baitkodā izmainītas (un tas tiek arī JIT'ots), lai runtaimā varētu efektīvāk izpildīt kodu.

 

Labākais ko tu vari darīt ir nolasīt .dex failu no diska, un tad pārbaudīt tā signaturi. Jā, protams, runtaimā pačotu kodu tas nedetektēs, bet ja lietotājs spēj runtaimā patčot kodu, tad viņš spēs arī nopačot tavu pārbaudi neitīvajā kodā.

Labots - bubu
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...