当你电脑上开启200多个进程的时候,再打开LordPE将会缓冲区溢出,导致程序崩溃!
工作过程中经常使用LordPE 查看PE的信息,突然最近老是莫名其妙的崩溃,时崩时不崩的很难受,总是在关键的时候掉链子,决定分析一下;
1. 首先设置windbg捕获异常, 切到windbg目录执行 windbg.exe -I;
2. 运行LordPE.exe 异常成功捕获到;
eip飞了,堆栈乱了, 无从下手呀!
好在还有ESP数据,看一下堆栈里面的调用
红框中的数据看着像同一类型的数据,难道是他们覆盖了堆栈?继续往下看
0018fb3c处涉及主模块了,看着像返回地址,IDA 中定位一下
从线程栈中可以看到,如果返回地址是004058af, 那说明004058ad调用SendMessageA还没有返回,返回地址就被覆盖了,下断点 跟一下
可以看到确实要调用User32!SendMessageA,系统函数应该不会崩溃呀,先验证一下
0:000> p
eax=00000000 ebx=74ce71fe ecx=00680a70 edx=00000030 esi=02c20512 edi=716c908c
eip=004058af esp=0018fb50 ebp=0018fbcc iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
image00400000+0x58af:
004058af e85c060000 call image00400000+0x5f10 (00405f10)
0:000> dps esp
0018fb50 00000001
0018fb54 02c20512
0018fb58 00000001
0018fb5c 00000001
0018fb60 0000002c
0018fb64 00000004
0018fb68 00000000
0018fb6c 00000000
0018fb70 00000000
0018fb74 2c8319d5
0018fb78 00000000
0018fb7c 00000000
0018fb80 00000000
0018fb84 00000000
0018fb88 00000000
0018fb8c 00000017
0018fb90 04221050*** WARNING: Unable to verify checksum for F:\software\LPE-DLX\LDE\IntelliDump.LDE
*** ERROR: Symbol file could not be found. Defaulted to export symbols for F:\software\LPE-DLX\LDE\IntelliDump.LDE -
IntelliDump+0x1050
0018fb94 00000006
0018fb98 00000000
0018fb9c 0000004c
0018fba0 0041be58 image00400000+0x1be58
0018fba4 00000000
0018fba8 00000000
0018fbac 00000000
0018fbb0 00000000
0018fbb4 0018fb50
0018fbb8 0018fbf0
0018fbbc 0018fc00
0018fbc0 004181f0 image00400000+0x181f0
0018fbc4 00419398 image00400000+0x19398
0018fbc8 ffffffff
0018fbcc 0018fc10
单步执行SendMessageA没有问题,堆栈也正常,再单步执行一下, 调用40fa10函数复现了异常,那问题确认了,就是这个函数内部有问题,内部看一下
在红框处下断点再跟一下,定位问题具体出现在哪里了;
0:000> bp 405f70
0:000> bp 405fa1
0:000> g
ModLoad: 74c60000 74cc0000 C:\Windows\SysWOW64\IMM32.DLL
ModLoad: 766c0000 7678d000 C:\Windows\syswow64\MSCTF.dll
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)