过程
抓包分析api =》简化api参数=》找到并分析加密参数位置(首先对java包进行一些排除) =》分析构建加密函数
过程突破点
(先尽可能的缩小范围 然后整体判断 找到一个吻合所有条件的才深入分析代码 **读代码的时间成本很高) 搞清楚是否需要登录才能调用 从而分析出一部分信息=》无 =》api关键词最优 特征搜索(前两个是重点) 上下文方法次优 前端反推下下策 总之还是要结合判断 =》观察必须参数 找到之间关系
遇到的小问题
charles抓包结果乱码
解决办法:https://www.jianshu.com/p/2712e53bb761
反编译随机性
解决办法:多次反编译 注意关键文件的关键函数是否未被编译出来
最后贴一下复现的解密java代码 可直接粘贴运行
package com.example.lib;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class test {
public static void main(String[] args) {
System.out.println("Hello World");
StringBuffer localObject6 = new StringBuffer();
String Mq = "kq49MtFgDyNwuWtBxeyQqzfJhqOyW92k";
String Mr = "d5BaQm0Pi0hK5bgLYyxj2utLGXQb8prcxfYJn97auhorpfdhymvXt2SbUzlk0llrukboftjPm5V3ayq9x3nguwwP0v8Eipsn6TrqqfhqVllgvpWYn9njbYmqgcUfqJcPtAb05sduGz5qggZQa1RphEugceNs6Au7nL4zt";
String tel = "16605555183";
String uid = "351564439514019";//localObject1
String localObject1 = uid;
String localObject2 = tel;
Object localObject5 = Mr.substring(0, 27);
((StringBuffer)localObject6).append((String)localObject5);
((StringBuffer)localObject6).insert(6, (String)localObject1).insert(13 + ((String)localObject1).length(), (String)localObject2).insert(17 + ((String)localObject1).length() + ((String)localObject2).length(), (String)localObject1).insert(21 + ((String)localObject1).length() * 2 + ((String)localObject2).length(), Mq).insert(((StringBuffer)localObject6).toString().length(), (String)localObject2);
System.out.println(((StringBuffer)localObject6).toString());
localObject5 = bx(((StringBuffer)localObject6).toString());
String sig = ((String)localObject5).substring(5, 37);
System.out.println(sig);
}
public static String bx(String paramString)
{
try
{
Object localObject = MessageDigest.getInstance("SHA-1");
((MessageDigest)localObject).update(paramString.getBytes());
byte[] paramString1;
paramString1 = ((MessageDigest)localObject).digest();
localObject = new StringBuffer();
int i = 0;
while (i < paramString1.length)
{
String str = Integer.toHexString(paramString1[i] & 0xFF);
if (str.length() < 2) {
((StringBuffer)localObject).append(0);
}
((StringBuffer)localObject).append(str);
i += 1;
}
paramString = ((StringBuffer)localObject).toString();
return paramString;
}
catch (NoSuchAlgorithmException paramString1)
{
paramString1.printStackTrace();
}
return "";
}
}
经验积累在于可以提早的判断出可行或不可行的方向
网友评论