美文网首页
使用Java查杀NetKeeper客户端

使用Java查杀NetKeeper客户端

作者: 悬雨 | 来源:发表于2018-03-04 22:02 被阅读73次

代码如下:

/**
 * Created by ingra on 2017-05-24.
 */

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class FuckNetKeeper {

    private class ProcessObj {
        String processName;
        char callType;

        public ProcessObj(String processName, char callType) {
            this.processName = processName;
            this.callType = callType;
        }

        public String getProcessName() {
            return processName;
        }

        public char getCallType() {
            return callType;
        }
    }

    private static List<ProcessObj> processObjList=new ArrayList<ProcessObj>();

    //列出系统进程
    private String ProcessDetails() throws IOException {
        ProcessBuilder pb = new ProcessBuilder("tasklist");
        Process p = pb.start();
        BufferedReader out = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getInputStream()), Charset.forName("GB2312")));
        BufferedReader err = new BufferedReader(new InputStreamReader(new BufferedInputStream(p.getErrorStream())));
        System.out.println("正在列出Windows系统进程列表:");
        String processDetails;//进程信息总表
        StringBuilder sb = new StringBuilder();
        String ostr;
        while ((ostr = out.readLine()) != null) {
            sb.append(ostr + "\n");
        }
        processDetails = sb.toString();
        String estr = err.readLine();
        if (estr != null) {
            System.out.println("\nError Info");
            System.out.println(estr);
        }
        return processDetails;
    }

    //解析系统进程
    private void processToObj(String processDetails) {
        System.out.println("正在进行进程分析");
        String processDetail;
        char[] ch = processDetails.toCharArray();
        //字符串截取开始
        //开头包含141个制表输出字符 一行77个字符包含换行 进程名固定长度25 空出10长度的空格和pid 进程类型C/S
        char[] process_name_chararray = new char[25];
        char type='0';
        for (int i = 142; i < ch.length; ) {
            int a = 0;
            int b=0;
            for (; a < 25; a++) {
                if (a+i<ch.length)
                    process_name_chararray[a] = ch[a + i];
            }
            if (a == 25) {
                //增加了进程占用内存数量为“暂缺”时,本行多跳过两个字符的逻辑问题
                if (isChinese(ch[a+i+48-1])){
                    type=ch[i+35];
                    i = i + 75;
                }
                else {
                    type = ch[i + 35];
                    i = i + 77;
                }
            }

            String str1 = new String(process_name_chararray);
            System.out.print(str1+"    ");
            System.out.println(type);
            processObjList.add(new ProcessObj(str1,type));
        }
    }

    //遍历找到nk进程并且杀死
    public void searchAndFuckNK(List<ProcessObj>processObjs) throws IOException {
        System.out.println("正在找到并杀死NK进程");
        int count=0;
        for (ProcessObj processObj:processObjs){
            String name=processObj.getProcessName();
            char type=processObj.getCallType();
            char[] namechar=name.toCharArray();
            //-分别在8、13、18、23位
            if (type=='C'&&namechar[8]==namechar[13]&&namechar[13]==namechar[18]&&namechar[18]==namechar[23]
                    &&namechar[23]=='-'){
                System.out.println("已找到流氓进程");
                System.out.println(name+"    "+type);
                System.out.println("正在驱逐流氓");
                Runtime.getRuntime().exec("cmd.exe /c taskkill /F " +
                        "/FI \"IMAGENAME eq "+processObj.getProcessName()+"*\"");
                count++;
            }
            if (count==2)
                break;
        }
        if (count==2){
            System.out.println("已经成功杀死NK进程,可以开启WIFI");
            System.out.println("Powered By 悬雨");
        }
        if (count==0) {
            System.out.println("未检测到NK进程,请确认是否成功启动NK或是已经杀死");
            System.out.println("Powered By 悬雨");
        }
        if (count==1){
            System.out.println("只检测到了一个NK进程,请确认是否成功启动NK");
            System.out.println("Powered By 悬雨");
        }
    }

    // 根据Unicode编码完美的判断中文汉字和符号
    private static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) throws Exception {
        FuckNetKeeper fnk = new FuckNetKeeper();
        System.out.println(fnk.ProcessDetails());
        fnk.processToObj(fnk.ProcessDetails());
        fnk.searchAndFuckNK(processObjList);
    }

}

可配合bat批处理脚本和编译后的jar包使用。

项目地址:http://git.oschina.net/floatingrain/FuckNetKeeper

相关文章

网友评论

      本文标题:使用Java查杀NetKeeper客户端

      本文链接:https://www.haomeiwen.com/subject/benqfftx.html