APK反编译工具
反编译工具包下载一、反编译Apk得到Java源代码 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:http://l
一、反编译Apk得到Java源代码
工具下载:需用到dex2jar和JD-GUI这2个工具
dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:
windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz
步骤:
1.首先找到Android软件安装包中的classes.dex
把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
在命令行模式下定位到dex2jar.bat所在目录,运行 . dex2jar.sh classes.dex ,生成classes.dex.dex2jar.jar
3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码
---------------------------------------------------------------------------------------------------------------
二、反编译apk生成程序的图片、XML配置、语言资源等文件
工具下载:
在http://code.google.com/p/android-apktool/下载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
步骤:(可参考 http://www.xinyingde.com/Article/608.Html )
1.解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.
2.打开命令窗口 (开始 > 运行,输入cmd,回 车。)进入到apktool.bat的文件夹里。
输入:./apktool d “C:***.apk” “C:***文件夹xxx"
(命令行解释:apktool d 要反编译的文件 输出文件夹:注意 文件夹xxx必须是一个不存在的目录)
若在linux系统下,可以自定义shell函数来简化反编译过程,shell源码如下
#unmake <path> [AndroidManifest.xml path] decompile apk,若反编译*-res.apk时,可以指定AndroidManifest.xml
function unmake() {
unmake_tool_path="反编译工具的路径";
come_from=$(pwd);
if [ -z $1 ];then
echo -e "\033[32m命令使用错误,应该是unmake <path>\033[0m";
return;
fi
if [ ! -e $1 ];then
echo -e "\033[32m$1 不存在.\033[0m";
return;
fi
if [ -z $(echo $1 | grep .apk) ];then
echo -e "\033[32mapk路径输入不正确.\033[0m";
return;
fi
apk_name=$(echo ${1##*/} | sed 's/.apk//g')
if [ -z $(echo $1 | grep '/') ];then
apk_dir=$(pwd);
else
apk_dir=$(echo ${1%/*} | sed 's/^.\///g')
if [ -z $(echo $apk_dir | grep "^/") ];then
apk_dir=$come_from/$apk_dir;
fi
fi
#unzip xxx.apk and create xxx.zip
rm -rf $apk_dir/apk_unzip/;
unzip $apk_dir/$apk_name.apk -d $apk_dir/apk_unzip/;
cp $apk_dir/$apk_name.apk $apk_dir/$apk_name.zip;
#unmake res
rm -rf $apk_dir/$apk_name/;
is_add_to_rebuild="false";
if [ -e $apk_dir/apk_unzip/resources.arsc ];then
# 若apk中没有AndroidManifest.xml,反编译将会失败,因此,需要自己重新生成一个带有AndroidManifest.xml的zip用以反编译,这个AndroidManifest.xml没有更多实际价值,随便来一个都OK
if [ ! -e $apk_dir/apk_unzip/AndroidManifest.xml ];then
is_add_to_rebuild="true";
if [ -z $2 ];then
cp $unmake_tool_path/apktool/AndroidManifest.xml $apk_dir/apk_unzip/AndroidManifest.xml;
else
if [ -e $2 ];then
cp $2 $apk_dir/apk_unzip/AndroidManifest.xml;
else
echo "$2 不存在.";
return;
fi
fi
cd $apk_dir/apk_unzip/;
echo "zip -r $apk_name.zip ./*";
zip -r $apk_name.zip ./*;
mv $apk_name.zip $apk_dir/$apk_name.zip;
fi
echo "$unmake_tool_path/apktool/apktool d $apk_dir/$apk_name.zip $apk_dir/$apk_name/";
$unmake_tool_path/apktool/apktool d $apk_dir/$apk_name.zip $apk_dir/$apk_name/;
else
mkdir $apk_dir/$apk_name/;
fi
rm $apk_dir/$apk_name.zip;
#unmake src
if [ -e $apk_dir/apk_unzip/classes.dex ];then
cd $unmake_tool_path/dex2jar-0.0.9.8/;
cp $apk_dir/apk_unzip/classes.dex ./;
echo ". $unmake_tool_path/dex2jar-0.0.9.8/dex2jar.sh classes.dex";
. dex2jar.sh classes.dex;
mv classes_dex2jar.jar $apk_dir/$apk_name/src.jar;
rm classes.dex;
cd $apk_dir/$apk_name/;
$unmake_tool_path/jd-gui-0.3.5.linux.i686/jd-gui src.jar;
fi
#若这个AndroidManifest.xml是为了结构而加入的,则删除它
if [ -z $2 ];then
if test $is_add_to_rebuild = 'true' ;then
echo "$apk_dir/$apk_name/AndroidManifest.xml";
rm $apk_dir/$apk_name/AndroidManifest.xml;
fi
fi
nautilus $apk_dir/$apk_name/;
rm -rf $apk_dir/apk_unzip/;
cd $come_from;
}
更多推荐
所有评论(0)