Skip to content
/ fmemory Public

💾 Simple npm package that reads and write memory inside a given process for Linux.

License

Notifications You must be signed in to change notification settings

otvv/fmemory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fmemory codacy badge

A simple node add-on powered by gmem for reading/writing memory in a given process on GNU/Linux.


more info:

features:

- get process id through process name
- get module base address through module name
- memory reading
- memory writing

todo:

- get call address of a function
- vector3d and vector2d support _(read, write)_
- shellcode execution _(maybe)_
- high privileges helpers
- signature reader/scanner

🚧 more to come..

installing:

Since this is a Node addon, you'll need cmake-js, node-addon-api, and a C++ compiler (GCC or clang).

To install this addon simply type: npm install fmemory

if you get an error related to cmake-js, make sure that node.js is updated to the latest version and also make sure that cmake-js is installed globally and node-addon-api is installed as well. (It doesnt need to be installed globally)

usage:

The usage is pretty straight-forward.

Here's how:

const fmemory = require("fmemory");

const clientStateAddress = 0xDEADBEEF
const deltaTickOffset = 0x123

const main = (() => {
  // get process id
  const processID = fmemory.getProcessID("csgo_linux64")

  // get engine module base address
  const engineModuleBaseAddress = fmemory.getModuleBaseAddr("engine_client.so", processID)
  
  // another way to get the module base address
  // const engineModuleBaseAddress = fmemory.getModuleBaseAddr("engine_client.so", "csgo_linux64") 

  // get client state address
  const pClientState = fmemory.readMemory(engineModuleBaseAddress + clientStateAddress, fmemory.INT)

  if (pClientState) {
    // force update
    fmemory.writeMemory(pClientState + deltaTickOffset, -1 /* <- value */, fmemory.BYTE)
  }
})()

NOTE: This works with Wine/Proton as well. (fmemory still needs improvements on this area, but it works.)

documentation:

When using writeMemory or readMemory functions, you will need to tell the data type parameter.

It can either be a string:

"int32", "uint32", "int64",
"uint64", "long", "ulong", 
"short", "float", "double", 
"byte", "char", "uchar",
"bool" "string", "pointer"

Or you can use one of the constants provided by the library:

fmemory.INT, fmemory.UINT, fmemory.INT64,
fmemory.UINT64, fmemory.LONG, fmemory.ULONG, 
fmemory.SHORT, fmemory.FLOAT, fmemory.DOUBLE,
fmemory.BYTE, fmemory.CHAR, fmemory.UCHAR,
fmemory.BOOL, fmemory.STRING, fmemory.POINTER

fmemory is available under the MIT License

About

💾 Simple npm package that reads and write memory inside a given process for Linux.

Topics

Resources

License

Stars

Watchers

Forks