首页
社区
课程
招聘
[求助]一个程序自拷贝及自删除的问题
发表于: 2009-10-20 21:51 5942

[求助]一个程序自拷贝及自删除的问题

2009-10-20 21:51
5942
想知道原理
不需要代码
有人能给我讲讲或者发个资料吗?
谢谢

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
网上好多资料的~
2009-10-20 22:33
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
自删除一般都不是严格意义上的,都是借助了bat的力量
2009-10-21 10:08
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
都不能用
那些资料
如果在调用过程中删除自己会报系统错误
2009-10-24 09:39
0
雪    币: 232
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
SHELLEXECUTEINFO sei;
        TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH];
        //获取文件路径名
        if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&
        (GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
                (GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))
        {  //设置命令行参数。
                lstrcpy(szParams,"/c del ");
                lstrcat(szParams, szModule);
                lstrcat(szParams, " > nul");
               
                //初始化SHELLEXECUTEINFO结构成员
                //设置类型大小。
                //sei.cbSize = sizeof(sei);
                sei.cbSize = sizeof(sei);
                        //命令窗口进程句柄,ShellExecuteEx函数执行时设置。
                        sei.hwnd = 0;
                 //执行动作为“打开执行”。
                    //sei.lpVerb = "Open";
                        sei.lpVerb = "Open";     
                        sei.lpFile = szComspec;      //执行程序文件全路径名称。
                sei.lpParameters = szParams; //执行参数。
                sei.lpDirectory = 0;
                //显示方式,此处使用隐藏方式阻止出现命令窗口界面。
                sei.nShow = SW_HIDE;
                //设置为SellExecuteEx函数结束后进程退出。
                sei.fMask = SEE_MASK_NOCLOSEPROCESS;
                //创建执行命令窗口进程。
                if(ShellExecuteEx(&sei))
                {  //设置命令行进程的执行级别为空闲执行,这使本程序有足够的时间从内存中退出。  
                        SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS);
                        //设置本程序进程的执行级别为实时执行,这本程序马上获取CPU执行权,快速退出。  
                        SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);
                        SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);  
                        //通知Windows资源浏览器,本程序文件已经被删除。
                        SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0);
                        //执行退出程序
                        EndDialog(0);
                }
        }
2009-10-24 12:11
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
拦了一个病毒的,用BAT。

//del XX  删除程序。
del %0    //删除BAT自身。
2009-12-3 21:05
0
雪    币: 284
活跃值: (106)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
7
自删除的方法有好几种,一种是借助bat,还有创建远程线程也是一种,不过更经典的一种删除是借助rundll32来实现的,做一个dll,rundll32里面调用导出函数删除其他需要删除的文件,之后dll自删除
——asm{
                      lea eax,DllPath;自身dll路径       
                      push 0
                        push 0
                push eax
                push ExitProcess
                push g_Module
                push DeleteFile
                push FreeLibrary
                ret  
}
以上代码在vc6下使用
2009-12-4 00:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
学习汇编时写的。复制的。。若是自删除,看你的程序是不是死循环了,若不是可以用bat删
或者可以判断你的程序是否在某一个路径下,比如若是在system32这里的话就死循环,若不是的话你就把他复到这里,再bat删

;复制自身到system32
_CopyToSystem32 proc uses esi

invoke GetModuleFileName,hInstance,addr szExeBuffer,sizeof szExeBuffer
;invoke MessageBox,NULL,addr szExeBuffer,CTXT("OK"),0
lea esi,szExeBuffer ;或者mov esi,offset szExeBuffer
invoke lstrlen,addr szExeBuffer ;计算全文件名的长度
add esi,eax ;这时这里esi已指向最后一个字符。是空字符。所以要减一,这样才是字符e
dec esi

;invoke MessageBox,NULL,esi,CTXT("OK"),0
.while TRUE
.break .if BYTE ptr [esi]=='\' ;这里若是esi里的内容是\的话则退出
dec esi
.endw
invoke lstrcpy,addr szExeNameHua,esi ;带\的文件名

inc esi ;上面的循环中,不等\时已减了1所以退出之后这esi指向的是带\的文件名
;invoke MessageBox,NULL,esi,CTXT("OK"),0 ;这里esi指向的已是文件名的开始
invoke lstrcpy,addr szExeName,esi ;不带\的文件名


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke GetCurrentDirectory,MAX_PATH,addr szExeBuffer
;invoke MessageBox,NULL,addr szExeBuffer,CTXT("OK"),0
invoke lstrcat,addr szExeBuffer,addr szExeNameHua

invoke GetSystemDirectory,addr szSystemPath,sizeof szSystemPath
invoke lstrcat,addr szSystemPath,addr szExeNameHua ;系统路径加上程序名的全路径了
;invoke MessageBox,NULL,addr szSystemPath,CTXT("OK"),0

invoke CopyFile,addr szExeBuffer,addr szSystemPath,0 ;复制文件到system32文件夹中

invoke SetFileAttributes,addr szSystemPath,FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM ;设为隐藏属性

call _DoReg

ret
_CopyToSystem32 endp
2009-12-4 08:20
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
自拷贝 自删除
Movefile?
2009-12-4 09:04
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
10
自删除的话,,可以看看我写的这个,,呼呼,,拷贝的话,,其实moveFileEx就可以搞定了,
其实也没有必要拷贝,我觉得。,
http://hi.baidu.com/charme000/blog/item/9d11a506a65e38c77b89478e.html
2009-12-4 09:45
0
游客
登录 | 注册 方可回帖
返回
//