android反編譯代碼還原
1. 如何反編譯android應用以及重編譯,簽名和對齊優化
工具/原料
電腦必須裝java
JAVA電腦環境教程
apktool
方法/步驟
1. 配置好JAVA環境變數,下載:apktool 解壓的文件放在C盤根目錄的apktool文件夾里(apktool文件夾自己創立)
打開命令提示符,(開始-運行-輸入cmd)
2. 輸入:cd \apktool 系統指令到了apktool文件夾(這里就是為什麼要把解壓的apktool解壓的文件放到apktool文件夾的原因,當然你也可以自命名文件夾的名稱,那麼比如arc,那麼指令就變成了:cd \arc 前提是你必須把apktool解壓的文件放到這個文件夾裡面)
3. 使用RE管理器把系統裡面的framework-res.apk 與 SystemUI.apk 提取出來放在apktool文件夾裡面
4. 如果只是想反編譯framework-res.apk
輸入apktool if framework-res.apk(框架的建立)
5. 開始最重要的反編譯,輸入指令,apktool d framework-res.apk
(反編輯的APK一定要用沒換過圖片的,否則回編輯失敗)
6. 最後反編譯完成
7. 修改代碼完成後,輸入代碼:apktool d framework-res 即可完成回編譯
8. 如果反編譯的是系統文件,比如,SystemUI.apk 那麼必須進行掛載框架,反編譯時,必須敲入一下命令:(然後再重復4-7步驟)
apktool if framework-res.apk
apktool if SystemUI.apk
9. 對於三星手機(比如9100、9108/9100G),如果反編譯SystemUI.apk要敲入一下命令進行框架掛載apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
10. 回編譯的命令是 apktool b XXX (沒有後面的apk後綴)反編譯的命令是 apktool d xxx (有後面的apk)
2. 修改後的安卓安裝包,如何反編譯回去
1、首先新建一個android項目,裡面只有一個MainActivity,而且主界面只會顯示一個字元串:你好。
2、下面,切換到這個項目生成的apk文件所在的目錄,可以看到有一個hellodemo.apk。
3、在命令行輸入:apktool d -r hellodemo.apk。可以看到在當前目錄下生成了一個hellodemo文件夾。
4、進入到hellodemo\smali\com\example\hello,打開MainActivity.smali。找到:
const-string v1, "\u4f60\u597d",
修改為:
const-string v1, "hello",
5、然後在命令行輸入:apktool b hellodemo hellodemo1.apk。這回重新打包成hellodemo1.apk。
6、然後給新生成的apk進行簽名。把這個apk拷貝到autosign的目錄下面,然後切換過去,在命令行輸入:java -jar signapk.jar testkey.x509.pem testkey.pk8 hellodemo1.apk hellodemo.apk。
7、把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
3. 安卓反編譯出來的都是.smali文件,怎麼反編譯位原工程啊修改後還能重新編譯回去
反編譯步驟:
下載apktool 並設置環境變數
命令行進入apk目錄執行:apktool d xx.apk (如果遇到一些錯誤說明apk做了防破解處理)
執行成功後會生成xx文件夾,進入xx文件夾修改需要修改的內容,如果需要修改代碼,進入xx\smali\裡面,需要懂一些smali語法
修改完後回到命令行,執行:apktool b xx ,會在xx文件夾裡面生成一個dist文件夾,裡面的apk就是回編譯的,這個apk是沒有簽名的
下載網上的簽名工具對apk簽名,完了就可以安裝了(如果你下載了源碼或者sdk,裡面自帶一個signapk也可以簽名)
4. Android逆向助手2.2怎麼把源代碼編譯回apk我把一個apk反編譯得到了源代碼和資源文件,
那個發編譯出來的是一個以你的apk名字同名的文件夾,裡面的有個src目錄,這個東西反編譯出來的就是好像是slmi開頭的那個文件,這個文件是Java的位元組碼,你需要修改的是這個東西,如果你直接反編譯成了jar文件,是無法反編譯的。你把反編譯的Java位元組碼的那個文件夾拖到那個文件路徑的框裡面去,點擊重新打包apk就可以了……
5. 是不是所有的程序都可以反編譯得到原代碼
Android APK中的Java代碼可以被反編譯到什麼程度主要看APK的加密程度。
第一種情況:無混淆無加密無加殼。
直接利用Dex2jar和JD-GUI可把源碼從APK里摳出來,代碼邏輯清晰,基本上做到可復用,只是資源文件的引用需要計算一下。
第二種情況:混淆。
通常是利用Proguard做的防護。因為是對jar做的不可逆混淆(除非有mapping),因此不能還原成原來的代碼。但是代碼結構,代碼邏輯一致,只要花長時間對代碼進行梳理一樣可找准核心代碼,解密方法跟第一種一致。
第三種情況:加密。
這里以DexGuard為例。對於這種代碼加密的方法,在程序運行中必定會進行解密,只要抽出它解密的邏輯便可。PS:我自己做過DexGuard的解密,如果用Dex2jar反編譯看的話邏輯是不對的,一定要從Smali代碼看。後來發現網上已經有人做了。
解密的腳本:A look inside Dexguard
第四種情況:加殼。
這種情況跟第三種類似。無論你怎麼加殼,運行的時候必定是Dalvik可識別的Odex代碼,建議直接在內存里mp出來。這里推薦Xpose的ZjDroid。
6. Android 將 apk 反編譯為源碼
將 apk 解壓,在解壓後的文件夾中可以找到 classes.dex 文件。(除了 classes.dex 文件,可能還會有 classes2.dex , classes3.dex 等等,本文以 classes.dex 為例,對其他幾個 dex 文件的操作是類似的)
使用 dex2jar 工具,將 dex 文件轉換為 jar 文件
使用方式:
執行命令後,生成的 classes-dex2jar.jar 就是我們需要的 jar 文件。
使用 Luyten 工具查看 jar 文件,就能看到反編譯後的源碼了。
本例中, classes.dex 文件中存儲的是 android 的一些基礎庫,實際編寫的源碼在 classes3.dex 中,對 classes3.dex 執行第二步,查看生成的 classes3-dex2jar.jar 文件,可以看到如下內容:
這就是反編譯 apk 的基本操作了。
Cmder 是一個非常好用的命令行工具。
效果如下:
只需要執行 apk2jar 命令,就可以實現把 apk 解壓到 apk_ 文件夾中,並將 apk_ 文件夾中的 classes.dex 文件轉換為 jar 。原理就是通過 Cmder 添加別名,把上述的第一步和第二步中執行的命令行組合起來了。
為 Cmder 添加別名很簡單,編輯 Cmder安裝目錄\config\user_aliases.cmd 文件,將別名添加到裡面即可。本例添加的別名如下:
其中:
7. Android 如何對apk文件進行反編譯以及重新
第一:使用apktool直接反編譯apk
第六:把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
8. android如何將混淆代碼還原
當混淆後的代碼輸出一個堆棧信息時,方法名是不可識別的,這使得調試變得很困難,甚至是不可能的。幸運的是,當ProGuard運行時,它都會輸出一個<project_root>/bin/proguard/mapping.txt文件,而這個文件中包含了原始的類,方法和欄位名被映射成的混淆名字。
retrace.bat腳本(Window)或retrace.sh腳本(Linux,Mac OS X)可以將一個被混淆過的堆棧跟蹤信息還原成一個可讀的信息。它位於<sdk_root>/tools/proguard文件夾中。執行retrace工具的語法如下:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你沒有指定<stacktrace_file>,retrace工具會從標准輸入讀取。
9. 關於android中APK反編譯後導入eclipse老是出錯的那些事
反編譯後的代碼只能作為參考,比如演算法,布局,模式設計等,因為android反編譯後,比如activity里的setContentView(123567),裡面會是數字,而不是我們常見的R.layout.xxx, 類似的R.String.xxx等等都是一樣的,所以編譯不通過很正常。
如果你想學習項目,作為模板,可以去github上或者google codes上去找些開源的項目,如果選擇反編譯建議反編譯2.2以前的apk,那時還沒有混淆編譯 ! 諸如:眾多Android+開源項目推薦,給力工作給力學習.pdf 這樣的書 網上很多!