程序开了ASLR 先CFF Explorer关了 Dll can move.搜索字符串flag定位判断位置往上回溯发现程序会创建子进程,并且父进程会调试子进程分析上图可知,当子进程遇到异常时,父进程会往子进程内存空间写入0x20个字节,而这0x20个字节就是最后判断flag需要比较的数组,动态调试,获取这0x20个字节修改程序流程使其不要创建子线程,而是直接跳到关键函数对于会触发异常的地方进行nop,因为我们已经不需要父进程的调试了,不nop程序无法运行断在0x140024876,发现字符串被逆序了:F8后发现输入字符被替换了动态调试知替换表单为:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/EZaBH9mJcDoMUqkF/+L6ROviAY2Gz7Wnt3x8PQVsIXj4SC0debpyKNgruhlf5Tw1接着执行,发现sub_140011dac是个循环异或操作的函数,key为“PQVsIXj4SC0debpyKNgruhlf5ToMUqkF”最后进行对比,正确即可得flag写出脚本解出flag:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课