GithubHelp home page GithubHelp logo

ufrisk / pcileech Goto Github PK

View Code? Open in Web Editor NEW
4.5K 143.0 692.0 4.57 MB

Direct Memory Access (DMA) Attack Software

License: GNU Affero General Public License v3.0

C 91.74% Standard ML 0.73% Assembly 7.34% Makefile 0.09% Python 0.10%

pcileech's Introduction

PCILeech Summary:

PCILeech uses PCIe hardware devices to read and write target system memory. This is achieved by using DMA over PCIe. No drivers are needed on the target system.

PCILeech also works without hardware together with a wide range of software memory acqusition methods supported by the LeechCore library - including capture of remote live memory using DumpIt or WinPmem. PCILeech also supports local capture of memory and a number of memory dump file formats.

PCILeech supports multiple memory acquisition devices. Both hardware and software based. USB3380 based hardware is only able to read 4GB of memory natively, but is able to read all memory if a kernel module (KMD) is first inserted into the target system kernel. FPGA based hardware, and software based methods, are able to read all memory.

PCILeech is capable of inserting a wide range of kernel implants into the targeted kernels - allowing for easy access to live ram and the file system via a "mounted drive". It is also possible to remove the logon password requirement, loading unsigned drivers, executing code and spawn system shells. PCIleech runs on Windows and Linux. Supported target systems are currently the x64 versions of: UEFI, Linux, FreeBSD and Windows. This requires write access to memory (USB3380 hardware, FPGA hardware, LiveCloudKd or CVE-2018-1038 "Total Meltdown").

To get going clone the sources in the repository or download the latest binaries, modules and configuration files.

The PushPin GUI frontend for PCILeech makes common RedTeam tasks super easy. Note that PushPin is not part of the official PCILeech distribution.

Capabilities:

  • Retrieve memory from the target system at >150MB/s.
  • Retrieve remote memory from remote LeechService.
  • Write data to the target system memory.
  • 4GB memory can be accessed in native DMA mode (USB3380 hardware).
  • ALL memory can be accessed in native DMA mode (FPGA hardware).
  • ALL memory can be accessed if kernel module (KMD) is loaded.
  • Raw PCIe TLP access (FPGA hardware).
  • Mount live RAM as file [Linux, Windows, macOS Sierra*].
  • Mount file system as drive [Linux, Windows, macOS Sierra*].
  • Execute kernel code on the target system.
  • Spawn system shell and other executables [Windows].
  • Pull and Push files [Linux, FreeBSD, Windows, macOS Sierra*].
  • Patch / Unlock (remove password requirement) [Windows, macOS Sierra*].
  • Easy to create own kernel shellcode and/or custom signatures.
  • Connect to a remote LeechAgent over the network to remotely:
    • Dump physical memory over the network.
    • Execute Python memory analysis scripts on the remote host.
  • Even more features not listed here ...

*) macOS High Sierra and above are not supported.

Memory Acquisition Methods:

PCILeech supports both hardware based and software based memory acqusition methods. All memory acqusition is handled by the LeechCore library.

Hardware based memory aqusition methods:

Please find a summary of the supported hardware based memory acquisition methods listed below. All hardware based memory acquisition methods are supported on both Windows and Linux. The FPGA based methods however sports a slight performance penalty on Linux and will max out at approx: 90MB/s compared to 150MB/s on Windows.

Device Type Interface Speed 64-bit memory access PCIe TLP access Project
Sponsor
Screamer PCIe Squirrel FPGA USB-C 190MB/s Yes Yes 💖
ZDMA FPGA Thunderbolt3 1000MB/s Yes Yes 💖
LeetDMA FPGA USB-C 190MB/s Yes Yes 💖
AC701/FT601 FPGA USB3 190MB/s Yes Yes
USB3380-EVB USB3380 USB3 150MB/s No No
PP3380 USB3380 USB3 150MB/s No No
DMA patched HP iLO BMC TCP 1MB/s Yes No

Software based memory aqusition methods:

Please find a summary of the supported software based memory acquisition methods listed below. Please note that the LeechService only provides a network connection to a remote LeechCore library. It's possible to use both hardware and software based memory acquisition once connected.

Device Type Volatile Write Linux Support Plugin
RAW physical memory dump File No No Yes No
Full Microsoft Crash Dump File No No Yes No
Full ELF Core Dump File No No Yes No
VMware Live Memory Yes Yes No No
VMware memory save file File No No Yes No
TotalMeltdown CVE-2018-1038 Yes Yes No No
DumpIt /LIVEKD Live Memory Yes No No No
WinPMEM Live Memory Yes No No No
LiveKd Live Memory Yes No No No
LiveCloudKd Live Memory Yes Yes No Yes
Hyper-V Saved State File No No No Yes
LeechAgent* Remote No No

Installing PCILeech:

Please ensure you do have the most recent version of PCILeech by visiting the PCILeech github repository at: https://github.com/ufrisk/pcileech

Get the latest binaries, modules and configuration files from the latest release. Alternatively clone the repository and build from source.

Windows:

Please see the PCILeech on Windows guide for information about running PCILeech on Windows.

The Google Android USB driver have to be installed if USB3380 hardware is used. Download the Google Android USB driver from: http://developer.android.com/sdk/win-usb.html#download Unzip the driver.
FTDI drivers have to be installed if FPGA is used with FT601 USB3 addon card or PCIeScreamer. Download the 64-bit FTD3XX.dll from FTDI and place it alongside pcileech.exe.
To mount live ram and target file system as drive in Windows the Dokany2 file system library must be installed. Please download and install the latest stable version of Dokany2 at: https://github.com/dokan-dev/dokany/releases/latest

Linux:

Please see the PCILeech on Linux guide for information about running PCILeech on Linux.

Examples:

Please see the project wiki pages for more examples. The wiki is in a buildup phase and information may still be missing.

Mount target system live RAM and file system, requires that a KMD is loaded. In this example 0x11abc000 is used.

  • pcileech.exe mount -kmd 0x11abc000

Show help for a specific kernel implant, in this case lx64_filepull kernel implant.

  • pcileech.exe lx64_filepull -help

Show help for the dump command.

  • pcileech.exe dump -help

Dump all memory from the target system given that a kernel module is loaded at address: 0x7fffe000.

  • pcileech.exe dump -kmd 0x7fffe000

Force dump memory below 4GB including accessible memory mapped devices using more stable USB2 approach on USB3380.

  • pcileech.exe dump -force -device usb3380://usb=2

Receive PCIe TLPs (Transaction Layer Packets) and print them on screen (correctly configured FPGA dev board required).

  • pcileech.exe tlp -vv -wait 1000

Probe/Enumerate the memory of the target system for readable memory pages and maximum memory. (FPGA hardware only).

  • pcileech.exe probe

Dump all memory between addresses min and max, don't stop on failed pages. Native access to 64-bit memory is only supported on FPGA hardware.

  • pcileech.exe dump -min 0x0 -max 0x21e5fffff -force

Dump all memory, try locate the memory map from the target system registry to avoid dumping potentially invalid memory which may freeze the target.

  • pcileech.exe dump -memmap auto

Force the usage of a specific device (instead of default auto detecting it). The pmem device is not auto detected.

  • pcileech.exe pagedisplay -min 0x1000 -device pmem

Dump remote memory from a remote LeechAgent using connection encrypted and mutually authenticated by kerberos.

Execute the Python analysis script find-rwx.py on a remote computer using the LeechAgent embedded Python environment.

Dump memory using the the reported "TotalMeltdown" Windows 7/2008R2 x64 PML4 page table permission vulnerability.

  • pcileech.exe dump -out memdump_win7.raw -device totalmeltdown -v -force

Insert a kernel module into a running Linux system remotely via a DMA patched HP iLO.

  • pcileech.exe kmdload -vvv -device -device RawTCP://127.0.0.1:8888 -kmd LINUX_X64_48

Patch virtual process memory of pid 432 (lsass.exe in this example).

  • pcileech.exe patch -pid 432 -sig unlock_win10x64.sig

Limitations/Known Issues:

  • Does not work if the OS uses the IOMMU/VT-d. This is the default on macOS (unless disabled in recovery mode). Windows 10/11 with Virtualization based security features enabled does not work fully.
  • Recent Windows and Linux versions block DMA by default.
  • Some Linux kernels does not work. Sometimes a required symbol is not exported in the kernel and PCILeech fails.
  • File system mount support only exists for Windows (Linux version is planned).
  • Remote connectivity support only exists for Windows.

PCILeech and MemProcFS community:

Find all this a bit overwhelming? Or just want to ask a quick question? Join the PCILeech and MemProcFS DMA community server at Discord!

Building:

The binaries are found in the releases section of this repository. If one wish to build an own version it is possible to do so. Please see the PCILeech on Windows or PCILeech on Linux for more information about building PCILeech. PCILeech is also dependant on LeechCore and optionally (for some extra functionality) on The Memory Process File System which must both be built separately.

Contributing:

PCILeech, MemProcFS and LeechCore are open source but not open contribution. PCILeech, MemProcFS and LeechCore offers a highly flexible plugin architecture that will allow for contributions in the form of plugins. If you wish to make a contribution, other than a plugin, to the core projects please contact me before starting to develop.

Links:

Support PCILeech/MemProcFS development:

PCILeech and MemProcFS is free and open source!

I put a lot of time and energy into PCILeech and MemProcFS and related research to make this happen. Some aspects of the projects relate to hardware and I put quite some money into my projects and related research. If you think PCILeech and/or MemProcFS are awesome tools and/or if you had a use for them it's now possible to contribute by becoming a sponsor!

If you like what I've created with PCIleech and MemProcFS with regards to DMA, Memory Analysis and Memory Forensics and would like to give something back to support future development please consider becoming a sponsor at: https://github.com/sponsors/ufrisk

To all my sponsors, Thank You 💖

All sponsorships are welcome, no matter how large or small.

Changelog:

Previous releases (click to expand):

v1.0-v3.6

  • Initial release and various updates. please see individual relases for more information.

v4.0

  • Major cleanup and internal refactorings.
  • FPGA max memory auto-detect and more stable dumping strategy.
  • New stable Windows 10 kernel injects with FPGA hardware on non-virtualization based security systems.
  • User mode injects (experimental).
  • Removal of built-in device support - the LeechCore leechcore.dll/leechcore.so library is now used instead. New devices include:
    • Memory dump files (raw linear dump files and microsoft crash dump files).
    • Hyper-V save files.
    • Live memory via DumpIt / WinPmem.
    • remote devices via -remote setting.
  • Removal of API and built-in Memory Process File System - please use the more capable APIs in the LeechCore and Memory Process File System instead.
  • Multiple other changes and syntax updates.

v4.1

  • LeechAgent support - remote memory acquisition and analysis.

v4.2

  • Signature updates:
    • Linux kernel module - LINUX_X64_48 (latest versions)
    • Win10 1903 kernel module - WIN10_X64_2 (requires windows version of PCILeech)

v4.3

  • Bug fixes.
  • Support for new device (NeTV2 / RawUDP) via LeechCore library.

v4.4

  • Bug fixes and stability improvements.
  • Support for MemProcFS v3 library.
  • Code signing of binaries.
  • "tlploop" command.

v4.5

  • Bug fixes.
  • Support for v2 of the LeechCore memory acquisition library.
  • MemProcFS integration when running on Windows.
  • Support for user-defined physical memory map (-memmap option).

v4.6

v4.7

  • Bug fixes.
  • WIN10_X64_3 new stable kernel signature for Windows 10 - including Win10 2004 release.
  • Unlock signature updates - Win10/Linux (NB! most recent kernels on Linux not yet supported).

v4.8

  • Bug fixes.
  • Better support for recent x64 Linux kernels.

v4.9

  • Bug fixes.
  • Signature updates.
  • Better support for recent x64 Linux kernels (Ubuntu 21.04).
  • Unmount of monted driver when CTRL+C pressed.

v4.10

  • Linux support for Windows 10 built-in signatures (dependency on MemProcFS v4.0).
  • Separate releases for Windows and Linux.
  • General cleanup.

v4.11

  • Support for VMWare Workstation/Player live VM memory.
  • Support for remote memory analysis with LeechAgent agent-forensic command.
    • Runs MemProcFS forensic mode remotely.
    • Retrieves ElasticSearch compatible JSON data.

v4.12

  • 32-bit support (pcileech binary).

v4.13

  • Bug fixes.
  • Mount improvements:
    • Windows host file system support: Upgrade to Dokany2 (NB! Dokany2 will have to be installed!).
    • Linux host file system support: FUSE support added.
      Example: ./pcileech mount /home/user/fusemnt/leechfs -kmd <your_kmd_address>
    • Now possible to access other local drives than C: on Windows targets.
  • Visual Studio 2022 Support.

v4.14

  • Process Virtual Memory support (Windows only).
    • Commands: search, patch, write, display, pagedisplay
    • Example: pcileech patch -pid 732 -sig unlock_win10x64.sig

v4.15

  • Support for MemProcFS v5.0

v4.16

  • FPGA performance improvements.
  • Command none added.
  • Options -bar-ro and -bar-rw added.

v4.17

  • I/O BAR support.
  • Linux improvements:
    • KMD signature update (LINUX_X64_48) to support latest Ubuntu kernels.
    • Update of kernel modules to support latest kernels.
    • New KMD signature - LINUX_X64_MAP - specify target system kernel System.map in -in option.
    • New kernel module: lx64_exec_root.
  • Linux PCIe FPGA performance improvements.

v4.18

  • Benchmark command added.
  • Unlock signatures updated.
  • -psname option added.

pcileech's People

Contributors

blshkv avatar blunden avatar false avatar ionescu007 avatar shuffle2 avatar signal-5 avatar ufrisk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pcileech's Issues

Can't flash USB3380-EVB

I'm trying to flash the USB3380, but it is not working.
When I run the insmod for the first time it returns:
insmod: ERROR: could not insert module pcileech_flash.ko: Device or resource busy

and dmesg has:
pcileech_flash: module verification failed: signature and/or required key missing - tainting kernel
PCILEECH FLASH: Module init called.
PCILEECH FLASH: Found USB3380 not flashed as PCILeech.
net2280 0000:01:00.0: BAR 0: can't reserve [mem 0xfbffe000-0xfbffffff]
PCILEECH FLASH: ERROR: Cannot request regions.
Trying to free nonexistent resource <00000000fbfe0000-00000000fbfeffff>
Trying to free nonexistent resource <00000000fbfd0000-00000000fbfdffff>

When a run the insmod again it returns:
insmod: ERROR: could not insert module pcileech_flash.ko: Input/output error

and the dmesg:
PCILEECH FLASH: Module init called.
PCILEECH FLASH: Found USB3380 not flashed as PCILeech.
PCILEECH FLASH: ERROR: Firmware write/verify not successful.

I've tried to reboot the system but it always returns the same errors.

OS -> lubuntu (linux-headers-4.4.0-31-generic)

Issue loading kernel module on Ubuntu 16.04

Tested v1.1 on Ubuntu 16.04.1 LTS desktop (x64), system with 16GB RAM. Vanilla kernel 4.4.0-31-generic #50:

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe kmdload -kmd LINUX_X64

KMD: Failed. Signature found but unable write #2.
PCILEECH: Failed to load kernel module.

Latest kernel 4.4.0-36-generic #55:

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe kmdload -kmd LINUX_X64

KMD: Failed. Error locating generic linux kernel signature.
PCILEECH: Failed to load kernel module.

Failed finding entry point

Hi, I used pcileech to attack my dell laptop(xps, 13, 9360), but I got a error: "KMD: Failed. Failed finding entry point.", I found it's caused by returnning false value from "KMD_Win_SearchTableHalpInterruptController".

The page dumped by "pcileech pagedisplay -min 0x1000" as following:
Memory Display: Contents for address: 0x0000000000001000
0000 e9 4d 06 00 01 00 00 00 01 00 00 00 3f 00 18 10 .M..........?...
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 9b 20 00 .............. .
0030 00 00 00 00 00 00 00 00 ff ff 00 00 00 93 cf 00 ................
0040 00 00 00 00 00 00 00 00 ff ff 00 00 00 9b cf 00 ................
0050 00 00 00 00 00 00 00 00 00 90 e1 61 00 00 00 00 ...........a....
0060 7c 16 00 00 30 00 c6 16 00 00 10 00 00 00 00 00 |...0...........
0070 a0 fe 8f ad 03 f8 ff ff 00 90 00 40 d5 f7 ff ff ...........@....
0080 06 01 07 00 06 01 07 00 01 09 00 00 00 00 00 00 ................
0090 33 00 05 80 00 00 00 00 00 00 00 00 00 00 00 00 3...............
00a0 00 a0 1a 00 00 00 00 00 78 06 17 00 00 00 00 00 ........x.......
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00e0 00 00 00 00 00 00 57 00 b0 5f 5f 9d 81 e2 ff ff ......W..__.....
00f0 00 00 00 00 00 00 ff 0f 00 30 5f 9d 81 e2 ff ff .........0
....._

Signatures for loading KMDs outdated WIN10.

I was just trying some stuff out for a bit with my USB3380 and found out that I wasnt able to load a KMD.
After checking the ntfs.sys it seems like it got updated to version 10.0.17134.112 last month.

Im not in a hurry, but it would be appreciated if anyone could take a look at the new signatures.

[Question] Latency and speed.

Is there any device that could make 500 - 1000 reads in different memory locations every 3 ms? So that's really low latency.
Would it be possible to put the hack on the card itself so no attacker pc is required? Maybe that would make memory reading in multiple different places faster? usb3380

Another question how could I load unsigned driver using pcileech.

Issue loading kernel module on Windows 8.1

See the Windows 10 issue, similar responses on cleanly installed and fully patched 8.1, using v1.1, again on a system with 16GB RAM. Reinserting the ExpressCard doesn't help.

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe kmdload -kmd win8x64_ntfs_20151230 -pt

KMD: Searching for PTE location ...
KMD: Failed. Could not find module base by PTE search.
PCILEECH: Failed to load kernel module.

Info that might help:

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe pagedisplay -m

Memory Page Read: Page contents for address: 0x0000000000001000
0000    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0010    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0020    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0030    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0040    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0050    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0060    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0070    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0080    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0090    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
00f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0100    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0110    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0120    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0130    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0140    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0150    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0160    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0170    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0180    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0190    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
01f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0200    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0210    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0220    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0230    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0240    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0250    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0260    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0270    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0280    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0290    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
02f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0300    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0310    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0320    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0330    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0340    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0350    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0360    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0370    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0380    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0390    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
03f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0400    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0410    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0420    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0430    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0440    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0450    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0460    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0470    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0480    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0490    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
04f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0500    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0510    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0520    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0530    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0540    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0550    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0560    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0570    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0580    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0590    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
05f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0600    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0610    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0620    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0630    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0640    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0650    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0660    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0670    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0680    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0690    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
06f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0700    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0710    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0720    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0730    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0740    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0750    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0760    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0770    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0780    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0790    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
07f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0800    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0810    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0820    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0830    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0840    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0850    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0860    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0870    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0880    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0890    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
08f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0900    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0910    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0920    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0930    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0940    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0950    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0960    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0970    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0980    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0990    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09a0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09b0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09c0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09d0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09e0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
09f0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a00    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a10    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a20    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a30    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a40    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a50    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a60    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a70    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a80    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0a90    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0aa0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0ab0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0ac0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0ad0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0ae0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0af0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b00    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b10    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b20    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b30    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b40    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b50    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b60    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b70    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b80    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0b90    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0ba0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0bb0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0bc0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0bd0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0be0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0bf0    ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff   ................
0c00    00 01 09 03 57 6d 44 53  56 19 77 48 50 41 b1 46   ....WmDSV.wHPA.F
0c10    b0 d6 bf 75 00 c0 ff ff  80 32 cd 75 00 c0 ff ff   ...u.....2.u....
0c20    00 00 00 50 00 00 00 00  01 00 00 00 00 00 00 00   ...P............
0c30    57 6d 44 53 00 00 00 00  d8 53 e3 75 00 c0 ff ff   WmDS.....S.u....
0c40    d8 94 cb 75 00 c0 ff ff  03 00 00 00 00 00 00 00   ...u............
0c50    04 00 00 00 00 00 00 00  60 20 bf 75 00 c0 ff ff   ........` .u....
0c60    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0c70    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0c80    00 00 00 00 00 00 00 00  88 20 bf 75 00 c0 ff ff   ......... .u....
0c90    09 01 0a 03 4d 53 65 67  c6 19 77 48 50 41 b1 46   ....MSeg..wHPA.F
0ca0    60 14 00 25 00 e0 ff ff  12 00 00 00 00 00 82 00   `..%............
0cb0    00 00 00 00 00 00 00 00  00 20 01 00 00 00 00 00   ......... ......
0cc0    00 00 5c f8 fe 7f 00 00  00 00 00 00 00 00 00 00   ..\.............
0cd0    01 00 00 00 00 00 00 00  e8 20 bf 75 00 c0 ff ff   ......... .u....
0ce0    c0 18 ee 78 00 c0 ff ff  60 ae 5c f8 fe 7f 00 00   ...x....`.\.....
0cf0    00 00 00 00 00 00 00 00  00 00 04 00 00 00 00 00   ................
0d00    00 10 00 00 00 00 00 00  02 00 00 00 00 00 06 00   ................
0d10    00 00 00 00 22 20 60 41  64 86 01 04 00 00 00 00   ...." `Ad.......
0d20    00 e0 00 00 23 f1 00 00  00 04 00 00 00 20 01 00   ....#........ ..
0d30    0a 01 09 03 46 53 69 6d  66 18 77 48 50 41 b1 46   ....FSimf.wHPA.F
0d40    03 00 00 00 59 28 60 00  00 13 40 20 00 e0 ff ff   ....Y(`...@ ....
0d50    79 00 5c 00 4d 00 61 00  63 00 68 00 69 00 6e 00   y.\.M.a.c.h.i.n.
0d60    65 00 5c 00 53 00 79 00  73 00 74 00 65 00 6d 00   e.\.S.y.s.t.e.m.
0d70    5c 00 43 00 75 00 72 00  72 00 65 00 6e 00 74 00   \.C.u.r.r.e.n.t.
0d80    43 00 6f 00 6e 00 74 00  72 00 6f 00 6c 00 53 00   C.o.n.t.r.o.l.S.
0d90    65 00 74 00 5c 00 53 00  65 00 72 00 76 00 69 00   e.t.\.S.e.r.v.i.
0da0    63 00 65 00 73 00 5c 00  57 00 64 00 66 00 30 00   c.e.s.\.W.d.f.0.
0db0    31 00 30 00 30 00 30 00  00 00 45 00 33 00 31 00   1.0.0.0...E.3.1.
0dc0    09 01 16 03 46 4d 66 6e  96 18 77 48 50 41 b1 46   ....FMfn..wHPA.F
0dd0    04 f2 4c 01 00 00 00 00  00 00 00 00 00 00 00 00   ..L.............
0de0    70 05 00 00 00 00 00 00  e8 21 bf 75 00 c0 ff ff   p........!.u....
0df0    00 00 00 00 00 00 00 00  78 d1 58 84 00 c0 ff ff   ........x.X.....
0e00    40 b6 57 24 00 e0 ff ff  00 00 00 00 00 00 00 00   @.W$............
0e10    00 00 00 00 00 00 00 00  00 80 01 00 00 00 00 00   ................
0e20    78 00 00 00 01 00 00 00  7a 00 7c 00 00 00 00 00   x.......z.|.....
0e30    a0 22 bf 75 00 c0 ff ff  2e 00 2e 00 00 00 00 00   .".u............
0e40    a0 22 bf 75 00 c0 ff ff  00 00 00 00 00 00 00 00   .".u............
0e50    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0e60    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0e70    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0e80    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0e90    00 00 00 00 00 00 00 00  02 00 00 00 00 00 00 00   ................
0ea0    5c 00 44 00 65 00 76 00  69 00 63 00 65 00 5c 00   \.D.e.v.i.c.e.\.
0eb0    48 00 61 00 72 00 64 00  64 00 69 00 73 00 6b 00   H.a.r.d.d.i.s.k.
0ec0    56 00 6f 00 6c 00 75 00  6d 00 65 00 32 00 5c 00   V.o.l.u.m.e.2.\.
0ed0    57 00 69 00 6e 00 64 00  6f 00 77 00 73 00 5c 00   W.i.n.d.o.w.s.\.
0ee0    53 00 79 00 73 00 74 00  65 00 6d 00 33 00 32 00   S.y.s.t.e.m.3.2.
0ef0    5c 00 50 00 65 00 72 00  66 00 53 00 74 00 72 00   \.P.e.r.f.S.t.r.
0f00    69 00 6e 00 67 00 42 00  61 00 63 00 6b 00 75 00   i.n.g.B.a.c.k.u.
0f10    70 00 2e 00 49 00 4e 00  49 00 00 00 00 00 00 00   p...I.N.I.......
0f20    16 01 04 03 4d 6d 53 6d  6e 00 64 00 6f 00 77 00   ....MmSmn.d.o.w.
0f30    90 d6 02 25 00 e0 ff ff  03 00 00 00 00 00 0c 00   ...%............
0f40    00 00 00 00 00 00 00 00  80 2f 00 00 00 00 00 00   ........./......
0f50    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
0f60    04 01 02 03 41 63 70 53  36 1a 77 48 50 41 b1 46   ....AcpS6.wHPA.F
0f70    5c 00 5f 00 53 00 42 00  2e 00 41 00 43 00 00 00   \._.S.B...A.C...
0f80    02 01 04 03 4e 74 46 73  d6 1a 77 48 50 41 b1 46   ....NtFs..wHPA.F
0f90    d0 28 b7 75 00 c0 ff ff  90 66 b7 75 00 c0 ff ff   .(.u.....f.u....
0fa0    50 77 cb 75 00 c0 ff ff  00 00 00 00 00 00 00 00   Pw.u............
0fb0    c7 8b 00 00 00 00 01 00  00 db cc 75 00 c0 ff ff   ...........u....
0fc0    04 01 0c 03 46 49 63 73  36 39 39 46 42 39 38 45   ....FIcs699FB98E
0fd0    00 00 00 00 00 00 00 00  c0 57 30 22 00 e0 ff ff   .........W0"....
0fe0    f0 be 8f 22 00 e0 ff ff  e8 23 bf 75 00 c0 ff ff   ...".....#.u....
0ff0    00 00 00 00 00 00 00 00  d8 cc d8 75 00 c0 ff ff   ...........u....

BTW: will there be a public release of Window 7 kernels at some point?

Stability issues PCIeScreamer

First of all thank you for your great work on DMA attacs, I've been following it the last months. Now I would like to get one of the PCILeech supported devices, where PCIeScreamer is my favorite. You wrote something about stability issues, could you please specify the problems of PCIeScreamer?
Are the stability issues fixable via software and are you going to work on that in the near future?
My intention is mainly to do memory dumps and look for information in the data. External power supply and multiple tries due to lack of stability wouldn't be a problem for me as long as it works sometime.

CDF

What widely available board can I get for this?

What is the cheapest and/or most widely available board I can buy to make a POC for this?
I looked at USB3380-EVB from bplus but they are very unresponsive and the handling times and shipping will be too long for me..

EEPROM can't be found

Hi,

I've just bought a USB3380-EVB with PE3B Mini Card to ExpressCard Adapter (from hwtools.net), and after many tries, still not able to flash it with pcileech firmware. ExpressCard is directly connect to PCI port of my laptop.

I first try with binaries compiled from your git, it always failed at the same point :

[ 298.214156] PCILEECH FLASH: Module init called.
[ 298.214173] PCILEECH FLASH: Found USB3380 not flashed as PCILeech.
[ 298.214320] PCILEECH FLASH: ERROR: Firmware write/verify not successful. Error: 0xfffffffd

After some debugging, I could figure out the checks which is always ko :

// 2: check if EEPROM exists if((*(unsigned int*)(pbar0 + OFFSET_PCIREG_EEPROM_CTL) & 0x00030000) == 0) { return -3;

Program is not able to detect EEPROM, even with forcing 1 or 2-byte adressing (still not able to locate EEPROM). Note that SET_LED calls work well (I'm able to set LED on USB3380, which seems to be a good sign that I'm able to contact it through my PCIe port on laptop).

Regarding issue #14, I also tried with https://github.com/NSAPlayset/SLOTSCREAMER, and PLX Console Monitor, and I've got the a similar issue :

17 0 03 01 02 -- 0822 1180 -- -- -- SD Host Controller
18 0 0C 00 00 00 4232 8086 -- -- -- Other network controller
=>19 0 0E 00 00 00 3380 10B5 3380 AB -- Avago USB controller
PLX Console Monitor, v2.90 [Apr 11 2017]
Copyright (c) PLX Technology, Inc.
eep
-- The PLX chip reports no EEPROM present --
Do you want to proceed [y/n]?

Of course, when I try a eep_load pcileech_firmware.bin :

eep_load /home/xxxxx/tools/pcileech/pcileech_files/firmware_pcileech.bin
Load EEPROM file... Ok (48B)
Verify option...... ENABLED (Use '-b' to disable)
Program EEPROM..... ERROR: offset:00 wrote:002A005A read:00000000
-- Complete (0.43 sec) --

And no firmware written... I tried with two different PC with PCIe ports, two different distrib Linux (Ubuntu Linux xxxxxx 4.8.0-46-generic #49~16.04.1 and a debian 8), even live CD, result is the same.

Note that I have these errors when loading PlxSvc in dmesg:

[ 1721.865181] PlxSvc: <========================================================>
[ 1721.865183] PlxSvc: PLX PCI Service driver v7.25 (64-bit)
[ 1721.865184] PlxSvc: Supports Linux kernel v4.8.0-46-generic
[ 1721.878077] PlxSvc: Error: PCI header type (2) not 0 or 1
[ 1721.878081] PlxSvc: Error: PCI header type (2) not 0 or 1
[ 1721.878483] PlxSvc: ERROR: NT detection not implemented for 3380
[ 1721.878491] PlxSvc: ...driver loaded

I don't know if it's an hardware issue or if I'm doing something wrong.. do you have any idea?

Thanks for your help.

Pepitoh.

Mac disable VMX

In "Limitations/Known Issues" section, you mentioned "Does not work if the OS uses the IOMMU/VT-d. This is the default on MacOS (unless disabled in recovery mode). ". I'm wondering how to disable VMX in MacOS in any version. Could you share some tips or experiments on that? Thank you.

Hot-swappable PCIe not working

I have been experimenting with pcileech to attempt a memory dump while the machine is still active. However, I have not yet been able to successfully access the memory while hot-swapping the PCIe hardware.

I have access to the PCIeScreamer and AC701/FT601. I have flashed both using the latest pcileech firmware. I have been able to use both cards in the situation where I turn of the target system, insert the PCIe card, and restart the target system. I have successfully created memory dumps and modified the Windows unlock password, for instance.

However, I have not been able to do this while the system is running. Even when the cards are inserted in a running system, the system appears to require a reboot before the software is able to read memory.

(Probably unrelated, but moreover, after a successful read-out, a further reboot of the target system will disallow reading memory again: the PCIe cards appear to require a power cycle to be able to read again.)

The target OS does not seem to matter here, both Windows and Linux have been attempted. My target systems include HP ProLiant and Dell PowerEdge servers.

Is this supported? If so, do you have tips on how to get this working?
I'd be happy to provide you with more details if you so require.

Why does PCILeech not work in hot-plug case?

Hello.
Just like the title, when i using PCILeech via USB3380-EVB device in hot-plug case, it didnt work.
I tested on bold PC and laptop. It only works when USB3380-EVB plugged in machine from startup.
Did i miss something? thank you.

[USB3380] Incorrect dumps

I am trying to use the USB3380 board to dump memory from a few test laptops. While dumping itself is working, I could not manage to produce two equal dumps ever. Each one is different, with differences grouped in blocks. Example: https://imgur.com/qF1Od0v

Same thing with testmemread -- it never completes properly. This points at the issue being in or below the DeviceReadDMA() function. Printing addresses coming to the Device3380_ReadDMA() function doesn't reveal anything suspicious -- aligned, sequential.

Host: Win10 x64; Target: various. Both exhibit similar symptoms.

I have also tried a Win7 x64 host, with the same result. In all cases I used the more reliable -usb2 option.

How can I debug this further?

Can't seem to mount file system

Hi,
I just received my pcie screamer and everything is working so far and is quite stable.
For some reason I cannot load the file system.
I have installed DokanSetup.exe and rebooted. Is there something I am missing?

PS C:\Users\Monka\Downloads\pcileech-master\pcileech-master\pcileech_files> .\pcileech identify -device .\3.raw

IDENTIFY: Scanning to identify target operating system and page directories...
  Currently supported oprerating systems:
     - Windows (64-bit).
 Current Action: Windows System PageDirectoryBase/PML4 located
 Access Mode:    DMA (hardware only)
 Progress:       1536 / 2205 (69%)
 Speed:          109 MB/s
 Address:        0x0000000060100000
 Pages read:     393216 / 564544 (69%)
 Pages failed:   0 (0%)
IDENTIFY: Succeeded: Windows System page directory base is located at: 0x1ad002


PS C:\Users\Monka\Downloads\pcileech-master\pcileech-master\pcileech_files> .\pcileech mount -device .\2.raw -cr3 0x1ad003

MOUNT: INFO: FILES folder not mounted. (No kernel module loaded).
MOUNTING PCILEECH FILE SYSTEM:
===============================================================================
PCILeech Memory Process File System is mounted in the /proc/ folder.
Memory from dump files or PCILeech hardware DMA devices is analyzed to provide
a convenient process file system.
 - File system is read-only when dump files are used.
 - File system is read-write when FPGA hardware acquisition devices are used.
 - Full support exists for some x64 Windows operating systems.
 - Limited support for all other x64 operating systems.
===============================================================================
MOUNT: Mounting as drive K:\
MOUNT: Failed. Status Code: -7

pcileech dump not fully working

`C:\Users\fff\Desktop\pcileech-master\pcileech_files>pcileech dump

Current Action: Dumping Memory
Access Mode: DMA (hardware only)
Progress: 2304 / 4096 (56%)
Speed: 209 MB/s
Address: 0x000000009F000000
Pages read: 585632 / 1048576 (55%)
Pages failed: 4192 (0%)
Memory Dump: Failed. Cannot dump any sequential data in 16MB - terminating.

C:\Users\fff\Desktop\pcileech-master\pcileech_files>pcileech dump

Current Action: Dumping Memory
Access Mode: DMA (hardware only)
Progress: 16 / 4096 (0%)
Speed: 16 MB/s
Address: 0x0000000010000000
Pages read: 0 / 1048576 (0%)
Pages failed: 4096 (0%)
Memory Dump: Failed. Cannot dump any sequential data in 16MB - terminating.

C:\Users\fff\Desktop\pcileech-master\pcileech_files>`

As you can see it cuts out around 2 gigs with the failure message, the raw files do have good memory though.

Anything through pcileech fails after that error appears until I restart my computer.

Target and victim are same pc running Microsoft Windows [Version 10.0.15063]

Using usb 3380 pcie card. Flashing succeeded clearly because it can read memory.

AMD IOMMU validation using PCILeech/PCIScreamer

Hi @ufrisk,
I'm enabling IOMMU in firmware (coreboot) for PC Engines apu2 router and would like to perform sanity checks if IOMMU really protects against DMA attacks. The device has 3 mPCIe ports and USB XHCI ports. I wonder what would be the best hardware to target this device. Typically users run Linux distros (Debian) or FreeBSD (pfSense) on those devices. There is no UEFI support right now.

Have you got any ideas about what kind of effort this project would require? Maybe it would be easier to use modified kernel drivers to validated IOMMU isolation?

pcileech library issue

Hi,

I have been trying to use the pcileech library. My first issue was I could not get it to link from a c++ project, it would never find the correct symbols signature. Switch to C only code resolved the linking problems.

The second one is I basically can't pass the PCILeech_InitializeFPGA call. I use a pcie screamer card for info, x64 windows 10 system. I always get the "FAIL: PCILeech_InitializeFPGA" result.
I was thinking, maybe that library is not meant to be used on Windows ?

Or is there anything else I could check to resolve my issues ?

pci screamer issus

hello,

i always get this error

FPGA: ERROR: Unable to retrieve required Device PCIe ID [0,v0.0,0000]
PCILEECH: Failed to connect to the device.

when i press the on-board button marked SW3 -> LD1 lights up

LD2 is on

if i try -> pcileech.exe dump -v; i get this error(FPGA: ERROR: Unable to retrieve required Device PCIe ID [0,v0.0,0000]
PCILEECH: Failed to connect to the device.)

LD1 goes on and stay on

Powering SP605

question isn't related to PCILeech hope it's okay to ask here though

so i bought a used sp605 off ebay and discovered that no accessory came with it

does anybody know where i can get a xilinx power supply or something similar that will work?

thanks for any help

[Issue] pcileech library : Freeze every ~5s

Hello,

After a while at tracking this issue I found out it was coming from pcileech.
To explain my problem I will just describe the steps to reproduce :

  • Make a simple console application that initialize the library
  • Read a ever changing value in a loop and print it in the console for exemple
    -> it reads the correct result, but every now and then (around 5 seconds, my multiple debugger sessions shown a 5s period) it just freezes the whole app. The UC usage gets down to 0, and around 0.8s later it's back to work. Thing is I have 5 threads in my application, and it somehow affects every one of them ; That is also why I didn't notice it was pcileech the root of the problem.

You can test it with a read delay of 500 or 1, it won't change anything. Also put a Sleep(200) or so in your loop, it won't change anything. Every 5 seconds your application will freeze.

Any idea what the problem could be ? Is that an hardware problem or the lib that runs some routine every 5seconds ?

Thanks for your help, if you have any idea of what I could do please don't hesitate :-)

Issue loading kernel module on Windows 10

Hi,

I'm trying to load a kernel module on a vanilla Windows 10 x64 target system. The .kmd is created using a copy of ntfs.sys of the target system. What I see:

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe kmdload -kmd win10x64_ntfs_20150710 -pt

KMD: Searching for PTE location ...
KMD: Failed. Could not find module base by PTE search.
PCILEECH: Failed to load kernel module.

C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>pcileech.exe kmdload -kmd win10x64_ntfs_20150710

 Current Action: Searching for KMD location
 Access Mode:    DMA (hardware only)
 Progress:       4089 / 4096 (99%)
 Speed:          42 MB/s
 Address:        0x00000000FF900000
 Pages read:     0 / 1048576 (0%)
 Pages fail:     1046784 (99%)
KMD: Failed. Could not find signature in memory.
PCILEECH: Failed to load kernel module.


C:\Users\bofh\Desktop\PCI Leech\pcileech-master\pcileech_files>

Any clues about what's going on or what I've overlooked? Perhaps worth mentioning that the tarhet system runs with 16GB RAM.

Cheers,

Jeroen

pcileech testmemread failed

Hi sir,
I first flashed my 3380 on a Ubuntu(with Express Card slot) with success, and then I use this Ubuntu as a target to attack. I use a latest windows 10 x64, then I plug 3380 into the Express Card slot, then run with pcileech.exe testmemread, it always prompted me with error:
Memory Test Read: starting, reading 1000 times from address: 0x00000000 Memory Test Read: Failed. DMA failed / data changed by target computer / memory corruption. Read: 1. Run: 0. Offset: 0x282
I also tried a macos as target to retrieve password, the os version is 10.11, and also not worked.
Could you see what's wrong with it?

Flashing documentation

I have this board:
http://www.hwtools.net/Adapter/USB3380EVB.html

And this:
http://www.hwtools.net/jpg/USB3380-AA%20EVK_1.jpg

And this:
http://www.hwtools.net/jpg/USB3380EVB-PE3B_1.jpg

And this:
http://www.hwtools.net/jpg/USB3380-AB_EVK-RC_1.jpg

I tried to flash PCILeech using USB3380EVB board alone connected via USB with no luck. Then I attached the USB3380EVB to PCIe converter and plugged it into PCIe port, no luck.
What am I missing? What's the correct connection combination to flash the PCILeech into USB3380EVB?

pcileech dll for linux

first of all the dll is working great on windows
do you have any hint on how to make the library work on linux?
Unfortunately I don't have any experience with dynamic/static libraries on linux
thanks for any help!

Attacking over Ubuntu 14.04 LTS

Hi there,

I am trying to work on PCILeech, the attacker system is Windows 10 x64, and the victim system is Ubuntu 14.04 LTS (kernel version: 3.19.0-43-generic, 16-GB RAM). The card is working fine and was flashed successfully. Still, there are some issues that need to be addressed.

1)- In the Native DMA mode, when I try to do "pcileech.exe dump" it starts to dump the memory files into a .RAW file but stops as it reaches 87% and the address at which it stops is always 0xDF000000.

nativedma

2)- For dumping more than 4GB or memory, we need to load the kernel KMD. I tried doing it and the kernel was successfully loaded at some address into the victim. But when I again try to do the dump using KMD and that address it gets stuck at like 5%.

3)- The actual task that I want to perform is to get the memory snapshot (basically read the memory contents) and determine whether the data is changed or not. For that (from my understanding), I need to read the dump (.RAW) file having memory data. Do you have any idea how to read the .RAW files to mark down the changed memory territories.

Furthermore, the command for file pulling is working fine
"pcileech.exe lx64_filepull -kmd LINUX_X64 -s /etc/shadow -out c:\temp\shadow".
the command for pagedisplay, testmemread, testmemreadwrite, etc. all are working fine.

Waiting for your response.

Thanks =)

Issue with the pciescreamer board with pcileech

Having issues dumping any memory, probing seems to work fine, flashed the board with the firmware from the fpga repo, seemed to work fine.

Here is a picture of the board, directly inserted into a pcie slot on my mobo.

Pictures hard to see as the lighting is quite bad, but LD3 is lit up, LD2 (left of the unlit LD1) is lit aswell. LD3 is lit all the time, even if the usb3 is disconnected.

Target and host pc are the same pc, I'm 99% sure all virtualization tech is disabled Just confirmed again and it is disabled(was** making sure everything was off last week while testing lamda's impl that never worked for me).

Here is the result of a pcileech.exe probe

pcileech.exe probe

Memory Map:
START END #PAGES
0000000000000000 - 000000000009ffff 000000a0
00000000000c0000 - 000000008fbfffff 0008fb40
0000000100000000 - 000000046effffff 0036f000

Current Action: Probing Memory
Access Mode: DMA (hardware only)
Progress: 23088 / (unknown)
Speed: 145 MB/s
Address: 0x00000005A2FFF000
Pages read: 4189152
Pages failed: 1721376

Here is the result of a pcileech.exe dump

pcileech dump

Current Action: Dumping Memory
Access Mode: DMA (hardware only)
Progress: 16 / (unknown)
Speed: 39 kB/s
Address: 0x0000000001000000
Pages read: 0
Pages failed: 4096
Memory Dump: Failed. Cannot dump any sequential data in 16MB - terminating.

Here is a testmemreadwrite

pcileech.exe testmemreadwrite -min 0x1000

Memory Test Read: starting, reading 1000 times from address: 0x00001000
Memory Test Read: Failed. DMA failed / data changed by target computer / memory corruption. Read: 0. Run: 0. Offset: 0x000

Picture of it in device manager, dev id is correct.

LCPCI output shows the pcie

05:00.0 Ethernet controller: Xilinx Corporation Device 0666 (rev 02)

command prompt ver

C:\WINDOWS\system32>ver

Microsoft Windows [Version 10.0.16299.192]

USB3380EVB not available

HI,
I was trying to implement this DMA attack. But it seems this USB3380EVB is not available anywhere(Even PP380-AB). Do you have any suggestion on an alternative ?
Would really appreciate any help.

PCIEScreamer BSOD on mount

Hey, keep BSOD'ing with the error code "PAGE_FAULT_IN_NONPAGED_AREA" upon trying to mount live memory. Using the latest version of dokany (tried previous versions aswell).
Some times it works for a few seconds, but most of the time I instantly BSOD.
Happens with both "pcileech.exe mount -device dump.raw -cr3 0x1ab002", and ""pcileech.exe mount -device dump.raw".

This happens to the attacker computer, not the victim.
Attacker using win10 and victim on win10.
Tried a secondary computer with win10 and tried to use the target computer as both victim and attacker.

It "works" (doesn't BSOD) on some dumps, but it won't find the proc system or it will result in this error; "VMM: vmm.c!VmmTlbPageTableVerify: BAD PT PAGE at PA: 0x1ab000" when running "pcileech.exe mount -device dump.raw -cr3 0x1ab002 -vv", and it won't find any procs.

I use the following command when dumping: "pcileech.exe dump -v -force -max 0x46effffff -out dump.raw"

Any idea what could be causing it?
Also wanna add, freaking awesome work you've put into this, managed to get everything else working besides this!

[USB3380] First bytes in dump are garbage

I have bumped in another interesting issue for which I have no fix currently.

In each memory dump, the first... about 0x200 bytes are garbage, different each time I execute dumping. From the "feel" of the data, these seem to be leftovers from a previous DMA operation being continued, at least it looks similar to what data is at the end of the previously taken dump.

I think I described something similar in another USB3380 related issue.

Error Message 0xf0000004

Every time I try to do an action on a win10 or OSX client I receive the 0xf0000004 error. I have fiddled around with attempting to do a DMA on different operating systems but continue to get this error. I have had success with the first stage of inserting code into the kernel, but not past that point. Also after I insert code into the kernel, if I do it again it is sent to a different address in the memory, is that typical?

When I flashed the chip, I did not receive any confirmation from the linux terminal. Is that typical? It just sent me to the next command line without any output from the terminal. My gut is telling me that I may have not flashed the card correctly.

about macos

Will macos10.12.6 can get FileVault2 password?

Cannot flash PCIEScreamer

So I tried to flash the PCIEScreamer with the following set up: PICEScreamer plugged in to PCIE slot, JTAG plugged in to PCIEScreamer and connect to same PC via USB. Flasing using Vivado Tcl Shell on Windows.
I always get the error:

ERROR: [Labtoolstcl 44-199] No matching targets found on connected servers: localhost
Resolution: If needed connect the desired target to a server and use command refresh_hw_server. Then rerun the get_hw_targets command.
ERROR: [Common 17-39] 'get_hw_targets' failed due to earlier errors.

while executing
"get_hw_targets"
invoked from within
"current_hw_target [get_hw_targets]"
(file "vivado_flash_hs2.tcl" line 11)

I have tried to flash directly with OpenOCD but it said no device found. I then checked the light indicated (with JTAG still plugged in), TEST BTN is blinking, LD2 is always on and LD3 is off.

What might be the problems?

Exception in VmmCacheReserve

When i'm reading memory in a fast loop i get this error after about 25 reads

Image

my code :

VmmProcInitialize(ctx);
PVMM_CONTEXT ctxVmm = (PVMM_CONTEXT)ctx->hVMM;
PVMM_PROCESS proc = VmmProcessGet(ctxVmm, procId);

while (1) {
    int num;
    VmmRead(ctxVmm, proc, address, &num, sizeof(num));

    printf("%d\n", num);

    Sleep(150);
}

thanks for any help

USB not enumerating

Like user iTestAndroid in issue #14 I had an issue flashing my PP3380 using Ubuntu 16.04.1 LTS kernel 4.4.0-62-generic. I ended up using the PLX SDK to flash the device with firmware_pcileech.bin.

The issue I originally encountered was the same PCILEECH FLASH: ERROR: Firmware write/verify not successful error. I had not been able to resolve this issue, so I used the PLX SDK.

After flashing the, the output from PlxCm eep command gives the following:

>eep

   ------ 8505 EEPROM Header ------
 Signature    : 5A [Valid]
 Registers    : 42 bytes (7 regs)

   #    Port     Offset     Value
 -----------------------------------
   0     04       008C     00003849
   1     00       0000     16BC14E4
   2     04       0320     00040602
   3     04       0340     00040684
   4     04       0360     00040686
   5     04       0380     00040688
   6     04       0084     900118D1

Which corresponds directly with firmware_pcileech.bin.

However, when I plug the USB port into my windows machine it never enumerates, and installation of the Android USB driver (Android ADB interface) gives the following: This device cannot start (Code 10). I assumed this was because I installed the driver prior to connecting the device. However, after connecting the device, it doesn't appear to enumerate. I confirmed by deleting the driver then connecting the device. I assume, probably incorrectly, that the device should show up as an Other, but I don't see anything.

Suggestions? Recommendations?

Physical and virtual adresses

Is there any function in pcileech that could convert virtual address to physical? What did you do when you run into pointers and you need to read them ?

Saw you have funciton m_phys_to_virt but it is for linux right ?

Basically, im trying to read pointers that point to virtual address.

KMD for ntfs.sys v10.0.16299.15

Hi

I have aquired a pciescreamer card, and after having managed to flash and probe it, I was left with trying to inject a kernel module. Unfortunately pcileech.exe kmdload -kmd win10_x64 only works intermittently (1 out of 5 attempts - but I am not sure if it was truly successful, since pcileech.exe mount -device c:\temp\memdump_win10.raw failed afterwards), and using ntfs.sys is being stopped by my version of ntfs.sys being without a signature.

C:\pcileech-master\pcileech_files>pcileech_gensig.exe c:\Windows\System32\drivers\ntfs.sys
pcileech_gensig: failed! no signature matches file: c:\Windows\System32\drivers\ntfs.sys
PS C:\WINDOWS\system32\drivers> Get-Command .\ntfs.sys | format-list


Name            : ntfs.sys
CommandType     : Application
Definition      : C:\WINDOWS\system32\drivers\ntfs.sys
Extension       : .sys
Path            : C:\WINDOWS\system32\drivers\ntfs.sys
FileVersionInfo : File:             C:\WINDOWS\system32\drivers\ntfs.sys
                  InternalName:     ntfs.sys
                  OriginalFilename: ntfs.sys.mui
                  FileVersion:      10.0.16299.15 (WinBuild.160101.0800)
                  FileDescription:  NT File System Driver
                  Product:          Microsoft® Windows® Operating System
                  ProductVersion:   10.0.16299.15
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:         English (United States)




PS C:\WINDOWS\system32\drivers>  Get-FileHash .\ntfs.sys|format-list


Algorithm : SHA256
Hash      : EFC68FD339850013F11FC68D6C7D28EDC298C552C4A244E83E0CFCFDA92C19B9
Path      : C:\WINDOWS\system32\drivers\ntfs.sys

Is there a way for me to provide you with enough information to make this signature as well? Alternatively, is there a guide for how I can make the signatures myself?

[Question] Dll library cpu usage

Hello,

I am having bad cpu usage performance (80% cpu timings/usage after profiling) with the Mem:Read function.
I call the method a lot as I need to refresh my data like all the time. The read data are most of the time quite small. Like 4 bytes, sometimes 12, but rarely more.
Is there anything I could do optimize this CPU usage ?
I have tried to unset the nocache flag the most often I could, but I have some data that need to be refreshed pretty often.
How does the nocache flag work exactly by the way ?
Does the read data sometimes get updated ? Does it detect change or ?

Do you think I can do something about it ? any optimization maybe ? Or maybe there is somewhere in the sources I can have a look into for my use case ?

About IOMMU/VT-d

Does not work if the OS uses the IOMMU/VT-d. This is the default on macOS (unless disabled in recovery mode). Windows 10 with Virtualization based security features enabled does not work fully - this is however not the default setting in Windows 10 or Linux.

I'm a little curious about why exactly the virtualization affects this, and what it's the meaning of does not work fully? Many thanks!

USB3380 Speed only 25K

I used P15S-P15FM.2 to mPCIe Extender Board + USB3380 Evaluation Board

when i run pcileech.exe dump ,the speed only 25k-35k

Attack computer is USB3.0 and screen print

Device Info: USB330 running at USB2 speed.

why? hope help

thanks

FileVault2 password recovery on maverics

Dear Ufrisk,

I have successfulu run filevault password recovery on el capitan but it fails on mavericks.

It is downloading partial memory file same size as in el capitan but then it fails and computer is hangs. need restart.

[BUG] Device605_TCP_TxTlp sends too much data

Hello, in function Device605_TCP_TxTlp in pcileech/device605_tcp.c, the number of bytes to send (cbTx) is computed with the following formula:

cbTx = sizeof(PCIE_CTL) * cbTlp;

As each item in pbTlp is 4-byte long when it is inserted into a PCIE_CTL structure, the expression should rather be:

cbTx = sizeof(PCIE_CTL) * cbTlp / 4;

Currently Device605_TCP_TxTlp() is sending garbage with every TLP, which is quite annoying when this garbage has some control flags set. Could you please fix this?

Anyway, thank you for adding the support of this TCP/IP device in the last release! It makes it possible to easily relay DMA commands through the network, which is a feature that I needed.

How to contribute?

Hello, I just noticed your tweet regarding a possible feature to map per-process memory to files mounted via DMA and was wondering how to contribute to this repository. Maybe a roadmap or more documentation about todos would be helpful for possible contributors (like me 😃)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.