|
JEB 是由 PNF 软件(PNF Software)机构开发的一款专业的安卓应用程序的反编译工具,适用于逆向和审计工程,功能非常强大。相比 jadx 来说,JEB 不仅仅支持安卓 apk 的反编译,安卓应用的动态调试,还支持 ARM、MIPS、AVR、Intel-x86、WebAssembly、Ethereum(以太坊)等程序的反编译、反汇编、动态调试等功能,另外还能对一些 PDF 文件进行解析和处理,是一个极其强大的综合性逆向和审计工具。
JEB 支持 Windows、Linux、Mac 三大平台,其官网地址为 https://www.pnfsoftware.com,目前主要分为三个版本:JEB CE(社区版)、JEB Android(安卓版)、JEB Pro(专业版)。JEB CE 提供了一些基础的功能,如支持 dex 文件的反编译,支持 Intel-x86 的反编译和反汇编,但不支持 Dalvik 字节码的反编译等功能。JEB Android 则更专注于安卓,支持 dex 文件的反编译,也支持 Dalvik 字节码的反编译和反汇编,JEB Pro 则是“完全体”,支持官网所介绍的所有的功能。具体的功能对比可以参考官网的介绍:https://www.pnfsoftware.com/jeb。三个版本中,JEB CE 是免费的,JEB Android 和 JEB Pro 都是收费的,需要购买许可证才可以使用。
安装
下载:https://bbs.kanxue.com/thread-273035.htm
文件如下:
解压:jeb-demo-4.16.0.202205110304-JEBDecompiler-121820464987384330.zip
将fix2下的两个文件复制
覆盖掉jeb-demo-4.16.0.202205110304-JEBDecompiler-121820464987384330\bin\app目录下的两个文件
启动jeb_wincon.bat
点击继续
打开apk文件
可以看到还原的代码非常接近原始代码
调试前的准备,开启adb服务:
D:\Android\android-sdk\platform-tools>adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
emulator-5554 offline
D:\Android\android-sdk\platform-tools>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 15076
调试APK
可以增加断点,查看变量了
.method public invokeCallbackHandler(I, String)V
.registers 5
00000000 iget-wide v0, p0, AppBrandJsBridgeBinding->mJsRuntimeInst:J
00000004 invoke-direct AppBrandJsBridgeBinding->nativeInvokeCallbackHandler(J, I, String)V, p0, v0, v1, p1, p2
0000000A return-void
.end method
.method 定义方法开始
.end method 定义方法结束
V void 只能用于返回值类型
.registers 指定方法内使用寄存器的总数
iget-wide 取值,用于操作wide型字段
invoke-direct 用于调用private修饰的方法,或者构造方法
invoke-virtual 用于调用一般的,非private、非static、非final、非构造函数的方法,它的第一个参数往往会传p0,也就是this指针
move-result v1 将这个指令的上一条指令计算结果,移入到v1寄存器中(需要配合invoke-static、invoke-virtual等指令使用)
if-eqz v0, :cond_0 //判断v0是否等于0,等于0则跳到cond_0执行
寄存器分为如下两类:
1、本地寄存器
用v开头数字结尾的符号来表示,v0, v1, v2,...
2、参数寄存器
用p开头数字结尾的符号来表示,p0,p1,p2,...
注意:
在非static方法中,p0代指this,p1为方法的第一个参数。
在static方法中,p0为方法的第一个参数
错误解决:
1.JEB requires a Java JRE or JDK version 8 or above. Recommended version: Java 8.191
It is also recommended to set JAVA_HOME and JRE_HOME environment variables to point to your JDK
解决:JEB 需要 Java JRE 或 JDK 版本 8 或更高版本。推荐版本:Java 8.191
还建议设置 JAVA_HOME 和 JRE_HOME 环境变量以指向您的 JDK
2.jeb局部变量总是显示为void
解决:jeb官方给出的解决方法是使用安卓5.0-8.1或者安卓11+,所以雷电9模拟器切换到雷电7模拟器。
同时在动态调试的时候手动在类型框里面输入类型
参考:
https://cuiqingcai.com/31082.html
https://bbs.kanxue.com/thread-268316.htm
smail基础知识:
https://coderyuan.com/2018/04/19/smali-knowledge/
链接:https://www.jianshu.com/p/9931a1e77066 作者:李全栋 来源:简书
|
|