您好,登錄后才能下訂單哦!
這篇文章給大家介紹Android中怎么實(shí)現(xiàn)靜態(tài)分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
先從一個(gè)很簡(jiǎn)單的apk包入手,一個(gè)假登錄頁(yè)面:
點(diǎn)擊登錄的時(shí)候彈出提示:
代碼用得是Android Studio3.5的版本,Android Studio的版本更新后,代碼的書(shū)寫(xiě)方式也跟以前不一樣了:
主頁(yè)面完成后,打包成apk文件,這里我試了三種打包方式,結(jié)果都是一樣的:
未簽名打包:
V1方式簽名的正式包:
V2方式簽名的正式包:
打包完成后,找到apk包文件,
使用apktool直接反編譯:
.\apktool.bat d -f .\app-release.apk -o test
解釋:
d表示decode,意思是反編譯,與之對(duì)應(yīng)的是b ,building,編譯
-f 表示force,強(qiáng)制刪除目標(biāo)目錄
-o 表示輸出地址
反編譯后進(jìn)入到test文件夾下的/smali/com/example/hellosmali中,可以看到有兩個(gè)MainActivity的smali文件:
其中MainActivity$onCreate$1.smali文件中有我們希望修改的onclick操作:
修改const-string v1值為:hello smali
這里修改完成后需要重新回編譯為apk包,書(shū)上說(shuō)的是用Android逆向助手,但是我試過(guò)后并沒(méi)有打包成功:
apktool也可以進(jìn)行回編譯:
這里報(bào)錯(cuò)了,因?yàn)楦甙姹镜腁ndroid Studio和Gradle使用了aapt2打包apk,但是apktool卻是使用的aapt1打包。按照網(wǎng)上教的辦法在gradle.properties文件添加了android.enableAapt2=false:
重新編譯apk包,繼續(xù)報(bào)錯(cuò):
這里點(diǎn)報(bào)錯(cuò)信息后定位到了minSdkVersion,我還以為是最低版本的問(wèn)題,改為20后,還是報(bào)錯(cuò)……
想了想,又將apktool升級(jí)到了最新版本,重新回編譯,還是報(bào)錯(cuò),但是錯(cuò)誤提示已經(jīng)跟之前不一樣了:
刪除了報(bào)錯(cuò)的xml文件后,又繼續(xù)提示其他文件報(bào)錯(cuò)T_T……
本來(lái)打算下個(gè)3.0以下版本的android studio再重新打包個(gè)apk,不過(guò)后來(lái)在網(wǎng)上看到一個(gè)回答說(shuō)可以把C:\Users\XX\AppData\Local\apktool\framework\1.apk刪掉試試,抱著試試的心態(tài)刪掉了1.apk,再重新回編譯:
.\apktool.bat b .\test\
看著成功了,去dist目錄下看果然有了新包:
將新打的包安裝到Android機(jī)上,又報(bào)錯(cuò):
NO_CERTIFICATES,沒(méi)有簽名,不能安裝,那就先給apk包簽個(gè)名好了,用得是jdk自帶的keytool和jarsigner工具。
使用keytool工具先生成簽名文件:
.\keytool.exe -genkey -alias "test" -keyalg "RSA"
解釋:
-genkey 創(chuàng)建新密鑰
-alias 密鑰別名
-keyalg 生成密鑰對(duì)的算法
-validity ,后面跟天數(shù),代表創(chuàng)建的證書(shū)有效期,也可默認(rèn)
再使用jarsigner工具進(jìn)行簽名:
.\jarsigner.exe -verbose -keystore C:\
Users\xxx\.keystore -signedjar C:\Users\xxx\app-debug-signed.apk C:\Users\xxx\app-debug.apk "test"
解釋:
-verbose 簽名/驗(yàn)證時(shí)輸出詳細(xì)信息
-keystore 密鑰庫(kù)位置
-signedjar 已簽名的jar文件的名稱
注意最后跟的是別名(alias),寫(xiě)錯(cuò)了會(huì)報(bào)錯(cuò)的:
最后終于生成了一個(gè)簽名包:
再次安裝:
提示已經(jīng)存在這個(gè)包了,刪除手機(jī)上的原來(lái)的app,重新安裝,成功:
再點(diǎn)擊登錄按鈕時(shí),可以看到提示語(yǔ)已經(jīng)被修改過(guò)了:
關(guān)于Android中怎么實(shí)現(xiàn)靜態(tài)分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。