无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 41920|回复: 91
打印 上一主题 下一主题

[原创]任务管理器taskmgr增强版。用汇编增加了清理内存功能。修正跨平台兼容性

[复制链接]
跳转到指定楼层
1#
发表于 2006-12-6 21:59:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发大家想要的东西,任务管理器taskmgr增强版。加了NSPACK的壳,想修改资源的自己脱壳修复。令附上修改原理。
进程上按回车清理内存。


作者:oHuangKeo
日期:2005-10-10
  现在有很多的内存清理工具,有的还要收费。其实原理很简单,只要获得了该进程的hProcess后,就可以调用SetProcessWorkingSetSize来设置内存使用,这里的参数设置为0xFFFFFF,就把该程序的内存使用设为0,由于该程序还在运行中,所以内存使用量并不是0,会是实际使用大小。
  好了,不多说了,动手做吧,不然要被人扔鸡蛋砸我了。

1。查找程序处理键盘按键位置。
  用资源编辑工具打开taskmgr.exe(我用的是freeRess),找到快捷键定义,分析一下。第一个就是Del键。Del的值是1050,这是十进制,换成十六进制为0x41A。用OD打开taskmgr.exe,搜索所有Switchs,找0x41A应该在哪里处理。找哇找,找到了,0100CECB处为Switch(case 3F0..41A),好去那里看看。为了测试这是不是就是DEL键,可以在这里下断,然后运行taskmgr.exe,在进程里随便选一个进程,然后按DEL键,OD会断下的,ecx里就是0x41A.证明我们找对地方了。那么我们定义个什么键来做为快捷键清理内存呢?我是用的Enter键(0x418),你也可以设置别的键,要想知道快捷键的值是多少,用刚才的方法,看看ecx里的值是多少就可以了。

2。找个空地写我们的代码。
  我选择的是从1014F00开始的地址。代码如下:
CODE01014F00   > \60            pushad                                  ;  进栈保护寄存器的值
01014F01   .  E8 3A000000   call    taskmgr.01014F40                ;  这里用Call是方便后面好写代码
01014F06   .  61            popad                                   ;  出栈,恢复寄存器
01014F07   .  81E9 F0030000 sub     ecx, 3F0                        ;  原程序中被覆盖的代码
01014F0D   .^ E9 BF7FFFFF   jmp     taskmgr.0100CED1                ;  跳回去
01014F12   .  53 65 74 50 7>ascii   "SetProcessWorkin"              ;  这里开始到1014F2A是字符串SetProcessWorkingSetSize
01014F22   .  67 53 65 74 5>ascii   "gSetSize",0                    ;  因为程序中没有这个函数,所以要用GetProcAddress来得到函数地址
01014F2B   .  6B 65 72 6E 6>ascii   "kernel32.dll",0
01014F38      00            db      00
01014F39      00            db      00
01014F3A      00            db      00
01014F3B      00            db      00
01014F3C      00            db      00
01014F3D      00            db      00
01014F3E      00            db      00
01014F3F      00            db      00
01014F40  /$  81F9 18040000 cmp     ecx, 418                        ;  比较是不是回车键
01014F46  |.  75 37         jnz     short taskmgr.01014F7F          ;  不是就跳去返回
01014F48  |.  FF70 08       push    dword ptr ds:[eax+8]            ; /[eax+8]里就是当前所选进程的ProcessId
01014F4B  |.  6A 00         push    0                               ; |Inheritable = FALSE
01014F4D  |.  68 00010000   push    100                             ; |Access = SET_QUOTA
01014F52  |.  E8 2291807B   call    kernel32.OpenProcess            ; \OpenProcess
01014F57  |.  83F8 00       cmp     eax, 0                          ;  打开成功了吗?
01014F5A  |.  74 23         je      short taskmgr.01014F7F          ;  失败就跳去返回
01014F5C  |.  50            push    eax                             ;  进栈保存打开的hProcess
01014F5D  |.  68 2B4F0101   push    taskmgr.01014F2B                ; /FileName = "kernel32.dll"
01014F62  |.  E8 10CE7E7B   call    kernel32.LoadLibraryA           ; \LoadLibraryA
01014F67  |.  68 124F0101   push    taskmgr.01014F12                ; /ProcNameOrOrdinal = "SetProcessWorkingSetSize"
01014F6C  |.  50            push    eax                             ; |hModule
01014F6D  |.  E8 B65C7F7B   call    kernel32.GetProcAddress         ; \GetProcAddress
01014F72  |.  83F8 00       cmp     eax, 0                          ;  函数地址获得成功了吗?
01014F75  |.  74 08         je      short taskmgr.01014F7F          ;  不成功就跳去返回
01014F77  |.  5A            pop     edx                             ;  出栈,取出刚才打开的hProcess
01014F78  |.  6A FF         push    -1
01014F7A  |.  6A FF         push    -1
01014F7C  |.  52            push    edx                             ;  hProcess
01014F7D  |.  FFD0          call    near eax                        ;  call SetProcessWorkingSetSize
01014F7F  \>  C3            retn                                    ;  返回

这样添加好后,在把刚才原程序中0100CECB该成"jmp 01014F00",跳转到我们添加的代码就OK了。保存文件,运行一下试试。选择一个进程,按回车键,嘿嘿,内存减少了,嘻嘻。(不能是系统进程,因为权限不够。)

在分析taskmgr.exe时还发现它会去打开注册表中的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr]键值,如果不为0就会弹出“任务栏已被管理员禁止”。地址是
01005527 |. /74 4B je short taskmgr.01005574
这个是关键性的跳转。不跳就弹出“任务栏已被管理员禁止”,跳就继续后面的工作。

[ 本帖最后由 qinjg8008 于 2006-12-9 04:21 PM 编辑 ]

Snap1.jpg (93.27 KB, 下载次数: 191)

Snap1.jpg

taskmgr 修正兼容性.rar

82.07 KB, 下载次数: 2024, 下载积分: 无忧币 -2

2#
发表于 2006-12-6 22:13:04 | 只看该作者
呵呵。支持一下。支持哪无私奉献的人!

[ 本帖最后由 xdg3669 于 2006-12-6 10:14 PM 编辑 ]
回复

使用道具 举报

3#
发表于 2006-12-6 22:23:47 | 只看该作者
好东西,支持一个!!
回复

使用道具 举报

4#
发表于 2006-12-6 22:28:37 | 只看该作者
楼主是无私的高手啊!谢谢你!
回复

使用道具 举报

5#
发表于 2006-12-6 22:40:17 | 只看该作者
楼主你提供的这个只要优化内存就会出错啦。
回复

使用道具 举报

6#
 楼主| 发表于 2006-12-6 22:42:30 | 只看该作者
原帖由 wyt0164 于 2006-12-6 10:40 PM 发表
楼主你提供的这个只要优化内存就会出错啦。

适用于winxpsp2,其它版本或其它操作系统很可能不行。
回复

使用道具 举报

7#
发表于 2006-12-6 22:46:23 | 只看该作者
我的就是SP2还是不行。
回复

使用道具 举报

8#
发表于 2006-12-6 22:57:50 | 只看该作者
支持,但好像不能用在WINPE里面,咦按回车键就会自动退出
回复

使用道具 举报

9#
发表于 2006-12-6 23:39:34 | 只看该作者
优化内存出错,我的是xpsp2
回复

使用道具 举报

10#
 楼主| 发表于 2006-12-7 00:04:35 | 只看该作者
修正了,应该可以跨平台了。
回复

使用道具 举报

11#
发表于 2006-12-7 06:04:33 | 只看该作者
支持无私奉献者!
回复

使用道具 举报

12#
发表于 2006-12-7 07:04:21 | 只看该作者
很好用。谢谢!
回复

使用道具 举报

13#
发表于 2006-12-7 07:10:00 | 只看该作者
谢谢,昨晚的还用不了,今天的能用了,优化内存明显。优化内存可以多选就更好了。
回复

使用道具 举报

14#
发表于 2006-12-7 08:33:40 | 只看该作者
LZ能不能放出一个不加壳的版本啊。
回复

使用道具 举报

15#
 楼主| 发表于 2006-12-7 10:04:02 | 只看该作者
原帖由 shiri 于 2006-12-7 08:33 AM 发表
LZ能不能放出一个不加壳的版本啊。

为了防止“什么什么定制版出来”,不放不加壳的。

想要DIY的,就自己脱壳吧。我都明确了是NSPACK的壳了。
回复

使用道具 举报

16#
发表于 2006-12-7 10:10:53 | 只看该作者
我不会脱NSPACK的壳,怎么脱
回复

使用道具 举报

17#
发表于 2006-12-7 10:15:44 | 只看该作者
谢谢了,在WINXPSP2及XPE下均能正常使用!!!!
回复

使用道具 举报

18#
发表于 2006-12-7 11:01:38 | 只看该作者
谢谢,楼主提供,不脱壳了,脱了还要大很多。
回复

使用道具 举报

19#
发表于 2006-12-7 11:32:57 | 只看该作者
不错,现在可以在XP,PE,2003中使用了
回复

使用道具 举报

20#
发表于 2006-12-7 11:35:30 | 只看该作者
支持LZ无私奉献.
回复

使用道具 举报

21#
发表于 2006-12-7 12:47:37 | 只看该作者
怎么在我的sp1系统里运行无反应。
回复

使用道具 举报

22#
发表于 2006-12-7 12:48:06 | 只看该作者
呵呵,已有了,纯粹支持。
回复

使用道具 举报

23#
发表于 2006-12-7 13:45:15 | 只看该作者
好东西,支持一个!!
回复

使用道具 举报

24#
发表于 2006-12-7 14:23:17 | 只看该作者
不错,可不可以自动清理呢?
回复

使用道具 举报

25#
 楼主| 发表于 2006-12-7 14:52:22 | 只看该作者
自动清理就麻烦了,估计得写很多汇编代码。超出我的能力了。
还有一种折中的办法,就是编写一个dll文件,完成自动清理的功能。在程序启动的时候调用这个dll的函数。
回复

使用道具 举报

26#
发表于 2006-12-7 17:13:27 | 只看该作者
bblean有个DLL可以自动清理
回复

使用道具 举报

27#
 楼主| 发表于 2006-12-7 17:15:32 | 只看该作者
原帖由 wanghh 于 2006-12-7 05:13 PM 发表
bblean有个DLL可以自动清理

贴上来我看看
回复

使用道具 举报

28#
发表于 2006-12-7 18:03:58 | 只看该作者
看上去不错的样子 下来看看
回复

使用道具 举报

29#
发表于 2006-12-7 21:48:53 | 只看该作者
原帖由 qinjg8008 于 2006-12-7 05:15 PM 发表

贴上来我看看


bblean的内存自动回收插件是由两个部分组成的,一个是清理内存的插件,另外一个是一个定时器,刚贴出内存回收插件的时候,还是手动的,然后有人把内存回收跟定时器插件组合使用,就完成了自动回收的功能.
回复

使用道具 举报

30#
发表于 2006-12-7 21:51:51 | 只看该作者
真的是好东西啊!但是怎样设置让这个任务管理器替换系统原来的、按快捷键就能直接调用这个任务管理器呢?直接替换系统下的taskmgr.exe文件?

[ 本帖最后由 yfy6898 于 2006-12-7 10:07 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2026-1-22 00:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表