这是最简单的题目,都在java层。

反编译后看关键源代码:

wKiom1THg9SiHqYKAAMRrmke49I045.jpg

由于对android程序不熟悉,完全忽略了android.util.Log.i函数。后来看了大牛的writeup,才知道onClick函数里面的3个android.util.Log.i用输出日志信息的方式告诉了密码本、密码,以及猜测的结果。

我用的是标准的分析方法。跟进access$0函数。

密码生成规则是

wKiom1THh6-wGNE1AACaxFAi590290.jpg

这个代码的意思就是将用户的输入转成字节数组p4,以p4的每一个字节为索引,在密码本p3中找出对应的字符。这里需要注意的是p3是utf8编码,中文对应3个字节(一个字符),而ascii对应1个字节。

密码本和题目设置的密码(winhex提取):

wKioL1THiUaRxkWQAALpgZRqwAY497.jpg逆推用户的输入就是找passwd的每一个字在密码本中的索引,输出索引对应的ascii值就可以了。

由于本人的python处理中文编码不过关,所以老老实实在winhex里面3个字节3个字节的搜索,手工计算了。

wKioL1THijLAhcbSAAAXqMR44pA653.jpg

因为utf8中文字符3个字节,所以winhex里面的偏移要除以3.