再见了,Netkeeper!

终于解决了 Netkeeper 占用后台和开热点的问题。

Netkeeper登陆界面

假如你用的是联通提供的个人网,那你应该很熟悉这个叫WO的校园的软件了。它的下载地址在这里。这是联通用来拨号上网的客户端软件。

购买了联通的个人网后(当时是被“强制”订的,奸商太坑),在客户端输入联通提供的用户名和密码,连通之后就可以上网了。曾几何时,我以为这是一个简单的拨号上网辅助软件。日子一天天过去,有一次我要用电脑开热点给手机用的时候,网络断开了,并弹出了这样的提示:发现共享软件。

Netkeeper发现网络共享软件后的提示

这个时候,我才发现了这个软件的真正目的:限制网络共享。在程序的安装目录可以看到这个软件的真正名字叫Netkeeper。原来,联通给我们的上网密码并不是PPPoE协议的拨号上网密码。真正的拨号密码是用这个软件的算法算出来的。这就使得用户不得不使用这个软件来上网。拨号成功后,Netkeeper继续留在后台监控是否有网络共享软件,若发现如猎豹Wifi之类软件的进程名,就会断开网络。如果直接退出Netkeeper,网络也会断开。这样,黑心的运营商便达到了它的目的:

  1. 一机一号
  2. 限制网络共享

真是名副其实的 “个人网”啊。但我怎能就这样轻易放弃?打开进程管理器发现有2个乱码进程,结束其中一个,Netkeeper提示“软件运行环境被破坏!”,然后就退出了。这两个进程还互相守护,结束其中一个,另一个就会发现并断网。

于是使用管理员打开CMD,tasklist如下:

1
2
3
4
5
6
7
8
9
10
11
C:\WINDOWS\system32>tasklist

映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 1,952 K
...
702C4F30-F8C4-49EC-A1BD-5 11996 Console 1 22,680 K
702C4F30-F8C4-49EC-A1BD-5 6564 Console 1 77,028 K
WmiPrvSE.exe 13884 Services 0 9,672 K
tasklist.exe 11780 Console 1 7,780 K
1
2
3
C:\WINDOWS\system32>taskkill /f /pid 11996 /pid 6564
成功: 已终止 PID 为 11996 的进程。
成功: 已终止 PID 为 6564 的进程。

taskkill成功结束进程,网络也没有断开。爽哉,终于可以开热点了~

不过每次启动都要打进程名字还是比较麻烦。查看netkeeper的安装目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
D:\Program Files\NetKeeper>tree
卷 Software 的文件夹 PATH 列表
卷序列号为 0EEF-2F34
D:.
├─config
├─help
│ └─picture
├─logs
├─run
│ └─FF8AF4B3-DEC7-421A-948B-D24571B95BE0
│ ├─config
│ ├─help
│ │ └─picture
│ ├─logs
│ └─skin
└─skin

在刚安装完软件的时候,run文件夹是空的,第一次运行后,netkeeper把目录下所有文件拷贝一份进run/乱码里,并且把NetKeeper.exe改名为乱码.exe,并且每次启动程序都改变一次乱码。这样就避免了自动化程序发现并结束掉自己。

经过一番百度,发现了神奇的wmic命令,可以查询程序的运行路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\WINDOWS\system32>wmic process get executablepath,caption
Caption ExecutablePath
System Idle Process
System
smss.exe
csrss.exe
wininit.exe
csrss.exe
services.exe
lsass.exe C:\WINDOWS\system32\lsass.exe
svchost.exe c:\windows\system32\svchost.exe
...
5D5AEDF7-DBDB-4CF8-B41A-9F4A00E17552.exe D:\Program Files\NetKeeper\run\FF8AF4B3-DEC7-421A-948B-D24571B95BE0\5D5AEDF7-DBDB-4CF8-B41A-9F4A00E17552.exe
5D5AEDF7-DBDB-4CF8-B41A-9F4A00E17552.exe D:\Program Files\NetKeeper\run\FF8AF4B3-DEC7-421A-948B-D24571B95BE0\5D5AEDF7-DBDB-4CF8-B41A-9F4A00E17552.exe
WmiPrvSE.exe C:\WINDOWS\system32\wbem\wmiprvse.exe
cmd.exe C:\WINDOWS\system32\cmd.exe
conhost.exe C:\WINDOWS\system32\conhost.exe
SearchFilterHost.exe C:\WINDOWS\system32\SearchFilterHost.exe
backgroundTaskHost.exe C:\WINDOWS\system32\backgroundTaskHost.exe
notepad.exe C:\WINDOWS\System32\NOTEPAD.EXE
WMIC.exe C:\WINDOWS\System32\Wbem\WMIC.exe

可以看到,netkeeper已经露出马脚啦。无论进程的名字如何变化,程序的启动路径是不变的,其中都会含有 netkeeper\run 字样。这样,写出自动化的批处理脚本就容易了。

最终KillNetkeeper.bat文件编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@echo off
chcp 936>nul
set PATH=%SystemRoot%;%SystemRoot%\system32;%SystemRoot%\System32\Wbem
set PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

title killNetKeeper by Beanbang
echo 本批处理用于结束联通wo的校园NetKeeper软件进程
echo 请右键使用管理员权限来运行

:bac
echo ----------------------------------------------------------------------
echo 开始查找NetKeeper进程名...
echo+

for /f "delims= " %%i in ('wmic process get executablepath^,caption^|findstr NetKeeper\run') do (
if not "%%i"=="update.exe" set name=%%i
)

if not defined name echo 未找到&echo 进程可能已结束,或没有以管理员权限运行&goto exit
if defined name echo 找到了!进程名为 %name%

TASKKILL /F /IM %name% ||echo 进程可能已结束&goto bye

:exit
echo+
echo+
echo 退出...
ping -n 3 127.1>nul
exit

:bye
echo+
echo+
echo 再见了,NetKeeper! :P
ping -n 2 127.1>nul
exit

运行文件就能自动查找并结束进程。

之后我又发现了netkeeper每次启动都会运行update.exe文件来检查更新。于是打开codeblocks,写了一个简短的文件。

1
2
3
4
5
6
7
8
9
#include <iostream>
#include <stdlib.h>
using namespace std;

int main()
{
system("cmd /c killNetkeeper.bat&exit");
return 0;
}

目的就是运行killNetkeeper.bat,编译成update.exe。没错,偷梁换柱!当netkeeper启动后,想要检查更新时,它不知道已经打开了结束自己的文件。

KN运行后自动退出

从此以后,被限制网络的日子终于一去不复返了,也可以给自己和小伙伴开热点了。再见了,NetKeeper!

下载

killNetkeeper.exe

自解压文件,可以直接运行,也可以用WinRAR打开。将文件重命名替换掉’Netkeeper/run/乱码’下update.exe即可。


后记

  1. 这个方法只能在Windows下能用,Mac没用过,Linux…连客户端都没有。
  2. 做这个软件的叫西安信利软件科技公司,产品的定义是“防私接客户端”,从功能上看确实做得挺好的。
  3. 有研究Netkeeper算法的项目叫SimpleNetkeeper,曾经一段时间用这个可以代替联通客户端,很好用。但是后来联通更新了算法,SN就不能用了,不过他们的通过路由器拨号的方法还是可以的(但我自己没试成功,而且个人网限速2mb/s,也不适合集体网使用)。不过最近好像不维护了,看官网这里
作者

Lazyb0x

发布于

2018-03-10

更新于

2022-09-10

许可协议

评论