职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 555|回复: 9

[小工具]apk反编译工具整合(修复)

[复制链接]
无处不在 发表于 2011-8-3 11:00 | 显示全部楼层 |阅读模式
//--------------------------------------------------------------- 2011.05.24
最近很多网友都表示遇到了dll调用报错的问题,本人一下子也未能找到很好的解决办法...


终于能抽出时间,于是用蹩脚的cmd批处理配合java重新实现了一遍:

Cmd代码  
@echo off   
  
cd /d %~dp0   
  
set curDir=%cd%   
set apkFilePath=%1  
set apkFileName=%~n1   
  
rem edit this params before use.   
set outputFilePath=%cd%\apk_cracked   
set dex2jarPath=%cd%\dex2jar\dex2jar.bat   
set jd_guiPath=%cd%\jd-gui\jd-gui.exe   
set apktoolPath=%cd%\apktool\apktool.bat   
set utilsPath=%cd%\utils.jar   
  
set outputTempDir=%outputFilePath%\temp   
set saveDir=%outputFilePath%\%apkFileName%   
  
@echo [Params]   
echo curPath:%curDir%   
echo apkFile:%apkFilePath%   
echo outputFilePath:%outputFilePath%   
echo dex2jarPath:%dex2jarPath%   
echo jd_guiPath:%jd_guiPath%   
echo apktoolPath:%apktoolPath%   
echo saveDir:%saveDir%   
  
@echo ------------------------   
@echo [Step01].clear old files   
@echo ------------------------   
rem delete temp files.   
if exist %outputTempDir% (   
    rd /q /s %outputTempDir%   
)   
rem delete last version.   
if exist %saveDir% (   
    rd /q /s %saveDir%   
)   
  
@echo ------------------------   
@echo [Step02].unzip .apk file   
@echo ------------------------   
rem unzip .apk file.   
java -jar %utilsPath% "unzip" "%apkFilePath%" "%outputTempDir%"  
  
@echo ------------------------   
@echo [Step03].decompile .dex file   
@echo ------------------------   
rem decompile .dex file.   
call %dex2jarPath% "%outputTempDir%\classes.dex"  
rem rename .jar file to .apk filename.   
if exist "%outputTempDir%\classes.dex.dex2jar.jar" (   
    rename "%outputTempDir%\classes.dex.dex2jar.jar" "%apkFileName%.jar"  
)   
  
@echo ------------------------   
@echo [Step04].save resources files   
@echo ------------------------   
rem copy resources files to saveDir.   
java -jar %utilsPath% "saveResFiles" "%outputTempDir%" "%saveDir%"  
  
@echo ------------------------   
@echo [Step05].decompile .xml files   
@echo ------------------------   
rem decompile .xml files.   
call %apktoolPath% d -f "%apkFilePath%" "%outputTempDir%\apktool"  
  
@echo ------------------------   
@echo [Step06].save xml files   
@echo ------------------------   
rem copy xml files to saveDir.   
java -jar %utilsPath% "saveXmlFiles" "%outputTempDir%\apktool" "%saveDir%"  
  
@echo ------------------------   
@echo [Step07].remove temp files   
@echo ------------------------   
rd /q /s %outputTempDir%   
  
@echo ------------------------   
@echo [Step08].show decompiled files   
@echo ------------------------   
rem open saveDir.   
call explorer.exe %saveDir%   
rem open .jar by jd-gui   
call %jd_guiPath% "%saveDir%\%apkFileName%.jar"  
  
rem pause  

@echo off

cd /d %~dp0

set curDir=%cd%
set apkFilePath=%1
set apkFileName=%~n1

rem edit this params before use.
set outputFilePath=%cd%\apk_cracked
set dex2jarPath=%cd%\dex2jar\dex2jar.bat
set jd_guiPath=%cd%\jd-gui\jd-gui.exe
set apktoolPath=%cd%\apktool\apktool.bat
set utilsPath=%cd%\utils.jar

set outputTempDir=%outputFilePath%\temp
set saveDir=%outputFilePath%\%apkFileName%

@echo [Params]
echo curPath:%curDir%
echo apkFile:%apkFilePath%
echo outputFilePath:%outputFilePath%
echo dex2jarPath:%dex2jarPath%
echo jd_guiPath:%jd_guiPath%
echo apktoolPath:%apktoolPath%
echo saveDir:%saveDir%

@echo ------------------------
@echo [Step01].clear old files
@echo ------------------------
rem delete temp files.
if exist %outputTempDir% (
        rd /q /s %outputTempDir%
)
rem delete last version.
if exist %saveDir% (
        rd /q /s %saveDir%
)

@echo ------------------------
@echo [Step02].unzip .apk file
@echo ------------------------
rem unzip .apk file.
java -jar %utilsPath% "unzip" "%apkFilePath%" "%outputTempDir%"

@echo ------------------------
@echo [Step03].decompile .dex file
@echo ------------------------
rem decompile .dex file.
call %dex2jarPath% "%outputTempDir%\classes.dex"
rem rename .jar file to .apk filename.
if exist "%outputTempDir%\classes.dex.dex2jar.jar" (
        rename "%outputTempDir%\classes.dex.dex2jar.jar" "%apkFileName%.jar"
)

@echo ------------------------
@echo [Step04].save resources files
@echo ------------------------
rem copy resources files to saveDir.
java -jar %utilsPath% "saveResFiles" "%outputTempDir%" "%saveDir%"

@echo ------------------------
@echo [Step05].decompile .xml files
@echo ------------------------
rem decompile .xml files.
call %apktoolPath% d -f "%apkFilePath%" "%outputTempDir%\apktool"

@echo ------------------------
@echo [Step06].save xml files
@echo ------------------------
rem copy xml files to saveDir.
java -jar %utilsPath% "saveXmlFiles" "%outputTempDir%\apktool" "%saveDir%"

@echo ------------------------
@echo [Step07].remove temp files
@echo ------------------------
rd /q /s %outputTempDir%

@echo ------------------------
@echo [Step08].show decompiled files
@echo ------------------------
rem open saveDir.
call explorer.exe %saveDir%
rem open .jar by jd-gui
call %jd_guiPath% "%saveDir%\%apkFileName%.jar"

rem pause* 由于使用了Quick Batch File Compiler工具来转成.exe,所以必须将解压的文件放置到名为\ApkDecompiler\的目录下。

基本使用是一样的,具体见附件。

//---------------------------------------------------------------- 2011.05.06
<!-- 最近发觉很久没搞小东西玩了,手痒...随便搞着玩 -->

参照自网上目前比较流行的apk破解组合方案:
dex2jar + apktool + jd-gui

我只是简单地将他们组合到一块,方便使用。

其中init.cfg 是一些属性的配置:
dex2jarPath=.\dex2jar\dex2jar.bat
jd-guiPath=.\jd-gui\jd-gui.exe
apktoolPath=.\apktool\apktool.bat
savePath=H:\apk_cracked\ <这个是储存的目录,最好单独新建一个目录,以防止导致执行过程中误删了文件>
*如果提示java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;的错误,可以将上面3个应用的地址改成绝对地址。
  这是因为我写了一个获取当前应用路径的DLL,具体问题还有待解决...真是杯具了...

其他几个目录就是对应着相关的工具。

使用方式:
1.设置好init.cfg中的路径参数;
2.直接将.apk包拖到ApkDecompiler.exe上即可;
   或者,进入cmd,输入:
   ApkDecompiler.exe <apk_file> [<output_file> <dex2jar_file> <jd-gui_file> <apktool_file>]

反编译出来后的结构:


*涉及的所有资源来源于网络,仅作学习交流。

大小: 79.7 KB
ApkDecompiler_2011.05.24_.rar (3.7 MB)
下载次数: 38
查看图片附件

ksdal 发表于 2011-8-3 11:00 | 显示全部楼层
反编译出来的代码在elcipse不能用啊
到处是
int xxx=null;
boolean xxx=0;
....
之类语法错误的东西

broken 发表于 2011-8-3 11:00 | 显示全部楼层
seanyzhou
反编译出来的代码在elcipse不能用啊
到处是
int xxx=null;
boolean xxx=0;
....
之类语法错误的东西


能直接用就神奇了。。。

月上萧萧 发表于 2011-8-3 11:01 | 显示全部楼层
恩。不错,其实这个整合前两天俺也做了。。。只不过xml没有排版。。。

走就走吧 发表于 2011-8-3 11:01 | 显示全部楼层
kala888
恩。不错,其实这个整合前两天俺也做了。。。只不过xml没有排版。。。

,我也就胡乱搞的。有空交流交流!

fl 发表于 2011-8-3 11:01 | 显示全部楼层
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗


broken 发表于 2011-8-3 11:01 | 显示全部楼层
主要是我为了获取当前应用的路径,写了个DLL,这是提示DLL没有关联上(目前是将DLL拷贝到缓存)...

你只要将init.cfg里3个第三方应用的地址改成绝对路径就好了。

这问题我回头想想怎么解决哈。


vvvpig
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗



愚人 发表于 2011-8-3 11:01 | 显示全部楼层
univasity
主要是我为了获取当前应用的路径,写了个DLL,这是提示DLL没有关联上(目前是将DLL拷贝到缓存)...

你只要将init.cfg里3个第三方应用的地址改成绝对路径就好了。

这问题我回头想想怎么解决哈。


vvvpig
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗




改成了绝对路径还是报这个错误哦

叫我小乖 发表于 2011-8-3 11:02 | 显示全部楼层
运行出错与vvvpig一样

叫我小乖 发表于 2011-8-3 11:02 | 显示全部楼层
和楼上的一样,也是报错


您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-5 04:02 , Processed in 0.139035 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表