Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4718321
Initial commit
Nightbringer21 May 6, 2016
09d384f
Update README.md
Nightbringer21 May 8, 2016
0b13b9e
Update README.md
Nightbringer21 May 8, 2016
c04f14f
Update README.md
Nightbringer21 May 8, 2016
24ba7ae
Update README.md
Nightbringer21 May 8, 2016
4b1e8a4
Update README.md
Nightbringer21 May 8, 2016
67fed66
Update README.md
Nightbringer21 May 8, 2016
b29c818
Update README.md
Nightbringer21 May 8, 2016
46d90fe
Update README.md
Nightbringer21 May 8, 2016
d86a248
Update README.md
Nightbringer21 May 8, 2016
3c60180
Added files via upload
Nightbringer21 May 8, 2016
9d08c61
Update README.md
Nightbringer21 May 8, 2016
06fc1ec
Update README.md
Nightbringer21 May 8, 2016
4e7d9a9
Update README.md
Nightbringer21 May 9, 2016
0b72c8e
Support Frida 12
Aug 12, 2018
611be93
Support Frida 12
Aug 12, 2018
adc740e
Support Frida 12
Aug 12, 2018
95523d9
Added logging for connection issues.Use verbose for more info.
Aug 12, 2018
d3b86eb
Added logging for connection issues.Use verbose for more info.
Aug 12, 2018
69999e6
minor update to readme.md
alexlauerman Oct 25, 2018
b3eba60
adjusting regex to support full ASCII range
AV-IO Apr 24, 2019
0f8c71b
Merge pull request #16 from AV-IO/patch-1
Nightbringer21 Apr 25, 2019
3e64ee0
Merge pull request #15 from alexlauerman/patch-1
Nightbringer21 Apr 25, 2019
7e00f2c
Initial commit
pkarnstein-SI Mar 27, 2025
2d2d355
updated for python3 and rich text
pkarnstein-SI Mar 27, 2025
68ccc14
merge readmes
pkarnstein-SI Mar 27, 2025
bd4c397
added a requirements.txt file and some screenshots
pkarnstein-SI Mar 27, 2025
b3efe54
merge
pkarnstein-SI Mar 27, 2025
91c8329
merge
pkarnstein-SI Mar 27, 2025
3a51cf0
merge
pkarnstein-SI Mar 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 80 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,86 @@
# fridump3
Fridump is an open source memory dumping tool, primarily aimed to penetration testers and developers. Fridump is using the Frida framework to dump accessible memory addresses from any platform supported. It can be used from a Windows, Linux or Mac OS X system to dump the memory of an iOS, Android or Windows application.
# Fridump 1.5

This project is based on the following project: [https://github.com/Nightbringer21/fridump](https://github.com/Nightbringer21/fridump) and the pending PR concerning the python3 support (especially from [georgepetz](https://github.com/georgepetz) . Additionally I added the network support in addition to the USB support.
basically I just fixed some syntax errors and changed the print statements and progress bars to make them cleaner and more in line with python3

FYI: I will destroy this repo is the Fridump author will integrate the pending PR concerning Python3 support.
![a screen capture of the revamped tool](capture.gif "Capture")

![the helptext](help_text.png "Helptext")


---

# Fridump
Fridump (v0.1) is an open source memory dumping tool, primarily aimed to penetration testers and developers. Fridump is using the Frida framework to dump accessible memory addresses from any platform supported. It can be used from a Windows, Linux or Mac OS X system to dump the memory of an iOS, Android or Windows application.

Usage
---

```
usage: fridump [-h] [-o dir] [-u] [-H HOST] [-v] [-r] [-s] [--max-size bytes] process

positional arguments:
process the process that you will be injecting to

optional arguments:
-h, --help show this help message and exit
-o dir, --out dir provide full output directory path. (def: 'dump')
-u, --usb device connected over usb
-H HOST, --host HOST device connected over IP
-v, --verbose verbose
-r, --read-only dump read-only parts of memory. More data, more errors
-s, --strings run strings on all dump files. Saved in output dir.
--max-size bytes maximum size of dump file in bytes (def: 20971520)
```
How to:

fridump [-h] [-o dir] [-U] [-v] [-r] [-s] [--max-size bytes] process

The following are the main flags that can be used with fridump:

positional arguments:
process the process that you will be injecting to

optional arguments:
-h, --help show this help message and exit
-o dir, --out dir provide full output directory path. (def: 'dump')
-U, --usb device connected over usb
-v, --verbose verbose
-r, --read-only dump read-only parts of memory. More data, more errors
-s, --strings run strings on all dump files. Saved in output dir.
--max-size bytes maximum size of dump file in bytes (def: 20971520)

To find the name of a local process, you can use:

frida-ps
For a process that is running on a USB connected device, you can use:

frida-ps -U

Examples:

fridump -U Safari - Dump the memory of an iOS device associated with the Safari app
fridump -U -s com.example.WebApp - Dump the memory of an Android device and run strings on all dump files
fridump -r -o [full_path] - Dump the memory of a local application and save it to the specified directory

More examples can be found [here](http://pentestcorner.com/introduction-to-fridump/)

Installation
---
To install Fridump you just need to clone it from git and run it:

git clone https://github.com/Nightbringer21/fridump.git

python fridump.py -h

Pre-requisites
---
To use fridump you need to have frida installed on your python environment and frida-server on the device you are trying to dump the memory from.
The easiest way to install frida on your python is using pip:

pip install frida

More information on how to install Frida can be found [here](http://www.frida.re/docs/installation/)

For iOS, installation instructions can be found [here](http://www.frida.re/docs/ios/).

For Android, installation instructions can be found [here](http://www.frida.re/docs/android/).

Note: On Android devices, make sure that the frida-server binary is running as root!

Disclaimer
---
* This is version 0.1 of the software, so I expect some bugs to be present
* I am not a developer, so my coding skills might not be the best

This tool has been tested on a Windows 7 and a Mac OS X laptop, dumping the memory of:
* an iPad Air 2 running iOS 8.2
* a Galaxy Tab running Cyanogenmod 4.4.4
* a Windows 7 laptop.

Therefore, if this tool is not working for you, I apologise and I will try to fix it.

Any suggestions and comments are welcome!
Binary file added __pycache__/dumper.cpython-312.pyc
Binary file not shown.
Binary file added __pycache__/utils.cpython-312.pyc
Binary file not shown.
Binary file added capture.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
26 changes: 13 additions & 13 deletions dumper.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,23 @@

# Reading bytes from session and saving it to a file


def dump_to_file(agent, base, size, error, directory):
def dump_to_file(agent,base,size,error,directory):
try:
filename = str(base) + '_dump.data'
dump = agent.read_memory(base, size)
f = open(os.path.join(directory, filename), 'wb')
filename = str(base)+'_dump.data'
dump = agent.read_memory(base, size)
f = open(os.path.join(directory,filename), 'wb')
f.write(dump)
f.close()
return error
except Exception as e:
logging.debug(str(e))
print("Oops, memory access violation!")
return error
logging.debug("[!]"+str(e))
logging.debug("Memory access violation")
return error

# Read bytes that are bigger than the max_size value, split them into chunks and save them to a file
#Read bytes that are bigger than the max_size value, split them into chunks and save them to a file

def splitter(agent,base,size,max_size,error,directory):
times = size//max_size
times = size/max_size
diff = size % max_size
if diff == 0:
logging.debug("Number of chunks:"+str(times+1))
Expand All @@ -29,11 +28,12 @@ def splitter(agent,base,size,max_size,error,directory):
global cur_base
cur_base = int(base,0)

for time in range(times):
# logging.debug("Save bytes: "+str(cur_base)+" till "+str(hex(cur_base+max_size)))
for time in range(int(times)):
logging.debug("Save bytes: "+str(cur_base)+" till "+str(cur_base+max_size))
dump_to_file(agent, cur_base, max_size, error, directory)
cur_base = cur_base + max_size

if diff != 0:
# logging.debug("Save bytes: "+str(hex(cur_base))+" till "+str(hex(cur_base+diff)))
logging.debug("Save bytes: "+str(hex(cur_base))+" till "+str(hex(cur_base+diff)))
dump_to_file(agent, cur_base, diff, error, directory)

Loading