39 lines
1.1 KiB
Markdown
39 lines
1.1 KiB
Markdown
|
# libfakerand
|
||
|
|
||
|
## Introduction
|
||
|
|
||
|
`libfakerand` intercepts various system calls that programs use to
|
||
|
retrieve entropy. It replaces the entropy which would otherwise be
|
||
|
used with the one supplied by the user. This means you can force
|
||
|
programs to use a fixed value instead of a random one.
|
||
|
|
||
|
`libfakerand` overrides the following functions:
|
||
|
* `rand()`
|
||
|
* `read()` function for `/dev/urandom` and `/dev/random`
|
||
|
* `getrandom()`
|
||
|
* `RAND_bytes()`
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
You may use env variables `LD_PRELOAD` and `FAKERAND` along with a command:
|
||
|
```
|
||
|
LD_PRELOAD=./target/release/libfakerand.so FAKERAND=0 openssl rand -hex 16
|
||
|
```
|
||
|
|
||
|
Alternatively, set environment variables so that all programs running in that shell are effected:
|
||
|
```
|
||
|
export LD_PRELOAD=/usr/lib/fakerand/fakerand.so
|
||
|
export FAKERAND=42
|
||
|
```
|
||
|
|
||
|
If you will be using it this way, it may make sense to place the .so file in `/usr/lib/fakerand`
|
||
|
|
||
|
## Notes
|
||
|
Statically linked libraries can't be overriden by `LD_PRELOAD`. For
|
||
|
this reason, `libfakerand` can't override cases such as:
|
||
|
|
||
|
```
|
||
|
FAKERAND=42 LD_PRELOAD=./target/release/libfakerand.so awk 'BEGIN{srand(); print rand()}' 2>/dev/null
|
||
|
```
|
||
|
|
||
|
This is because `awk` is statically linked.
|