标签:
参加了ali2015 ,但是时间的关系,仅仅弄了50pt的题。
结束了发现,队友真是给力。挺到49名了,差一点到前30就决赛了。 哈哈。
不过逆向之后的成就感还是很强的。
话不多说。上思路:
思路: 没有.so的apk是最好破解的。不择手段的使用工具,综合分析出算法。
jd-gui、smali2java、drEvent、androidKiller等。
1、反编译后,使用jd-gui查看,发现反编译的不充分。使用smali2java,发现根本没有反编译出来。
public void check(String paramString)
{
int i = 0;
if (paramString.length() != 16) {
throw new RuntimeException();
}
try
{
String str2 = get?ey();
str1 = str2;
}
catch (Exception localException1)
{
String str1 = getKey();
System.arraycopy(str1, 0, paramString, 5, 5);
}
arrayOfInt = new int[16];
arrayOfInt[0] = 0;
arrayOfInt[12] = 14;
arrayOfInt[10] = 7;
arrayOfInt[14] = 15;
arrayOfInt[15] = 42;
try
{
arrayOfInt[1] = 3;
arrayOfInt[5] = 5;
System.out.println();
}
catch
{
arrayOfInt[5] = 37;
arrayOfInt[1] = 85;
}
arrayOfInt[6] = 15;
arrayOfInt[2] = 13;
arrayOfInt[3] = 19;
arrayOfInt[11] = 68;
arrayOfInt[4] = 85;
arrayOfInt[13] = 5;
arrayOfInt[9] = 7;
arrayOfInt[7] = 78;
arrayOfInt[8] = 22;
for(i=0 ; i < paramString.length() ;i++)
{
if ( (0xFF & arrayOfInt[i]) != (0xFF & (paramString.charAt(i) ^ str1.charAt(i % str1.length()) ) ))
throw new RuntimeException();
}
}
public String getKey()
{
return "bobbydylan";
}param = []
#'bloq,av"wie +lgvN'
#str1 = 'bobbydylan'
str1 = 'bobdylan'
#intStr = [98, 111, 98, 98, 121, 100, 121, 108, 97, 110]
intStr = [98, 111, 98, 100, 121, 108, 97, 110]
arrayint = [0, 3, 13, 19, 85, 5, 15, 78, 22, 7, 7, 68, 14, 5, 15, 42]
i=0
for ar in arrayint:
param.append( ( ar ^ intStr[ i%len(str1)] ) & 0xff )
i +=1
print ''.join(map(chr,param))标签:
原文地址:http://blog.csdn.net/ls1160/article/details/44754859