這是最簡單的題目,都在java層。
反編譯後看關鍵源代碼:
由於對android程序不熟悉,完全忽略了android.util.Log.i函數。後來看了大牛的writeup,才知道onClick函數裏面的3個android.util.Log.i用輸出日誌信息的方式告訴了密碼本、密碼,以及猜測的結果。
我用的是標準的分析方法。跟進access$0函數。
密碼生成規則是
這個代碼的意思就是將用戶的輸入轉成字節數組p4,以p4的每一個字節爲索引,在密碼本p3中找出對應的字符。這裏需要注意的是p3是utf8編碼,中文對應3個字節(一個字符),而ascii對應1個字節。
密碼本和題目設置的密碼(winhex提取):
逆推用戶的輸入就是找passwd的每一個字在密碼本中的索引,輸出索引對應的ascii值就可以了。
由於本人的python處理中文編碼不過關,所以老老實實在winhex裏面3個字節3個字節的搜索,手工計算了。
因爲utf8中文字符3個字節,所以winhex裏面的偏移要除以3.