apk反编译



本文说的apk反编译是对apk中的classes.dex文件进行反编译,比较常见的方法有两种,下边分别进行说明。

1.dex2jar + JD-GUI

①.使用WinRAR从apk中解压出classes.dex,放到dex2jar文件夹;
②.在命令行窗口执行命令"dex2jar.bat classes.dex",生成classes_dex2jar.jar;
③.使用JD-GUI打开classes_dex2jar.jar,可查看反编译的源代码,也可以选择"File→Save All Sources"保存文件;



说明:有时部分代码JD-GUI不能成功反编译,此时可以尝试从jar中单独解压出class文件,然后使用jad进行反编译,可能会成功。下边的批处理实现将jar中所有class文件反编译为java文件:

@echo off

rem 使用说明:拖动apk到批处理,反编译文件保存于classes文件夹

rd /s /q classes
7za.exe e %1 classes.dex
call dex2jar.bat classes.dex
7za.exe x -otemp classes_dex2jar.jar

for /f %%i in ('dir /b /s temp\*.class') do (
    call :todo %%i
)

del /q classes.dex
del /q classes_dex2jar.jar
rd /s /q temp

start explorer.exe %cd%\classes
goto :eof

:todo
(
    set dir=%~dp1
    md %dir:temp=classes%
    jad -o -d %dir:temp=classes% -s java %1
)

2.baksmali + smali

①.使用WinRAR从apk中解压出classes.dex;
②.在命令行窗口执行命令"baksmali.jar classes.dex"开始反编译,生成到out文件夹;
③.修改smali文件;
④.在命令行窗口执行命令"smali.jar out"进行编译,重新生成dex文件;

说明:这个方法比第一个方法的优点是反编译后可以再编译,缺点是smali代码不容易阅读修改。

3.资源链接

[1].dex2jar:https://code.google.com/p/dex2jar/
[2].JD-GUI:http://java.decompiler.free.fr/?q=jdgui
[3].JAD:http://www.varaneckas.com/jad/
[4].smali:https://code.google.com/p/smali/
[5].7-Zip:http://www.7-zip.org/

评论: 0 | 引用: 0 | 查看次数: 2908
发表评论
登录后再发表评论!