1. 程式人生 > >反編譯apk 修改 合成

反編譯apk 修改 合成

bsp ani 一份 打開 nco 目錄 後綴 clas XML

韓夢飛沙 韓亞飛 [email protected] yue31313 han_meng_fei_sha

反編譯apk幫助文檔

準備工具

  1. dex2jar(dex轉換jar工具),下載地址: http://dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip
  2. apktool.jar(獲取apk資源文件、註冊文件、so庫等),下載地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2
  3. jdk1.7+
  4. eclipse+adt
  5. sdk
  6. 將待編譯的apk包(如a.apk)復制一份,重命名為a.zip並打開獲取裏面的classes.dex文件,將classes.dex文件復制到dex2jar目錄下
  7. cmd命令cd到dex2jar目錄下,執行d2j-dex2jar classes.dex,會得到一個叫classes-dex2jar.jar文件
    1. cmd 命令 cd到a.apk所在位置,執行java -jar apktool.jar d -f a.apk .\a ,完畢後會在當前目錄得到a文件夾
    2. 打開eclipse 新建一個空android項目,刪除libs、res目錄下文件,刪除AndroidManifest.xml文件,將a文件夾中的assets文件夾、res文件夾、AndroidManifest.xml文件復制到工程的根目錄,查看a文件夾中是否存在lib文件夾,如果有將裏面的內容(so庫)也全部復制到工程的libs目錄下,再將第2步得到的classes-dex2jar.jar也復制到libs目錄下
    3. Ctrl+H把整個項目中@[email protected](正則替換)[這一步可以不操作]
    4. 打開AndroidManifest.xml文件,將manifest節點下package屬性值改成自定義的包名,android:versionCode、android:versionName 看情況酌情修改,再看application的android:name、activity的android:name、service 的 android:name、receiver的android:namer是否是.開頭,如果是,在.的前面加上a.apk本身的包名
    5. 查看res目錄下的文件是否出錯,如果有打開出錯的文件,看是不是因為命名空間導致的,如: xmlns:panel="http://schemas.android.com/apk/res/xxx.xxx.xxx修改其後綴xxx.xxx.xxx(包名)改成a.apk本身的包名
    6. 項目右鍵運行即可生成apk
    7. 如果java代碼中將一些東西寫死,如由包名拼湊成的應用私有路徑 /data/data/xxx.xxx.xxx/files,這時候因為沿用了不存在的包名系統會出錯,這時候可以嘗試以下幾種方法:

開始操作

附加說明

a) 如果這種定義是在屬性中,用反射在application的onCreate方法中更改之

b) 如果這種定義是在方法中,可以通過一些工具(如javassist等)來修改class二進制字節碼,然後替換之

c) 用jd-gui等反編譯工具探知其目標包路徑,自建項目模擬內容再獲取class文件替換之

d) 如果還是沿用舊的包名,因為簽名變了,所以不用擔心應用會被“真”的應用在更新的時候給覆蓋掉

反編譯apk 修改 合成