MCPcopy Index your code
hub / github.com/Slowerzs/PPLSystem

github.com/Slowerzs/PPLSystem @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
138 symbols 246 edges 15 files 8 documented · 6%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

PPLSystem

This is a proof of concept implementation of the technique described in this blog post.

It creates a livedump of the machine through NtDebugSystemControl to extract the COM secret and context, to then inject inside this process.

The livedump might slow down or freeze the machine for a couple of seconds.

The tool can be built using: cargo build --release.

Usage

pplsystem.exe --dll <path to the unsigned DLL to load> --dump <Full path where the dump file will be written> --pid <PID of the process to inject>

Image of the exploitation

This proof of concept implements the mapping of an unsigned DLL inside a PPL process, however, no new thread is created, and the code in the unsigned DLL is not called.

For some reason, in a virtual machine, I've found that services.exe does not always initialize COM. In such cases, injection does not work. It works on other PPL process who do initialize COM.

I haven't faced this issue on a physical machine.

Credits

Extension points exported contracts — how you extend this code

PackedSize (Interface)
Represents size of a struct as packed bytes. At this moment all settings with [repr](https://doc.rust-lang.org/nomicon/ [3 …
endian_codec/src/lib.rs
Parsable (Interface)
(no doc) [1 implementers]
src/kdmp/parser.rs
IMarshalEnvoy (Interface)
(no doc)
src/irundown/locate.rs
EncodeME (Interface)
Encode using mixed-endian bytes. # Note If you only use big-/little-endians, consider using [EncodeBE](EncodeBE) / [Enc [2 …
endian_codec/src/lib.rs
IRundown (Interface)
(no doc)
src/irundown/inject.rs
DecodeME (Interface)
Decode from bytes stored as a mixed-endian. # Note If you only use big-/little-endians, consider using [DecodeBE](Decod [2 …
endian_codec/src/lib.rs
EncodeLE (Interface)
Encoded as little-endian bytes. [1 implementers]
endian_codec/src/lib.rs
EncodeBE (Interface)
Encoded as big-endian bytes. [1 implementers]
endian_codec/src/lib.rs

Core symbols most depended-on inside this repo

encode_as_le_bytes
called by 11
endian_codec/src/lib.rs
encode_as_be_bytes
called by 9
endian_codec/src/lib.rs
write_data_to_address
called by 9
src/irundown/inject.rs
add_trait_bounds
called by 7
endian_codec/endian_codec_derive/src/lib.rs
derive_endian_impl
called by 6
endian_codec/endian_codec_derive/src/lib.rs
get_page_frame_number
called by 6
src/kdmp/parser.rs
read_physical_memory
called by 6
src/kdmp/parser.rs
read_virtual_memory
called by 6
src/kdmp/parser.rs

Shape

Class 53
Function 43
Method 27
Interface 10
Enum 5

Languages

Rust100%

Modules by API surface

src/irundown/structs.rs33 symbols
src/kdmp/parser.rs31 symbols
endian_codec/src/lib.rs29 symbols
endian_codec/endian_codec_derive/src/lib.rs14 symbols
src/irundown/inject.rs10 symbols
src/kdmp/structs.rs6 symbols
src/irundown/locate.rs5 symbols
src/irundown/rpcss.rs4 symbols
src/dmp/dumper.rs3 symbols
src/main.rs2 symbols
endian_codec/endian_codec_derive/src/attr.rs1 symbols

For agents

$ claude mcp add PPLSystem \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact