各类移动安全竞赛题/部分writeup收集与整理


各类移动安全竞赛题/部分writeup收集与整理


        小编偶然发现在google云端网盘上Mobile Challenges有各个网友上传的关于移动安全的题目https://drive.google.com/folderview?id=0B7rtSe_PH_fTWDQ0RC1DeWVoVUE&usp=sharing,有需要的可下载。


各类移动安全竞赛题/部分writeup收集与整理_第1张图片


        还收集了部分竞赛中一些牛人写的解题思路,下载网址如下:http://pan.baidu.com/s/1ntrDgc5   密码:byis

各类移动安全竞赛题/部分writeup收集与整理_第2张图片

        以下是小编参加2015阿里组织的移动安全挑战赛时写的第二题解题思路,那时刚学android逆向,比较菜,各位大神请绕过~


    方法一:

        运行程序后没有log信息,又看了下源码,它加载了crackme.so动态链接库,调用了其中的函数securityCheck(str),根据该函数的返回值(0或1)来判断是否输入正确。

首先进行静态分析crackme.so,载入IDA,查看securityCheck函数的源码:

各类移动安全竞赛题/部分writeup收集与整理_第3张图片

        得知字符串v6所存的就是密码。查看偏移628c处所存的字符串,是“wojiushidaan”。输入看看,错误。好吧,我也觉得没有那么简单。估计是程序运行后把字符串改了。


        刚学了android动态调试(http://www.52pojie.cn/thread-293648-1-1.html),就试试看,在JNI_OnLoad函数上下断点。

        (1)      执行android_server:adb shell /data/local/tmp/android_server

        (2)      端口转发adb forward tcp:23946 tcp:23946

        (3)      调试模式启动程序adb shell am start -D -n com.yaotong.crackme/.MainActivity

        (4)      IDA附加

        (5)      设置调试选项

        (6)      F9运行

        (7)      执行jdb -connectcom.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

        (8)      静态找到目标函数对应所在模块的偏移地址

                   JNI_OnLoad函数:0x00001B9C

                   Java_com_yaotong_crackme_MainActivity_securityCheck:0x000011A8

                   aWojiushidaan:0x00004450

        (9)      Ctrl+S找到libcrackme.so基地址0x4924C000,分别与上述三个地址相加得到最终地址。

        (10)    G跳转至两个函数地址,然后下断点

        (11)    F9运行

        (12)    断下,进行单步调试F8,同时查看0x49250450处的字符串。


        当单步调试JNI_OnLoad函数到某一步时,发现字符串变为“aiyou,bucuoo”。

各类移动安全竞赛题/部分writeup收集与整理_第4张图片

各类移动安全竞赛题/部分writeup收集与整理_第5张图片

        结果:aiyou,bucuoo


    方法二:

        dump内存。

        程序运行在手机上(经测试,模拟器上貌似不行)。

        通过dd命令,将内存里的数据拷贝出来。

        dd if=/proc/6821/mem of=/sdcard/mem bs=1skip= 1074085888 count=20480

        dd if=/proc/6821/mem of=/sdcard/mem bs=1skip=1336799232 count=28672

各类移动安全竞赛题/部分writeup收集与整理_第6张图片


        mem文件用IDA打开,查看0x00004450处的值。


    方法三:

        执行android_server:adb shell /data/local/tmp/android_server

        端口转发adb forward tcp:23946 tcp:23946

        在模拟器上运行程序

        ps找到程序pid

        命令:kill -19    可以让进程暂停

        IDA附加

        libcrackme.so基址为0x4914C000

        aWojiushidaan:0x00004450

        查看0x49150450处的内存



        第三题的解决方案:

        (1)      Indroid(LoCCS实验室开发的工具)貌似要在google手机编译后才能运行成功;

        (2)      Zjdroid修复一下再内存dump

        (3)      过反调试 j_j_ptrace、dump内存、修复dex、修复bakesmali、修复dextojar 或 JEB查看,最后应用源代码分析

        最后给大家推荐一些优秀站点:

        [1] http://bbs.pediy.com/

        [2] http://www.52pojie.cn/

        [3] http://blog.dutsec.cn/

        [4] http://l-team.org/

        [5] http://le4f.net/


你可能感兴趣的:(android)