第一次发表文章,有些小紧张,怕被大牛笑话.....超详细版见附件(图文并茂)
这里添加图片、设置字体颜色等好费劲,咱们这个论坛有没有直接展示doc文件的插件么,要是没有,迫切希望kanxue坛主能加个这个功能,这样上传文件就会好看好多,也非常方便。
下面是详细步骤(可惜就是没图片):
第一步:下面是软件运行后的界面和点击按钮后的错误提示。
第二步:下面我们从代码角度加以分析,反编译源文件,对软件运行流程有个大体了解,下面是MainActivity类中的方法。
我们主要关注oncreate()方法中的按钮点击事件部分代码,因为猜测这里有逻辑判断及错误提示框,下面我们来找错误提示框。
查找错误提示框的方法:1.通过提示框API及其跳转逻辑定位大体位置。2.在通过显示内容验证(R文件String类中定位资源0x7f0a0011,找到 dialog_error_tips = 0x7f0a0011在String.xml中查找dialog_error_tips对应的字符串)。
猜测上面的showDialog() 即为正确的提示框,验证方法同上,进一步将线索聚焦到就是if的判断条件中,而条件中起决定作用的是s2.equals(s3),现在需要理清s1,s2和s3。
第三步:要了解s1,s2必须分析getTableFromPic() 和getPwdFromPic(),而s3的分析必须看MainActivity.bytesToAliSmsCode(s1, s.getBytes("utf-8"))。
s1=getTableFromPic()的分析如下:s1实质就是读取图片资源到abyte0数组中,从位置0x15d81取768个字节到数组abyte1中,用utf-8编码成的字符串(s3从这个集合中选取非连续数据)。
s2= getPwdFromPic()的分析,这个方法和上面的s1=getTableFromPic()差不多,s2实质就是读取图片资源到byte数组中,从0x16481取18个字节到新数组,再用utf-8编码成的字符串。
s3 = MainActivity.bytesToAliSmsCode(s1, s.getBytes("utf-8"))的分析:s3实质就是s1字符串中制定下标(下标是用用户输入的数据转化来的)的字连接成的字符串。
首先分析参数s为用户的输入String s = edit.getText().toString(); ,
s.getBytes("utf-8"):这行代码的意思是把用户输入的编码成字节数组作为参数,传递给bytesToAliSmsCode(string,byte[])处理,下面分析这个方法,
通过分析可以看出,用户输入的s字符串转换成数组,传到bytesToAliSmsCode(string,byte[])数组中用i做下标取数组abyte0[]中的数据,再把取出来的数据做0xff & abyte0[i]) 做运算后把结果作为下标用s1.charAt(结果)累加到Stringbuilder中生成字符串。实质就是用用户输入的数据转化成下标,提取s1中的字符。
第四步:MainActivity中oncreate()中的if判断就是决定成功失败的地方,主要就是判断s2和s3是否相等,通过前面我们知道s2是
修改添加输入测试下面两个方法,结合输出会发现结果如下
用用户输入的数字的ASCII值的十进制作为下标,table(s3)中取出数据和s2比较
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开
发者可享99元/年,续费同价!
上传的附件: