标签:
参加了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