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ā.

Edited by bubu
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...