截止9月24日悬赏正式结束了,我不出意外的没有破解成功,到再整个过程中自己收获满满。有破解成功的大神还请指导一二。
历史篇章
1.首篇地址~思路预测
http://www.jianshu.com/p/93b0b4e7e091
2.第一战地址
http://www.jianshu.com/p/96facd4e0dee
最后的进展
- 通过多种方式了解到了VM就是传说中的虚拟机保护技术,还扒到了阿里的VM作者深深膜拜了下 。
- 通过内存dump找到了VM的指令区域,不过代码插画很多,没研究明白。恶补了很多虚拟机保护技术的资料,但却没有和这套赛题的相关内容对应上,至此没了思路,期间找到了很多的switch case但不能确定是不是VM的dispatcher,无法确认vmcontext对应那个。找到了一出vmcore interpreter看名字是核心解释器,但没有找到这个解释器的调用入口。而且解释器代码很长,跳转很多,也没理清头绪。
需要研究克服的几个难点
- 突破反调试进行动态调试
不能突破反调试的话,静态分析效率比较低,且容易受到混淆代码干扰,始终找不到真正的虚拟化代码bytecode的位置,会不会core.bin就是呢?如果能突破他的反调试,也许能理清下思路。但这个代码中函数是用的被动注册,没有jni_onload入口,后来找到了initarray,但按照网上的方法也没有成功断点。这块是下一步的学习重点。 - 学习ida及其他分析工具
单一工具比较受限,而且工具不熟练,很多常用功能不熟悉,这些都回影响到效率和思路,下一步要加强工具的使用,尝试更多的工具,如od。 - 学习ELF文件格式规范
深入研究ELF的格式规范定义,尝试进行文件修复,内存dump出来的指令代码缺少section说明等描述信息,直接拖放到ida中会不识别,需要手动修复或修补,才能更好的进行分析。 - 深入学习虚拟机保护技术
虚拟机保护技术简单来说就是将核心的代码(反汇编后的)进行转换,转换成自定义的字节码(这个过程使用虚拟机编译器进行编译生成),将该字节码插入到文件的适当位置,然后在核心代码原位置插入虚拟机解释器的指令入口地址。运行期有虚拟机的解释器对字节码进行解释执行。需要加深理解,并能和赛题中的进行对应理解。