Android安全-逆向程序员@IT·互联网

蚂蚁金服12万破解悬赏--第二战

2017-09-16  本文已影响1569人  山东大葱哥

上篇我介绍了第一战的情况及收获,这一篇我们继续介绍新收获。

历史篇章

  1. 首篇地址~思路预测
    http://www.jianshu.com/p/93b0b4e7e091

  2. 第一战地址
    http://www.jianshu.com/p/96facd4e0dee

目前进展

通过ida静态分析进去了瓶颈,分析核心验证逻辑应该和createVM有很大关系,这个VM会加载core.bin文件,然后对输入的字符串进行检验,不正确就返回1。
但对于创建vm、以及使用VM的汇编代码分析没有头绪,而且猜测代码做了混淆加密。
贴个图给大家看看结构,这个密密麻麻啊,看着就头大了。


部分代码的流程图

思路调整

静态分析思路遇到困难,开始调整思路进入动态分析阶段,又是一个全新的知识领域,从零开始吧,百度了各种技能,搭建动态调试的环境,目前环境基本Ok了,不过断点有问题,猜测代码做了反调试控制。还在继续摸索中。

涨技能

把这几天用到的技能总结下:

  1. ida用法技巧学习
    进一步学习了ida的技巧,包括看流程图、graph,初步学习动态调试,没能成功,继续学习中。学习了如何在ida中写注释,修改函数名等。

  2. 通过adb shell 启动代理android_server
    ida的动态调试使用的方式是在android端运行ida自带的android_server。在这一步我又碰到了一个坑,发现android_server命令执行后没有反应,端口没有启动起来。按照网上多个方法都试了,一直无效,包括使用了root权限,都启动不起来端口。后来发现ida下还有一个android_server_nonpie,当时就抱着试试看的想法,复制到了手机模拟器中,一运行发现看到了期待已久的端口启动语句。

  3. ddms
    学习使用android jdk中的ddms工具。该工具可以查看手机模拟器的进程,选中需要监控的进程后,会出现绿色小蜘蛛图标,同时后面会出现8700端口号。

  4. jdb
    学习使用java中的jdb命令。连接到8700端口。

jdb.exe -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 

该工具和ddms搭配使用,主要目的是做本地端口转发。

  1. 初步认识反调试
    在学习中了解到有的程序做了反调试,程序会监控是否被动态调试,如果发现动态调试会闪退或者改变程序流程,以干扰动态调试。

  2. 学习查看进程内存并dump指定位置内容

# dd if=/proc/9058/mem of=/sdcard/aliscm1 skip=335544320 ibs=1 count=32768
 cp /system/lib/libc.so /sdcard
  1. 初步认识混淆
    在静态分析时看到了Alipay Obfuscator (based on LLVM 4.0.1),看名字应该是阿里基于llvm做的混淆工具,代码应该是做了混淆的,那张巨大的图估计是混淆后的。

  2. 得到了一些VM的信息

virtual_machine_application VM=1 VM_VERSION=0.1 VM_BUILD=Aug 15 2017 17:43:17 VM_LOGNAME=zhangjiantao         

革命尚未成功,尚需继续努力。

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入我的圈子多多交流,共同进步,具体看我的个人介绍,我们一起学技术!

上一篇 下一篇

猜你喜欢

热点阅读