马上二楼 发表于 2016-6-8 21:28

一次安卓抓包引发的加密算法分析

抓了一个小说APP的数据包,发现居然是加密的,于是开始了不要脸的破解之路。。。(为了保护小说权益,这里不提供小说APP的名字)


可以看见,被猥琐的加密了~第一眼一看是base64加密,很明显解密是乱码,看样子并没有那么简单
由于密文里有一个很关键的词语“ChapterContent”,用APK改之理进行搜索,找到了可疑代码


,进行反编译之后变成了

然而卵,并没有什么有用的代码~
于是我一直往下看,
发现一句代码“afu.decode(afm.cm(str1,0),"UTF-8")”有可疑,因为有“decode”这种敏感词语!
非常有可能是加密算法哦~
于是继续往下看。。失望了,只是个简单的编码转换而已

但是好像还有个afm.cm没有看!于是继续看代码!~

参数是String类型,返回了String类型,看里面的代码,层层循环,非常可能是加密算法!!!
但是“for(;;)”是什么鬼!根本运行不了,编译器各种错误!
于是我找出了它的smail代码:
.method public static cm(Ljava/lang/String;)Ljava/lang/String;
    .locals 7
    .prologue
    const/16 v6, 0x7a
    const/16 v5, 0x5a
    .line 7
    invoke-static {p0}, Landroid/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)Z
    move-result v0
    if-eqz v0, :cond_0
    .line 8
    const-string/jumbo v0, ""
    .line 29
    :goto_0
    return-object v0
    .line 11
    :cond_0
    new-instance v2, Ljava/lang/StringBuilder;
    invoke-direct {v2, p0}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
    .line 13
    invoke-virtual {v2}, Ljava/lang/StringBuilder;->length()I
    move-result v3
    .line 14
    const/4 v0, 0x0
    move v1, v0
    :goto_1
    if-ge v1, v3, :cond_3
    .line 15
    invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->charAt(I)C
    move-result v0
    .line 16
    const/16 v4, 0x41
    if-gt v4, v0, :cond_2
    if-gt v0, v5, :cond_2
    .line 17
    add-int/lit8 v0, v0, 0xd
    int-to-char v0, v0
    .line 18
    if-le v0, v5, :cond_1
    .line 19
    rem-int/lit8 v0, v0, 0x5a
    add-int/lit8 v0, v0, 0x41
    add-int/lit8 v0, v0, -0x1
    int-to-char v0, v0
    .line 27
    :cond_1
    :goto_2
    invoke-virtual {v2, v1, v0}, Ljava/lang/StringBuilder;->setCharAt(IC)V
    .line 14
    add-int/lit8 v0, v1, 0x1
    move v1, v0
    goto :goto_1
    .line 21
    :cond_2
    const/16 v4, 0x61
    if-gt v4, v0, :cond_1
    if-gt v0, v6, :cond_1
    .line 22
    add-int/lit8 v0, v0, 0xd
    int-to-char v0, v0
    .line 23
    if-le v0, v6, :cond_1
    .line 24
    rem-int/lit8 v0, v0, 0x7a
    add-int/lit8 v0, v0, 0x61
    add-int/lit8 v0, v0, -0x1
    int-to-char v0, v0
    goto :goto_2
    .line 29
    :cond_3
    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
    move-result-object v0
    goto :goto_0
.end method

经过长时间反复搓拿,终于看出了正确的代码!
        public static String cm(String s)
    {
      if("".equals(s))
            return "";
      StringBuilder stringbuilder = new StringBuilder(s);
      int i = stringbuilder.length();
      int j = 0;
      while(j < i)
      {
            char c = stringbuilder.charAt(j);
            if('A' <= c && c <= 'Z')
            {
                c += '\r';
                if(c > 'Z')
                  c = (char)(-1 + (65 + c % 90));
            } else
            if('a' <= c && c <= 'z')
            {
                c += '\r';
                if(c > 'z')
                  c = (char)(-1 + (97 + c % 122));
            }
            stringbuilder.setCharAt(j, c);
            j++;
      }
      return stringbuilder.toString();
    }
放进eclipse里运行一下,结果正确,成功解密!

于是一段没心没肺的破解之旅告一段落~
(曾经我破解过360免费wifi的算法,结果追踪一段发现居然调用了so文件,我直接萎了~)

xiaob 发表于 2016-6-8 21:36

书旗小说{:301_997:}

马上二楼 发表于 2016-6-8 21:37

xiaob 发表于 2016-6-8 21:36
书旗小说

你狠,怎么看出来的???

hlrlqy 发表于 2016-6-8 21:51

这..FOR是反编译的问题,不用NetBeans差评,算法这么简单,这应该是

xingyuwan 发表于 2016-6-8 22:07

这个高难度...还看不懂.

missjx137600 发表于 2016-6-8 22:47

马上二楼 发表于 2016-6-8 21:37
你狠,怎么看出来的???

网站logo没打码{:1_908:}

时光大大 发表于 2016-6-8 22:53

虽然看不懂 但还是支持一下

黑山走天涯 发表于 2016-6-8 23:24

不错学习了!

a563791453 发表于 2016-6-9 00:04

这个高难度...还看不懂.

wangqiustc 发表于 2016-6-9 00:22

这个就有点厉害了
页: [1] 2 3
查看完整版本: 一次安卓抓包引发的加密算法分析