2015ali android挑战赛第一题

准备环境

工具:jeb + android killer + eclipse + cmder

逆向分析

apk拖入:jeb
1、找到入口代码:
jeb反编译的java代码
题目很简单,v2 == v4的内容就算破解成功,分析v2 和v4数据来源,发现v4就是目标密码,只不过是加密后的密码。(此题是通过密文比较,判断 成功与否)

突破点,有日志输出:

1、发现有日志输出:Log.i ,第一个想到的就是查看日志输出(从后面的分析结果来看,最好还是用eclipse或者android studio 带DDMS工具查看日志)

于是adb logcat -s “lil’
得到日志信心如下:很可惜显示的全部是乱码!!! 最后发现是cmder的bug,不能显示中文
cmder获取的日志信息
通过:eclipse输出,发现其实是中文,,,被cmder给坑了!!!

解决方案:
1、在原apk中添加日志,并重新编译(代价更小一些)
2、直接抠出原有的代码,并添加日志代码,不改变原来的apk。(代价更大一些)

这里我想的是代码直接还原,模拟环境,并添加日志输出
突破分析源代码如下:

  protected String getTableFromPic() {
        String v6;
        InputStream v3;
        String v5 = "";
        try {
            v3 = this.getResources().getAssets().open("logo.png");
            int v4 = v3.available();
            byte[] v0 = new byte[v4];
            v3.read(v0, 0, v4);
            byte[] v1 = new byte[768];
            System.arraycopy(v0, 89473, v1, 0, 768);
            v6 = new String(v1, "utf-8");
            for(int i = 0; i < 256; ){

               Log.i("TTT",v6.substring(i, i+31));
              i += 32;
            }
            Log.i("TTT", v6);//将v6的内容输出,发现就是密文中文字符集
            Log.i("TTT", "" + v6.length());
            if(v3 == null) {
                return v6;
            }}catch(Exception e){
              e.printStackTrace();
            }
        return "";
        }

       protected String getPwdFromPic() {
        String v6;
        InputStream v3;
        String v5 = "";
        try {
            v3 = this.getResources().getAssets().open("logo.png");
            int v4 = v3.available();
            byte[] v0 = new byte[v4];
            v3.read(v0, 0, v4);
            byte[] v1 = new byte[18];
            System.arraycopy(v0, 91265, v1, 0, 18);
            v6 = new String(v1, "utf-8");//将v6的内容输出,发现就是密文中文字符集密码
            Log.i("TTT", "" + v6.length());
            Log.i("TTT","" + bn(v6.getBytes("utf-8")));

            if(v3 == null) {
                return v6;
            }
            return v6;
        }catch(Exception e){
              e.printStackTrace();
        }
        return "";
        }
       @Override
       protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              String key = "中国";
              getTableFromPic();
              getPwdFromPic();
              try {
                     Log.i("TTT","" + bn(key.getBytes("utf-8")));

              } catch (UnsupportedEncodingException e) {
                     // TODO Auto-generated catch block
                     e.printStackTrace();
              }

分析输出的日志:密码是:义弓么丸广之,,,找到密文数组中对应的所对应的下标,即可换算出用户应该输入的密码
看图找密码

最终用户需要输入密码是:581026
输入密码
测试效果:
测试结果

小结

1、java层代码的的日志是一个好的利用点,用好它可以节省很多事
2、cmder在windows比cmd好用,但是在中文字符上支持不足。可以使用ddms作为参看日志输出,或者使用重定位功能将日志重定位到文件当中。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值