关于JADX和JEB的小问题
很久没水过技术文啦,最近也刚好遇到点小问题,特此记录
第一个问题
在处理app加密逻辑的时候一直拿不到正确的密文,反复看了反编译出来的代码(如下图)
public static string n(String str, String str2, String str3, Context context){
int h2; // 是不是觉得这个int h2; 很奇怪?没有赋值。
try{
int h3 = h(str2) + 35;
String str4 = .......
}
.........
}
我需要的是str4
这个字符串,它是由str2
切割得到的,按照代码的意思就是str2
的 第h2
个到第h3
个 然后再加上一次字符串
但是 我复现出来之后按照这样去切割出来的数据中前面多了 4
个字符 尾巴又少了四个字符 当时就觉得应该是由于字节处理的问题,并没有重视 就直接写死 前后都加了4,就屁颠屁颠拿去测试接口了。
结果结果 接口测试一直通不过,我又去看了请求接口的代码 代码中有提交证书,我又去巴拉巴拉证书,结果搞半天,证书这个问题解决之后接口返回还是不在预期范围内(就很气愤)又重新整理从头开始整理了一下加密流程 确认算法没有问题。
第二天,我找java同事协助,把这段代码拿给他看,他说 这个h2 是不是有点问题,java 这样写是不对的 都没有赋值,我说反编译出来的可能会有点缺失,(第二次没重视这个问题)就让同事帮我跑了一下这个代码,结果和我跑出来的结果是一模一样 也是前面多了四位后面少了四位,我说这 莫非是java虚拟机出问题了,恰好开发人员利用了这个bug? 我遵从相信代码的心里,又去梳理了一边加密流程和证书问题,并且让同事去尝试加载证书去访问,结果依旧是验证不通过!
反复验证之后,我确定这个问题绝对是我没有处理好证书和加密流程,但是代码又不会骗人,开始挠头了,开始右键刷新桌面
看到一个没有图标的jeb.bat
文件 抱着试一试的心态打开apk,找到这段代码 看到的一瞬间 我开始激动了。
public static string n(String str, String str2, String str3, Context context){
int v1 = h(str2);
int v2 = v1 +35;
...........
}
这么离谱的问题我都能遇到,我的心情激动有崩溃,两天时间就在这浪费了。
不过仔细想想也是 运算级
和 值引用
的问题确实在反编译过程中很难处理,
回顾了一下,之前在使用一个 js
反混淆的脚本时也遇到过这样的问题,因为优先级的问题,导致反编译出来的代码结果不对应,后面也和相应的作者提了issue
.
第二个小问题
这个问题其实和这两个工具没有关系,报文中会携带设备ip地址 我为了方便 就直接取了0.0.0.0
, 但是服务器就是验证不过,随手改成了 192.168.1.1
就通过了,怀疑是服务器做了校验,设备ip是 0.0.0.0
时,校验请求ip是否为ipv6
, 因为我挂得代理ip肯定不是ipv6
。