前文 介紹了在Windows平臺(tái)利用強(qiáng)大的APK-Multi-Tool進(jìn)行反編譯apk,修改smali源碼后再回編譯成apk的流程,最近受人之托,破解個(gè)apk,所幸的是所用到的這三個(gè)軟件都是跨平臺(tái)的,mac上也妥妥的。這里記錄下在mac上所用的東西和流程。
總共需要三個(gè)軟件,為了便于找到最新的版本,把官網(wǎng)也放后面:
- Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1
- dex2jar: https://github.com/pxb1988/dex2jar 最新版本2.0
- JD-GUI: http://jd.benow.ca/ 最新版本1.4.0
這三個(gè)軟件Apktool的安裝稍微麻煩點(diǎn),其他都還好,基本上下載下來(lái)解壓了就能用。
1,在官網(wǎng)鏈接里找到如下所示:

基本上按照上面的6個(gè)步驟就ok了。第一步是下載一個(gè)shell腳本,保存的名字就是”apktool”,不要帶.sh后綴??梢詮?fù)制到sublimetext,然后保存下。
2,下載最新的apktool-2,在bitbucket上:

3,將所下載的jar文件改名為”apktool.jar”
4,將shell腳本”apktool”和”apktool.jar”放到 “/usr/local/bin”目錄下
5,增加這兩個(gè)文件可執(zhí)行權(quán)限,chmod a+x file
6,執(zhí)行shell apktool就ok了。
安裝完畢后可以運(yùn)行apktool -v查看版本信息:
Apktool v2.0.1 - a tool for reengineering Android apk files
with smali v2.0.6 and baksmali v2.0.6
Copyright 2014 Ryszard Wi?niewski <brut.alll@gmail.com>
Updated by Connor Tumbleson <connor.tumbleson@gmail.com>
usage: apktool
-advance,--advanced prints advance information.
-version,--version prints the version then exits
usage: apktool if|install-framework [options] <framework.apk>
-p,--frame-path <dir> Stores framework files into <dir>.
-t,--tag <tag> Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
-f,--force Force delete destination directory.
-o,--output <dir> The name of folder that gets written. Default is apk.out
-p,--frame-path <dir> Uses framework files located in <dir>.
-r,--no-res Do not decode resources.
-s,--no-src Do not decode sources.
-t,--frame-tag <tag> Uses framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
-f,--force-all Skip changes detection and build all files.
-o,--output <dir> The name of apk that gets written. Default is dist/name.apk
-p,--frame-path <dir> Uses framework files located in <dir>.
For additional info, see: http://ibotpeaches.github.io/Apktool/
For smali/baksmali info, see: http://code.google.com/p/smali/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
dex2jar和JD-GUI的安裝
這兩個(gè)直接下載,然后解壓縮就ok:

軟件的安裝就說(shuō)到這,下面就是破解的過(guò)程了。為了檢測(cè)下是否能破解,我們先用Apktool反編譯,免得我們最后一場(chǎng)空。(只有Apktool能反編譯/回編譯,我們的破解才有意義)。
1,新建個(gè)apk文件夾,將待破譯的apk放進(jìn)去,之后進(jìn)到這個(gè)目錄運(yùn)行命令: apktool d hongbao.apk

yanzideMacBook-Pro:apk yanzi$ apktool d hongbao.apk
I: Using Apktool 2.0.1 on hongbao.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /Users/yanzi/Library/apktool/framework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
目錄如下:

之后再運(yùn)行命令回編譯apk:
apktool b hongbao (hongbao 就是反編譯出來(lái)的文件夾)
yanzideMacBook-Pro:apk yanzi$ apktool b hongbao
I: Using Apktool 2.0.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...

上面的build和dist就是回編譯apk過(guò)程中生成的東西,編譯出來(lái)的apk在dist目錄下,打開(kāi)build/apk文件夾會(huì)發(fā)現(xiàn)少了original文件夾下的META-INF文件夾:

也就意味著dist里的apk文件是沒(méi)有簽名的,這個(gè)稍后再談。
2,我們要用dex2jar將apk轉(zhuǎn)成jar文件,實(shí)質(zhì)是將apk里的classes.dex轉(zhuǎn)成jar。將dex2jar里的d2j_invoke.sh/d2j-dex2jar.sh增加可執(zhí)行權(quán)限。然后進(jìn)到dex2jar這個(gè)文件夾下運(yùn)行:
./d2j-dex2jar.sh /Users/yanzi/apk/hongbao.apk
得到hongbao-dex2jar.jar文件。
3,打開(kāi)JD-GUI,將hongbao-dex2jar.jar拖進(jìn)去就看到源碼了。
通過(guò)看java源碼對(duì)比smali文件,修改后回編譯就ok了!
如何手動(dòng)給apk增加簽名?
回編譯后的apk是安裝不成功的,總是提示
Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION]
實(shí)質(zhì)是沒(méi)簽名。
1,生成簽名:
keytool -genkey -keystore hongbao.keystore -keyalg RSA -validity 10000 -alias hongbao
注意:上面-keystore后面跟的是簽名文件的名字,而-alias是別名,一般情況下-keystore后面跟-alias是一樣的,但其實(shí)兩者沒(méi)有關(guān)系,這也是我故意搞成不一樣的原因。
2,為apk增加簽名:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa -verbose -keystore hongbao.keystore -signedjar hongbao-signed.apk hongbao.apk hongbao
注意:
1,最后的”hongbao”就是-alias后面帶的,必須保持一致。
2,如果不帶-digestalg SHA1 -sigalg MD5withRSA簽名后的apk安裝也是不成功的,說(shuō)INSTALL_PARSE_FAILED_NO_CERTIFICATES的錯(cuò)誤,如果不帶-tsa會(huì)報(bào)一個(gè)時(shí)間方面的警告。
文中所提到的附件下載:
- Apktool
- dex2jar
- JD-GUI
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2017-11-30 16:37
聶文龍 閱讀(278)
評(píng)論(0) 編輯 收藏 引用