首页
社区
课程
招聘
[原创]第一题解题思路
发表于: 2015-1-26 09:44 2248

[原创]第一题解题思路

2015-1-26 09:44
2248
一看这一题是下载一个apk文件,感觉是一个反汇编的题目,于是迅速查反汇编的文章。
反汇编文章:
45dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3#2S2K9$3q4A6k6r3!0F1k6#2)9J5k6h3y4G2L8g2)9J5c8W2)9J5y4f1f1#2i4K6t1#2z5p5c8Q4x3U0f1&6b7g2)9J5y4f1f1#2i4K6t1#2b7f1g2Q4x3U0g2m8x3W2)9J5y4f1f1#2i4K6t1#2z5f1u0Q4x3U0g2m8c8q4)9J5y4f1f1$3i4K6t1#2z5p5g2Q4x3U0g2m8z5q4)9J5y4f1f1^5i4K6t1#2z5p5c8Q4x3U0f1&6x3q4)9J5c8U0V1K6z5e0k6Q4x3X3g2K6K9s2c8E0L8l9`.`.
开始反汇编,但是得先看看这个apk运行起来的样子,于是开启了一个AVD,顺便也差了一下相关文章。
ADB调试 的文章:
d11K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0x3$3x3r3c8G2j5#2)9J5k6h3y4G2L8g2)9J5c8X3y4G2L8Y4c8W2L8Y4c8Q4x3V1j5I4x3q4)9J5c8U0l9@1x3U0N6Q4x3V1j5I4z5q4)9J5c8U0p5#2y4e0V1%4x3q4)9#2k6U0t1#2x3e0f1^5z5o6l9$3i4K6u0W2M7$3S2@1L8h3H3`.
首先是进入ADT的目录
C:\Program Files\MyEclipse\MyEclipse 10\android-sdk\platform-tools
运行adb shell,发现我的AVD有问题,进入主菜单的时候一直报launcher error,决定使用adb来启动apk
http://bbs.pediy.com/showthread.php?p=1218556
am start pkg/.MainActivity
ls /data/app
运行了半天,看了半天运行不了,找到了他的类
am start -n com.example.simpleencryption/.MainActivity
启动了程序,真难启动。发现还是要密码,怎么办,继续看反编译的代码。
代码里面有setContentView,跟踪 --2130903064
但是发现这里面没有xml文件啊,那xml文件在哪儿呢、
我记得哪里好像看到过xml文件,找了半天,才发现,apk文件修改扩展名为rar的时候,打开看过,里面有xml文件
找到,开始看xml文件里面的内容,好,里面是乱码,记得看到apk反编译的文章里面写到了关于几个工具,有的工具是为了反编译布局文件,有的 反编译工具是反编译代码的,继续找工具。
apktool,找到,下载,google下不到,baidu想办法。
恩,还好,6.1M大小,等一会儿应该就可以下完,等着吧,反正没事儿,继续看看代码里面的内容。
str3应该是我们输入的密码,str4是将str2和str1传入通过函数bytesToAliSmsCode计算得到的结果,这个应该就是密码,继续跟踪。
哦,这个方法很简单,就是把str2按照str1的位置做了一个换序存放,这时候apktool下载好了,继续看xml文件。
下载了一个一键apk的工具,貌似不会用,于是,继续查文档。
使用方法很简单 apktool d <file.apk> <dir>
尝试一下,下了半天都是什么国产的软件,让人汗颜,难用,改的乱七八糟,还不懂原版的是什么意思,无法理解,这就是国内的学习环境,好极了。
下载了一个文件,再下载了一个framework-res.apk 文件,安装好了才可以使用,然后使用命令,把文件反编译了,看到了activity_main文件的内容,还真的是这个内容,然后看文件的描述,str2和str1从哪儿来的(这里的反汇编工具反汇编的有问题,名称被混淆了。)。
检查得到str1是用户的输入,str2使用方法getTableFromPic获得,但是这个方法无法查看,嗯,的确有些复杂,继续反编译。
由于str2的函数 getTableFromPic 函数反编译的时候显示// ERROR //,所以想别的办法。
解压apk文件的时候,发现里面有两个logo文件,尝试把后面的logo文件移到里面去,看看这样是不是一个设定导致的。
尝试保存apk文件,然后将apk文件加载到虚机里面,运行起来。
搜索了一下,使用adb命令卸载的方法:
adb unstall com.example.simpleencryption
Success
再安装APK
adb install AliCrackme_1.apk
启动, adb shell am start com
失败,回头看安装回显,发现没有安装成功,返回INSTALL_PARSE_FAILED_NO_CERTIFICATES
看到网上有完美解决的方法,打击一看,我擦,100行,太复杂。
明白了,apk文件不能直接这样修改,那么遵循他,apk文件只能通过源码编译,这样才能打包,然后自动生成签名文件,验证起来就没问题,现在这个样子不行,于是想办法破解上面看到的两个函数。
看来我的水平还是有限,第一个问题都无法解决,感觉到汗颜,搞了那么久。
发现apktool文件下载的不是官方的,生气。重新下载。
重新编译,a4bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7$3q4E0i4K6g2X3P5X3S2S2L8X3M7I4z5e0R3@1i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5^5z5o6x3&6x3e0M7#2
遇到一些问题,查资料,开始反编译,报错:
Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec:
0x010300e1
无法编译,尝试下载frame.apk文件,加载系统默认资源
=============================================
反编译了半天,发现这个方法还是无法找出来,于是通过看看后面的函数写法,看看破绽,或许可以直接拿到我们需要的密码呢?试试。
我重新反编译了一下文件,使用apktool工具,使用网上教程删除了framework的文件,然后编译通过了,没有错误,哈哈,继续看代码和资源文件。
发现现状如下,可以看到源代码文件全部反编译为smali文件,xml文件都正常,资源文件都可以正常阅读,这个非常好。
想想smali文件如何转换为java文件吧,于是开始查资料。
wow 官网有smali转换为java的工具,直接下载看看,好极了,才6.5M大小。242K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2W2L8Y4y4W2L8X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3V1k6K6L8h3q4D9K9e0u0B7j5i4k6S2i4K6u0r3i4K6t1K6c8r3!0%4L8X3I4G2j5h3b7`.
使用这个工具的时候甚至发现了里面集成了apktool工具,打开项目的时候,要求选择apk文件,太好了,直接来帮助反编译apk文件,真好用。
然后看看里面写的代码如何如何。
看到showDialog函数出现了问题,不过我需要的两个函数,十号的,继续看函数内容。
函数getTableFromPic函数的内容,读取Logo.png文件,的第0x15d81位置,取后面的768长度存放在byte数组里面返回回来。
函数getPwdFromPic函数的内容,读取Logo.png文件,的第0x16481位置,取后面的18长度存放在byte数组里面返回回来。
不过看到里面的函数里面有一个lenght,瞬间感觉这个程序员太掉价了吧。
看到两个函数,ali的函数和返回来的函数,反写的函数都帮助我们写好了,太好了。
放到exclipse里面破解,主函数贴出来:
//        String password = "[B@7bdecdec";
    String table = getTableFromPic();
    String pw = getPwdFromPic();
    System.out.println("PWD is:" + pw);
    String enPassword = "";
    try {
//        enPassword = bytesToAliSmsCode(table, password.getBytes("utf-8"));
//        System.out.println("My PWD is:" +enPassword);
        byte[] b = aliCodeToBytes(table, pw);
        System.out.println(new String(b,"utf-8"));
    } catch(UnsupportedEncodingException e) {
        e.printStackTrace();
    }
   
嘿嘿,581026
好吧,比赛已经结束了,玩玩。
【总结】
使用工具:
1、Smali2Java.1.0.0.558.zip
URL:43bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2W2L8Y4y4W2L8X3y4W2i4K6u0W2j5$3!0E0i4K6u0r3j5$3&6Q4x3V1k6K6L8h3q4D9K9e0u0B7j5i4k6S2i4K6u0r3
工具特点,直接从apk文件反编译,相关程序能够自动反编译,效果比较好,缺点是部分函数会出现无法解读的现象。

2、Java Decompiler:
URL:
工具特点,要求从class里面的jar文件反编译,需要手动解压出来classes.dex文件,通过dex2jar工具将这个文件携程jar,然后就可以通过这个工具查看文件,特点是这个工具部分函数正常,部分函数不正常,可以与第一个工具互补,挺好。

3、这两个工具都是无法看到资源文件的,比较麻烦,只能查看代码文件。
查看资源文件的工具是apktool,google官方给出的软件。
使用apktool d AliCrackme_1.jar apk
即可将文件处理成资源文件,缺点是代码文件均解析为smali,可阅读性不高,但是官方出的产品,解析出来的东西是没有问题的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回