mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-13 16:53:00 -07:00
reveng- iceman1001 s scripting updates
This commit is contained in:
parent
2e16354693
commit
53ee28cb3a
3 changed files with 32 additions and 31 deletions
|
@ -34,9 +34,10 @@ static int CmdHelp(const char *Cmd);
|
||||||
static int CmdQuit(const char *Cmd);
|
static int CmdQuit(const char *Cmd);
|
||||||
static int CmdRev(const char *Cmd);
|
static int CmdRev(const char *Cmd);
|
||||||
// for testing reveng api - cmdcrc.c
|
// for testing reveng api - cmdcrc.c
|
||||||
|
/*
|
||||||
static int CmdrevengT(const char *Cmd);
|
static int CmdrevengT(const char *Cmd);
|
||||||
static int CmdrevengC(const char *Cmd);
|
static int CmdrevengC(const char *Cmd);
|
||||||
|
*/
|
||||||
|
|
||||||
//For storing command that are received from the device
|
//For storing command that are received from the device
|
||||||
static UsbCommand cmdBuffer[CMD_BUFFER_SIZE];
|
static UsbCommand cmdBuffer[CMD_BUFFER_SIZE];
|
||||||
|
@ -84,6 +85,7 @@ int CmdRev(const char *Cmd)
|
||||||
CmdCrc(Cmd);
|
CmdCrc(Cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
// for testing reveng api - cmdcrc.c
|
// for testing reveng api - cmdcrc.c
|
||||||
int CmdrevengT(const char *Cmd)
|
int CmdrevengT(const char *Cmd)
|
||||||
{
|
{
|
||||||
|
@ -92,7 +94,7 @@ int CmdrevengT(const char *Cmd)
|
||||||
int CmdrevengC(const char *Cmd)
|
int CmdrevengC(const char *Cmd)
|
||||||
{
|
{
|
||||||
return CmdrevengTestC(Cmd);
|
return CmdrevengTestC(Cmd);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This method should be called when sending a new command to the pm3. In case any old
|
* @brief This method should be called when sending a new command to the pm3. In case any old
|
||||||
|
|
|
@ -393,7 +393,7 @@ static int l_reveng_models(lua_State *L){
|
||||||
|
|
||||||
char *models[80];
|
char *models[80];
|
||||||
int count = 0;
|
int count = 0;
|
||||||
lua_Integer in_width = luaL_checkinteger(L, 1);
|
int in_width = luaL_checkinteger(L, 1);
|
||||||
|
|
||||||
if( in_width > 89 ) return returnToLuaWithError(L,"Width cannot exceed 89, got %d", in_width);
|
if( in_width > 89 ) return returnToLuaWithError(L,"Width cannot exceed 89, got %d", in_width);
|
||||||
|
|
||||||
|
@ -412,6 +412,13 @@ static int l_reveng_models(lua_State *L){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Called with 4 parameters.
|
||||||
|
// inModel ,string containing the crc model name: 'CRC-8'
|
||||||
|
// inHexStr ,string containing the hex representation of the data that will be used for CRC calculations.
|
||||||
|
// reverse ,int 0/1 (bool) if 1, calculate the reverse CRC
|
||||||
|
// endian ,char, 'B','b','L','l','t','r' describing if Big-Endian or Little-Endian should be used in different combinations.
|
||||||
|
//
|
||||||
|
// outputs: string with hex representation of the CRC result
|
||||||
static int l_reveng_RunModel(lua_State *L){
|
static int l_reveng_RunModel(lua_State *L){
|
||||||
//-c || -v
|
//-c || -v
|
||||||
//inModel = valid model name string - CRC-8
|
//inModel = valid model name string - CRC-8
|
||||||
|
@ -422,19 +429,14 @@ static int l_reveng_RunModel(lua_State *L){
|
||||||
//result = calculated crc hex string
|
//result = calculated crc hex string
|
||||||
char result[50];
|
char result[50];
|
||||||
|
|
||||||
size_t dataLen;
|
const char *inModel = luaL_checkstring(L, 1);
|
||||||
const char *inModel = luaL_checklstring(L, 1, &dataLen);
|
const char *inHexStr = luaL_checkstring(L, 2);
|
||||||
if ( dataLen < 4 ) return returnToLuaWithError(L,"Can't find model, got %s", inModel);
|
bool reverse = lua_toboolean(L, 3);
|
||||||
|
const char endian = luaL_checkstring(L, 4)[0];
|
||||||
const char *inHexStr = luaL_checklstring(L, 2, &dataLen);
|
|
||||||
if ( dataLen < 4 ) return returnToLuaWithError(L,"Hex string too short, got %d", dataLen);
|
|
||||||
|
|
||||||
int reverse = luaL_checkinteger(L, 3);
|
|
||||||
const char endian = luaL_checklstring(L, 4, &dataLen)[0];
|
|
||||||
|
|
||||||
//PrintAndLog("mod: %s, hex: %s, rev %d", inModel, inHexStr, reverse);
|
//PrintAndLog("mod: %s, hex: %s, rev %d", inModel, inHexStr, reverse);
|
||||||
//int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result)
|
//int RunModel(char *inModel, char *inHexStr, bool reverse, char endian, char *result)
|
||||||
int ans = RunModel( (char *)inModel, (char *)inHexStr, (bool)reverse, endian, result);
|
int ans = RunModel( (char *)inModel, (char *)inHexStr, reverse, endian, result);
|
||||||
if (!ans)
|
if (!ans)
|
||||||
return returnToLuaWithError(L,"Reveng failed");
|
return returnToLuaWithError(L,"Reveng failed");
|
||||||
|
|
||||||
|
@ -442,7 +444,6 @@ static int l_reveng_RunModel(lua_State *L){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sets the lua path to include "./lualibs/?.lua", in order for a script to be
|
* @brief Sets the lua path to include "./lualibs/?.lua", in order for a script to be
|
||||||
* able to do "require('foobar')" if foobar.lua is within lualibs folder.
|
* able to do "require('foobar')" if foobar.lua is within lualibs folder.
|
||||||
|
@ -490,7 +491,6 @@ int set_pm3_libraries(lua_State *L)
|
||||||
{"sha1", l_sha1},
|
{"sha1", l_sha1},
|
||||||
{"reveng_models", l_reveng_models},
|
{"reveng_models", l_reveng_models},
|
||||||
{"reveng_runmodel", l_reveng_RunModel},
|
{"reveng_runmodel", l_reveng_RunModel},
|
||||||
|
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
local getopt = require('getopt')
|
local getopt = require('getopt')
|
||||||
local utils = require('utils')
|
local utils = require('utils')
|
||||||
|
|
||||||
example = "script calculates many checksums (CRC) over the provided hex input"
|
example = "script calculates many different checksums (CRC) over the provided hex input"
|
||||||
author = "Iceman"
|
author = "Iceman"
|
||||||
desc =
|
desc =
|
||||||
[[
|
[[
|
||||||
This script calculates many checksums (CRS) over the provided hex input.
|
This script calculates many checksums (CRC) over the provided hex input.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
-b data in hex
|
-b data in hex
|
||||||
-w width of the CRC algorithm. <optional> defaults to all known CRC presets.
|
-w bitwidth of the CRC family of algorithm. <optional> defaults to all known CRC presets.
|
||||||
Examples :
|
Examples :
|
||||||
script run e -b 010203040506070809
|
script run e -b 010203040506070809
|
||||||
script run e -b 010203040506070809 -w 16
|
script run e -b 010203040506070809 -w 16
|
||||||
|
@ -39,31 +39,30 @@ end
|
||||||
-- The main entry point
|
-- The main entry point
|
||||||
function main(args)
|
function main(args)
|
||||||
|
|
||||||
local data = '01020304'
|
local data
|
||||||
local width = 0
|
local width = 0
|
||||||
|
|
||||||
-- Read the parameters
|
-- Read the parameters
|
||||||
for o, a in getopt.getopt(args, 'hb:w:') do
|
for o, a in getopt.getopt(args, 'hb:w:') do
|
||||||
if o == "h" then return help() end
|
if o == "h" then return help() end
|
||||||
if o == "b" then data = utils.ConvertHexToa end
|
if o == "b" then data = a end
|
||||||
if o == "w" then width = a end
|
if o == "w" then width = a end
|
||||||
end
|
end
|
||||||
|
|
||||||
print('Width of CRC: '..width..' bytes: '..data)
|
data = data or '01020304'
|
||||||
print('')
|
|
||||||
print('Model','CRC', 'CRC_Reverse')
|
|
||||||
|
|
||||||
|
print( string.rep('-',60) )
|
||||||
|
print('Bit width of CRC | '..width)
|
||||||
|
print('Bytes | '..data)
|
||||||
|
print('')
|
||||||
|
print( ('%-20s| %-16s| %s'):format('Model','CRC', 'CRC reverse'))
|
||||||
|
print( string.rep('-',60) )
|
||||||
local lists = core.reveng_models(width)
|
local lists = core.reveng_models(width)
|
||||||
for _,i in pairs(lists) do
|
for _,i in pairs(lists) do
|
||||||
local one = core.reveng_runmodel(i, data, 0,0)
|
local one = core.reveng_runmodel(i, data, false, '0')
|
||||||
local two = core.reveng_runmodel(i, data, 1,0)
|
local two = core.reveng_runmodel(i, data, true, '0')
|
||||||
|
print( ('%-20s| %-16s| %s'):format(i, one:upper(), two:upper()) )
|
||||||
print(i, one, two)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if 1 == 1 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
main(args)
|
main(args)
|
Loading…
Add table
Add a link
Reference in a new issue