2020-11-15某电话apk逆向思路

2020-11-15  本文已影响0人  217760757146

过程

抓包分析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 "";
   }
}

经验积累在于可以提早的判断出可行或不可行的方向

上一篇下一篇

猜你喜欢

热点阅读