上篇我介绍了第一战的情况及收获,这一篇我们继续介绍新收获。
历史篇章
目前进展
通过ida静态分析进去了瓶颈,分析核心验证逻辑应该和createVM有很大关系,这个VM会加载core.bin文件,然后对输入的字符串进行检验,不正确就返回1。
但对于创建vm、以及使用VM的汇编代码分析没有头绪,而且猜测代码做了混淆加密。
贴个图给大家看看结构,这个密密麻麻啊,看着就头大了。
思路调整
静态分析思路遇到困难,开始调整思路进入动态分析阶段,又是一个全新的知识领域,从零开始吧,百度了各种技能,搭建动态调试的环境,目前环境基本Ok了,不过断点有问题,猜测代码做了反调试控制。还在继续摸索中。
涨技能
把这几天用到的技能总结下:
ida用法技巧学习
进一步学习了ida的技巧,包括看流程图、graph,初步学习动态调试,没能成功,继续学习中。学习了如何在ida中写注释,修改函数名等。通过adb shell 启动代理android_server
ida的动态调试使用的方式是在android端运行ida自带的android_server。在这一步我又碰到了一个坑,发现android_server命令执行后没有反应,端口没有启动起来。按照网上多个方法都试了,一直无效,包括使用了root权限,都启动不起来端口。后来发现ida下还有一个android_server_nonpie,当时就抱着试试看的想法,复制到了手机模拟器中,一运行发现看到了期待已久的端口启动语句。ddms
学习使用android jdk中的ddms工具。该工具可以查看手机模拟器的进程,选中需要监控的进程后,会出现绿色小蜘蛛图标,同时后面会出现8700端口号。jdb
学习使用java中的jdb命令。连接到8700端口。
jdb.exe -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
该工具和ddms搭配使用,主要目的是做本地端口转发。
初步认识反调试
在学习中了解到有的程序做了反调试,程序会监控是否被动态调试,如果发现动态调试会闪退或者改变程序流程,以干扰动态调试。学习查看进程内存并dump指定位置内容
# dd if=/proc/9058/mem of=/sdcard/aliscm1 skip=335544320 ibs=1 count=32768
cp /system/lib/libc.so /sdcard
初步认识混淆
在静态分析时看到了Alipay Obfuscator (based on LLVM 4.0.1),看名字应该是阿里基于llvm做的混淆工具,代码应该是做了混淆的,那张巨大的图估计是混淆后的。得到了一些VM的信息
virtual_machine_application VM=1 VM_VERSION=0.1 VM_BUILD=Aug 15 2017 17:43:17 VM_LOGNAME=zhangjiantao
革命尚未成功,尚需继续努力。
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入我的圈子多多交流,共同进步,具体看我的个人介绍,我们一起学技术!