Git Product home page Git Product logo

delete-self-poc's Introduction

๐Ÿ—‘๏ธ delete-self-poc

The delete-self-poc is a demonstration of a method to delete a locked executable or currently running file from disk. This concept was initially discovered by Jonas Lykkegaard, and I have created the proof of concept (POC) for it. Additionally, it can be used to delete locked files on disk, provided that the current calling process has the necessary permissions to access and delete them.

How does this work, though - in this POC?

  1. Open a HANDLE to the current running process with DELETE access. Note that only DELETE access is required.
  2. Use the SetFileInformationByHandle function to rename the primary file stream, :$DATA, to :wtfbbq.
  3. Close the HANDLE.
  4. Open a HANDLE to the current process and set the DeleteFile flag of the FileDispositionInfo class to TRUE.
  5. Close the HANDLE to trigger the file disposition.
  6. Voila! The file is now gone.

Releases

I have included a statically linked release within this repository, if you can't be bothered compiling the original source code.

delete-self-poc's People

Contributors

lloydlabs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

delete-self-poc's Issues

Two issues in the code

LPWSTR lpwStream = (LPWSTR)DS_STREAM_RENAME;
fRename.FileNameLength = sizeof(lpwStream);

sizeof(lpwStream) is always 8 bytes on 64-bit OS

FILE_RENAME_INFO fRename;
RtlCopyMemory(fRename.FileName, lpwStream, sizeof(lpwStream));

The FILE_RENAME_INFO.FileName buffer need to be allocated by yourself

x86 implementation fails when not running as Administrator

Very strange issue here. I am implementing this as part of a larger tool and in doing testing for compatibility with x86, I have found that it fails when ran as a normal user, however succeeds when ran as an Administrator. The x64 version of course works in both medium and high integrity. This testing was done on a windows 7 VM, however I also tested the x86 version on a windows 11 VM where I encountered the same issue.

Attached is a screenshot showing the issue. Top cmd prompt is normal user, bottom is admin.

image

I added a GetLastError() call which returned error 123, or:

"ERROR_INVALID_NAME
123 (0x7B)
The filename, directory name, or volume label syntax is incorrect."

per MSDN. This occurs at line 26 where SetFileInformationByHandle is called.

Does anyone have any ideas here? I'd believe that there is some incompatibility issue with x86, but the fact that it suceeds as an Admin but fails as a normal user, whereas it works fine for both on x64 is throwing me for a loop.

Not working as expected ..

I've compiled it with VS 2019 and tested this POC on all recent Windows versions:

PC

  1. Windows 7 SP1 - File was emptied, not deleted, and program crashed
  2. Windows 8.1 - File was emptied, not deleted.
  3. Windows 10 LTSC - File was emptied, not deleted, and stuck at "Attempting to rename file name" for 20s. File size is zero, size on disk is still 124KB.

Server

  1. Windows 2008 R2 - File was emptied, not deleted, and program crashed
  2. Windows 2012 R2 - File was emptied, not deleted, and program crashed
  3. Windows 2016 - File was emptied, not deleted, and stuck at "Attempting to rename file name" for 20s. File size is zero, size on disk is still 124KB.
  4. Windows 2019 - File was emptied, not deleted, and stuck at "Attempting to rename file name" for 20s. File size is zero, size on disk is still 124KB.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.