文件签名魔塔50层android反编译破解
發一下牢騷和主題無關:
????
????緣由:該游戲作者有點可愛,原來就是拿別人的游戲,還在游戲中參加積分的軌制,打到20層后,需要積分。看不慣,就把它破解了,打到20層后,直接跳過要積分進程。
????本文不提供破解后的安裝包!
????進程:
????首先下載目標apk,我是從這里下載的:http://www.wandoujia.com/apps/com.ss.magicTower
????然后下載工具,apktool+jd-gui+dex2jar+android sdk+jdk/jre
????部份鏈接如下:
????apktool(把apk文件反編譯成dalvik旁邊碼,smali):https://code.google.com/p/android-apktool/
????jd-gui(查看jar源碼文件):http://java.decompiler.free.fr/?q=jdgui
????dex2jar(把dex轉換成jar):https://code.google.com/p/dex2jar/
????基本原理:首先把apk文件解壓縮,然后提取其中的.dex文件,用dex2jar把dex文件轉成jar文件,這樣就能夠用jd-gui打開jar文件,查看具體的java源碼了。然后定位要修改的地方,再用apktool把apk文件轉換成dalvik的旁邊碼,定位到之前要修改的位置,然后修改保存,再用apktool從新打包成apk文件。最后一步,用jarsigner給前面生成的apk文件簽名,這樣就能夠把咱從新制造的apk安裝到android系統上了。
????具體進程:
????解壓apk文件,可以用rar或者7zip,都行。
????轉換成jar:dex2jar.bat classes.dex
????這一步后,就會在當前目錄下生成一個classes_dex2jar.jar文件。
????用jd-gui打開,并定位,這個不詳講。
????(一般的程序都會用proguard來進行代碼混雜,所以你這里看到的都是一些稀奇古怪的變量名,類名和方法名,這對定位會造成影響。但是花點時光,還是能夠找出來的。proguard現在已默認加到了android sdk里,在sdk/tools/proguard里,官網是http://proguard.sourceforge.net。在程序開發中,如果你希望用proguard來混雜自己的代碼,只需在default.properties里添加一句"proguardproguard.config=proguard.cfg",就能夠啟用proguard)
????apktool反編譯:apktool.bat d mota50.apk mota50
????命令完成后,會生成一個mota50的文件夾,定位到smali\com\ss\magicTower\k.smali文件,用文本編輯器打開它。然后修改相應的位置。我這里就是修改了判斷條件那個地方,把if(a.h>180)改成if(a.h>-180),這樣就永真了,所以就跳過驗證了。
每日一道理風,漸漸吹起,吹亂了我的發絲,也讓我的長裙有些飄動。綠葉仿佛在風中起舞,離開了樹,投向了大地,卻不知這樣會枯萎,我彎下腰,輕輕拾起一片樹葉,那非常有序的莖脈,是一種美的點綴。我有些哀嘆:綠葉啊,綠葉,你這般美麗地從樹上輕輕飄下,隨風起舞,卻不知已被人稱之為落葉!
????(android用的是dalvik VM的旁邊碼,與pc端的java旁邊碼不同,smali文件就是dalvik的旁邊碼,你可以理解為匯編語言,具體關于dalvik旁邊碼定義,可以看這里http://source.android.com/tech/dalvik/dalvik-bytecode.html)
????修改完以后,需要從新打包成apk文件:
????apktool.bat b mota50(這個命令,會在mota50文件夾中生成build和dist,兩個文件夾,apk文件存放在dist)
????你也可以用這個命令:apktool.bak b -f mota50 newmota.apk
????這個命令會在當前目錄生成一個apk文件。
????這樣生成的apk文件并不帶簽名,而在android中,不帶簽名的文件,是無法安裝的。所以我們需要給它從新添加簽名。
????簽名需要密鑰,可是我們手上沒有,需要自己生成一個,命令如下:
????keytool -genkey -v -keystore magic.keystore -alias magic.keystore -keyalg RSA -keysize 2048 -validity 10000
????具體參數含義,請看這里https://developer.android.com/tools/publishing/app-signing.html
????注意:-keystore和-alias參數后面跟的名字一定要一樣,否則后面用這個密鑰去簽名apk的時候,會提示找不到證書鏈!
????這個命令完成后,會在當前目錄生成一個magic.keystore密鑰文件
????有了密鑰,我們就能夠通過上面的命令,給apk進行簽名:
????jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore
????這個命令就是用magic.keystore密鑰給newmota50.apk簽名,并生成一個mota50_signed.apk的文件,這就是終究的文件了。
????注意:由于在jdk7中,默認的簽名算法已改變了,所以你必須自己指定簽名算法(-sigalg)和摘要算法(-digestalg)。否則簽名無效,無法安裝。
????所以以前用的相似命令:jarsigner -verbose -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore雖然能夠成功簽名,但是無法安裝。
????當然,上面分析的是手動簽名。你也可以通過eclipse,或者其他的IDE來進行簽名,網上也有一個 auto_signed圖形工具來簽名。這里就不在復述。
????安裝的時候,你可以安裝在android emulator里,或者真機里:
????adb install mota50_signed.apk
????總結:該文只是分析了端的破譯的流程,對于真正癥結的部份(修改smali文件),并沒有做過多的分析,其實android下的smali文件跟平常碰到的匯編代碼是一樣的,只不過指令集不一樣,名字不一樣而已。如果之前干過c/c++逆向的話,是很容易上手的。
文章結束給大家分享下程序員的一些笑話語錄: 騰訊的動作好快,2010年3月5日19時28分58秒,QQ同時在線人數1億!剛剛看到編輯發布的文章,相差才2分鐘,然后連專題頁面都做出來了,他們早就預料到了吧?(其實,每人贈送10Q幣,輕輕松松上兩億!)
--------------------------------- 原創文章 By
文件和簽名
---------------------------------
轉載于:https://www.cnblogs.com/jiangu66/archive/2013/05/28/3104955.html
總結
以上是生活随笔為你收集整理的文件签名魔塔50层android反编译破解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】关于阿里巴巴的问题
- 下一篇: [bbk4957]第69集 第8章 -性