tea.c \
prng.c \
radixsort.c \
- bucketsort.c
+ bucketsort.c \
+ cmdanalyse.c
+
ZLIBSRCS = deflate.c adler32.c trees.c zutil.c inflate.c inffast.c inftrees.c
ZLIB_FLAGS = -DZ_SOLO -DZ_PREFIX -DNO_GZIP -DZLIB_PM3_TUNED
#-DDEBUG -Dverbose=1
--- /dev/null
+//-----------------------------------------------------------------------------
+// Copyright (C) 2016 iceman
+//
+// 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.
+//-----------------------------------------------------------------------------
+// Analyse bytes commands
+//-----------------------------------------------------------------------------
+#include "cmdanalyse.h"
+
+static int CmdHelp(const char *Cmd);
+
+int usage_analyse_lcr(void) {
+ PrintAndLog("Specifying the bytes of a UID with a known LRC will find the last byte value");
+ PrintAndLog("needed to generate that LRC with a rolling XOR. All bytes should be specified in HEX.");
+ PrintAndLog("");
+ PrintAndLog("Usage: analyse lcr [h] <bytes>");
+ PrintAndLog("Options:");
+ PrintAndLog(" h This help");
+ PrintAndLog(" <bytes> bytes to calc missing XOR in a LCR");
+ PrintAndLog("");
+ PrintAndLog("Samples:");
+ PrintAndLog(" analyse lcr 04008064BA");
+ PrintAndLog("expected output: Target (BA) requires final LRC XOR byte value: 5A");
+ return 0;
+}
+static uint8_t calculateLRC( uint8_t* bytes, uint8_t len) {
+ uint8_t LRC = 0;
+ for (uint8_t i = 0; i < len; i++)
+ LRC ^= bytes[i];
+ return LRC;
+}
+
+int CmdAnalyseLCR(const char *Cmd) {
+ uint8_t data[50];
+ char cmdp = param_getchar(Cmd, 0);
+ if (strlen(Cmd) == 0|| cmdp == 'h' || cmdp == 'H') return usage_analyse_lcr();
+
+ int len = 0;
+ param_gethex_ex(Cmd, 0, data, &len);
+ if ( len%2 ) return usage_analyse_lcr();
+ len >>= 1;
+ uint8_t finalXor = calculateLRC(data, len);
+ PrintAndLog("Target [%02X] requires final LRC XOR byte value: 0x%02X",data[len-1] ,finalXor);
+ return 0;
+}
+
+static command_t CommandTable[] = {
+ {"help", CmdHelp, 1, "This help"},
+ {"lcr", CmdAnalyseLCR, 0, "Generate final byte for XOR LRC"},
+ {NULL, NULL, 0, NULL}
+};
+
+int CmdAnalyse(const char *Cmd) {
+ clearCommandBuffer();
+ CmdsParse(CommandTable, Cmd);
+ return 0;
+}
+
+int CmdHelp(const char *Cmd) {
+ CmdsHelp(CommandTable);
+ return 0;
+}
--- /dev/null
+//-----------------------------------------------------------------------------
+// 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.
+//-----------------------------------------------------------------------------
+// Data and Graph commands
+//-----------------------------------------------------------------------------
+
+#ifndef CMDANALYSE_H__
+#define CMDANALYSE_H__
+
+#include <stdlib.h> //size_t
+#include <string.h>
+#include "cmdmain.h"
+#include "proxmark3.h"
+#include "ui.h" // PrintAndLog
+command_t * CmdDataCommands();
+
+int CmdAnalyse(const char *Cmd);
+int CmdAnalyseLCR(const char *Cmd);
+
+#endif
/* Index map O
preamble enc tag type encrypted uid P d 33 d 90 d 04 d 71 d 40 d 45 d E7 P
-1111111110 00101101000001011 01000110010010000101101010011010110 0 1 0 00110011 0 10010000 0 00000100 0 01110001 0 01000000 0 01000101 0 11100111 1
+1111111110 0010110100000101101000110010010000101101010011010110 0 1 0 00110011 0 10010000 0 00000100 0 01110001 0 01000000 0 01000101 0 11100111 1
uid2 uid1 uid0 I I R R
Tag ID is 049033
I = Identical on all tags
return 0;
}
+
+
int CmdLFNedapChk(const char *Cmd){
uint8_t data[256] = { 0x30, 0x16, 0x00, 0x71, 0x40, 0x21, 0xBE};
PrintAndLog("Input: [%d] %s", len, sprint_hex(data, len));
- uint8_t last = GetParity(data, EVEN, 62);
- PrintAndLog("TEST PARITY:: %d | %d ", DemodBuffer[62], last);
+ //uint8_t last = GetParity(data, EVEN, 62);
+ //PrintAndLog("TEST PARITY:: %d | %d ", DemodBuffer[62], last);
- return 1;
uint8_t cl = 0x1D, ch = 0x1D, carry = 0;
uint8_t al, bl, temp;
#include "util.h"
#include "cmdscript.h"
#include "cmdcrc.h"
-
+#include "cmdanalyse.h"
unsigned int current_command = CMD_UNKNOWN;
static command_t CommandTable[] =
{
{"help", CmdHelp, 1, "This help. Use '<command> help' for details of a particular command."},
+ {"analyse", CmdAnalyse, 1, "{ Analyse bytes... }"},
{"data", CmdData, 1, "{ Plot window / data buffer manipulation... }"},
{"hf", CmdHF, 1, "{ High Frequency commands... }"},
{"hw", CmdHW, 1, "{ Hardware commands... }"},
{"lf", CmdLF, 1, "{ Low Frequency commands... }"},
- {"reveng", CmdRev, 1, "Crc calculations from the software reveng 1.30"},
- {"script", CmdScript, 1, "{ Scripting commands }"},
+ {"reveng", CmdRev, 1, "Crc calculations from the software reveng 1.40"},
+ {"script", CmdScript, 1, "{ Scripting commands }"},
{"quit", CmdQuit, 1, "Exit program"},
{"exit", CmdQuit, 1, "Exit program"},
{NULL, NULL, 0, NULL}