2010-02-21 08:47:22 +08:00
//-----------------------------------------------------------------------------
// Copyright (C) 2010 iZsh <izsh at fail0verflow.com>
//
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
// at your option, any later version. See the LICENSE.txt file for the text of
// the license.
//-----------------------------------------------------------------------------
// Low frequency commands
//-----------------------------------------------------------------------------
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
# include "cmdlf.h"
2017-02-27 21:04:50 +08:00
2019-08-08 22:57:33 +08:00
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <limits.h>
# include <ctype.h>
# include "cmdparser.h" // command_t
# include "comms.h"
# include "commonutil.h" // ARRAYLEN
# include "lfdemod.h" // device/client demods of LF signals
# include "ui.h" // for show graph controls
# include "graph.h" // for graph data
# include "cmddata.h" // for `lf search`
# include "cmdlfawid.h" // for awid menu
# include "cmdlfem4x.h" // for em4x menu
# include "cmdlfhid.h" // for hid menu
# include "cmdlfhitag.h" // for hitag menu
# include "cmdlfio.h" // for ioprox menu
# include "cmdlft55xx.h" // for t55xx menu
# include "cmdlfti.h" // for ti menu
# include "cmdlfpresco.h" // for presco menu
# include "cmdlfpcf7931.h" // for pcf7931 menu
# include "cmdlfpyramid.h" // for pyramid menu
# include "cmdlfviking.h" // for viking menu
# include "cmdlfnedap.h" // for NEDAP menu
# include "cmdlfjablotron.h" // for JABLOTRON menu
# include "cmdlfvisa2000.h" // for VISA2000 menu
# include "cmdlfnoralsy.h" // for NORALSY meny
# include "cmdlfcotag.h" // for COTAG meny
# include "cmdlfindala.h" // for indala menu
# include "cmdlfguard.h" // for gproxii menu
# include "cmdlffdx.h" // for fdx-b menu
# include "cmdlfparadox.h" // for paradox menu
# include "cmdlfnexwatch.h" // for nexwatch menu
# include "cmdlfsecurakey.h" // for securakey menu
# include "cmdlfpac.h" // for pac menu
# include "cmdlfkeri.h" // for keri menu
2017-07-12 00:31:10 +08:00
bool g_lf_threshold_set = false ;
2017-02-27 21:04:50 +08:00
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
static int CmdHelp ( const char * Cmd ) ;
2019-04-10 19:06:05 +08:00
static int usage_lf_cmdread ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf cmdread d <delay period> z <zero period> o <one period> c <cmdbytes> " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " d <delay> delay OFF period, (0 for bitbang mode) (decimal) " ) ;
PrintAndLogEx ( NORMAL , " z <zero> time period ZERO, (decimal) " ) ;
PrintAndLogEx ( NORMAL , " o <one> time period ONE, (decimal) " ) ;
PrintAndLogEx ( NORMAL , " c <cmd> Command bytes (in ones and zeros) " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
PrintAndLogEx ( NORMAL , " ************* All periods in microseconds (ms) " ) ;
PrintAndLogEx ( NORMAL , " ************* Use lf config to configure options. " ) ;
PrintAndLogEx ( NORMAL , " Examples: " ) ;
PrintAndLogEx ( NORMAL , " lf cmdread d 80 z 100 o 200 c 11000 " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-05 00:01:33 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_read ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf read [h] [s] [d numofsamples] " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " s silent run no printout " ) ;
PrintAndLogEx ( NORMAL , " d #samples # samples to collect (optional) " ) ;
PrintAndLogEx ( NORMAL , " Use 'lf config' to set parameters. " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
PrintAndLogEx ( NORMAL , " Examples: " ) ;
PrintAndLogEx ( NORMAL , " lf read s d 12000 - collects 12000samples silent " ) ;
PrintAndLogEx ( NORMAL , " lf read s " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
}
static int usage_lf_sim ( void ) {
2019-05-24 01:16:06 +08:00
PrintAndLogEx ( NORMAL , " Simulate low frequence tag from graphbuffer. " ) ;
2019-05-23 22:51:19 +08:00
PrintAndLogEx ( NORMAL , " Use " _YELLOW_ ( " 'lf config' " ) " to set parameters. " ) ;
2019-05-24 01:16:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf sim [h] <gap> " ) ;
2019-05-23 22:51:19 +08:00
PrintAndLogEx ( NORMAL , " Options: " ) ;
2019-05-24 01:16:06 +08:00
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " <gap> Start gap (in microseconds) " ) ;
2019-05-23 22:51:19 +08:00
PrintAndLogEx ( NORMAL , " Examples: " ) ;
PrintAndLogEx ( NORMAL , " lf sim 240 - start simulating with 240ms gap " ) ;
PrintAndLogEx ( NORMAL , " lf sim " ) ;
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_sniff ( void ) {
2019-03-11 22:08:34 +08:00
PrintAndLogEx ( NORMAL , " Sniff low frequence signal. " ) ;
PrintAndLogEx ( NORMAL , " Use " _YELLOW_ ( " 'lf config' " ) " to set parameters. " ) ;
PrintAndLogEx ( NORMAL , " Use " _YELLOW_ ( " 'data samples' " ) " command to download from device, and " _YELLOW_ ( " 'data plot' " ) " to look at it " ) ;
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf sniff [h] " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Options: " ) ;
2019-05-22 20:32:30 +08:00
PrintAndLogEx ( NORMAL , " h This help " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_config ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf config [h] [H|<divisor>] [b <bps>] [d <decim>] [a 0|1] " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
2019-05-09 07:07:34 +08:00
PrintAndLogEx ( NORMAL , " L Low frequency (125 kHz) " ) ;
PrintAndLogEx ( NORMAL , " H High frequency (134 kHz) " ) ;
PrintAndLogEx ( NORMAL , " q <divisor> Manually set divisor. 88-> 134 kHz, 95-> 125 kHz " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " b <bps> Sets resolution of bits per sample. Default (max): 8 " ) ;
PrintAndLogEx ( NORMAL , " d <decim> Sets decimation. A value of N saves only 1 in N samples. Default: 1 " ) ;
PrintAndLogEx ( NORMAL , " a [0|1] Averaging - if set, will average the stored sample value when decimating. Default: 1 " ) ;
PrintAndLogEx ( NORMAL , " t <threshold> Sets trigger threshold. 0 means no threshold (range: 0-128) " ) ;
PrintAndLogEx ( NORMAL , " Examples: " ) ;
PrintAndLogEx ( NORMAL , " lf config b 8 L " ) ;
2019-05-09 07:07:34 +08:00
PrintAndLogEx ( NORMAL , " Samples at 125 kHz, 8bps. " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " lf config H b 4 d 3 " ) ;
2019-05-09 07:07:34 +08:00
PrintAndLogEx ( NORMAL , " Samples at 134 kHz, averages three samples into one, stored with " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " a resolution of 4 bits per sample. " ) ;
PrintAndLogEx ( NORMAL , " lf read " ) ;
PrintAndLogEx ( NORMAL , " Performs a read (active field) " ) ;
2019-03-12 20:15:39 +08:00
PrintAndLogEx ( NORMAL , " lf sniff " ) ;
PrintAndLogEx ( NORMAL , " Performs a sniff (no active field) " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_simfsk ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf simfsk [h] [c <clock>] [H <fcHigh>] [L <fcLow>] [d <hexdata>] " ) ;
PrintAndLogEx ( NORMAL , " there are about four FSK modulations to know of. " ) ;
PrintAndLogEx ( NORMAL , " FSK1 - where fc/8 = high and fc/5 = low " ) ;
PrintAndLogEx ( NORMAL , " FSK1a - is inverted FSK1, ie: fc/5 = high and fc/8 = low " ) ;
PrintAndLogEx ( NORMAL , " FSK2 - where fc/10 = high and fc/8 = low " ) ;
PrintAndLogEx ( NORMAL , " FSK2a - is inverted FSK2, ie: fc/10 = high and fc/8 = low " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " c <clock> Manually set clock - can autodetect if using DemodBuffer " ) ;
PrintAndLogEx ( NORMAL , " H <fcHigh> Manually set the larger Field Clock " ) ;
PrintAndLogEx ( NORMAL , " L <fcLow> Manually set the smaller Field Clock " ) ;
//PrintAndLogEx(NORMAL, " s TBD- -STT to enable a gap between playback repetitions - default: no gap");
PrintAndLogEx ( NORMAL , " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer " ) ;
PrintAndLogEx ( NORMAL , " \n NOTE: if you set one clock manually set them all manually " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
PrintAndLogEx ( NORMAL , " Examples: " ) ;
PrintAndLogEx ( NORMAL , " lf simfsk c 40 H 8 L 5 d 010203 - FSK1 rf/40 data 010203 " ) ;
PrintAndLogEx ( NORMAL , " lf simfsk c 40 H 5 L 8 d 010203 - FSK1a rf/40 data 010203 " ) ;
PrintAndLogEx ( NORMAL , " lf simfsk c 64 H 10 L 8 d 010203 - FSK2 rf/64 data 010203 " ) ;
PrintAndLogEx ( NORMAL , " lf simfsk c 64 H 8 L 10 d 010203 - FSK2a rf/64 data 010203 " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_simask ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf simask [c <clock>] [i] [b|m|r] [s] [d <raw hex to sim>] " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " c <clock> Manually set clock - can autodetect if using DemodBuffer " ) ;
PrintAndLogEx ( NORMAL , " i invert data " ) ;
PrintAndLogEx ( NORMAL , " b sim ask/biphase " ) ;
PrintAndLogEx ( NORMAL , " m sim ask/manchester - Default " ) ;
PrintAndLogEx ( NORMAL , " r sim ask/raw " ) ;
PrintAndLogEx ( NORMAL , " s add t55xx Sequence Terminator gap - default: no gaps (only manchester) " ) ;
PrintAndLogEx ( NORMAL , " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_simpsk ( void ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf simpsk [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] " ) ;
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " c <clock> Manually set clock - can autodetect if using DemodBuffer " ) ;
PrintAndLogEx ( NORMAL , " i invert data " ) ;
PrintAndLogEx ( NORMAL , " 1 set PSK1 (default) " ) ;
PrintAndLogEx ( NORMAL , " 2 set PSK2 " ) ;
PrintAndLogEx ( NORMAL , " 3 set PSK3 " ) ;
PrintAndLogEx ( NORMAL , " r <carrier> 2|4|8 are valid carriers: default = 2 " ) ;
PrintAndLogEx ( NORMAL , " d <hexdata> Data to sim as hex - omit to sim from DemodBuffer " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-10-21 15:07:36 +08:00
}
2019-04-10 19:06:05 +08:00
static int usage_lf_find ( void ) {
2018-02-21 15:31:24 +08:00
PrintAndLogEx ( NORMAL , " Usage: lf search [h] <0|1> [u] " ) ;
PrintAndLogEx ( NORMAL , " " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Options: " ) ;
PrintAndLogEx ( NORMAL , " h This help " ) ;
PrintAndLogEx ( NORMAL , " <0|1> Use data from Graphbuffer, if not set, try reading data from tag. " ) ;
2018-02-21 15:31:24 +08:00
PrintAndLogEx ( NORMAL , " u Search for Unknown tags, if not set, reads only known tags. " ) ;
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Examples: " ) ;
2018-02-21 15:31:24 +08:00
PrintAndLogEx ( NORMAL , " lf search = try reading data from tag & search for known tags " ) ;
PrintAndLogEx ( NORMAL , " lf search 1 = use data from GraphBuffer & search for known tags " ) ;
PrintAndLogEx ( NORMAL , " lf search u = try reading data from tag & search for known and unknown tags " ) ;
PrintAndLogEx ( NORMAL , " lf search 1 u = use data from GraphBuffer & search for known and unknown tags " ) ;
2019-05-23 22:51:19 +08:00
return PM3_SUCCESS ;
2015-11-10 18:42:59 +08:00
}
2015-10-05 00:01:33 +08:00
2015-10-17 05:16:46 +08:00
/* send a LF command before reading */
2019-03-10 18:20:22 +08:00
int CmdLFCommandRead ( const char * Cmd ) {
2016-07-31 01:36:48 +08:00
2019-05-24 01:16:06 +08:00
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-03-10 06:35:06 +08:00
bool errors = false ;
2019-04-19 23:03:39 +08:00
uint16_t datalen = 0 ;
2019-04-20 07:08:07 +08:00
2019-05-20 21:15:45 +08:00
struct p {
uint32_t delay ;
uint16_t ones ;
uint16_t zeros ;
uint8_t data [ PM3_CMD_DATA_SIZE - 8 ] ;
2019-05-24 01:16:06 +08:00
} PACKED payload ;
2019-05-20 21:15:45 +08:00
2019-03-10 06:35:06 +08:00
uint8_t cmdp = 0 ;
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
switch ( tolower ( param_getchar ( Cmd , cmdp ) ) ) {
2019-03-10 07:00:59 +08:00
case ' h ' :
return usage_lf_cmdread ( ) ;
2019-05-20 21:15:45 +08:00
case ' c ' : // cmd bytes 1010
datalen = param_getstr ( Cmd , cmdp + 1 , ( char * ) & payload . data , sizeof ( payload . data ) ) ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
break ;
2019-05-20 21:15:45 +08:00
case ' d ' : // delay
payload . delay = param_get32ex ( Cmd , cmdp + 1 , 0 , 10 ) ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
break ;
2019-05-20 21:15:45 +08:00
case ' z ' : // zero
payload . zeros = param_get32ex ( Cmd , cmdp + 1 , 0 , 10 ) & 0xFFFF ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
break ;
2019-05-20 21:15:45 +08:00
case ' o ' : // ones
payload . ones = param_get32ex ( Cmd , cmdp + 1 , 0 , 10 ) & 0xFFFF ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = true ;
break ;
2019-03-10 06:35:06 +08:00
}
}
//Validations
if ( errors | | cmdp = = 0 ) return usage_lf_cmdread ( ) ;
2019-05-20 21:15:45 +08:00
PrintAndLogEx ( SUCCESS , " Sending " ) ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_MOD_THEN_ACQ_RAW_ADC , ( uint8_t * ) & payload , 8 + datalen ) ;
2019-05-20 21:15:45 +08:00
printf ( " \n " ) ;
uint8_t i = 10 ;
2019-08-04 01:17:00 +08:00
while ( ! WaitForResponseTimeout ( CMD_LF_MOD_THEN_ACQ_RAW_ADC , NULL , 2000 ) & & i ! = 0 ) {
2019-05-20 21:15:45 +08:00
printf ( " . " ) ;
fflush ( stdout ) ;
i - - ;
}
printf ( " \n " ) ;
2019-03-10 06:35:06 +08:00
2019-06-08 03:40:33 +08:00
if ( i ) {
2019-05-20 21:15:45 +08:00
PrintAndLogEx ( SUCCESS , " Downloading response signal data " ) ;
getSamples ( 0 , true ) ;
return PM3_SUCCESS ;
}
PrintAndLogEx ( WARNING , " timeout while waiting for reply. " ) ;
2019-05-20 22:48:51 +08:00
return PM3_ETIMEOUT ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2019-03-10 18:20:22 +08:00
int CmdFlexdemod ( const char * Cmd ) {
2019-04-10 18:23:40 +08:00
( void ) Cmd ; // Cmd is not used so far
2019-02-25 03:11:05 +08:00
# ifndef LONG_WAIT
# define LONG_WAIT 100
# endif
2019-04-10 14:55:29 +08:00
int i , j , start , bit , sum ;
2019-03-10 06:35:06 +08:00
int data [ GraphTraceLen ] ;
memcpy ( data , GraphBuffer , GraphTraceLen ) ;
size_t size = GraphTraceLen ;
for ( i = 0 ; i < GraphTraceLen ; + + i )
data [ i ] = ( data [ i ] < 0 ) ? - 1 : 1 ;
for ( start = 0 ; start < size - LONG_WAIT ; start + + ) {
int first = data [ start ] ;
for ( i = start ; i < start + LONG_WAIT ; i + + ) {
if ( data [ i ] ! = first ) {
break ;
}
}
if ( i = = ( start + LONG_WAIT ) )
break ;
}
if ( start = = size - LONG_WAIT ) {
2019-03-12 06:12:31 +08:00
PrintAndLogEx ( WARNING , " nothing to wait for " ) ;
2019-05-24 01:16:06 +08:00
return PM3_ENODATA ;
2019-03-10 06:35:06 +08:00
}
data [ start ] = 4 ;
2019-03-10 07:00:59 +08:00
data [ start + 1 ] = 0 ;
2019-03-10 06:35:06 +08:00
uint8_t bits [ 64 ] = { 0x00 } ;
i = start ;
for ( bit = 0 ; bit < 64 ; bit + + ) {
sum = 0 ;
2019-04-08 02:13:30 +08:00
for ( j = 0 ; j < 16 ; j + + ) {
2019-03-10 06:35:06 +08:00
sum + = data [ i + + ] ;
}
bits [ bit ] = ( sum > 0 ) ? 1 : 0 ;
PrintAndLogEx ( NORMAL , " bit %d sum %d " , bit , sum ) ;
}
for ( bit = 0 ; bit < 64 ; bit + + ) {
sum = 0 ;
for ( j = 0 ; j < 16 ; j + + )
sum + = data [ i + + ] ;
2019-03-10 21:42:43 +08:00
if ( sum > 0 & & bits [ bit ] ! = 1 ) PrintAndLogEx ( WARNING , " oops1 at %d " , bit ) ;
2019-03-10 06:35:06 +08:00
2019-03-10 21:42:43 +08:00
if ( sum < 0 & & bits [ bit ] ! = 0 ) PrintAndLogEx ( WARNING , " oops2 at %d " , bit ) ;
2019-03-10 06:35:06 +08:00
}
// iceman, use demod buffer? blue line?
// HACK writing back to graphbuffer.
GraphTraceLen = 32 * 64 ;
i = 0 ;
for ( bit = 0 ; bit < 64 ; bit + + ) {
2019-04-10 14:55:29 +08:00
int phase = ( bits [ bit ] = = 0 ) ? 0 : 1 ;
2019-03-10 06:35:06 +08:00
for ( j = 0 ; j < 32 ; j + + ) {
GraphBuffer [ i + + ] = phase ;
phase = ! phase ;
}
}
RepaintGraphWindow ( ) ;
2019-05-24 01:16:06 +08:00
return PM3_SUCCESS ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2012-07-02 16:37:50 +08:00
2019-03-10 18:20:22 +08:00
int CmdLFSetConfig ( const char * Cmd ) {
2019-05-24 01:16:06 +08:00
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-03-10 06:35:06 +08:00
uint8_t divisor = 0 ; //Frequency divisor
uint8_t bps = 0 ; // Bits per sample
uint8_t decimation = 0 ; //How many to keep
bool averaging = 1 ; // Defaults to true
bool errors = false ;
int trigger_threshold = - 1 ; //Means no change
uint8_t unsigned_trigg = 0 ;
uint8_t cmdp = 0 ;
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
switch ( param_getchar ( Cmd , cmdp ) ) {
2019-03-10 07:00:59 +08:00
case ' h ' :
return usage_lf_config ( ) ;
case ' H ' :
divisor = 88 ;
cmdp + + ;
break ;
case ' L ' :
divisor = 95 ;
cmdp + + ;
break ;
case ' q ' :
errors | = param_getdec ( Cmd , cmdp + 1 , & divisor ) ;
cmdp + = 2 ;
break ;
case ' t ' :
errors | = param_getdec ( Cmd , cmdp + 1 , & unsigned_trigg ) ;
cmdp + = 2 ;
if ( ! errors ) {
trigger_threshold = unsigned_trigg ;
g_lf_threshold_set = ( trigger_threshold > 0 ) ;
}
break ;
case ' b ' :
errors | = param_getdec ( Cmd , cmdp + 1 , & bps ) ;
cmdp + = 2 ;
break ;
case ' d ' :
errors | = param_getdec ( Cmd , cmdp + 1 , & decimation ) ;
cmdp + = 2 ;
break ;
case ' a ' :
averaging = param_getchar ( Cmd , cmdp + 1 ) = = ' 1 ' ;
cmdp + = 2 ;
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = 1 ;
break ;
2019-03-10 06:35:06 +08:00
}
}
//Validations
if ( errors | | cmdp = = 0 ) return usage_lf_config ( ) ;
//Bps is limited to 8
if ( bps > > 4 ) bps = 8 ;
sample_config config = { decimation , bps , averaging , divisor , trigger_threshold } ;
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_SAMPLING_SET_CONFIG , ( uint8_t * ) & config , sizeof ( sample_config ) ) ;
2019-05-24 01:16:06 +08:00
return PM3_SUCCESS ;
2015-01-31 06:03:44 +08:00
}
2015-01-29 07:57:22 +08:00
2019-05-24 01:16:06 +08:00
int lf_read ( bool silent , uint32_t samples ) {
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-05-20 22:48:51 +08:00
struct p {
uint8_t silent ;
uint32_t samples ;
} PACKED ;
struct p payload ;
payload . silent = silent ;
payload . samples = samples ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_ACQ_RAW_ADC , ( uint8_t * ) & payload , sizeof ( payload ) ) ;
2019-03-10 06:35:06 +08:00
2019-04-18 18:43:35 +08:00
PacketResponseNG resp ;
2019-03-10 06:35:06 +08:00
if ( g_lf_threshold_set ) {
2019-08-04 01:17:00 +08:00
WaitForResponse ( CMD_LF_ACQ_RAW_ADC , & resp ) ;
2019-03-10 06:35:06 +08:00
} else {
2019-08-04 01:17:00 +08:00
if ( ! WaitForResponseTimeout ( CMD_LF_ACQ_RAW_ADC , & resp , 2500 ) ) {
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( WARNING , " command execution time out " ) ;
2019-05-20 22:48:51 +08:00
return PM3_ETIMEOUT ;
2019-03-10 06:35:06 +08:00
}
}
2019-05-20 22:48:51 +08:00
2019-04-18 05:44:48 +08:00
// resp.oldarg[0] is bits read not bytes read.
2019-06-08 03:40:33 +08:00
uint32_t bits = ( resp . data . asDwords [ 0 ] / 8 ) ;
2019-05-20 22:48:51 +08:00
getSamples ( bits , silent ) ;
2019-03-10 06:35:06 +08:00
2019-05-20 22:48:51 +08:00
return PM3_SUCCESS ;
2017-07-30 15:17:48 +08:00
}
2019-03-10 18:20:22 +08:00
int CmdLFRead ( const char * Cmd ) {
2019-03-09 15:59:13 +08:00
2019-05-24 01:16:06 +08:00
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-03-10 06:35:06 +08:00
bool errors = false ;
bool silent = false ;
uint32_t samples = 0 ;
uint8_t cmdp = 0 ;
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
switch ( tolower ( param_getchar ( Cmd , cmdp ) ) ) {
2019-03-10 07:00:59 +08:00
case ' h ' :
return usage_lf_read ( ) ;
case ' s ' :
silent = true ;
cmdp + + ;
break ;
case ' d ' :
2019-08-14 02:30:19 +08:00
samples = param_get32ex ( Cmd , cmdp + 1 , 0 , 10 ) ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = true ;
break ;
2019-03-10 06:35:06 +08:00
}
}
//Validations
if ( errors ) return usage_lf_read ( ) ;
return lf_read ( silent , samples ) ;
2015-01-31 06:03:44 +08:00
}
2015-01-29 07:57:22 +08:00
2019-03-11 21:55:02 +08:00
int CmdLFSniff ( const char * Cmd ) {
2019-05-24 01:16:06 +08:00
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-03-10 06:35:06 +08:00
uint8_t cmdp = tolower ( param_getchar ( Cmd , 0 ) ) ;
2019-03-11 21:55:02 +08:00
if ( cmdp = = ' h ' ) return usage_lf_sniff ( ) ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_SNIFF_RAW_ADC , NULL , 0 ) ;
2019-03-10 06:35:06 +08:00
WaitForResponse ( CMD_ACK , NULL ) ;
getSamples ( 0 , false ) ;
2019-05-24 01:16:06 +08:00
return PM3_SUCCESS ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2019-05-22 20:32:30 +08:00
static void ChkBitstream ( ) {
2019-03-10 06:35:06 +08:00
// convert to bitstream if necessary
2019-03-10 07:00:59 +08:00
for ( int i = 0 ; i < ( int ) ( GraphTraceLen / 2 ) ; i + + ) {
2019-03-10 06:35:06 +08:00
if ( GraphBuffer [ i ] > 1 | | GraphBuffer [ i ] < 0 ) {
CmdGetBitStream ( " " ) ;
2019-06-08 03:40:33 +08:00
PrintAndLogEx ( INFO , " Converted to bitstream " ) ;
2019-03-10 06:35:06 +08:00
break ;
}
}
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2015-04-05 12:58:57 +08:00
//Attempt to simulate any wave in buffer (one bit per output sample)
// converts GraphBuffer to bitstream (based on zero crossings) if needed.
2019-03-10 18:20:22 +08:00
int CmdLFSim ( const char * Cmd ) {
2019-05-23 22:51:19 +08:00
2019-05-24 01:16:06 +08:00
if ( ! session . pm3_present ) return PM3_ENOTTY ;
2019-05-23 22:51:19 +08:00
// sanity check
2019-06-08 03:40:33 +08:00
if ( GraphTraceLen < 20 ) {
2019-05-23 22:51:19 +08:00
PrintAndLogEx ( ERR , " No data in Graphbuffer " ) ;
return PM3_ENODATA ;
}
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
2019-05-24 01:16:06 +08:00
uint8_t cmdp = tolower ( param_getchar ( Cmd , 0 ) ) ;
if ( cmdp = = ' h ' ) return usage_lf_sim ( ) ;
2019-05-22 20:32:30 +08:00
uint16_t gap = param_get32ex ( Cmd , 0 , 0 , 10 ) & 0xFFFF ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
2019-03-10 06:35:06 +08:00
// convert to bitstream if necessary
2019-05-22 20:32:30 +08:00
ChkBitstream ( ) ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
2019-05-22 20:32:30 +08:00
PrintAndLogEx ( DEBUG , " DEBUG: Uploading %d bytes " , GraphTraceLen ) ;
struct pupload {
uint8_t flag ;
uint16_t offset ;
uint8_t data [ PM3_CMD_DATA_SIZE - 3 ] ;
2019-05-23 18:12:20 +08:00
} PACKED payload_up ;
2019-05-22 20:32:30 +08:00
2019-06-08 03:40:33 +08:00
// flag =
// b0 0
2019-05-22 20:32:30 +08:00
// 1 clear bigbuff
2019-05-23 22:51:19 +08:00
payload_up . flag = 0x1 ;
2019-03-09 15:59:13 +08:00
2019-04-30 16:10:25 +08:00
// fast push mode
conn . block_after_ACK = true ;
2019-05-01 07:38:52 +08:00
2019-03-10 06:35:06 +08:00
//can send only 512 bits at a time (1 byte sent per bit...)
2019-05-22 20:32:30 +08:00
for ( uint16_t i = 0 ; i < GraphTraceLen ; i + = PM3_CMD_DATA_SIZE - 3 ) {
size_t len = MIN ( ( GraphTraceLen - i ) , PM3_CMD_DATA_SIZE - 3 ) ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-05-22 20:32:30 +08:00
payload_up . offset = i ;
2019-06-08 03:40:33 +08:00
for ( uint16_t j = 0 ; j < len ; j + + )
payload_up . data [ j ] = GraphBuffer [ i + j ] ;
2019-05-22 20:32:30 +08:00
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_UPLOAD_SIM_SAMPLES , ( uint8_t * ) & payload_up , sizeof ( struct pupload ) ) ;
WaitForResponse ( CMD_LF_UPLOAD_SIM_SAMPLES , NULL ) ;
2019-03-10 07:00:59 +08:00
printf ( " . " ) ;
fflush ( stdout ) ;
2019-05-22 20:32:30 +08:00
payload_up . flag = 0 ;
2019-03-10 06:35:06 +08:00
}
2019-04-30 16:10:25 +08:00
2019-05-09 04:45:20 +08:00
// Disable fast mode before last command
2019-04-30 16:10:25 +08:00
conn . block_after_ACK = false ;
2019-05-23 18:12:20 +08:00
printf ( " \n " ) ;
2015-02-20 10:35:34 +08:00
2019-05-23 18:12:20 +08:00
PrintAndLogEx ( INFO , " Simulating " ) ;
2019-05-22 20:32:30 +08:00
struct p {
uint16_t len ;
uint16_t gap ;
2019-05-23 22:51:19 +08:00
} PACKED payload ;
2019-05-22 20:32:30 +08:00
payload . len = GraphTraceLen ;
2019-06-08 03:40:33 +08:00
payload . gap = gap ;
2016-10-20 07:16:32 +08:00
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_SIMULATE , ( uint8_t * ) & payload , sizeof ( payload ) ) ;
2019-05-22 20:32:30 +08:00
2019-05-09 06:08:59 +08:00
PacketResponseNG resp ;
2019-08-04 01:17:00 +08:00
WaitForResponse ( CMD_LF_SIMULATE , & resp ) ;
2019-05-22 20:32:30 +08:00
PrintAndLogEx ( INFO , " Done " ) ;
2019-05-10 02:20:54 +08:00
if ( resp . status ! = PM3_EOPABORTED )
2019-05-09 06:08:59 +08:00
return resp . status ;
return PM3_SUCCESS ;
2015-02-22 10:36:02 +08:00
}
2015-03-08 12:31:23 +08:00
2019-03-09 15:59:13 +08:00
// by marshmellow - sim fsk data given clock, fcHigh, fcLow, invert
2015-02-20 10:35:34 +08:00
// - allow pull data from DemodBuffer
2019-03-10 18:20:22 +08:00
int CmdLFfskSim ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
//might be able to autodetect FCs and clock from Graphbuffer if using demod buffer
// otherwise will need FChigh, FClow, Clock, and bitstream
uint8_t fcHigh = 0 , fcLow = 0 , clk = 0 ;
bool errors = false , separator = false ;
char hexData [ 64 ] = { 0x00 } ; // store entered hex data
uint8_t data [ 255 ] = { 0x00 } ;
int dataLen = 0 ;
uint8_t cmdp = 0 ;
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
2019-03-10 07:00:59 +08:00
switch ( param_getchar ( Cmd , cmdp ) ) {
2019-03-10 06:35:06 +08:00
case ' h ' :
return usage_lf_simfsk ( ) ;
case ' c ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & clk ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
case ' H ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & fcHigh ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
case ' L ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & fcLow ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
case ' s ' :
2019-03-19 04:45:06 +08:00
separator = true ;
2019-03-10 06:35:06 +08:00
cmdp + + ;
break ;
case ' d ' :
2019-03-10 07:00:59 +08:00
dataLen = param_getstr ( Cmd , cmdp + 1 , hexData , sizeof ( hexData ) ) ;
2019-03-10 06:35:06 +08:00
if ( dataLen = = 0 )
errors = true ;
else
dataLen = hextobinarray ( ( char * ) data , hexData ) ;
if ( dataLen = = 0 ) errors = true ;
2019-07-14 06:35:18 +08:00
if ( errors ) PrintAndLogEx ( ERR , " Error getting hex data " ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = true ;
break ;
}
}
// No args
if ( cmdp = = 0 & & DemodBufferLen = = 0 ) return usage_lf_simfsk ( ) ;
//Validations
if ( errors ) return usage_lf_simfsk ( ) ;
int firstClockEdge = 0 ;
2019-03-10 07:00:59 +08:00
if ( dataLen = = 0 ) { //using DemodBuffer
if ( clk = = 0 | | fcHigh = = 0 | | fcLow = = 0 ) { //manual settings must set them all
2019-03-10 06:35:06 +08:00
uint8_t ans = fskClocks ( & fcHigh , & fcLow , & clk , & firstClockEdge ) ;
2019-03-10 07:00:59 +08:00
if ( ans = = 0 ) {
2019-03-10 06:35:06 +08:00
if ( ! fcHigh ) fcHigh = 10 ;
if ( ! fcLow ) fcLow = 8 ;
if ( ! clk ) clk = 50 ;
}
}
} else {
2019-04-07 03:46:00 +08:00
setDemodBuff ( data , dataLen , 0 ) ;
2019-03-10 06:35:06 +08:00
}
//default if not found
if ( clk = = 0 ) clk = 50 ;
if ( fcHigh = = 0 ) fcHigh = 10 ;
if ( fcLow = = 0 ) fcLow = 8 ;
size_t size = DemodBufferLen ;
2019-05-24 05:07:12 +08:00
if ( size > ( PM3_CMD_DATA_SIZE - sizeof ( lf_fsksim_t ) ) ) {
PrintAndLogEx ( NORMAL , " DemodBuffer too long for current implementation - length: %d - max: %d " , size , PM3_CMD_DATA_SIZE - sizeof ( lf_fsksim_t ) ) ;
size = PM3_CMD_DATA_SIZE - sizeof ( lf_fsksim_t ) ;
2019-03-10 06:35:06 +08:00
}
2019-05-24 01:16:06 +08:00
2019-05-24 05:07:12 +08:00
lf_fsksim_t * payload = calloc ( 1 , sizeof ( lf_fsksim_t ) + size ) ;
payload - > fchigh = fcHigh ;
payload - > fclow = fcLow ;
payload - > separator = separator ;
payload - > clock = clk ;
memcpy ( payload - > data , DemodBuffer , size ) ;
2019-05-24 01:16:06 +08:00
PrintAndLogEx ( INFO , " Simulating " ) ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_FSK_SIMULATE , ( uint8_t * ) payload , sizeof ( lf_fsksim_t ) + size ) ;
2019-05-24 06:32:17 +08:00
free ( payload ) ;
2019-03-10 06:35:06 +08:00
setClockGrid ( clk , 0 ) ;
2019-05-09 06:08:59 +08:00
PacketResponseNG resp ;
2019-08-04 01:17:00 +08:00
WaitForResponse ( CMD_LF_FSK_SIMULATE , & resp ) ;
2019-05-24 01:16:06 +08:00
PrintAndLogEx ( INFO , " Done " ) ;
2019-05-10 02:20:54 +08:00
if ( resp . status ! = PM3_EOPABORTED )
2019-05-09 06:08:59 +08:00
return resp . status ;
return PM3_SUCCESS ;
2015-02-20 10:35:34 +08:00
}
2019-03-09 15:59:13 +08:00
// by marshmellow - sim ask data given clock, invert, manchester or raw, separator
2015-02-20 10:35:34 +08:00
// - allow pull data from DemodBuffer
2019-03-10 18:20:22 +08:00
int CmdLFaskSim ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
// autodetect clock from Graphbuffer if using demod buffer
// needs clock, invert, manchester/raw as m or r, separator as s, and bitstream
uint8_t encoding = 1 , separator = 0 , clk = 0 , invert = 0 ;
bool errors = false ;
char hexData [ 64 ] = { 0x00 } ;
uint8_t data [ 255 ] = { 0x00 } ; // store entered hex data
int dataLen = 0 ;
uint8_t cmdp = 0 ;
2019-03-10 07:00:59 +08:00
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
2019-03-10 06:35:06 +08:00
switch ( tolower ( param_getchar ( Cmd , cmdp ) ) ) {
2019-03-10 07:00:59 +08:00
case ' h ' :
return usage_lf_simask ( ) ;
2019-03-10 06:35:06 +08:00
case ' i ' :
invert = 1 ;
cmdp + + ;
break ;
case ' c ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & clk ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
case ' b ' :
encoding = 2 ; //biphase
cmdp + + ;
break ;
case ' m ' :
encoding = 1 ; //manchester
cmdp + + ;
break ;
case ' r ' :
encoding = 0 ; //raw
cmdp + + ;
break ;
case ' s ' :
separator = 1 ;
cmdp + + ;
break ;
case ' d ' :
2019-03-10 07:00:59 +08:00
dataLen = param_getstr ( Cmd , cmdp + 1 , hexData , sizeof ( hexData ) ) ;
2019-03-10 06:35:06 +08:00
if ( dataLen = = 0 )
errors = true ;
else
dataLen = hextobinarray ( ( char * ) data , hexData ) ;
if ( dataLen = = 0 ) errors = true ;
2019-07-14 06:35:18 +08:00
if ( errors ) PrintAndLogEx ( ERR , " Error getting hex data, datalen: %d " , dataLen ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = true ;
break ;
}
}
// No args
if ( cmdp = = 0 & & DemodBufferLen = = 0 ) return usage_lf_simask ( ) ;
//Validations
if ( errors ) return usage_lf_simask ( ) ;
2019-03-10 07:00:59 +08:00
if ( dataLen = = 0 ) { //using DemodBuffer
2019-03-10 06:35:06 +08:00
if ( clk = = 0 )
clk = GetAskClock ( " 0 " , false ) ;
} else {
2019-04-07 03:46:00 +08:00
setDemodBuff ( data , dataLen , 0 ) ;
2019-03-10 06:35:06 +08:00
}
if ( clk = = 0 ) clk = 64 ;
if ( encoding = = 0 ) clk / = 2 ; //askraw needs to double the clock speed
size_t size = DemodBufferLen ;
2019-05-24 19:06:08 +08:00
if ( size > ( PM3_CMD_DATA_SIZE - sizeof ( lf_asksim_t ) ) ) {
PrintAndLogEx ( NORMAL , " DemodBuffer too long for current implementation - length: %d - max: %d " , size , PM3_CMD_DATA_SIZE - sizeof ( lf_asksim_t ) ) ;
size = PM3_CMD_DATA_SIZE - sizeof ( lf_asksim_t ) ;
2019-03-10 06:35:06 +08:00
}
2019-05-24 19:06:08 +08:00
lf_asksim_t * payload = calloc ( 1 , sizeof ( lf_asksim_t ) + size ) ;
payload - > encoding = encoding ;
payload - > invert = invert ;
payload - > separator = separator ;
payload - > clock = clk ;
memcpy ( payload - > data , DemodBuffer , size ) ;
PrintAndLogEx ( INFO , " Simulating " ) ;
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_ASK_SIMULATE , ( uint8_t * ) payload , sizeof ( lf_asksim_t ) + size ) ;
2019-05-24 19:06:08 +08:00
free ( payload ) ;
2019-05-09 06:08:59 +08:00
PacketResponseNG resp ;
2019-08-04 01:17:00 +08:00
WaitForResponse ( CMD_LF_ASK_SIMULATE , & resp ) ;
2019-05-24 19:06:08 +08:00
PrintAndLogEx ( INFO , " Done " ) ;
2019-05-10 02:20:54 +08:00
if ( resp . status ! = PM3_EOPABORTED )
2019-05-09 06:08:59 +08:00
return resp . status ;
return PM3_SUCCESS ;
2015-02-20 10:35:34 +08:00
}
2019-03-09 15:59:13 +08:00
// by marshmellow - sim psk data given carrier, clock, invert
2015-02-22 10:36:02 +08:00
// - allow pull data from DemodBuffer or parameters
2019-03-10 18:20:22 +08:00
int CmdLFpskSim ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
//might be able to autodetect FC and clock from Graphbuffer if using demod buffer
//will need carrier, Clock, and bitstream
2019-03-10 07:00:59 +08:00
uint8_t carrier = 0 , clk = 0 ;
uint8_t invert = 0 ;
2019-03-10 06:35:06 +08:00
bool errors = false ;
char hexData [ 64 ] = { 0x00 } ; // store entered hex data
uint8_t data [ 255 ] = { 0x00 } ;
int dataLen = 0 ;
uint8_t cmdp = 0 ;
uint8_t pskType = 1 ;
while ( param_getchar ( Cmd , cmdp ) ! = 0x00 & & ! errors ) {
switch ( tolower ( param_getchar ( Cmd , cmdp ) ) ) {
case ' h ' :
return usage_lf_simpsk ( ) ;
case ' i ' :
invert = 1 ;
cmdp + + ;
break ;
case ' c ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & clk ) ;
cmdp + = 2 ;
2019-03-10 06:35:06 +08:00
break ;
case ' r ' :
2019-03-10 07:00:59 +08:00
errors | = param_getdec ( Cmd , cmdp + 1 , & carrier ) ;
2019-03-10 06:35:06 +08:00
cmdp + = 2 ;
break ;
case ' 1 ' :
pskType = 1 ;
cmdp + + ;
break ;
case ' 2 ' :
pskType = 2 ;
cmdp + + ;
break ;
case ' 3 ' :
pskType = 3 ;
cmdp + + ;
break ;
case ' d ' :
2019-03-10 07:00:59 +08:00
dataLen = param_getstr ( Cmd , cmdp + 1 , hexData , sizeof ( hexData ) ) ;
2019-03-10 06:35:06 +08:00
if ( dataLen = = 0 )
errors = true ;
else
dataLen = hextobinarray ( ( char * ) data , hexData ) ;
if ( dataLen = = 0 ) errors = true ;
2019-07-14 06:35:18 +08:00
if ( errors ) PrintAndLogEx ( ERR , " Error getting hex data " ) ;
2019-03-10 07:00:59 +08:00
cmdp + = 2 ;
2019-03-10 06:35:06 +08:00
break ;
default :
PrintAndLogEx ( WARNING , " Unknown parameter '%c' " , param_getchar ( Cmd , cmdp ) ) ;
errors = true ;
break ;
2019-03-10 07:00:59 +08:00
}
2019-03-10 06:35:06 +08:00
}
// No args
if ( cmdp = = 0 & & DemodBufferLen = = 0 )
errors = true ;
//Validations
if ( errors ) return usage_lf_simpsk ( ) ;
2019-03-10 07:00:59 +08:00
if ( dataLen = = 0 ) { //using DemodBuffer
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( NORMAL , " Getting Clocks " ) ;
2019-03-10 07:00:59 +08:00
if ( clk = = 0 ) clk = GetPskClock ( " " , false ) ;
PrintAndLogEx ( NORMAL , " clk: %d " , clk ) ;
2019-03-10 06:35:06 +08:00
if ( ! carrier ) carrier = GetPskCarrier ( " " , false ) ;
PrintAndLogEx ( NORMAL , " carrier: %d " , carrier ) ;
} else {
2019-04-07 03:46:00 +08:00
setDemodBuff ( data , dataLen , 0 ) ;
2019-03-10 06:35:06 +08:00
}
2019-03-18 23:59:21 +08:00
if ( clk = = 0 ) clk = 32 ;
2019-03-10 06:35:06 +08:00
2019-03-10 07:00:59 +08:00
if ( carrier ! = 2 & & carrier ! = 4 & & carrier ! = 8 )
2019-03-10 06:35:06 +08:00
carrier = 2 ;
2019-03-10 07:00:59 +08:00
if ( pskType ! = 1 ) {
if ( pskType = = 2 ) {
2019-03-10 06:35:06 +08:00
//need to convert psk2 to psk1 data before sim
psk2TOpsk1 ( DemodBuffer , DemodBufferLen ) ;
} else {
PrintAndLogEx ( NORMAL , " Sorry, PSK3 not yet available " ) ;
}
}
size_t size = DemodBufferLen ;
2019-05-24 21:11:30 +08:00
if ( size > ( PM3_CMD_DATA_SIZE - sizeof ( lf_psksim_t ) ) ) {
PrintAndLogEx ( NORMAL , " DemodBuffer too long for current implementation - length: %d - max: %d " , size , PM3_CMD_DATA_SIZE - sizeof ( lf_psksim_t ) ) ;
size = PM3_CMD_DATA_SIZE - sizeof ( lf_psksim_t ) ;
2019-03-10 06:35:06 +08:00
}
2019-05-24 21:11:30 +08:00
lf_psksim_t * payload = calloc ( 1 , sizeof ( lf_psksim_t ) + size ) ;
payload - > carrier = carrier ;
payload - > invert = invert ;
payload - > clock = clk ;
memcpy ( payload - > data , DemodBuffer , size ) ;
PrintAndLogEx ( INFO , " Simulating " ) ;
2019-05-24 19:22:50 +08:00
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-08-04 01:17:00 +08:00
SendCommandNG ( CMD_LF_PSK_SIMULATE , ( uint8_t * ) payload , sizeof ( lf_psksim_t ) + size ) ;
2019-05-24 21:11:30 +08:00
free ( payload ) ;
2019-05-09 06:08:59 +08:00
PacketResponseNG resp ;
2019-08-04 01:17:00 +08:00
WaitForResponse ( CMD_LF_PSK_SIMULATE , & resp ) ;
2019-05-24 19:22:50 +08:00
PrintAndLogEx ( INFO , " Done " ) ;
2019-05-10 02:20:54 +08:00
if ( resp . status ! = PM3_EOPABORTED )
2019-05-09 06:08:59 +08:00
return resp . status ;
return PM3_SUCCESS ;
2015-02-22 10:36:02 +08:00
}
2015-02-20 10:35:34 +08:00
2019-03-10 18:20:22 +08:00
int CmdLFSimBidir ( const char * Cmd ) {
2019-04-10 18:23:40 +08:00
( void ) Cmd ; // Cmd is not used so far
2019-03-10 06:35:06 +08:00
// Set ADC to twice the carrier for a slight supersampling
// HACK: not implemented in ARMSRC.
PrintAndLogEx ( INFO , " Not implemented yet. " ) ;
2019-05-08 01:51:33 +08:00
SendCommandMIX ( CMD_LF_SIMULATE_BIDIR , 47 , 384 , 0 , NULL , 0 ) ;
2019-05-24 01:16:06 +08:00
return PM3_SUCCESS ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2018-09-09 18:34:43 +08:00
// ICEMAN, todo, swap from Graphbuffer.
2019-03-10 18:20:22 +08:00
int CmdVchDemod ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
// Is this the entire sync pattern, or does this also include some
// data bits that happen to be the same everywhere? That would be
// lovely to know.
static const int SyncPattern [ ] = {
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
} ;
// So first, we correlate for the sync pattern, and mark that.
int bestCorrel = 0 , bestPos = 0 ;
int i , j , sum = 0 ;
// It does us no good to find the sync pattern, with fewer than 2048 samples after it.
for ( i = 0 ; i < ( GraphTraceLen - 2048 ) ; i + + ) {
for ( j = 0 ; j < ARRAYLEN ( SyncPattern ) ; j + + ) {
2019-03-10 07:00:59 +08:00
sum + = GraphBuffer [ i + j ] * SyncPattern [ j ] ;
2019-03-10 06:35:06 +08:00
}
if ( sum > bestCorrel ) {
bestCorrel = sum ;
bestPos = i ;
}
}
PrintAndLogEx ( NORMAL , " best sync at %d [metric %d] " , bestPos , bestCorrel ) ;
char bits [ 257 ] ;
bits [ 256 ] = ' \0 ' ;
int worst = INT_MAX , worstPos = 0 ;
for ( i = 0 ; i < 2048 ; i + = 8 ) {
sum = 0 ;
for ( j = 0 ; j < 8 ; j + + )
2019-03-10 07:00:59 +08:00
sum + = GraphBuffer [ bestPos + i + j ] ;
2019-03-10 06:35:06 +08:00
if ( sum < 0 )
2019-03-10 07:00:59 +08:00
bits [ i / 8 ] = ' . ' ;
2019-03-10 06:35:06 +08:00
else
2019-03-10 07:00:59 +08:00
bits [ i / 8 ] = ' 1 ' ;
2019-03-10 06:35:06 +08:00
2019-03-10 07:00:59 +08:00
if ( abs ( sum ) < worst ) {
2019-03-10 06:35:06 +08:00
worst = abs ( sum ) ;
worstPos = i ;
}
}
PrintAndLogEx ( NORMAL , " bits: " ) ;
PrintAndLogEx ( NORMAL , " %s " , bits ) ;
PrintAndLogEx ( NORMAL , " worst metric: %d at pos %d " , worst , worstPos ) ;
// clone
2019-03-10 07:00:59 +08:00
if ( strcmp ( Cmd , " clone " ) = = 0 ) {
2019-03-10 06:35:06 +08:00
GraphTraceLen = 0 ;
char * s ;
2019-03-10 07:00:59 +08:00
for ( s = bits ; * s ; s + + ) {
for ( j = 0 ; j < 16 ; j + + ) {
GraphBuffer [ GraphTraceLen + + ] = ( * s = = ' 1 ' ) ? 1 : 0 ;
2019-03-10 06:35:06 +08:00
}
2019-03-10 07:00:59 +08:00
}
2019-03-10 06:35:06 +08:00
RepaintGraphWindow ( ) ;
}
2019-05-24 01:16:06 +08:00
return PM3_SUCCESS ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2017-02-27 04:32:51 +08:00
//by marshmellow
2019-04-14 03:54:04 +08:00
static bool CheckChipType ( bool getDeviceData ) {
2017-02-27 04:32:51 +08:00
2019-03-10 06:35:06 +08:00
bool retval = false ;
if ( ! getDeviceData ) return retval ;
save_restoreGB ( GRAPH_SAVE ) ;
save_restoreDB ( GRAPH_SAVE ) ;
//check for em4x05/em4x69 chips first
uint32_t word = 0 ;
if ( EM4x05IsBlock0 ( & word ) ) {
2019-05-26 01:32:54 +08:00
PrintAndLogEx ( SUCCESS , " \n Chipset detection : " _GREEN_ ( " EM4x05/EM4x69 " ) " found " ) ;
2019-03-10 07:56:00 +08:00
PrintAndLogEx ( SUCCESS , " Try " _YELLOW_ ( " `lf em 4x05` " ) " commands " ) ;
2019-03-10 06:35:06 +08:00
retval = true ;
goto out ;
}
2019-07-13 06:38:30 +08:00
2019-03-10 06:35:06 +08:00
//check for t55xx chip...
if ( tryDetectP1 ( true ) ) {
2019-05-26 01:32:54 +08:00
PrintAndLogEx ( SUCCESS , " \n Chipset detection : " _GREEN_ ( " T55xx " ) " found " ) ;
PrintAndLogEx ( SUCCESS , " Try " _YELLOW_ ( " `lf t55xx` " ) " commands " ) ;
2019-03-10 06:35:06 +08:00
retval = true ;
goto out ;
}
2019-03-12 06:12:31 +08:00
2019-03-10 06:35:06 +08:00
out :
save_restoreGB ( GRAPH_RESTORE ) ;
save_restoreDB ( GRAPH_RESTORE ) ;
return retval ;
2017-02-27 04:32:51 +08:00
}
2014-12-31 05:08:33 +08:00
//by marshmellow
2019-03-10 18:20:22 +08:00
int CmdLFfind ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
int ans = 0 ;
size_t minLength = 2000 ;
char cmdp = tolower ( param_getchar ( Cmd , 0 ) ) ;
char testRaw = param_getchar ( Cmd , 1 ) ;
if ( strlen ( Cmd ) > 3 | | cmdp = = ' h ' ) return usage_lf_find ( ) ;
if ( cmdp = = ' u ' ) testRaw = ' u ' ;
2019-05-01 05:52:40 +08:00
bool isOnline = ( session . pm3_present & & ( cmdp ! = ' 1 ' ) ) ;
2019-03-10 06:35:06 +08:00
if ( isOnline )
lf_read ( true , 30000 ) ;
if ( GraphTraceLen < minLength ) {
PrintAndLogEx ( FAILED , " Data in Graphbuffer was too small. " ) ;
2019-05-22 21:40:58 +08:00
return PM3_ESOFT ;
2019-03-10 06:35:06 +08:00
}
PrintAndLogEx ( INFO , " NOTE: some demods output possible binary " ) ;
PrintAndLogEx ( INFO , " if it finds something that looks like a tag " ) ;
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( INFO , " False Positives " _YELLOW_ ( " ARE " ) " possible " ) ;
PrintAndLogEx ( INFO , " " ) ;
2019-03-11 22:08:34 +08:00
PrintAndLogEx ( INFO , " Checking for known tags... \n " ) ;
2019-03-10 06:35:06 +08:00
// only run these tests if device is online
if ( isOnline ) {
// only run if graphbuffer is just noise as it should be for hitag
// The improved noise detection will find Cotag.
if ( getSignalProperties ( ) - > isnoise ) {
2019-05-02 05:26:06 +08:00
if ( IfPm3Hitag ( ) ) {
2019-05-28 17:22:38 +08:00
if ( readHitagUid ( ) ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Hitag " ) " found! " ) ; return PM3_SUCCESS ; }
2019-05-02 05:26:06 +08:00
}
2019-05-28 17:22:38 +08:00
if ( readCOTAGUid ( ) ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " COTAG ID " ) " found! " ) ; return PM3_SUCCESS ; }
2019-03-10 06:35:06 +08:00
2019-03-16 18:07:49 +08:00
PrintAndLogEx ( FAILED , " \n " _YELLOW_ ( " No data found! " ) " - Signal looks like noise. Maybe not an LF tag? " ) ;
2019-05-22 21:40:58 +08:00
return PM3_ESOFT ;
2019-03-10 06:35:06 +08:00
}
}
2019-05-26 01:32:54 +08:00
if ( EM4x50Read ( " " , false ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " EM4x50 ID " ) " found! " ) ; return PM3_SUCCESS ; }
if ( demodHID ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " HID Prox ID " ) " found! " ) ; goto out ; }
if ( demodAWID ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " AWID ID " ) " found! " ) ; goto out ; }
if ( demodParadox ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Paradox ID " ) " found! " ) ; goto out ; }
if ( demodEM410x ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " EM410x ID " ) " found! " ) ; goto out ; }
if ( demodFDX ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " FDX-B ID " ) " found! " ) ; goto out ; }
if ( demodGuard ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Guardall G-Prox II ID " ) " found! " ) ; goto out ; }
if ( demodIdteck ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Idteck ID " ) " found! " ) ; goto out ; }
if ( demodIndala ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Indala ID " ) " found! " ) ; goto out ; }
if ( demodIOProx ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " IO Prox ID " ) " found! " ) ; goto out ; }
if ( demodJablotron ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Jablotron ID " ) " found! " ) ; goto out ; }
if ( demodNedap ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " NEDAP ID " ) " found! " ) ; goto out ; }
if ( demodNexWatch ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " NexWatch ID " ) " found! " ) ; goto out ; }
if ( demodNoralsy ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Noralsy ID " ) " found! " ) ; goto out ; }
if ( demodKeri ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " KERI ID " ) " found! " ) ; goto out ; }
if ( demodPac ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " PAC/Stanley ID " ) " found! " ) ; goto out ; }
if ( demodPresco ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Presco ID " ) " found! " ) ; goto out ; }
if ( demodPyramid ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Pyramid ID " ) " found! " ) ; goto out ; }
if ( demodSecurakey ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Securakey ID " ) " found! " ) ; goto out ; }
if ( demodViking ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Viking ID " ) " found! " ) ; goto out ; }
if ( demodVisa2k ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Visa2000 ID " ) " found! " ) ; goto out ; }
if ( demodTI ( ) = = PM3_SUCCESS ) { PrintAndLogEx ( SUCCESS , " \n Valid " _GREEN_ ( " Texas Instrument ID " ) " found! " ) ; goto out ; }
//if (demodFermax() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Fermax ID") "found!"); goto out;}
//if (demodFlex() == PM3_SUCCESS) { PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Flex ID") "found!"); goto out;}
2019-03-11 21:55:02 +08:00
2019-05-09 07:07:34 +08:00
PrintAndLogEx ( FAILED , _RED_ ( " No known 125/134 kHz tags found! " ) ) ;
2019-03-10 06:35:06 +08:00
2019-03-10 07:00:59 +08:00
if ( testRaw = = ' u ' ) {
2019-03-10 06:35:06 +08:00
//test unknown tag formats (raw mode)
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( INFO , " \n Checking for unknown tags: \n " ) ;
ans = AutoCorrelate ( GraphBuffer , GraphBuffer , GraphTraceLen , 8000 , false , false ) ;
2019-03-10 06:35:06 +08:00
if ( ans > 0 ) {
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( INFO , " Possible auto correlation of %d repeating samples " , ans ) ;
2019-03-10 06:35:06 +08:00
2019-03-10 07:00:59 +08:00
if ( ans % 8 = = 0 )
2019-03-10 06:35:06 +08:00
PrintAndLogEx ( INFO , " Possible %d bytes " , ( ans / 8 ) ) ;
}
2019-03-10 07:00:59 +08:00
//fsk
if ( GetFskClock ( " " , false ) ) {
2019-05-22 20:32:30 +08:00
if ( FSKrawDemod ( " " , true ) = = PM3_SUCCESS ) {
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( NORMAL , " \n Unknown FSK Modulated Tag found! " ) ;
2019-03-10 07:00:59 +08:00
goto out ;
2019-03-10 06:35:06 +08:00
}
}
bool st = true ;
2019-05-22 20:32:30 +08:00
if ( ASKDemod_ext ( " 0 0 0 " , true , false , 1 , & st ) = = PM3_SUCCESS ) {
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( NORMAL , " \n Unknown ASK Modulated and Manchester encoded Tag found! " ) ;
2019-03-12 06:12:31 +08:00
PrintAndLogEx ( NORMAL , " if it does not look right it could instead be ASK/Biphase - try " _YELLOW_ ( " 'data rawdemod ab' " ) ) ;
2019-03-10 07:00:59 +08:00
goto out ;
2019-03-10 06:35:06 +08:00
}
2019-05-22 20:32:30 +08:00
if ( CmdPSK1rawDemod ( " " ) = = PM3_SUCCESS ) {
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( NORMAL , " Possible unknown PSK1 Modulated Tag found above! " ) ;
2019-03-12 06:12:31 +08:00
PrintAndLogEx ( NORMAL , " Could also be PSK2 - try " _YELLOW_ ( " 'data rawdemod p2' " ) ) ;
2019-03-11 21:55:02 +08:00
PrintAndLogEx ( NORMAL , " Could also be PSK3 - [currently not supported] " ) ;
2019-03-12 06:12:31 +08:00
PrintAndLogEx ( NORMAL , " Could also be NRZ - try " _YELLOW_ ( " 'data rawdemod nr " ) ) ;
2019-03-10 06:35:06 +08:00
goto out ;
}
2019-03-12 06:12:31 +08:00
PrintAndLogEx ( FAILED , _RED_ ( " \n No data found! " ) ) ;
2019-03-10 06:35:06 +08:00
}
2017-07-31 18:31:39 +08:00
out :
2019-03-10 06:35:06 +08:00
// identify chipset
2019-07-13 06:38:30 +08:00
if ( CheckChipType ( isOnline ) = = false ) {
PrintAndLogEx ( DEBUG , " Automatic chip type detection " _RED_ ( " failed " ) ) ;
2019-06-08 22:10:04 +08:00
}
2019-05-22 20:32:30 +08:00
return PM3_SUCCESS ;
2014-12-31 05:08:33 +08:00
}
2017-02-26 06:00:20 +08:00
static command_t CommandTable [ ] = {
2019-05-02 02:48:15 +08:00
{ " help " , CmdHelp , AlwaysAvailable , " This help " } ,
{ " awid " , CmdLFAWID , AlwaysAvailable , " { AWID RFIDs... } " } ,
{ " cotag " , CmdLFCOTAG , AlwaysAvailable , " { COTAG CHIPs... } " } ,
{ " em " , CmdLFEM4X , AlwaysAvailable , " { EM4X CHIPs & RFIDs... } " } ,
{ " fdx " , CmdLFFdx , AlwaysAvailable , " { FDX-B RFIDs... } " } ,
{ " gproxii " , CmdLFGuard , AlwaysAvailable , " { Guardall Prox II RFIDs... } " } ,
{ " hid " , CmdLFHID , AlwaysAvailable , " { HID RFIDs... } " } ,
{ " hitag " , CmdLFHitag , AlwaysAvailable , " { Hitag CHIPs... } " } ,
{ " indala " , CmdLFINDALA , AlwaysAvailable , " { Indala RFIDs... } " } ,
{ " io " , CmdLFIO , AlwaysAvailable , " { ioProx RFIDs... } " } ,
{ " jablotron " , CmdLFJablotron , AlwaysAvailable , " { Jablotron RFIDs... } " } ,
{ " keri " , CmdLFKeri , AlwaysAvailable , " { KERI RFIDs... } " } ,
{ " nedap " , CmdLFNedap , AlwaysAvailable , " { Nedap RFIDs... } " } ,
{ " nexwatch " , CmdLFNEXWATCH , AlwaysAvailable , " { NexWatch RFIDs... } " } ,
{ " noralsy " , CmdLFNoralsy , AlwaysAvailable , " { Noralsy RFIDs... } " } ,
{ " pac " , CmdLFPac , AlwaysAvailable , " { PAC/Stanley RFIDs... } " } ,
{ " paradox " , CmdLFParadox , AlwaysAvailable , " { Paradox RFIDs... } " } ,
{ " pcf7931 " , CmdLFPCF7931 , AlwaysAvailable , " { PCF7931 CHIPs... } " } ,
{ " presco " , CmdLFPresco , AlwaysAvailable , " { Presco RFIDs... } " } ,
{ " pyramid " , CmdLFPyramid , AlwaysAvailable , " { Farpointe/Pyramid RFIDs... } " } ,
{ " securakey " , CmdLFSecurakey , AlwaysAvailable , " { Securakey RFIDs... } " } ,
{ " ti " , CmdLFTI , AlwaysAvailable , " { TI CHIPs... } " } ,
{ " t55xx " , CmdLFT55XX , AlwaysAvailable , " { T55xx CHIPs... } " } ,
{ " viking " , CmdLFViking , AlwaysAvailable , " { Viking RFIDs... } " } ,
{ " visa2000 " , CmdLFVisa2k , AlwaysAvailable , " { Visa2000 RFIDs... } " } ,
2019-05-02 06:02:38 +08:00
{ " config " , CmdLFSetConfig , IfPm3Lf , " Set config for LF sampling, bit/sample, decimation, frequency " } ,
{ " cmdread " , CmdLFCommandRead , IfPm3Lf , " <off period> <'0' period> <'1' period> <command> ['h' 134] \n \t \t -- Modulate LF reader field to send command before read (all periods in microseconds) " } ,
2019-05-02 02:48:15 +08:00
{ " flexdemod " , CmdFlexdemod , AlwaysAvailable , " Demodulate samples for FlexPass " } ,
2019-05-02 06:02:38 +08:00
{ " read " , CmdLFRead , IfPm3Lf , " ['s' silent] Read 125/134 kHz LF ID-only tag. Do 'lf read h' for help " } ,
2019-05-02 02:48:15 +08:00
{ " search " , CmdLFfind , AlwaysAvailable , " [offline] ['u'] Read and Search for valid known tag (in offline mode it you can load first then search) \n \t \t -- 'u' to search for unknown tags " } ,
2019-05-02 06:02:38 +08:00
{ " sim " , CmdLFSim , IfPm3Lf , " [GAP] -- Simulate LF tag from buffer with optional GAP (in microseconds) " } ,
{ " simask " , CmdLFaskSim , IfPm3Lf , " [clock] [invert <1|0>] [biphase/manchester/raw <'b'|'m'|'r'>] [msg separator 's'] [d <hexdata>] \n \t \t -- Simulate LF ASK tag from demodbuffer or input " } ,
{ " simfsk " , CmdLFfskSim , IfPm3Lf , " [c <clock>] [i] [H <fcHigh>] [L <fcLow>] [d <hexdata>] \n \t \t -- Simulate LF FSK tag from demodbuffer or input " } ,
{ " simpsk " , CmdLFpskSim , IfPm3Lf , " [1|2|3] [c <clock>] [i] [r <carrier>] [d <raw hex to sim>] \n \t \t -- Simulate LF PSK tag from demodbuffer or input " } ,
{ " simbidir " , CmdLFSimBidir , IfPm3Lf , " Simulate LF tag (with bidirectional data transmission between reader and tag) " } ,
{ " sniff " , CmdLFSniff , IfPm3Lf , " Sniff LF traffic between reader and tag " } ,
2019-05-02 02:48:15 +08:00
{ " vchdemod " , CmdVchDemod , AlwaysAvailable , " ['clone'] -- Demodulate samples for VeriChip " } ,
{ NULL , NULL , NULL , NULL }
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
} ;
2019-03-10 18:20:22 +08:00
int CmdLF ( const char * Cmd ) {
2019-03-10 06:35:06 +08:00
clearCommandBuffer ( ) ;
2019-04-19 06:47:51 +08:00
return CmdsParse ( CommandTable , Cmd ) ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}
2019-03-10 18:20:22 +08:00
int CmdHelp ( const char * Cmd ) {
2019-04-10 18:23:40 +08:00
( void ) Cmd ; // Cmd is not used so far
2019-03-10 06:35:06 +08:00
CmdsHelp ( CommandTable ) ;
2019-05-22 20:32:30 +08:00
return PM3_SUCCESS ;
Client cleanup and restructuring. Stage 1...
Next Step is refactoring some of the giant functions which are
just copy/paste of some other ones with just a few line changes,
removing unnecessary 'goto' etc.
The MS Windows version is broken with this commit but will be fixed
soon. Everything can't be done all at once :P
The commands are now hierarchical, for example:
"hf 14a read" vs. "hf 14b read".
You can also request help:
"hf help", "data help", "hf 15 help" etc.
Indents are now space-based, not tab-based anymore. Hopefully
no one will be trolling about it, considering the suicide-prone work
being done here ;)
client/cmdhw.c, client/proxusb.c, client/cmdhw.h, client/proxusb.h,
client/cmdmain.c, client/cmdlfhid.c, client/cmdmain.h, client/cmdlfhid.h,
client/data.c, client/data.h, client/cmdhf.c, client/cmdlf.c,
client/cmdhf.h, client/cmdhf15.c, client/cmdhf14b.c, client/cmdlf.h,
client/cmdhf15.h, client/cmdhf14b.h, client/cmddata.c, client/cmddata.h,
client/ui.c, client/cmdparser.c, client/cmdlfti.c, client/ui.h,
client/cmdlfem4x.c, client/cmdparser.h, client/cmdlfti.h, client/cmdlfem4x.h,
client/graph.c, client/graph.h, client/cmdhf14a.c, client/cmdhf14a.h,
client/cmdhflegic.c, client/cmdhflegic.c: New files.
client/cli.c, client/flasher.c, client/snooper.c, client/proxmark3.c,
client/proxmark3.h, client/Makefile: Update accordingly.
client/flash.h, client/flash.c, client/proxgui.cpp: Cosmetic changes.
client/translate.h, client/command.c, client/gui.c,
client/usb.c, client/prox.h: Remove.
include/usb_cmd.h (CMD_ACQUIRE_RAW_ADC_SAMPLES_ISO_14443_SIM): Remove dead cmd.
common/crc16.h: New file.
common/crc16.c: Modify accordingly.
common/iso14443crc.h: New file.
common/iso14443_crc.c: Rename to
common/iso14443crc.c: and modify accordingly.
armsrc/lfops.c, armsrc/iso14443.c,
armsrc/iso14443a.c: include .h files from
the common directory instead of including the c files.
common/Makefile.common, armsrc/Makefile: Modify accordingly.
2010-02-04 09:27:07 +08:00
}