使用dx.jar将jar文件转为dex文件

750天前 · 分享 · 1320次阅读

分析某个PC软件,这个软件核心功能都是由某个jar包实现的,这个jar包里面都是些.class文件。

用jadx之类的软件当然是可以反编译查看的,不过问题在于有些方法反编译失败,这方面做得好还得看jeb,但是jeb并不支持直接反编译jar。

于是只能先把jar转到dex,再用jeb来分析了。

转换当然是使用dx来做了,稍微了解一点的人都知道这个是Android Studio自带的工具,不过其实这个工具是可以独立使用的。

首先在Bellsoft下载一个full-jdk,下载地址如下

比如我这里是选了Java 11,链接如下:

解压到一个文件夹,比如jdk-11.0.14-full,然后将下面的内容保存为bat

其实就是dx.bat这个稍微改了下,这里改动的是JAVA_HOME,然后结尾部分添加了生成dex文件的内容

正常情况下用--dex--output=out.dex搭配就好了,不过经过我测试发现,对于PC平台的jar,最好是加上--no-optimize --no-strict这样可以保证生成的dex用来反编译的时候,引用关系更准确;而--min-sdk-version=26则是因为有些类的语法用的是一些高版本才有的。

如此一来,剩下只需要把jar文件拖到bat上就好了,这样也不用下个Android Studio了

对了既然是用dx转换,当然还需要将lib文件夹下的dx.jar复制过来

@echo off

setlocal

set prog=%~f0

set JAVA_HOME=jdk-11.0.14-full
set java_exe=%JAVA_HOME%\bin\java.exe

set jarfile=dx.jar
set "frameworkdir=%~dp0"

set "frameworkdir=%frameworkdir:~0,-1%"

if exist "%frameworkdir%\%jarfile%" goto JarFileOk
    set "frameworkdir=%~dp0lib"

if exist "%frameworkdir%\%jarfile%" goto JarFileOk
    set "frameworkdir=%~dp0..\framework"

:JarFileOk

set "jarpath=%frameworkdir%\%jarfile%"

set javaOpts=
set args=

set defaultXmx=-Xmx8192M
set defaultXss=-Xss128m

set params=

:firstArg
if [%1]==[] goto endArgs
set a=%~1

    if [%defaultXmx%]==[] goto notXmx
    if %a:~0,5% NEQ -JXmx goto notXmx
        set defaultXmx=
    :notXmx

    if [%defaultXss%]==[] goto notXss
    if %a:~0,5% NEQ -JXss goto notXss
        set defaultXss=
    :notXss

    if %a:~0,2% NEQ -J goto notJ
        set javaOpts=%javaOpts% -%a:~2%
        shift /1
        goto firstArg

    :notJ
    set params=%params% --dex --no-optimize --no-strict --min-sdk-version=26 --output=%~n1.dex %1
    shift /1
    goto firstArg

:endArgs

set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
call "%java_exe%" %javaOpts% -classpath "%frameworkdir%" -jar "%jarpath%" %params%
pause
👍 1

none

还没有修改过

评论

贴吧 狗头 原神 小黄脸
收起

贴吧

狗头

原神

小黄脸

目录

avatar

未末

迷失

126

文章数

275

评论数

7

分类