首页/安卓逆向/ 安卓逆向招财APP加密解密算法分析

安卓逆向招财APP加密解密算法分析

作者:神奇   分类:安卓逆向   时间:2018-04-30 18:53:07  标签:


很久没有发帖来了,今天写一篇分析android算法的文章
招财app safejson的加密解密算法,翻译到易语言,比较简单的app,希望能给网友们一点参考经验
首先定位safejson加密代码处:

随便搜一下就找到算法SafeEncode类


C:\Users\Administrator\Desktop\kjkj.zhaocai.wealth_3.2.5_46.jar!\kjkj\zhaocai\wealth\object\SafeEncode.class
我就在下面一句一句的翻译了,(日了狗,第一次发布后,下面的java代码及翻译都消失了.....又得重新写...)

public class SafeEncode
{
  private static String key = "hopeandhonour";
  private static String md5Key = MD5.getCodeMd5(key); //也就是1e0a5bda50655454cd41359411eee0ee

//解密算法
  public static String decodeZhaocai(String paramString)
    throws IOException
  {
//将参数进行base64解码
    byte[] arrayOfByte1 = Base64.decode(paramString.getBytes("UTF-8"));

//将md5key转换成字节数组
    byte[] arrayOfByte2 = md5Key.getBytes("UTF-8");
    int i = arrayOfByte2.length;

//创建一个新的字节数组,长度和参数base64解码后的一样
    byte[] arrayOfByte3 = new byte[arrayOfByte1.length];
    int j = arrayOfByte1.length;

//遍历arrayOfByte1 
    for (int k = 0;; k++)
    {
      if (k >= j) { //如果遍历完
arrayOfByte1的所有字节
   //将arrayOfByte3转换成字符串返回
        return new String(arrayOfByte3, 0, arrayOfByte3.length);
      }

//将参数base64解密后的字节 减去 md5Key的字节  k为0-参数base64解密后的字节长度  i为 md5Key的长度32  k%i 也就是0-31  一直到遍历完
      arrayOfByte3[k] = ((byte)(arrayOfByte1[k] - arrayOfByte2[(k % i)]));
    }
  }
//加密算法
  public static String encodeZhaocai(String paramString)
  {
    try
    {

//将参数转换为字节数组
      byte[] arrayOfByte1 = paramString.getBytes("UTF-8");
      byte[] arrayOfByte2 = md5Key.getBytes("UTF-8");
      int i = arrayOfByte2.length;
      int j = arrayOfByte1.length;
      byte[] arrayOfByte3 = new byte[j];
      String str;

//遍历参数所有字节
      for (int k = 0;; k++)
      {
        if (k >= j) //如果遍历完参数所有字节
        {

//将加完后的字节数组进行base64编码
          byte[] arrayOfByte4 = Base64.encodebyte(arrayOfByte3);

          str = new String(arrayOfByte4, 0, arrayOfByte4.length);
          break;
        }

//将参数的每一个字节加上md5Key所对应的字节 和上面解密是一样的 一个是b64完减去key 一个是加上key后b64
        arrayOfByte3[k] = ((byte)(arrayOfByte1[k] + arrayOfByte2[(k % i)]));
      }
      return str;
    }
    catch (UnsupportedEncodingException localUnsupportedEncodingException)
    {
      localUnsupportedEncodingException.printStackTrace();
      str = "";
    }
  }
}

像对应的易语言代码,我就不放源代码了,免得别有用心的人直接拿去了,,只截图了加密,有需要的或者是练习的,自己照着写解密算法,发帖只为帮助新手


0.jpg

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code