欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

再来一个tip: 9x和2k下exe文件的自删除代码 (3千字)

再来一个tip: 9x和2k下exe文件的自删除代码 (3千字)

;                  exe运行时文件自删除的实现(适用于9x/2K)
;Theory:
;1)为什么运行时的exe文件不能被删除?
;Windows 操作系统为内核对象保存着一个计数,只要这个计数不为0,那么这个内核
;对象就不会被释放,对其进行的删除操作等也就不能成功。为了达成我们的目的,必须
;在执行deletefile前将运行的exe本身的内核计数减为0。
;2)9x和NT/2K实现的不同
;9x下只要对exe本身先执行FreeLibrary操作即可解除exe image在内存的映射,
;2K/NT下需要先关闭硬编码为4(exe本身对应image的句柄),然后对exe本身的内存
;映像unmapview即可解除映射,最后的操作是相同的就是执行DeleteFile.
;3)其他方法
;文件自删除的方法不止一种,很多,但这里的可能是最简洁的.
;3)为什么还写一遍?
;包括Gary Nebbett等高人都写过类似代码,但我还没发现在9X和NT上全部正常的代码
;实际上思路很简单,就是让上述两种平台的API代码全部执行一遍,在一种平台上可能
;会有几个失败,有几个会成功,没有关系!最后的结果是exe文件在退出前就被删除了!
;最后还是为了使用我喜欢的fasm.
;4)价值
;适用于反安装程序最后的自删除或者你要写个木马、病毒首次安装的自毁.
;注意:此方法在Xp上无效.(还未发现在xp平台下用此类方法的代码)
;经9X和2K下测试通过.
;compile:
;fasm %1 selfkill.exe
;
;
;                                      YJ.Hume.冷雨飘心
;                                      humeasm.yeah.net
format  PE GUI 4.0
entry  StArT
section 'CODE' code readable writeable executable
StArT:     
       
        ;int 3
        sub    esp,260
        mov    edi,esp
        push    260
        push    edi
        push    0
        call    [GetModuleFileName]
        push    0
        call    [GetModuleHandle]
       
        push    0
        push    0                     
        push    edi
        push    [ExitProcess]
        push    eax
        push    [DeleteFile]
        push    eax       
        push    [UnmapViewOfFile]
        push    4
        push    [FreeLibrary]         
        push    [CloseHandle]
        ret
;------------------------[IAT 数据〕-----------------
section '.idata'  import data readable writeable
      dd 0,0,0,rva zk32_names,RVA k32_first_thunk_array
      dd 0,0,0,rva zu32_names,RVA u32_first_thunk_array
        times 5 dd 0
k32_first_thunk_array:
ExitProcess            dd RVA __aExitProcess
GetModuleFileName      dd RVA __aGetModuleFileName
DeleteFile              dd RVA __aDeleteFile
GetModuleHandle        dd RVA __aGetModuleHandle
FreeLibrary            dd RVA __aFreeLibrary
CloseHandle            dd RVA __aCloseHandle
UnmapViewOfFile        dd RVA __aUnmapViewOfFile
                dd 0
__aExitProcess  dw 0
                db "ExitProcess",0
__aGetModuleFileName dw 0
                db "GetModuleFileNameA",0
__aDeleteFile  dw 0
                db "DeleteFileA",0
__aGetModuleHandle dw 0
                db "GetModuleHandleA",0
__aFreeLibrary  dw 0
                db "FreeLibrary",0
__aCloseHandle  dw 0
                db "CloseHandle",0
__aUnmapViewOfFile dw 0
                db "UnmapViewOfFile",0
u32_first_thunk_array:
MessageBox      dd RVA __aMessageBox
wsprintf        dd RVA __wsprintf
                dd 0
__aMessageBox  dw 0
                db "MessageBoxA",0
__wsprintf      dw 0
                db "wsprintfA",0
zk32_names db "KERNEL32.DLL",0
zu32_names db "USER32.DLL",0

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功