首页
社区
课程
招聘
[原创]一个简洁的删除自身的函数
发表于: 2013-10-12 17:11 28136

[原创]一个简洁的删除自身的函数

2013-10-12 17:11
28136
收藏
免费 0
支持
分享
最新回复 (33)
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
很简短的几句代码就搞定
2013-10-12 18:07
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
说……你来地球的目的是什么?
2013-10-12 18:08
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
小弟过来寻医问药的。。。
2013-10-12 19:56
0
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
5
你能保证调用DeleteThis的时候你的程序已经退出了?
2013-10-12 20:06
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
呵呵,所以我才加了一句注释啊
DeleteThis() ;//注意要用在代码最后

在调用DeleteThis()时确实还没退出,但是WinExec启动的新进程初始化要花时间,WinExec直接返回,这段时间已经足够本进程退出了。

代码经过测试,表示有效。
2013-10-12 20:36
0
雪    币: 25
活跃值: (163)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
利用的是GetCommandLine()这句,然后就是cmd的指令而已。感觉,LZ可以直接考虑写在main里面,动一动ebp就好了啊……
2013-10-12 20:36
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自删除有何意义……
2013-10-12 20:39
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
其实关键是创建一个外部进程,所以同样是执行命令行,用system()却是达不到目的。

写在main里也是可以的,只是我有意把它抽出来弄个函数,需要时直接copy过去就可以用了。

GetCommandLine()这句只是取得文件名,完全可以用其他函数代替,比如GetModuleFileName。

动ebp的话。。。要用汇编shellcode吗?感觉会复杂一些。。。
2013-10-12 20:51
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
据说这样子比较好玩。
2013-10-12 20:53
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
将自己的exe movefile 然后退出即可
2013-10-12 21:12
0
雪    币: 85
活跃值: (129)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
1.这种代码还是很有意义的,例如软件更新
2.你能完全保证该删除命令执行的时候程序已经退出?一台电脑测试成功并不能说明什么——假如在老爷机上……
   这的确是一个问题哦。

   楼主可以这么执行:WinExec("cmd /c taskkill -f -im xxx.exe & del /f /q xxx.exe", SW_HIDE);

    避免删除失败
2013-10-12 21:24
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
哈哈,谢谢。忘了还可以用taskkill 了。不过在构造命令行时要多调用两次 strcat 。
2013-10-12 22:33
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
您这是找着被报毒啊……
99%的自动动态分析工具跑此类代码都会定义为病毒
2013-10-12 23:08
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
15
写个helloworld都会被报毒,更别说这种代码了。习惯就好了。
况且,有一类软件是要关闭杀软才能正常使用的,你懂的。
2013-10-13 07:37
0
雪    币: 85
活跃值: (129)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
呵呵,没有报毒。

#include <stdio.h>
#include <windows.h>
int main()
{
    printf("Hello World!\n");

    WinExec("cmd /c taskkill -f -im cpp1.exe & del /f /q c:\\cpp1.exe", SW_HIDE);

    Sleep(10 * 1000);

    return 0;
}

以上代码没有报毒,配置:
Win7 x64,360安全卫士9.2Beta,360杀毒4.2.1,VC6简体中文版。

代码照常工作
2013-10-13 12:24
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
17
感谢,有用,测试版本 win7 64
2013-10-16 10:36
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
测试发现Sleep(10 * 1000);这行代码已经不会执行了。
不知谁知道有什么技巧在xxx.exe执行后删除硬盘上的xxx.exe文件而进程xxx.exe还活着。这个用途实际上比LZ的东西更有价值。
2013-10-16 11:12
0
雪    币: 85
活跃值: (129)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
这里的Sleep()只是为了看效果而设置的。
那倒是,以前看过把dll隐藏的办法,实际上就是注入,exe不知咋办。
不过要是有这种技术病毒会泛滥很长时间
2013-10-16 18:26
0
雪    币: 441
活跃值: (154)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
好!留名备用,,,
2013-10-16 18:54
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
21
有多种方法可以实现这个技巧的
1.使用vbs脚本,你把脚本运行后再删除了,宿主进程还是活着的。
2.使用“代码注入技术”(具体方法你可以百度一下),是编写病毒的一种常用技术。
你先把代码注入到另外一个进程,再调用我这个函数删除自身即可。

其实都是老技巧了,被以前的病毒用到泛滥了。我就不再炒冷饭了。
2013-10-16 21:36
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
22
注入方式分dll注入和代码注入。实际上都需要一个启动程序,该程序的功能就是把dll或代码注入到目标进程。许多病毒就是使用这种技术的,并不新鲜了。
2013-10-16 21:39
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
关掉自身占用exe的句柄……
2013-10-16 22:07
0
雪    币: 70
活跃值: (93)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
24
标题党。。
其实没有多少价值,他就是让cmd完成这些操作的,,,跟批处理差不多。
2013-10-17 00:51
0
雪    币: 70
活跃值: (93)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
25
可以尝试代码注入技术,通常有直接代码输入,和DLL,两种,但是在Win7环境下用直接代码注入会有权限保护机制(主要在虚拟内存中写入代码后,不能直接执行),总是会失败,而在WinXp下直接代码注入仍然可以用。DLL注入较为简单,只要将DLL理解成宿主进程的一个常规DLL即可,所以这个方法只要DLL不淘汰就一直可以用。两个方法都要用CreateRemoteThread和VirtualAllocEx函数,或者想隐蔽一点就调用NTDLL里的函数,可以用WinDbg跟一下它用了NTDLL里的哪个函数。
2013-10-17 01:03
0
游客
登录 | 注册 方可回帖
返回