LYQingYe 发表于 2017-8-22 00:45

修复LoadPe缓冲区溢出问题

打开LoadPe的时候发现闪退了


//随手用VS附加下,查看调用堆栈 , 发现返回地址异常,说明堆栈溢出了,找到上层调用函数 0x4058af ,OD下断


//断下后进入 函数0x4058af



//发现执行执行完 GetNunberOfProcesses 程序 EIP就会错误 , 进入函数GetNunberOfProcesses



//程序会执行EnumProcesses EAX指向返回的进程PID数组, ECX指向返回的实际所用内存大小 ,在我的电脑上 =0x2BC





//清楚的看到 执行完 函数 ,返回时,发现 返回地址 已经被PID数组覆盖 ,解决方法 , 修改堆栈大小,在函数分配堆栈和回收堆栈 时 修改 堆栈大小即可, 我系统开的进程比较多 ,这里 我给3000恒大小的堆栈,修改完 复制到可执行文件 ,替换原先的 pROCS.DLL即可


20001200 >/$A1 FC240020   mov eax,dword ptr ds:
20001205      81EC 00300000 sub esp,0x3000
2000120B|.85C0          test eax,eax
2000120D|.56            push esi
2000120E|.75 7D         jnz XPROCS.2000128D
20001210|.6A 00         push 0x0
20001212|.6A 02         push 0x2
20001214|.FF15 E8240020 call dword ptr ds:
2000121A|.8BF0          mov esi,eax
2000121C|.83FE FF       cmp esi,-0x1
2000121F|.75 0A         jnz XPROCS.2000122B
20001221|.33C0          xor eax,eax
20001223|.5E            pop esi
20001224      81C4 00300000 add esp,0x3000
2000122A|.C3            retn
2000122B|>8D4424 08   lea eax,dword ptr ss:
2000122F|.C74424 08 280>mov dword ptr ss:,0x128
20001237|.50            push eax
20001238|.56            push esi
20001239|.FF15 DC240020 call dword ptr ds:
2000123F|.85C0          test eax,eax
20001241|.75 11         jnz XPROCS.20001254
20001243|.56            push esi                                       ; /hObject
20001244|.FF15 08100020 call dword ptr ds:[<&KERNEL32.CloseHandle>]    ; \CloseHandle
2000124A|.33C0          xor eax,eax
2000124C|.5E            pop esi
2000124D      81C4 00300000 add esp,0x3000
20001253|.C3            retn
20001254|>8D4C24 08   lea ecx,dword ptr ss:
20001258|.57            push edi
20001259|.51            push ecx
2000125A|.56            push esi
2000125B|.BF 01000000   mov edi,0x1
20001260|.FF15 E4240020 call dword ptr ds:
20001266|.85C0          test eax,eax
20001268|.74 11         je XPROCS.2000127B
2000126A|>8D5424 0C   /lea edx,dword ptr ss:
2000126E|.47            |inc edi
2000126F|.52            |push edx
20001270|.56            |push esi
20001271|.FF15 E4240020 |call dword ptr ds:
20001277|.85C0          |test eax,eax
20001279|.^ 75 EF         \jnz XPROCS.2000126A
2000127B|>56            push esi                                       ; /hObject
2000127C|.FF15 08100020 call dword ptr ds:[<&KERNEL32.CloseHandle>]    ; \CloseHandle
20001282|.8BC7          mov eax,edi
20001284|.5F            pop edi
20001285|.5E            pop esi
20001286      81C4 00300000 add esp,0x3000
2000128C|.C3            retn
2000128D|>8D4424 04   lea eax,dword ptr ss:
20001291|.8D8C24 300100>lea ecx,dword ptr ss:
20001298|.50            push eax
20001299|.68 00040000   push 0x400
2000129E|.51            push ecx
2000129F|.FF15 EC240020 call dword ptr ds:               ;psapi.EnumProcesses
200012A5|.85C0          test eax,eax
200012A7|.75 08         jnz XPROCS.200012B1
200012A9|.5E            pop esi
200012AA      81C4 00300000 add esp,0x3000
200012B0|.C3            retn
200012B1|>8B4424 04   mov eax,dword ptr ss:
200012B5|.5E            pop esi
200012B6|.C1E8 02       shr eax,0x2
200012B9      81C4 00300000 add esp,0x3000
200012BF\.C3            retn




//附一份 DLL


Shark恒 发表于 2017-8-22 00:54

就是这么一个随手,造福大家~ 话说我怎么不报错?

LYQingYe 发表于 2017-8-22 02:17

Shark恒 发表于 2017-8-22 00:54
就是这么一个随手,造福大家~ 话说我怎么不报错?

惊现鲨鱼叔,这问题我以前也没出现,可能是是打开的进程多了,LOADPE枚举进程时,覆盖了缓冲区,函数ret地址错误

Shark恒 发表于 2017-8-22 11:33

LYQingYe 发表于 2017-8-22 02:17
惊现鲨鱼叔,这问题我以前也没出现,可能是是打开的进程多了,LOADPE枚举进程时,覆盖了缓冲区,函数ret ...

我擦,大家都管我叫叔啊。。我是有多老。。我才13岁。。

Oneness神 发表于 2017-8-22 12:49

Shark恒 发表于 2017-8-22 11:33
我擦,大家都管我叫叔啊。。我是有多老。。我才13岁。。

13岁是什么鬼,是要我回到娘胎么

Shark恒 发表于 2017-8-22 13:35

Oneness神 发表于 2017-8-22 12:49
13岁是什么鬼,是要我回到娘胎么

擦,哈哈哈

Oneness神 发表于 2017-8-22 17:53

Shark恒 发表于 2017-8-22 13:35
擦,哈哈哈

恒大,我只比你小5岁{:5_121:}

Shark恒 发表于 2017-8-22 21:49

Oneness神 发表于 2017-8-22 17:53
恒大,我只比你小5岁

厉害了,前途无量啊!

商都赵永强 发表于 2017-9-8 10:30

英雄出少年

jiaozihang5+98 发表于 2017-9-11 19:14

Shark恒 发表于 2017-8-22 21:49
厉害了,前途无量啊!

恒大我真的才1岁啊呵呵呵呵呵{:5_119:}
页: [1] 2
查看完整版本: 修复LoadPe缓冲区溢出问题