AuraWiper: Destructive Wiper Analysis

Static and dynamic analysis of a 64-bit Windows wiper: security-tool tampering, recovery inhibition, shadow copy deletion, BCD edits, raw MBR overwrite, and a forced fatal system error.

By 0xG10D | Last updated: September 10, 2026 | 19 minutes read
Easy #malware-analysis#reverse-engineering#windows#wiper#ghidra#capa#floss#anyrun#pestudio

Introduction

In this challenge, I analyzed a Windows malware sample called AuraWiper. Unlike malware that focuses on stealing credentials or maintaining long-term access, AuraWiper behaves mainly as a destructive wiper.

Its goal is to make the Windows system difficult or impossible to recover by:

  • disabling security and monitoring tools,

  • disabling Windows recovery features,

  • deleting recovery files,

  • deleting critical Windows boot/system files,

  • deleting shadow copies,

  • modifying boot configuration,

  • overwriting the Master Boot Record area,

  • and finally attempting to trigger a fatal system error.

The interesting part of this challenge was that not every answer could be found just by searching strings. Some questions required identifying the difference between a helper function, a wrapper function, and the actual function responsible for a particular malware behavior.


Sample Information

The analyzed sample was a 64-bit Windows executable.

SHA256:
521E714BDC7FDBDC9789AAAC1BEEC6CA63B936E613BC606E2C341D1D8CED64D0

The malware also contained debugging information referencing:

SF-Verif.pdb

During dynamic analysis, the sample showed destructive activity including recovery inhibition, service manipulation, registry modification, file deletion, and raw disk access.


Tools Used

For this analysis I mainly used:

Ghidra
ANY.RUN
FLOSS
capa
PEStudio / PE-bear

Ghidra

Used for:

  • decompiling functions,

  • searching strings,

  • checking cross-references,

  • identifying Windows APIs,

  • examining function callers,

  • understanding malware logic.

ANY.RUN

Used as supporting dynamic-analysis evidence to see what the malware actually performed when executed.

This helped confirm behavior such as:

  • recovery destruction,

  • service stopping,

  • registry modification,

  • file deletion,

  • raw disk access,

  • and execution of destructive commands.


Basic Reverse Engineering Concepts

Before going through the questions, these terms were important.

Virtual Address

A virtual address is the address where code or data appears when the executable is loaded into memory.

For example:

FUN_140011650

starts at:

0x140011650

Therefore:

Virtual Address = 0x140011650

Cross-Reference / XREF

An XREF shows where a function, string, or variable is being used.

For example, if I find:

ResetEngine.exe

I can:

Right-click
→ References
→ Show References To

Then I can find which function is using that string.

This became one of the most useful techniques in the challenge.


Helper Function vs Wrapper Function

This caused several wrong answers during the analysis.

A helper function performs a smaller technical action.

Example:

FUN_140010570("taskmgr.exe");

A wrapper function might call that helper repeatedly:

FUN_140010570("taskmgr.exe");
FUN_140010570("ProcessHacker.exe");
FUN_140010570("procexp.exe");

If the question asks:

Which function is responsible for terminating monitoring tools?

the challenge may expect the wrapper, because that function represents the complete behavior.

That distinction became important several times.


Question 1 — What is the last part of the PDB path?

Answer

SF-Verif.pdb

How I Found It

I searched the executable strings for:

.pdb

A PDB, or Program Database, is normally produced by Microsoft compilers and stores debugging information.

Malware developers sometimes accidentally leave the original PDB path embedded inside a compiled executable.

The last filename component was:

SF-Verif.pdb

This can sometimes reveal:

  • project names,

  • developer usernames,

  • development directories,

  • internal malware naming.


Question 2 — What mutexes does AuraWiper create?

The sample contained two important mutex strings:

Global\SFV67PayloadLeader
Global\SFVDeployOnce

What is a Mutex?

A mutex is a Windows synchronization object.

Malware commonly uses one to check:

“Am I already running?”

For example:

CreateMutexA(NULL, FALSE, "Global\\SFVDeployOnce");

Then malware may call:

GetLastError();

and check:

0xB7

which represents:

ERROR_ALREADY_EXISTS

This prevents multiple copies of the same malware from executing simultaneously.


Understanding the Assembly

This challenge was also useful for learning the Windows x64 calling convention.

For Windows 64-bit executables:

RCX = argument 1
RDX = argument 2
R8  = argument 3
R9  = argument 4

For example:

xor ecx, ecx
xor edx, edx
lea r8, [mutex_name]
call CreateMutexA

means approximately:

CreateMutexA(
    NULL,
    FALSE,
    mutex_name
);

This made the assembly much easier to understand.


Question 3 — How many persistence mechanisms does AuraWiper implement?

Answer

4

Dynamic analysis showed several persistence-related behaviors including Startup-folder execution and registry-based persistence.

Some observed copies included names that imitate legitimate Windows components, such as:

SecurityHealthSystray.exe
WinRTNetSvc.exe
AudioEndpointBuilder.exe

AuraWiper attempts to make its files look like normal Windows components.

This is a common malware technique because filenames such as:

SecurityHealthSystray.exe

look much less suspicious than:

malware.exe

Question 4 — What function terminates common monitoring tools?

Answer

0x140011BE0

This was one of the important lessons from the challenge.

Initially I identified:

FUN_140010570

because it performs the actual process termination.

However, that answer was rejected.

After checking its callers, I found:

FUN_140011BE0

This function repeatedly invokes the termination helper against monitoring tools such as:

taskmgr.exe
ProcessHacker.exe
procexp.exe
procexp64.exe
powershell.exe

So the correct function representing the complete anti-monitoring behavior was:

0x140011BE0

I renamed it:

kill_monitoring_tools_loop

Why Malware Kills Monitoring Tools

Programs such as:

Task Manager
Process Hacker
Process Explorer
PowerShell

can help an analyst inspect or terminate malware.

Therefore AuraWiper tries to remove these obstacles before performing its destructive behavior.

This maps generally to the idea of impairing defenses.


Question 5 — How many times is the process-termination helper invoked?

Answer

8

How I Found It

In Ghidra:

Right-click FUN_140010570
→ References
→ Show References To

There were 9 references.

However, one was only a:

DATA reference

The remaining eight were actual:

CALL FUN_140010570

Therefore:

Actual function calls = 8

This was another useful lesson:

Number of XREFs does not always equal number of function calls.

Always distinguish between:

CALL
DATA
READ
WRITE

references.


Question 6 — What function implements the main destructive payload?

The main destructive controller was:

FUN_140014E40

or:

0x140014E40

I renamed it:

destructive_payload_orchestrator

This function coordinates most of AuraWiper’s destructive operations.

It creates multiple threads with different delays.

Simplified:

0 ms      → destructive worker
2000 ms   → destructive worker
4000 ms   → policy modification
6000 ms   → worker
8000 ms   → worker
10000 ms  → worker
12000 ms  → worker
14000 ms  → MBR overwrite
16000 ms  → boot/system destruction

The orchestrator therefore works almost like a destruction timeline.


Why the Malware Uses Delayed Threads

Instead of performing everything in one function, AuraWiper spreads actions across multiple threads.

This can:

  • make analysis harder,

  • sequence destructive actions,

  • allow several operations to execute independently,

  • ensure some attacks continue even if another action fails.

The code follows approximately:

delay = 14000;
callback = overwrite_mbr_loop;

CreateThread(
    NULL,
    0,
    FUN_14000f370,
    parameters,
    0,
    NULL
);

The wrapper waits for the specified delay and then invokes the target routine.


Question 7 — Which privilege does AuraWiper modify?

Answer

SeShutdownPrivilege

The malware uses:

LookupPrivilegeValueW(
    NULL,
    L"SeShutdownPrivilege",
    ...
);

followed by:

AdjustTokenPrivileges(...)

What is SeShutdownPrivilege?

Windows uses security tokens to determine what a process is allowed to do.

SeShutdownPrivilege gives a process permission related to shutting down or restarting the system.

Even if a user is an administrator, some privileges must still be explicitly enabled in the current process token.

AuraWiper attempts to modify its token before later triggering its fatal system-error routine.


Question 8 — Which registry value prevents the user from terminating the malware?

Answer

HKEY_CURRENT_USER\
Software\Microsoft\Windows\CurrentVersion\Policies\System\
DisableTaskMgr

The decompiler showed:

RegCreateKeyExA(
    HKEY_CURRENT_USER,
    "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",
    ...
);

followed by:

RegSetValueExA(
    key,
    "DisableTaskMgr",
    ...
);

The value is set to:

1

This disables Task Manager for the current user.


Why Disable Task Manager?

If the victim sees suspicious behavior, one of the first things they might open is:

Task Manager

From there they could attempt to kill the malicious process.

AuraWiper therefore attacks Task Manager in two ways:

Terminate taskmgr.exe

and:

DisableTaskMgr registry policy

This provides redundancy.


Question 9 — Windows Media Control Interface API

During analysis I also searched the import table for Media Control Interface-related APIs.

Useful Windows multimedia APIs include functions such as:

mciSendStringA
mciSendStringW
mciSendCommandA
mciSendCommandW

A practical way to locate these in Ghidra is:

Symbol Tree
→ Imports
→ winmm.dll

Then inspect the imported function and its XREFs.

This technique is useful whenever the question gives the purpose of an API, rather than its exact name.


Question 10 — Finding the Function Displaying Strings

This section caused more investigation than expected.

I first found:

FUN_14000ECF0

It creates a full-screen graphical overlay and calls:

TextOutA(...)

The function displays:

.gg/OQTF

at randomized screen positions and colors.

However:

0x14000ECF0

was rejected by the challenge.

That taught me an important difference:

Random position does not necessarily mean random string.

The string itself was fixed.


Another function:

FUN_14000E9A0

also looked random because it repeatedly generated values.

But after inspecting it, I found that it only created random:

  • rectangles,

  • coordinates,

  • brushes,

  • colors.

It did not display text.

So that function was also ruled out.


MessageBox Investigation

I then found:

FUN_14000FC00

which calls:

MessageBoxA(...)

The code selects message text from an array:

(&PTR_DAT_14005DCA8)[index]

and uses another array for the caption.

Simplified:

MessageBoxA(
    NULL,
    lpTextArray[index],
    lpCaptionArray[index],
    0x1030
);

Looking directly at the pointer table showed that entries pointed to strings such as:

67
SIXTY-SEVEN

This was useful for learning how C/C++ pointer arrays appear in Ghidra.


Important Lesson: VA, RVA and File Offset

We initially confused several forms of addresses.

Suppose Ghidra shows:

14005DCA8

That is a virtual address.

If the executable image base is:

140000000

then:

RVA = VA - ImageBase

Therefore:

0x14005DCA8
-
0x140000000
=
0x5DCA8

But this still does not necessarily equal the raw file offset.

File offsets must account for the PE section layout:

FileOffset =
RVA - SectionVirtualAddress
+ PointerToRawData

This was one of the challenge sections where blindly converting the address produced wrong answers.


Question 11 — What function overwrites the Master Boot Record?

Answer

0x140011AA0

This function was very obvious once the raw disk path was discovered.

The decompiler showed:

CreateFileW(
    L"\\\\.\\PhysicalDrive0",
    ...
);

followed by:

WriteFile(
    hFile,
    local_218,
    0x200,
    ...
);

Before writing, the malware clears the buffer:

FUN_140049100(local_218, 0, 0x200);

So effectively:

Create a 512-byte zero buffer
        ↓
Open \\.\PhysicalDrive0
        ↓
Write 512 bytes
        ↓
Close disk handle
        ↓
Wait 200 ms
        ↓
Repeat forever

I renamed the function:

overwrite_mbr_loop

Why 0x200 Matters

Convert it:

0x200 hexadecimal = 512 decimal

512 bytes is traditionally one disk sector.

Because PhysicalDrive0 is opened directly and the program writes without seeking elsewhere first, it targets the beginning of the disk.

That includes the traditional MBR area.


Why Direct Disk Access Is Dangerous

Normal applications normally access files through paths such as:

C:\Users\User\document.txt

AuraWiper instead opens:

\\.\PhysicalDrive0

This bypasses the normal filesystem abstraction and allows direct access to the physical disk.

Dynamic analysis also observed direct disk activity against the first physical drive.


Question 12 — Which function deletes key Windows system files?

This question caused another wrong answer.

Initially I found:

FUN_1400106A0

This looked correct because it constructs commands deleting Windows recovery components:

ResetEngine.exe
pbr.exe
recenv.exe
install.wim
install.esd
winre.wim

It also disables recovery-related services and removes recovery directories.

However:

0x1400106A0

was rejected.


Following the Caller

I then found:

undefined8 FUN_140011a70(void)
{
    FUN_14000ff20(...);
    FUN_1400106a0();
    FUN_140011650();

    return 0;
}

At first I tried:

0x140011A70

but this was also rejected.

This meant the challenge wanted the specific function performing the critical Windows file deletion.


The Correct Function

Inspecting:

FUN_140011650

revealed direct calls such as:

DeleteFileA("C:\\Windows\\System32\\winload.exe");
DeleteFileA("C:\\Windows\\System32\\winresume.exe");
DeleteFileA("C:\\Windows\\System32\\winload.efi");
DeleteFileA("C:\\Windows\\System32\\winresume.efi");
DeleteFileA("C:\\Windows\\System32\\bootmgr");
DeleteFileA("C:\\Windows\\System32\\bootmgfw.efi");
DeleteFileA("C:\\Windows\\System32\\hal.dll");
DeleteFileA("C:\\Windows\\System32\\ntoskrnl.exe");
DeleteFileA("C:\\Windows\\System32\\kernel32.dll");

It also targets Registry hive files:

DeleteFileA("C:\\Windows\\System32\\config\\SAM");
DeleteFileA("C:\\Windows\\System32\\config\\SECURITY");
DeleteFileA("C:\\Windows\\System32\\config\\SYSTEM");
DeleteFileA("C:\\Windows\\System32\\config\\SOFTWARE");

and old/modern boot files:

C:\boot.ini
C:\ntldr
C:\bootmgr
C:\bootmgr.efi

Therefore the correct answer was:

0x140011650

A useful rename is:

delete_critical_windows_files

It Also Attacks EFI Boot Files

The same function loops from:

C:

through:

Z:

and constructs paths such as:

:\EFI\Microsoft\Boot\bootmgfw.efi
:\EFI\Microsoft\Boot\BCD
:\Boot\BCD

Then it calls:

DeleteFileA(...)

This means AuraWiper does not rely on only one destructive technique.

It attacks:

Windows kernel/system files
Windows Registry hives
Legacy boot files
EFI boot files
BCD configuration
Recovery components
MBR/raw disk

That redundancy makes recovery much harder.


Question 13 — Which Native API triggers the hard system error?

Answer

NtRaiseHardError

Inside the main destructive orchestrator:

pHVar9 = LoadLibraryW(L"ntdll");

pFVar10 =
    GetProcAddress(
        pHVar9,
        "NtRaiseHardError"
    );

The malware also resolves:

RtlAdjustPrivilege

Then:

(*pFVar11)(0x13, 1, 0);

followed by:

(*pFVar10)(0xdeaddead, 0, 0);

This confirms that:

pFVar10 = NtRaiseHardError

and:

pFVar11 = RtlAdjustPrivilege

The sequence is visible directly in the destructive orchestrator.


What is the Windows Native API?

Most Windows applications normally use documented APIs such as:

CreateFileW
DeleteFileA
CreateProcessW
RegSetValueExA

Underneath many higher-level Windows APIs is a lower-level interface exposed by:

ntdll.dll

Functions beginning with:

Nt

or:

Rtl

often belong to this lower-level layer.

Examples include:

NtRaiseHardError
RtlAdjustPrivilege

Malware sometimes uses these APIs because they provide functionality closer to the Windows kernel.


Question 14 — What ErrorStatus value is passed to NtRaiseHardError?

Answer

0xDEADDEAD

The call is:

(*pFVar10)(0xdeaddead, 0, 0);

Since:

pFVar10 = NtRaiseHardError

the first argument corresponds to:

ErrorStatus

Therefore:

ErrorStatus = 0xDEADDEAD

The value is clearly visible in the decompiled orchestrator.


AuraWiper’s Overall Execution Flow

After reversing the important functions, the malware’s behavior can be summarized approximately like this:

AuraWiper starts
        │
        ▼
Check/create mutexes
        │
        ▼
Establish persistence
        │
        ▼
Hide console
        │
        ▼
Enable required privileges
        │
        ▼
Disable monitoring/security tools
        │
        ├── Kill Task Manager
        ├── Kill Process Hacker
        ├── Kill Process Explorer
        └── Disable Task Manager policy
        │
        ▼
Disable Windows recovery
        │
        ├── reagentc /disable
        ├── delete shadow copies
        ├── disable recovery services
        ├── delete recovery files
        └── delete recovery tasks
        │
        ▼
Destroy boot configuration
        │
        ├── modify BCD
        ├── delete BCD entries
        └── disable recovery boot options
        │
        ▼
Delete critical Windows files
        │
        ├── ntoskrnl.exe
        ├── hal.dll
        ├── winload.exe
        ├── kernel32.dll
        ├── SAM
        ├── SYSTEM
        └── EFI/BCD files
        │
        ▼
Overwrite PhysicalDrive0
        │
        └── write 512-byte buffer repeatedly
        │
        ▼
Wait
        │
        ▼
RtlAdjustPrivilege
        │
        ▼
NtRaiseHardError(0xDEADDEAD, ...)
        │
        ▼
Attempt catastrophic system failure

Recovery Destruction

One of the most aggressive parts of AuraWiper is its attempt to remove as many recovery paths as possible.

The malware executes commands equivalent to:

reagentc /disable
vssadmin delete shadows /all /quiet
wmic shadowcopy delete /nointeractive

It also modifies System Restore policies and removes recovery files.

The function analyzed earlier contains commands for deleting:

ResetEngine.exe
pbr.exe
recenv.exe
install.wim
install.esd
winre.wim

and removing recovery directories.


Why Delete Shadow Copies?

Windows Volume Shadow Copy can preserve earlier versions of files or system snapshots.

For defenders, shadow copies may provide a recovery path.

A destructive attacker therefore often uses:

vssadmin delete shadows /all /quiet

After deleting shadow copies:

Victim data destroyed
+
Recovery copies destroyed
=
Much harder recovery

This is commonly associated with ransomware and wiper malware.


Boot Destruction

Another worker executes a destructive bcdedit chain.

The malware attempts operations involving:

{default}
{bootmgr}
{current}
{memdiag}

It also disables recovery:

recoveryenabled No

and modifies boot-menu behavior.

Therefore AuraWiper attacks Windows before the operating system even fully starts.


Defense Evasion

AuraWiper does not immediately destroy the machine.

First, it attempts to make interference harder.

Examples include:

Killing monitoring processes

taskmgr.exe
ProcessHacker.exe
procexp.exe
procexp64.exe
powershell.exe

Disabling Task Manager

HKCU\Software\Microsoft\Windows\
CurrentVersion\Policies\System\DisableTaskMgr

Manipulating security/recovery components

It also interferes with Defender, recovery, services, and system policies during execution. Dynamic analysis observed these behaviors as well.


Self-Deletion

Near the end of the main orchestrator, AuraWiper creates:

C:\Windows\Temp\clean.bat

It then executes:

call "C:\Windows\Temp\clean.bat"

This appears designed to clean up malware artifacts and potentially delete the original executable after the destructive stage.

Self-deletion can make post-incident analysis more difficult.


Problems I Faced During the Challenge

The biggest difficulty was not simply understanding APIs. It was understanding exactly which level of function the challenge expected.

Problem 1 — Helper vs Responsible Function

For process termination I first submitted:

0x140010570

It was rejected.

That function was only the individual termination helper.

The correct behavior wrapper was:

0x140011BE0

Lesson

When a question says:

“function responsible for …”

check the callers before submitting the lowest-level helper.


Problem 2 — Recovery Deletion vs Critical System Deletion

I initially thought:

FUN_1400106A0

was the system-file deletion function.

Technically it does delete important files, but mainly recovery components.

The challenge specifically wanted the routine directly deleting core Windows files:

FUN_140011650

Lesson

Pay attention to wording.

These are not identical:

Windows recovery files
Windows system files
Windows boot files

Malware may have separate functions for each.


Problem 3 — Wrapper Was Also Wrong

After FUN_1400106A0 failed, I tried its caller:

FUN_140011A70

That was still wrong.

Why?

Because it was merely an orchestration wrapper:

FUN_14000ff20(...);
FUN_1400106a0();
FUN_140011650();

The challenge wanted the exact routine performing the deletion:

0x140011650

Lesson

Trace both directions:

callee ← current function → caller

Do not automatically assume higher-level is always correct.


Problem 4 — Random-Looking Behavior

The graphical routine looked like a random-string routine because text appeared at random positions.

However:

.gg/OQTF

was actually fixed.

Only its:

position
color
visual effects

were random.

Lesson

Separate:

random content

from:

random rendering

Problem 5 — Address Terminology

Another confusing part was distinguishing:

VA
RVA
File Offset

They are different values.

VA

0x140011650

RVA

VA - ImageBase

Raw file offset

Depends on PE section layout.

Lesson

Never convert an address until you know exactly what the question means by:

virtual address
offset
RVA
file offset

Useful Ghidra Workflow I Learned

For similar malware challenges, this became my standard workflow.

Start with strings

Search:

Search
→ For Strings

Look for interesting indicators:

PhysicalDrive
cmd.exe
powershell
System32
DeleteFile
registry paths
mutex names
.exe names
.pdb

Follow XREFs

When an interesting string is found:

Right-click
→ References
→ Show References To

Then inspect each caller.


Identify APIs

Important APIs in this sample included:

CreateMutexA
GetLastError
CreateFileW
WriteFile
DeleteFileA
RegCreateKeyExA
RegSetValueExA
OpenProcessToken
LookupPrivilegeValueW
AdjustTokenPrivileges
LoadLibraryW
GetProcAddress
CreateThread
MessageBoxA
TextOutA

Understanding the API often reveals the purpose of the function before fully understanding the code.


Rename Functions

Instead of keeping:

FUN_140011650

rename it:

delete_critical_windows_files

Instead of:

FUN_140011AA0

use:

overwrite_mbr_loop

Instead of:

FUN_140014E40

use:

destructive_payload_orchestrator

This makes the entire call graph easier to understand.


Key Functions Identified

AddressSuggested NamePurpose
0x140011BE0kill_monitoring_tools_loopTerminates common monitoring tools
0x140010570terminate_process_helperLower-level process termination helper
0x1400106A0destroy_recovery_environmentDeletes recovery files and disables recovery mechanisms
0x140011650delete_critical_windows_filesDeletes boot, kernel, Registry and EFI files
0x140011A70boot_destruction_wrapperCalls multiple destructive boot/recovery routines
0x140011AA0overwrite_mbr_loopRepeatedly writes 512 bytes to PhysicalDrive0
0x140014E40destructive_payload_orchestratorCoordinates AuraWiper’s destructive stages
0x14000FC00display_message_boxSelects text/caption and displays MessageBox
0x14000ECF0visual_overlay_effectDisplays graphical/randomized screen effects

Final Answers

QuestionAnswer
Last component of PDB pathSF-Verif.pdb
MutexesGlobal\SFV67PayloadLeader, Global\SFVDeployOnce
Number of persistence mechanisms4
Function terminating monitoring tools0x140011BE0
Number of termination-helper calls8
Main destructive orchestrator0x140014E40
Privilege modifiedSeShutdownPrivilege
Task Manager disabling registry valueHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr
Function overwriting MBR0x140011AA0
Function deleting critical Windows files0x140011650
Native API triggering hard system errorNtRaiseHardError
ErrorStatus value0xDEADDEAD

MITRE ATT&CK Behaviors Observed

AuraWiper’s behavior aligns with several ATT&CK techniques observed during dynamic analysis, particularly:

T1485      Data Destruction
T1490      Inhibit System Recovery
T1489      Service Stop
T1112      Modify Registry
T1070.004  File Deletion
T1059.003  Windows Command Shell
T1547.001  Registry Run Keys / Startup Folder
T1547.004  Winlogon Helper DLL
T1562.001  Impair Defenses

These behaviors were also reflected in the dynamic-analysis report.


Indicators Worth Hunting For

Defenders investigating a similar sample could search for indicators such as:

Global\SFV67PayloadLeader
Global\SFVDeployOnce
sfv_done.tmp
SF-Verif.pdb
C:\Windows\Temp\clean.bat
\\.\PhysicalDrive0

and suspicious commands involving:

reagentc /disable
vssadmin delete shadows
wmic shadowcopy delete
bcdedit /delete
sc config
schtasks /delete

These provide useful host-based hunting indicators.


Conclusion

AuraWiper is a heavily destructive Windows wiper that combines multiple techniques rather than relying on one method of destruction.

The malware first attempts to reduce the victim’s ability to respond by disabling monitoring and recovery mechanisms. It then attacks recovery files, boot configuration, EFI files, critical Windows system files, Registry hives, and finally the beginning of the physical disk.

One of the most valuable lessons from this analysis was learning that reverse engineering is not only about finding suspicious APIs. The context around a function matters.

During the challenge I repeatedly had to distinguish between:

helper function
wrapper function
orchestrator
actual destructive worker

I also became more comfortable with:

Windows x64 calling convention
Ghidra XREFs
Windows privileges
Native APIs
raw disk access
PE addresses
Windows recovery mechanisms
boot components

The final execution chain shows that AuraWiper was designed with one main objective:

remove as many recovery options as possible and leave the Windows system unable to boot or recover normally.

That makes it a useful sample for learning how destructive malware operates at several layers of a Windows system.


Sandbox Reference

The dynamic behaviour above was cross-checked against the ANY.RUN sandbox report for the same sample hash.

Authorized security practice only. These notes are for lab, CTF, and explicitly permitted environments.