• [Android]第一个cm调试分析


    0x00:写在前面

     一直想入门Android安全,当时是极客大挑战出题的时候,被cx表哥甩锅强行去学了点android的开发,之后慢慢接触,感觉还是挺有意思的。cx表哥说先从逆向分析入门吧,之后可以搞加固/漏洞方向。
    这篇文章是在学习蒸米的文章七武器的一个记录。

    0x01:

     这次记录的是2014阿里移动挑战赛里的一个简单的cm的分析,主要是native层的调试和对简单反调试的bypass。
    因为原来自用的三星放家里了,就只能使用模拟器来搞了,坑还是不少。

    • 本来我是想用Genymotion的,但是这个模拟器是x86构架,IDA的调试的server并没有支持的,只能用Android Studio自带的模拟器。
    • 使用模拟器调试so里的代码时有问题(后面会提到)


    对于我这样的新手,我一般会把apk拖进jeb直接分析看看,这个apk的验证是在so中做的验证,所以使用IDA对so做初步的分析。

    0x02:

     找到验证的函数

    根据以前搞pc端的经验,下一步直接起调试器,对这个函数下断点,单步跟就好了。但是这个程序在IDA attach上之后程序就退出了,需要对JNI_Onload()函数进行调试分析。
    根据蒸米的文章,步骤如下
     首先是上传IDA的server到模拟器中,这里我遇到了一个问题

    提示只读,对应的解决方法是

    root@generic:/ # umount /
    root@generic:/ # mount  -o remount rw /
    

    之后再上传运行就可以啦。
    然后,需要端口转发 adb forward tcp:23946 tcp:23946;一般IDA去attach的时候这个函数早就执行过了,所以需要调试JNI_Onload();因为需要用到jdb,所以需要打开ddms。
    之后再使用adb以调试的模式启动程序adb shell am start -D -n com.yaotong.crackme/.MainActivity

    IDA里attach

    设置调试选项后F9

    此时使用jdb工具恢复程序 jdb.exe -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
    然后对含有验证算法的so的JNI_Onload()方法下断点,F9,就断下来了。

    0x03:

     使用IDA调试方便在于,使用P将代码块识别成函数后,可以直接F5。单步执行到

    之后,就跑飞了,应该是有反调试,F7进去看看是什么反调试。

    应该是创建子进程去检测有没有调试器了。 so中的反调试策略应该和linux那些差不多,这个so中的检测方式是,打开/proc/[pid]/status文件,检测tracerpid的值是不是0。
    那么对应的策略有两种,要么调试的时候动态改寄存器,或者改跳;或者一劳永逸,直接patch掉这个so。在分析了这个so反调试所在的函数后,我选择后种方案

    死循环调用来检测调试,还是patch来的方便些。

    • 在调试的时候我遇到这样一个问题,F7/F8都没法执行下去。

    • 问了cx表哥后,表哥说这是模拟器才有的问题...在出问题的代码上下断,然后F9过去就好了。
      这样的确可以解决问题,但是在调试的时候遇到好几次这样的问题,每次遇到了都要全部重新来过,太麻烦了,还是真机调试好QAQ

    0x04:

    patch这个so的时候,蒸米使用的那个IDA的插件我没找到,所以我选择反编译这个apk,然后修改了so文件后,重打包签名弄回去 =。=

    修改0x16B8处的指令就好了,这里采用蒸米的方案,使用movs r0,r0作为NOP指令。
    修改后使用apktools打包回去,再使用签名工具签名就好了。再次安装已经patch好的apk,重复之前调试的步骤,这次对Java_com_yaotong_crackme_MainActivity_securityCheck方法下断点,
    回到模拟器里随便输入点什么,按下输入密码按钮,IDA里就断下来了,就可以愉快的单步调试了。

    双开IDA可以辅助分析,这个地方就是加密的字符串所在的地址

    点进去之后查看

    再查看这个地址

    aiyou,bucuoo
    这应该就是flag了

    0x04:

     第一次调试native层的东西,还是学到了不少,也遇到了这样那样的小问题,不过还是完成了。

    0x05:

    参考
    安卓动态调试七种武器之孔雀翎 – Ida Pro

  • 相关阅读:
    常见的eclipse和真机出现的问题
    volley+okhttp封装,一行代码就可访问网络
    android异步任务处理(网络等耗时操作)
    android手机短信获取
    Android从启动到程序运行整个过程的整理
    android中的广播
    图片旋转问题
    Android Satudio的使用记录
    百度地图初学者
    简单的图片上传和下载
  • 原文地址:https://www.cnblogs.com/0xmuhe/p/5628311.html
Copyright © 2020-2023  润新知