Skip to content

Instantly share code, notes, and snippets.

Keybase proof

I hereby claim:

  • I am tomac on github.
  • I am lostinsecurity (https://keybase.io/lostinsecurity) on keybase.
  • I have a public key whose fingerprint is 07CD 38E4 15D9 A3F3 4033 563E A076 8098 3DE2 51FB

To claim this, I am signing this object:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <linux/types.h>
#include <linux/netfilter.h> /* for NF_ACCEPT */
#include <libnetfilter_queue/libnetfilter_queue.h>
#include "latch.h"
import nfqueue
import socket
import latch
q = None
def cb(dummy, payload):
response = api.status("ACCOUNT_ID_HERE").get_data()
if response["operations"][appId]["status"] == 'on'
payload.set_verdict(nfqueue.NF_DROP)
var options = {
'hostname': config.API_HOST.hostname,
'port': config.API_HOST.port,
'path': queryString,
'method': HTTPMethod,
'headers': headers,
'protocol': config.API_HOST.protocol
};
var latchResponse = '';
var authorizationHeader = config.AUTHORIZATION_METHOD + config.AUTHORIZATION_HEADER_FIELD_SEPARATOR +
config.appId + config.AUTHORIZATION_HEADER_FIELD_SEPARATOR + signData(stringToSign);
var headers = {};
headers[config.AUTHORIZATION_HEADER_NAME] = authorizationHeader;
headers[config.DATE_HEADER_NAME] = utc;
@tomac
tomac / NotificationPort.c
Created June 30, 2014 14:16
NotificationPort
notificationPort = IONotificationPortCreate(kIOMasterPortDefault);
CFRunLoopAddSource(CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
@tomac
tomac / Suspend.c
Last active August 29, 2015 14:03
Suspender
/* Para poder intentar suspender un dispositivo USB, tenemos que hacer varias cosas siendo lo primero crear un diccionario con el vendorId y productId concreto al que queremos mandar la orden de suspender, y después de usar IOServiceGetMatchingServices para encontrarlo, entonces ya podemos abrir el dispositivo y lanzar la orden */
err = IOCreatePlugInInterfaceForService(usbService, kIOUSBDeviceUserClientTypeID, kIOCFPlugInInterfaceID,
&pluginInterface, &score);
CHECKRETURN(err, "No se he podido crear el plugin");
if(!pluginInterface) {
fprintf(stderr, "No hay interfaz de plugin\n");
return -1;
}
/* Busquemos ahora a ver si encontramos el interfaz USB que necesitamos */
@tomac
tomac / Umount.c
Created June 30, 2014 14:11
Desmontar
bsdName = (CFStringRef) IORegistryEntrySearchCFProperty(device
, kIOServicePlane
, CFSTR( kIOBSDNameKey )
, NULL
, kIORegistryIterateRecursively);
/* Ahora ya podemos ver si está latch activado o no para desmontar el disco */
char* bsdNameChar = malloc(CFStringGetLength(bsdName) * sizeof(char));
if (bsdNameChar) {
if (CFStringGetCString(bsdName, bsdNameChar, CFStringGetLength(bsdName) +1, kCFStringEncodingASCII)) {
@tomac
tomac / GetInfo.c
Created June 30, 2014 14:08
GetInfo
/* Obtenemos el nombre del dispositivo. Este es el nombre que suele poner el fabricante y en el caso de los discos duros
* existe de todo: Flash Disk, DISK, Mass Storage, etc. OJO! No es el mismo nombre que el nombre del volumen que es el
* nombre que aparece cuando montamos la unidad en el sistema operativo
*/
if (IORegistryEntryGetName(device, devicename) != KERN_SUCCESS) {
fprintf(stderr, "%s unknown device (unable to get device name)\n", newdev ? "Added " : " Removed");
return -1;
}
/* Obtenemos el EntryPath, que indica dónde está en el sistema operativo
@tomac
tomac / Iterator.c
Created June 30, 2014 14:06
Iterator
io_service_t usbDevice;
int action = 0;
while ((usbDevice = IOIteratorNext(iterator))) {
get_usb_device_info(usbDevice, newdev);
IOObjectRelease(usbDevice);
}