首页
社区
课程
招聘
[原创]《2015移动安全挑战赛》答题思路
发表于: 2015-1-26 18:46 3474

[原创]《2015移动安全挑战赛》答题思路

2015-1-26 18:46
3474
环境+工具:
1. nexus5 4.4.2 已root
2. win7 64位
3. android sdk+ndk
4. ida6.5+ida6.6
5. UE
6. eclipse
7. AXMLPrinter2.jar
8. jdb

1. 
答案:581026
解题思路:

  1. 安装apk,操作一会,没有异常
  2. 解压apk,普通apk,没有so库
  3. 分析AndroidManifest.xml:用AXMLPrinter2.jar逆向出AndroidManifest.org.xml,可知包名com.example.simpleencryption
      入口Activity是MainActivity,没有异常
  4. 分析classes.dex:用ida打开classes.dex文件,找到MainActivity相关的方法,发现有onClick,没有加密,简单的控制流。
      看到有Log.i函数,TAG是"lil",用adb logcat -s lil查看日志:
     很明显,table就是字典,解压密码是"义弓么丸广之",输入密码是"丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰丰",
     经过多次输入查看日志,可得到"义弓么丸广之"=581026
总结:分析apk入门级题目,考察android的基本知识:包括apk包了解,Activity的了解,dex的了解。

2. 答案:aiyou,bucuoo
解题思路:

  1. 前略,需要动态调试
  2. 启动apk后,直接用ida attach进程,进程会强制退出,估计有反调试。
  3. 在启动apk过程中,加载so时后,调用JNI_OnLoad前(启动反调试模块前)下断点:
          1. 调试模式启动apk,启动后apk会等到调试器连接:adb shell am start -D com.yaotong.crackme/.MainActivity
          2. 查看apk调试的端口1:adb jdwp
          3. 映射端口:adb forward tcp:端口2 jdwp:端口1
          4. attach进程:ida attach到apk,在linker中加载so库处下断点(在nexus5中,linker的偏移0xf30)
          5. 启动apk:jdb -connect com.sun.jdi.SocketAttach:port=端口2,hostname=localhost
          6. 启动后,会断在linker加载libcrachme.so库处,加载完so,在libcrachme.so内存空间中找到JNI_OnLoad下断点
  4. 调试JNI_OnLoad过程中,发现调用pthread_create创建thread1,创建thread1的入口函数就是反调试模块的代码,
      针对这种反调试的代码,最简单的作法就是不调用pthread_create,不创建监控进程(ida动态调用时用Set IP的方法)。
      跑起来后,apk不会强制退出了。(pthread_create的偏移为0x1C58)
  5. 在Java_com_yaotong_crackme_MainActivity_securityCheck下断点,界面上随便输入EEEEEEEEEEEE,点击输入密码就能断下来了,
     Java_com_yaotong_crackme_MainActivity_securityCheck函数的逻辑也很简单,输出一个"SecurityCheck Started..." logcat,
     然后就通过循环来比较字符串了。
总结:动态调试apk入门组题目,考察Android中Jni调用流程,基本的动态调试能力,反调试也算是一个考点吧,虽然比较简单。
          so库中用到的标准库函数都是动态调用的,字符串也是加密过的。
附:linker文件,反调试代码demo main.c

3. 答案:
解题思路:

  1. 前略,lib目录下有3个so,
               1. libmobisecy.so是真正的dex(classes.dex只是个sub)
               2. libmobisecz.so是估计是解密字典,也有可能是加密过的核心代码
               3. libmobisec.so是Jni中加载的so
  2. logcat中可以得到2个信息:
               1. x               in JNI_Onload     就是在JNI_Onload
               2. debug        in...                   提示,可能是关键位置
  3. 跟第一样的启动调试,从JNI_OnLoad函数开始分析
  4. 可以尝试直接在liblog.so中的__android_log_printf断点,但是在logcat2之前会遇到反调试的代码
  5. JNI_OnLoad中会进入libmobisec.so+0x23358偏移的函数,函数会启动一个反调试进程,框架跟第2题差不多,
      但是其中插入了ptrace(0,0,0)代码
  6. ..
总结:动态调试apk,可能是第2题反调试框架上增加难度,包括增加控制流代码,加入ptrace(0,0,0)等等,有待继续研究。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//