首页
论坛
课程
招聘
LordPE只显示60个进程 fix
2006-11-12 19:12 18105

LordPE只显示60个进程 fix

2006-11-12 19:12
18105
LordPE只能显示60个进程

LoarPE是用psapi的EnumProcesses来枚举进程的
跟了一下发现是封装在procs.dll里的GetNumBerOfProcesses函数出了问题
代码如下:
20001200 >  A1 FC240020     mov     eax, dword ptr [200024FC]
20001205    81EC 1C020000   sub     esp, 21C        //在这里 $21c-$F0=$12c
        //增加一下内存 改为支持256个的就是256*4=1024+300=1324即$52C 就是 sub esp, 52C
2000120B    85C0            test    eax, eax
2000120D    56              push    esi
2000120E    75 7D           jnz     short 2000128D
20001210    6A 00           push    0
20001212    6A 02           push    2
20001214    FF15 E8240020   call    dword ptr [200024E8]
2000121A    8BF0            mov     esi, eax
2000121C    83FE FF         cmp     esi, -1
2000121F    75 0A           jnz     short 2000122B
20001221    33C0            xor     eax, eax
20001223    5E              pop     esi
20001224    81C4 1C020000   add     esp, 21C        //这里也要改为 add esp, 52C       
2000122A    C3              retn
2000122B    8D4424 08       lea     eax, dword ptr [esp+8]
2000122F    C74424 08 28010>mov     dword ptr [esp+8], 128
20001237    50              push    eax
20001238    56              push    esi
20001239    FF15 DC240020   call    dword ptr [200024DC]
2000123F    85C0            test    eax, eax
20001241    75 11           jnz     short 20001254
20001243    56              push    esi
20001244    FF15 08100020   call    dword ptr [<&KERNEL32.CloseHandle>]        ; kernel32.CloseHandle
2000124A    33C0            xor     eax, eax
2000124C    5E              pop     esi
2000124D    81C4 1C020000   add     esp, 21C        //这里也要改为 add esp, 52C
20001253    C3              retn
20001254    8D4C24 08       lea     ecx, dword ptr [esp+8]
20001258    57              push    edi
20001259    51              push    ecx
2000125A    56              push    esi
2000125B    BF 01000000     mov     edi, 1
20001260    FF15 E4240020   call    dword ptr [200024E4]
20001266    85C0            test    eax, eax
20001268    74 11           je      short 2000127B
2000126A    8D5424 0C       lea     edx, dword ptr [esp+C]
2000126E    47              inc     edi
2000126F    52              push    edx
20001270    56              push    esi
20001271    FF15 E4240020   call    dword ptr [200024E4]
20001277    85C0            test    eax, eax
20001279  ^ 75 EF           jnz     short 2000126A
2000127B    56              push    esi
2000127C    FF15 08100020   call    dword ptr [<&KERNEL32.CloseHandle>]        ; kernel32.CloseHandle
20001282    8BC7            mov     eax, edi
20001284    5F              pop     edi
20001285    5E              pop     esi
20001286    81C4 1C020000   add     esp, 21C        //这里也要改为 add esp, 52C
2000128C    C3              retn
主要问题出在这里,明显是申请的数组太小了见下面的Delphi代码
2000128D    8D4424 04       lea     eax, dword ptr [esp+4]
20001291    8D8C24 30010000 lea     ecx, dword ptr [esp+130]
20001298    50              push    eax                //返回的实际大小
20001299    68 F0000000     push    0F0                //数组大小 这里硬性指定了为 240/4=60就是就最大是60了 改为 push 0400 就是256*4=1024了
2000129E    51              push    ecx                //指针指向存放进程ID的数组
2000129F    FF15 EC240020   call    dword ptr [200024EC]                       ; psapi.EnumProcesses

200012A5    85C0            test    eax, eax
200012A7    75 08           jnz     short 200012B1
200012A9    5E              pop     esi
200012AA    81C4 1C020000   add     esp, 21C        //这里也要改为 add esp, 52C
200012B0    C3              retn
200012B1    8B4424 04       mov     eax, dword ptr [esp+4]
200012B5    5E              pop     esi
200012B6    C1E8 02         shr     eax, 2
200012B9    81C4 1C020000   add     esp, 21C        //这里也要改为 add esp, 52C
200012BF    C3              retn

对应的Delphi代码应是
var
    lProcess : array [0..239] of DWord;
    dwSize : DWord;
begin       
    if not EnumProcesses(@lProcess, SizeOf(lProcess), dwSize) then Exit;
end;

经过上面的修改后有足够存放256个进程的内存空间了
测试一下 :( 程序出错了应还有地方存在这样的问题

在上面的函数返回
来到了exe中的这里
004060B6  |.  8BF8          mov     edi, eax
004060B8  |.  85FF          test    edi, edi
004060BA  |.  897C24 10     mov     dword ptr [esp+10], edi
004060BE  |.  0F84 98020000 je      0040635C
004060C4  |.  68 F0000000   push    0F0                                        ;  这里也硬性指定为60了 改为push 400   \ z  jnkl,9,7km km 6 v
004060C9  |.  68 40EB4100   push    0041EB40                                   ;  这个地址是存入进程数据的
004060CE  |.  E8 27270100   call    <jmp.&procs.GetProcessIDList>
004060D3  |.  85C0          test    eax, eax
004060D5  |.  0F84 81020000 je      0040635C
004060DB  |.  55            push    ebp
004060DC  |.  8B2D C4924100 mov     ebp, dword ptr [<&USER32.wsprintfA>]       ;  USER32.wsprintfA
004060E2  |.  85FF          test    edi, edi
004060E4  |.  0F86 D2010000 jbe     004062BC
004060EA      BF 40EB4100   mov     edi, 0041EB40

F8跟了一会原来41EB40这地址空间不足,超过60个进程后覆盖了后面的部分代码
只好另外找地方了 :(
在程序尾部 4189A2的地方有n多的00 计算一下足够存放256个进程的数据,就用那里吧...

再来搜索一下全部的常量41EB40发现还有n处用到了
参考位于 LordPE:.text 到常量 41EB40
地址       反汇编                                    注释
00404A01   mov     edx, dword ptr [esi*4+41EB40]
00404D06   mov     ecx, dword ptr [eax*4+41EB40]
00404DC4   mov     eax, dword ptr [eax*4+41EB40]
00404EC2   mov     edx, dword ptr [eax*4+41EB40]
00404F72   mov     eax, dword ptr [eax*4+41EB40]
00404F9E   mov     eax, dword ptr [eax*4+41EB40]
00405014   mov     edx, dword ptr [eax*4+41EB40]
0040592B   mov     edx, dword ptr [41EB40]           ds:[0041EB40]=00000000
00405ADE   mov     edi, dword ptr [eax*4+41EB40]
004060C9   push    0041EB40                          原来是41eb40 改 4189a2
004060EA   mov     edi, 0041EB40                     0041EB40=0041EB40
004062C5   mov     eax, dword ptr [ebx*4+41EB40]

这些地方的41EB40都要改为4189A2

这个函数是dump进程时用到的
00406690      81EC 2C050000 sub     esp, 52C                         ;  这里原来也是f0
00406696  |.  8D4424 00     lea     eax, dword ptr [esp]
0040669A  |.  56            push    esi
0040669B      68 00040000   push    400                              ;  这里原来也是f0
004066A0  |.  50            push    eax
004066A1  |.  E8 54210100   call    <jmp.&procs.GetProcessIDList>
004066A6  |.  85C0          test    eax, eax
004066A8  |.  74 26         je      short 004066D0
004066AA  |.  E8 45210100   call    <jmp.&procs.GetNumberOfProcesses>
004066AF  |.  85C0          test    eax, eax
004066B1  |.  74 1D         je      short 004066D0
004066B3  |.  33C9          xor     ecx, ecx
004066B5  |.  85C0          test    eax, eax
004066B7  |.  76 17         jbe     short 004066D0
004066B9      8BB424 F80000>mov     esi, dword ptr [esp+F8]          ;  取传进来的PID 改为 [esp + 534]
004066C0  |.  8D5424 04     lea     edx, dword ptr [esp+4]
004066C4  |>  3932          /cmp     dword ptr [edx], esi
004066C6  |.  74 12         |je      short 004066DA
004066C8  |.  41            |inc     ecx
004066C9  |.  83C2 04       |add     edx, 4
004066CC  |.  3BC8          |cmp     ecx, eax
004066CE  |.^ 72 F4         \jb      short 004066C4
004066D0  |>  33C0          xor     eax, eax
004066D2  |.  5E            pop     esi
004066D3      81C4 2C050000 add     esp, 52C
004066D9  |.  C3            retn
004066DA  |>  B8 01000000   mov     eax, 1
004066DF  |.  5E            pop     esi
004066E0      81C4 2C050000 add     esp, 52C
004066E6  \.  C3            retn

最后还要把LordPE.exe的区段.text改为可写

procs.dll 中这些地方还要修改
GetProcessBaseSize中的
200017DF    8D8D 88FAFFFF   lea     ecx, dword ptr [ebp-578]
200017E5    51              push    ecx
200017E6    68 00040000     push    400                              ; 这里也改push f0为push 400
200017EB    8D95 94FAFFFF   lea     edx, dword ptr [ebp-56C]
200017F1    52              push    edx
200017F2    FF15 EC240020   call    dword ptr [200024EC]             ; psapi.EnumProcesses
200017F8    85C0            test    eax, eax

GetProcessPathID中的
20001F54    8D5424 14       lea     edx, dword ptr [esp+14]
20001F58    8D8424 4C020000 lea     eax, dword ptr [esp+24C]
20001F5F    52              push    edx
20001F60    68 F0000000     push    0F0                              ; push f0改push 400
20001F65    50              push    eax
20001F66    FF15 EC240020   call    dword ptr [200024EC]             ; psapi.EnumProcesses
20001F6C    85C0            test    eax, eax

基本上就行了的

新上传一个版本 写了一个LordPe_Fix.dll 的来进行fix


第五届安全开发者峰会(SDC 2021)10月23日上海召开!限时2.5折门票(含自助午餐1份)

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (20)
雪    币: 231
活跃值: 活跃值 (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 活跃值 2006-11-12 19:43
2
0
沙发
雪    币: 425
活跃值: 活跃值 (6746)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2006-11-12 19:52
3
0
收下,改天更新。;)
freecat 你的 Fix OD 更新了吗?
雪    币: 219
活跃值: 活跃值 (20)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
冷血书生 活跃值 28 2006-11-12 20:09
4
0
最初由 kanxue 发布
收下,改天更新。;)
freecat 你的 Fix OD 更新了吗?


更新就顺手牵羊一份啦!!
雪    币: 210
活跃值: 活跃值 (298)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 活跃值 1 2006-11-12 20:45
5
0
  没有
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 活跃值 28 2006-11-12 21:52
6
0
这样都行。niu

不过60进程还不够吗?
雪    币: 210
活跃值: 活跃值 (298)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 活跃值 1 2006-11-12 23:04
7
0
刚发现 dmup 进程时还有bug 一起修正了一下
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fslove 活跃值 2006-11-12 23:07
8
0
支持FC...
收下了.潜水王
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mgyxj 活跃值 2006-11-12 23:09
9
0
支持FC,不过60个,够用了^_^
雪    币: 209
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
WiNrOOt 活跃值 5 2006-11-12 23:56
10
0
最初由 mgyxj 发布
支持FC,不过60个,够用了^_^

随便一跑就70多个进程
雪    币: 190
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
playar 活跃值 2006-11-13 00:40
11
0
procs.dll还是有点问题
没法dump超过60的进程

还得要修改一下Procs!GetProcessBaseSize函数里面的数据才行
雪    币: 190
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
playar 活跃值 2006-11-13 00:51
12
0
最初由 WiNrOOt 发布
随便一跑就70多个进程


9494

for /L %n in ( 1, 1, 400) do start cmd
随随便便就启动了400个cmd
雪    币: 210
活跃值: 活跃值 (298)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 活跃值 1 2006-11-13 13:34
13
0
payar说得不错 看来还有不少地方有bug
GetProcessPathID中的的也要改...
更新一下
雪    币: 425
活跃值: 活跃值 (6746)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2006-11-14 09:43
14
0
最初由 freecat 发布
(上传时间2006-11-14,01:20,84 KB,0 次点击)
........


freecat 半夜更新了一次,辛苦了!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gudiemao 活跃值 2006-12-1 12:29
15
0
我第1次来,就看见  "看雪大侠" 的发帖了, 还有 reecat 等高手,真是高兴呀!!哈哈....
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
学习下 活跃值 2007-1-26 15:38
16
0
收下了.潜水
雪    币: 205
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wxbww 活跃值 2007-1-28 11:51
17
0
有好东西我就顺手牵羊了,谢谢啦!
雪    币: 340
活跃值: 活跃值 (317)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2007-1-28 15:09
18
0
下面的滚动提示太晃眼了。影响视力。
雪    币: 6540
活跃值: 活跃值 (509)
能力值: ( LV7,RANK:112 )
在线值:
发帖
回帖
粉丝
SnowFox 活跃值 2007-4-19 22:27
19
0
有没有英文的修改版 并且下面的不滚动的, 滚动的确实太伤眼了
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_liaoerfei 活跃值 2020-3-27 10:25
20
0
收下看看
雪    币: 28
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
夺命黑裤衩 活跃值 2021-4-8 16:06
21
0
感谢,找找不到进程,我还怀疑是我从52下载的是假的,百度一查,很多人也都找不到进程。
感谢大佬,谢谢了!了很久
游客
登录 | 注册 方可回帖
返回