首页
社区
课程
招聘
[原创][原创]LordPE Bug修复
发表于: 2017-7-7 16:31 11635

[原创][原创]LordPE Bug修复

2017-7-7 16:31
11635

       当你电脑上开启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期)

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/07/12
最新回复 (7)
雪    币: 230
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以的,我用windbg调试源码都没你玩的这么6.可以留个联系方式交流下debug技巧吗
2017-7-7 20:18
0
雪    币: 278
活跃值: (609)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
LordPE在win10系统就会崩溃,照LZ的方法修改后果然好了!膜拜大神!
2017-7-7 20:42
0
雪    币: 465
活跃值: (667)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
有图,有真相,顶一下。
2017-7-7 22:45
0
雪    币: 47147
活跃值: (20415)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
上个月,Diken也碰到了这个问题,他将修复好的DLL和源码发我了,见附件。

上传的附件:
2017-7-11 18:42
0
雪    币: 335
活跃值: (240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6

“如果返回地址是004058af,  那说明004058ad调用SendMessageA还没有返回” 
无法理解这句话。
004058af  ;sendmessage返回地址
00120b42  ;参数4
00001003  ;参数3
00000001  ;参数2
004058af  ;参数1被sendmessage之后的call的返回地址覆盖 
也就是说,sendmessage调用成功且下一个call sub_405410的返回地址已经入栈。
感觉LZ逻辑链的第一环就是错的...

2017-7-11 19:46
0
雪    币: 474
活跃值: (846)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
战舰少女R “如果返回地址是004058af,  那说明004058ad调用SendMessageA还没有返回”  无法理解这句话。004058af &a ...
嗯,我当时也不敢肯定返回地址是004058af,SendMessage的调用栈被擦除了,第四个参数找不到。
也没有仔细去看00405F10的函数,只是简单的认为进入一个函数ebp肯定会先保存,在4058b4上下也没有看到类似ebp的数据,
又看了下这个函数,进入00405F10里面首先是开辟栈空间了,保留了上一个函数的调用环境;这样也就解释的通,当调用SendMessage后
不崩溃的问题了;
2017-7-13 14:28
0
雪    币: 57
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
直接替换kanxue发的那个dll也可以解决这个问题吗?还是必须修改主程序呢?出来个大侠确认一下。
2017-7-14 23:36
0
游客
登录 | 注册 方可回帖
返回
//