這篇文章給大家介紹Android中怎么實現(xiàn)靜態(tài)分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
這篇文章給大家介紹Android中怎么實現(xiàn)靜態(tài)分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網(wǎng)站設計制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的大渡口網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
先從一個很簡單的apk包入手,一個假登錄頁面:
點擊登錄的時候彈出提示:
代碼用得是Android Studio3.5的版本,Android Studio的版本更新后,代碼的書寫方式也跟以前不一樣了:
主頁面完成后,打包成apk文件,這里我試了三種打包方式,結果都是一樣的:
未簽名打包:
V1方式簽名的正式包:
V2方式簽名的正式包:
打包完成后,找到apk包文件,
使用apktool直接反編譯:
.\apktool.bat d -f .\app-release.apk -o test
解釋:
d表示decode,意思是反編譯,與之對應的是b ,building,編譯
-f 表示force,強制刪除目標目錄
-o 表示輸出地址
反編譯后進入到test文件夾下的/smali/com/example/hellosmali中,可以看到有兩個MainActivity的smali文件:
其中MainActivity$onCreate$1.smali文件中有我們希望修改的onclick操作:
修改const-string v1值為:hello smali
這里修改完成后需要重新回編譯為apk包,書上說的是用Android逆向助手,但是我試過后并沒有打包成功:
apktool也可以進行回編譯:
這里報錯了,因為高版本的Android Studio和Gradle使用了aapt2打包apk,但是apktool卻是使用的aapt1打包。按照網(wǎng)上教的辦法在gradle.properties文件添加了android.enableAapt2=false:
重新編譯apk包,繼續(xù)報錯:
這里點報錯信息后定位到了minSdkVersion,我還以為是最低版本的問題,改為20后,還是報錯……
想了想,又將apktool升級到了最新版本,重新回編譯,還是報錯,但是錯誤提示已經跟之前不一樣了:
刪除了報錯的xml文件后,又繼續(xù)提示其他文件報錯T_T……
本來打算下個3.0以下版本的android studio再重新打包個apk,不過后來在網(wǎng)上看到一個回答說可以把C:\Users\XX\AppData\Local\apktool\framework\1.apk刪掉試試,抱著試試的心態(tài)刪掉了1.apk,再重新回編譯:.\apktool.bat b .\test\
看著成功了,去dist目錄下看果然有了新包:
將新打的包安裝到Android機上,又報錯:
NO_CERTIFICATES,沒有簽名,不能安裝,那就先給apk包簽個名好了,用得是jdk自帶的keytool和jarsigner工具。
使用keytool工具先生成簽名文件:
.\keytool.exe -genkey -alias "test" -keyalg "RSA"
解釋:
-genkey 創(chuàng)建新密鑰
-alias 密鑰別名
-keyalg 生成密鑰對的算法
-validity ,后面跟天數(shù),代表創(chuàng)建的證書有效期,也可默認
再使用jarsigner工具進行簽名:
.\jarsigner.exe -verbose -keystore C:\
Users\xxx\.keystore -signedjar C:\Users\xxx\app-debug-signed.apk C:\Users\xxx\app-debug.apk "test"
解釋:
-verbose 簽名/驗證時輸出詳細信息
-keystore 密鑰庫位置
-signedjar 已簽名的jar文件的名稱
注意最后跟的是別名(alias),寫錯了會報錯的:
最后終于生成了一個簽名包:
再次安裝:
提示已經存在這個包了,刪除手機上的原來的app,重新安裝,成功:
再點擊登錄按鈕時,可以看到提示語已經被修改過了: