資源描述:
《android軟件代碼反編譯方法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、GoogleAndroid平臺選擇了JavaDalvikVM的方式使其程序很容易破解和被修改,首先APK文件其實(shí)就是一個MIME為ZIP的壓縮包,我們修改ZIP后綴名方式可以看到內(nèi)部的文件結(jié)構(gòu),類似SunJavaMe的Jar壓縮格式一樣,不過比較去別的是Android上的二進(jìn)制代碼被編譯成為Dex的字節(jié)碼,所有的Java文件最終會編譯進(jìn)該文件中去,作為托管代碼既然虛擬機(jī)可以識別,那么我們就可以很輕松的反編譯。所有的類調(diào)用、涉及到的方法都在里面體現(xiàn)到,至于邏輯的執(zhí)行可以通過實(shí)時調(diào)試的方法來查看,當(dāng)然這需要借助一些我們自己編寫的跟蹤程序
2、。Google最然在AndroidMarket上設(shè)置了權(quán)限保護(hù)app-private文件夾的安全,但是最終我們使用修改定值的系統(tǒng)仍然可以獲取到需要的文件。一、dexdump方法dexdump是emulator自帶提供的查看dex文件的工具,可使用類似這樣的命令將dex文件dump到txt文件中:D:ProgramFilesandroid-sdk-windows-1.6_r1platformsandroid-1.6tools>dexdump.exe-dclasses.dex>spk.dump.txt得到的文件內(nèi)容,描述了類的
3、信息,但是不怎么好閱讀二、AXMLPrinter2.jar+baksmali.jar+smali.jar方法這個方法就強(qiáng)大了,AXMLPrinter2是還原AndroidManifest.xml和main.xml的工具,直接打開這兩個xml文件是亂碼,而通過還原之后,可以很明白的看到里面的內(nèi)容(我猜測還是使用了字節(jié)異或的方式加的密)。baksmali.jar是反解析dex的工具,smali.jar則是再還原成dex的工具操作方式如下:1.1、java-jarAXMLPrinter2.jarD:playAndroidManifes
4、t.xml>AndroidManifest.txt2.2、java-jarAXMLPrinter2.jarD:playreslayoutmain.xml>main.txt3.3、java-jarbaksmali-1.2.5.jar-oclassout/d:playclasses.dex復(fù)制代碼baksmali可解析(注意,是解析,不是反編譯)原java包以及引用的lib包,解析出的文件認(rèn)真看還是能看懂,比如以下片段:1.2.3.viewplaincopytoclipboardprint?4..classLcom/paul
5、/test/a;5..superLandroid/view/View;6.7.#staticfields8..fieldprivatestaticfinala:Landroid/graphics/Typeface;9.10.#instancefields11..fieldprivateb:I12..fieldprivatec:I13..fieldprivated:Z14..fieldprivatee:J15..fieldprivatef:I16..fieldprivatel:[Ljava/lang/String;17.18.#dir
6、ectmethods19..methodstaticconstructor()V20..registers221.sget-objectv0,Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;22.const/4v1,0x023.invoke-static{v0,v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/
7、Typeface;24.move-result-objectv025.sput-objectv0,Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;26.return-void27..endmethod28.#29.#othermethods..........30.#31.#virtualmethods32..methodpubliconKeyUp(ILandroid/view/KeyEvent;)Z33..registers434.const/16v0,0x4235.if-eqp1,v
8、0,:cond_836.const/16v0,0x1737.if-nep1,v0,:cond_b38.:cond_839.invoke-direct{p0},Lcom/paul/test/a;->d()V40.:cond_b41.co