JEB Decompiler中文网站 > 使用教程 > 怎么用JEB Decompiler进行反编译 如何优化JEB Decompiler的反编译结果
怎么用JEB Decompiler进行反编译 如何优化JEB Decompiler的反编译结果
发布时间:2024/12/24 09:45:23

品牌型号:联想拯救者R7000

系统:Windows 10专业版

软件版本:JEB 5.20.0.202411121942

逆向分析是现在软件开发中非常重要的技术手段,JEB Decompiler是一款大多数开发人员都在使用的反编译工具。本文将为大家介绍怎么用JEB Decompiler进行反编译,以及如何优化JEB Decompiler的反编译结果的相关内容。

一、怎么用JEB Decompiler进行反编译

JEB Decompiler可以用来反编译安卓APK。本文我以一个非常简单的App为例,为大家简单介绍使用JEB Decompiler对这个App进行反编译的操作流程。

App的功能是加载一些电影数据,界面如下,主要请求了一个Api,拿到电影数据。

App
图1:App

我们下载JEB Decompiler后,并没有exe可执行程序。我从JEB官网,下载了免费的JEB社区版下载完成后是一个压缩包文件,解压后,可以看到下图所示的文件。

JEB Decompiler
图2:JEB Decompiler

我们可以根据不同的操作系统,运行不同的脚本文件,例如:macOS可以双击【jeb_macos.sh】文件执行脚本,而Windows系统需要执行【jeb_wincon.bat】。在Windows系统中,如果启动出现病毒查杀,需要点击【继续执行】。

我更加推荐你通过cmd窗口运行这个bat文件,因为如果运行出现错误,双击启动只会看到一个一闪而过的黑色窗口,而cmd命令会输入软件的错误。

如下图所示,就是遇到了系统环境变量中Java版本的问题。我们可以根据JEB的输出结果,排查问题所在。

软件版本问题
图3:软件版本问题

成功打开JEB Decompiler之后,我们把apk文件直接拖拽到JEB Decompiler里面,经过一段时间处理后(大约几秒钟),JEB Decompiler就已经将代码反编译完成了,如图所示:

JEB Decompiler
图4:JEB Decompiler

我们可以看到在左侧Bytecode部分就是反编译后的代码,在右侧显示的则是Smali代码(Smali是Android虚拟机的反汇编语言),通过Smali代码我们大致能够看出一些执行逻辑和数据操作等过程。

二、如何优化JEB Decompiler的反编译结果

怎么在Smali代码中能快速找到我们需要的内容呢?假设公司代码丢失,只有前同事留下的接口文档,或者通过抓包知道加载界面中调用了【/api/movie】接口,但是不知道该接口的具体操作流程,应该怎么优化JEB Decompiler的反编译结果,找到需要的内容呢?以下是以该接口为例,为大家演示怎么优化JEB Decompiler的反编译结果。

1、JEB Decompiler反编译APK后,按下【Ctrl+F】打开查找窗口,查找【/api/movie】。

搜索关键字
图4:搜索关键字

2、比较有用的是下图这一行,声明了一个静态(static)不可变(final)的字符串,名字是作indexPath。但这里是Smali代码,我们怎么去找到它的源码位置呢?

indexPath
图5:indexPath

3、右键该字符串,选择【Decompile(解析)】。

解析
图6:解析

4、我们可以看到下图所示的页面,这里我们就能看到indexPath的原始声明,同时还有一个index的方法,包含三个参数offset、limit还有token,通过猜测,offset和limit参数用来做分页,token用来做加密。但是这是一个接口声明(interface),一定有某个类实现了这个接口(实现类)。

接口
图7:接口

5、在index方法上面右键选择【Cross-references(交叉引用)】。

交叉引用
图8:交叉引用

6、这里可以发现这里弹出了一个窗口,找到了index接口的实现类,如图所示。

交叉引用
图9:交叉引用

7、选中它,点击【OK】,这时候就跳转到了index实现的位置了,如图所示。

接口实现
图10:接口实现

8、上图的代码中使用了Encrypt类中的encrypt的方法,这时候我们再通过交叉引用找到Encrypt的定义,跳转到下图所示的位置。

加密逻辑
图11:加密逻辑

到这里,就拿到了我们需要的东西。根据上图内容,我们知道加密代码的执行逻辑。

这里我们分析一下,传入的参数就是list0,从上文分析可以知道,其就是一个长度为1的列表,内容就是一个字符串,即【/api/movie】。然后看逻辑:

(1)代码第一行,把一个表面是数字的东西加入到了list0,现在list0就有两部分内容,一个是【/api/movie】,另一串数字(感觉这一串数字是时间戳)。

(2)代码第二行,将list0使用逗号拼接起来,然后调用shaEncrypt操作,shaEncrypt就是SHA1算法,返回一个字符串,名字是【s】

(3)代码第三行又声明了一个ArrayList,把s和一串数字加进去。最后把arrayList0的内容使用逗号拼接起来,进行Base64编码。

分析完上述内容之后,就可以使用代码重新实现生成token,调用原来的接口。

三、总结

以上就是怎么用JEB Decompiler进行反编译,如何优化JEB Decompiler的反编译结果的相关内容。知道上面这些内容之后,即使软件的源代码丢失,不知道token以什么样的方式生成的情况下,也可以通过JEB Decompiler反编译,然后优化反编译结果找到自己需要的内容,希望本文对你有所帮助。

 

署名:Hungry

 

读者也访问过这里:
135 2431 0251