一次安卓抓包引发的加密算法分析
抓了一个小说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文件,我直接萎了~)
书旗小说{:301_997:} xiaob 发表于 2016-6-8 21:36
书旗小说
你狠,怎么看出来的??? 这..FOR是反编译的问题,不用NetBeans差评,算法这么简单,这应该是 这个高难度...还看不懂. 马上二楼 发表于 2016-6-8 21:37
你狠,怎么看出来的???
网站logo没打码{:1_908:} 虽然看不懂 但还是支持一下 不错学习了! 这个高难度...还看不懂. 这个就有点厉害了