发现之前从网上下载LordPE在Win10下打开闪退,尝试修复。
载入OD发现EIP被改写成非法地址,堆栈此时已经溢出。由于此时堆栈已经覆盖过多,所以能找到的回溯点离异常点很远。所以利用脚本跑一下,找一下异常点在哪。
在脚本执行结束后进行堆栈回溯,发现异常点就在这个EnumProcess,通过简单的翻阅代码可以发现在调用EnumProcess时给第二参数填入了0x400缓冲区的大小,但这个函数在头部仅申请了0x31C的空间。本来这时以为简单的提升堆栈大小就可以,但在保存修改后仍然闪退。再次载入OD发现EnumProcess调用时传入的大小依旧为0x400,这里猜测时有代码对此进行了修改。下硬段重新运行。
断下来后可以发现正是LordPE_Fix.dll对EnumProcess的参数进行了修改,将LordPE_Fix.dll载入IDA查看逻辑。
可以看到第一张图add eax,0x21C的值就是之前提升堆栈的大小0x31C(上图一),但由于dword_4057AC这个值乘2之后又是EnumProcess的第二参数的大小(上图二)。所以修改时单纯的提高dword_4057AC这个值也会导致EnumProcess的第二个参数的大小变大,同样会造成溢出。所以修改图一中的add eax,0x21C为add eax,0x31C使eax大于0x400即可。
同时也要对发生溢出的PROCS.dll进行处理,将
lea ecx,[esp+130h]修改为
lea ecx,[esp+8h]即可,保存修改,可以发现完美运行。