修复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
就是这么一个随手,造福大家~ 话说我怎么不报错?
惊现鲨鱼叔,这问题我以前也没出现,可能是是打开的进程多了,LOADPE枚举进程时,覆盖了缓冲区,函数ret地址错误 LYQingYe 发表于 2017-8-22 02:17
惊现鲨鱼叔,这问题我以前也没出现,可能是是打开的进程多了,LOADPE枚举进程时,覆盖了缓冲区,函数ret ...
我擦,大家都管我叫叔啊。。我是有多老。。我才13岁。。 Shark恒 发表于 2017-8-22 11:33
我擦,大家都管我叫叔啊。。我是有多老。。我才13岁。。
13岁是什么鬼,是要我回到娘胎么 Oneness神 发表于 2017-8-22 12:49
13岁是什么鬼,是要我回到娘胎么
擦,哈哈哈 Shark恒 发表于 2017-8-22 13:35
擦,哈哈哈
恒大,我只比你小5岁{:5_121:} Oneness神 发表于 2017-8-22 17:53
恒大,我只比你小5岁
厉害了,前途无量啊! 英雄出少年 Shark恒 发表于 2017-8-22 21:49
厉害了,前途无量啊!
恒大我真的才1岁啊呵呵呵呵呵{:5_119:}
页:
[1]
2