Android java层常见加密算法的hook自吐以及栈信息的打印

  • 杂谈:其实原理并没有很难,本质就是hook Android的框架层中的api将我们想要的key和iv(也可以没有,就打个比方),但是目前的话,很多厂家已经不在直接调用java层的这些加密算法的api了,
    很多都是使用自己实现的加密算法,要么就是放在so里面,要么就是java层自己实现一个差不多算法的,这个我主要还是锻炼xposed的使用度,目前感觉挺好上手,甚至对我更友好,毕竟
    java老粉丝了,但是也有缺点,就是每次编译完,就需要重启,这点真没frida方便,同时写这个项目,也让我更多去看安卓的源码以及xposed的源码,感觉也挺有意思的,所以代码本身不需要
    去记忆的,掌握方法论都是可以写出来的。
  • 例子及hook思路
  1. 分析一个aes的加密,下文是我写的一个小demo中复制出来的
  public static String aesEncrypt(String content,String k,String iv)
   {
       try{
           Throwable ex=new Throwable();
           StackTraceElement[] stackTraceElements=ex.getStackTrace();
           IvParameterSpec zeroIv=new IvParameterSpec(iv.getBytes());
           SecretKeySpec key=new SecretKeySpec(k.getBytes(),"AES");
           Cipher cipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
           cipher.init(Cipher.ENCRYPT_MODE,key,zeroIv);
           byte[] encryptedData=cipher.doFinal(content.getBytes(bm));
           return Base64.encodeToString(encryptedData,Base64.DEFAULT);
       }catch (Exception e)
       {
           e.printStackTrace();
       }
       return null;
   }

2.思路分析:
我们的目的还是为了得到key和iv,以及明文和密文,仔细观察有哪些地方是涉及到了,发现是IvParameterSpec和SecretKeySpec这个构造方法中
的参数就是我们的key和iv,那么思路不就直接hook他们的构造函数了吗,将参数打印出来不就完事,注意点在于将所有的构造函数都给hook上,
避免漏了,毕竟从安卓源码中跟进去,发现他们的构造方法都是有重载的,所以为了不漏掉,所以全部hook就好了,xposed同样提供了api,

posted @ 2021-01-29 20:33  YenKoc  阅读(601)  评论(0编辑  收藏  举报