標籤:
參加了ali2015 ,但是時間的關係,僅僅弄了50pt的題。
結束了發現,隊友真是給力。挺到49名了,差一點到前30就決賽了。 哈哈。
不過逆向之後的成就感還是很強的。
話不多說。上思路:
思路: 沒有.so的apk是最好破解的。不擇手段的使用工具,綜合分析出演算法。
jd-gui、smali2java、drEvent、androidKiller等。
1、反編譯後,使用jd-gui查看,發現反編譯的不充分。使用smali2java,發現根本沒有反編譯出來。
jd的效果:
smali2java的效果
2、那麼,就目前我的能力而言,只能結合jd,還有自己的cfg工具,進行manual分析了。
3、分析的過程比較繁瑣,直接上整理後的代碼。
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"; }
4、關鍵程式就是check,那麼以上代碼就能大概分析出意圖了。有個地方需要注意,就是使用的getkey不是當前的getkey,是另外一個檔案的getkey。
我開始也在這裡卡了一下,後來發現了字元有點不一樣,還以為是看錯了,原來真的就是不一樣了。
5、那麼,整個密碼編譯演算法的過程就是。
[
1.擷取getkey加密字串str1[];
2.指定位置賦值的arrayint[];
3.關鍵的判斷(0xFF & arrayOfInt[i]) != (0xFF & (paramString.charAt(i) ^ str1.charAt(i % str1.length()) ),這個要假才行。
那麼逆向過來,就是param[i] = ar ^ intStr[ i%len(str1)] ) & 0xff.
]
6、接著寫指令碼逆向。
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=0for ar in arrayint: param.append( ( ar ^ intStr[ i%len(str1)] ) & 0xff ) i +=1print ''.join(map(chr,param))
7、最終得到答案:
blow,in the winD
總結下來,還是很簡單的。
關鍵是:1、有耐心分析真正的加密過程;2、細心觀察函數。
就是小cake。
ali2015, android cake 水題