]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
added nexwatch demod & iceman lua
authormarshmellow42 <marshmellowrf@gmail.com>
Wed, 8 Apr 2015 18:19:03 +0000 (14:19 -0400)
committermarshmellow42 <marshmellowrf@gmail.com>
Wed, 8 Apr 2015 18:19:03 +0000 (14:19 -0400)
added nexwatch demod (also added to lf search)
added iceman's lua script adjustments

client/cmddata.c
client/cmdlf.c
client/cmdlft55xx.c
client/lualibs/commands.lua
client/lualibs/default_toys.lua
client/scripts/ndef_dump.lua
client/scripts/tnp3clone.lua
client/scripts/tnp3dump.lua
client/scripts/tnp3sim.lua

index a8c809cfb3df091186ba4c6b5cbcfed60054eeac..556ede06b5687f150187ec4162b41e2c0e107548 100644 (file)
@@ -1547,11 +1547,49 @@ int CmdIndalaDecode(const char *Cmd)
        return 1;
 }
 
+int CmdPSKNexWatch(const char *Cmd)
+{
+       if (!PSKDemod("", false)) return 0;
+       uint8_t preamble[28] = {0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+       size_t startIdx = 0, size = DemodBufferLen; 
+       bool invert = false;
+       if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)){
+               // if didn't find preamble try again inverting
+               if (!PSKDemod("1", false)) return 0; 
+               size = DemodBufferLen;
+               if (!preambleSearch(DemodBuffer, preamble, sizeof(preamble), &size, &startIdx)) return 0;
+               invert = true;
+       } 
+       if (size != 128) return 0;
+       setDemodBuf(DemodBuffer, size, startIdx+4);
+       startIdx = 8+32; //4 = extra i added, 8 = preamble, 32 = reserved bits (always 0)
+       //get ID
+       uint32_t ID = 0;
+       for (uint8_t wordIdx=0; wordIdx<4; wordIdx++){
+               for (uint8_t idx=0; idx<8; idx++){
+                       ID = (ID << 1) | DemodBuffer[startIdx+wordIdx+(idx*4)];
+               }       
+       }
+       //parity check (TBD)
+
+       //checksum check (TBD)
+
+       //output
+       PrintAndLog("NexWatch ID: %d", ID);
+       if (invert){
+               PrintAndLog("Had to Invert - probably NexKey");
+               for (uint8_t idx=0; idx<size; idx++)
+                       DemodBuffer[idx] ^= 1;
+       } 
+
+       CmdPrintDemodBuff("x");
+       return 1;
+}
+
 // by marshmellow
 // takes 3 arguments - clock, invert, maxErr as integers
 // attempts to demodulate nrz only
 // prints binary found and saves in demodbuffer for further commands
-
 int NRZrawDemod(const char *Cmd, bool verbose)
 {
        int invert=0;
@@ -2146,6 +2184,7 @@ static command_t CommandTable[] =
        {"plot",            CmdPlot,            1, "Show graph window (hit 'h' in window for keystroke help)"},
        {"printdemodbuffer",CmdPrintDemodBuff,  1, "[x] -- print the data in the DemodBuffer - 'x' for hex output"},
        {"pskindalademod",  CmdIndalaDecode,    1, "[clock] [invert<0|1>] -- Demodulate an indala tag (PSK1) from GraphBuffer (args optional)"},
+       {"psknexwatchdemod",CmdPSKNexWatch,     1, "Demodulate a NexWatch tag (nexkey, quadrakey) (PSK1) from GraphBuffer"},
        {"rawdemod",        CmdRawDemod,        1, "[modulation] ... <options> -see help (h option) -- Demodulate the data in the GraphBuffer and output binary"},  
        {"samples",         CmdSamples,         0, "[512 - 40000] -- Get raw samples for graph window (GraphBuffer)"},
        {"save",            CmdSave,            1, "<filename> -- Save trace (from graph window)"},
index d441574ad6febf5171c13c2657397cdaca6d2f39..dfbbe992a76a6a3bdeadb0d01becdc2cb7a051e5 100644 (file)
@@ -1077,6 +1077,13 @@ int CmdLFfind(const char *Cmd)
                PrintAndLog("\nValid EM4x50 ID Found!");
                return 1;
        }       
+
+       ans=CmdPSKNexWatch("");
+       if (ans>0) {
+               PrintAndLog("\nValid NexWatch ID Found!");
+               return 1;
+       }
+
        PrintAndLog("\nNo Known Tags Found!\n");
        if (testRaw=='u' || testRaw=='U'){
                //test unknown tag formats (raw mode)
index 3134dde7d8f9e084812118fdcaef6347162fa854..d4b72b3279bbbaf0844f0703334c1d016d6c4176 100644 (file)
@@ -370,28 +370,28 @@ bool tryDetectModulation(){
                if (clk>0) {\r
                        sprintf(cmdStr,"%d", clk/2);\r
                        CmdLtrim(cmdStr);\r
-                       if ( ASKDemod("0 0 1", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
+                       if ( ASKDemod("0 0 0", FALSE, FALSE, 1) && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
                                tests[hits].modulation = DEMOD_ASK;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
-                       if ( ASKDemod("0 1 1", FALSE, FALSE, 1)  && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
+                       if ( ASKDemod("0 1 0", FALSE, FALSE, 1)  && test(DEMOD_ASK, &tests[hits].offset, &bitRate)) {\r
                                tests[hits].modulation = DEMOD_ASK;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
-                       if ( ASKbiphaseDemod("0 0 0 1", FALSE) && test(DEMOD_BI, &tests[hits].offset, &bitRate) ) {\r
+                       if ( ASKbiphaseDemod("0 0 0 0", FALSE) && test(DEMOD_BI, &tests[hits].offset, &bitRate) ) {\r
                                tests[hits].modulation = DEMOD_BI;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = FALSE;\r
                                tests[hits].block0 = PackBits(tests[hits].offset, 32, DemodBuffer);\r
                                ++hits;\r
                        }\r
-                       if ( ASKbiphaseDemod("0 0 1 1", FALSE) && test(DEMOD_BIa, &tests[hits].offset, &bitRate) ) {\r
+                       if ( ASKbiphaseDemod("0 0 1 0", FALSE) && test(DEMOD_BIa, &tests[hits].offset, &bitRate) ) {\r
                                tests[hits].modulation = DEMOD_BIa;\r
                                tests[hits].bitrate = bitRate;\r
                                tests[hits].inverted = TRUE;\r
index ad8f6e00c64ac44b1f7f7985051324a369b1bdf6..b0257ef0eb0d27f125b9b0a52b5b2fc994a6fbd9 100644 (file)
@@ -138,6 +138,8 @@ local _commands = {
        CMD_MIFAREUC_AUTH1 =                                                                     0x0724,
        CMD_MIFAREUC_AUTH2 =                                                                     0x0725,
        CMD_MIFAREUC_READCARD =                                                                      0x0726,
+       CMD_MIFAREUC_SETPWD =                                                                                            0x0727,
+       CMD_MIFAREU_SETUID =                                                                         0x0728,
 
        --// mifare desfire
        CMD_MIFARE_DESFIRE_READBL =                                          0x0728,
@@ -153,10 +155,10 @@ local _commands = {
 
 
 local _reverse_lookup,k,v = {}
-for k, v in pairs(_commands) do
-       _reverse_lookup[v] =  k
-end
-_commands.tostring = function(command)
+       for k, v in pairs(_commands) do
+               _reverse_lookup[v] =  k
+       end
+       _commands.tostring = function(command)
        if(type(command) == 'number') then
                return ("%s (%d)"):format(_reverse_lookup[command]or "ERROR UNDEFINED!", command) 
        end
@@ -217,7 +219,6 @@ function Command:getBytes()
        local data  = self.data
        local cmd = self.cmd 
        local arg1, arg2, arg3 = self.arg1, self.arg2, self.arg3
-       
-       return bin.pack("LLLLH",cmd, arg1, arg2, arg3,data);
+       return bin.pack("LLLLH",cmd, arg1, arg2, arg3, data);
 end
 return _commands
index 048a29c9684e63ef5af729ba6a0debaab5347531..64eed9b39d314d80d3af6e0f67147602d3c64756 100644 (file)
 local _names = {
-    --[[
+    --[[ decimal, hexadecimal, ccc, elements, group, name
     --]]
-       ["0000"]="WHIRLWIND",
-       ["0100"]="SONIC BOOM",
-       ["0200"]="WARNADO",
-       ["0300"]="LIGHTNINGROD",
-       ["0400"]="BASH",
-       ["0500"]="TERRAFIN",
-       ["0600"]="DINORANG" ,
-       ["0700"]="LIGHTCORE PRISM BREAK",
-       ["0800"]="SUNBURN",
-       ["0900"]="LIGHTCORE ERUPTOR",
-       ["0A00"]="IGNITOR",
-       ["0B00"]="FLAMESLINGER",
-       ["0C00"]="ZAP",
-       ["0D00"]="WHAM SHELL",
-       ["0E00"]="GILL GRUNT",
-       ["0F00"]="SLAMBAM",
-       ["1000"]="SPYRO",
-       ["1100"]="VOODOOD",
-       ["1200"]="DOUBLE TROUBLE",
-       ["1300"]="TRIGGER HAPPY",
-       ["1400"]="DROBOT",
-       ["1500"]="DRILLSERGEANT",
-       ["1600"]="BOOMER",
-       ["1700"]="WRECKING BALL",
-       ["1800"]="CAMO",
-       ["1900"]="ZOOK",
-       ["1A00"]="STEALTH ELF",
-       ["1B00"]="STUMP SMASH",
-       ["1D00"]="HEX",
-       ["1C00"]="DARK SPYRO",
-       ["1E00"]="CHOPCHOP",
-       ["1F00"]="GHOST ROASTER",
-       ["2000"]="CYNDER",      
-       --[[
-       GIANTS
-    --]]
-       ["6400"]="GIANT JET-VAC",
-       ["6500"]="GIANT SWARM",
-       ["6600"]="GIANT CRUSHER",
-       ["6700"]="GIANT FLASHWING",
-       ["6800"]="GIANT HOTHEAD",
-       ["6900"]="GIANT HOTDOG",
-       ["6A00"]="GIANT CHILL",
-       ["6B00"]="GIANT THUMPBACK",
-       ["6C00"]="GIANT POPFIZZ",
-       ["6D00"]="GIANT NINJINI",
-       ["6E00"]="GIANT BOUNCER",
-       ["6F00"]="GIANT SPROCKET",
-       ["7000"]="GIANT TREE REX",
-       ["7100"]="LIGHTCORE SHROOMBOOM",
-       ["7200"]="GIANT EYEBROAWL",
-       ["7300"]="GIANT FRIGHTRIDER",
-
-    --[[
-       ITEM
-    --]]       
-       ["C800"]="ANVIL",
-       ["C900"]="SECRET STASH",
-       ["CA00"]="REGENERATION",
-       ["CD00"]="SHIELD",
-       ["CB00"]="CROSSED SWORDS",
-       ["CC00"]="HOURGLASS",
-       ["CE00"]="SPEED BOOTS",
-       ["CF00"]="SPARX",
-       ["D000"]="CANNON",
-       ["D100"]="SCORPIONSTRIKER",
-
-       --[[
-       ITEM TRAPS
-    --]]
-       ["D200"]="MAGIC TRAP",
-       ["D300"]="WATER TRAP",
-       ["D400"]="AIR TRAP",
-       ["D500"]="UNDEAD TRAP",
-       ["D600"]="TECH TRAP",
-       ["D700"]="FIRE TRAP",
-       ["D800"]="EARTH TRAP",
-       ["D900"]="LIFE TRAP",
-       ["DA00"]="DARK TRAP",
-       ["DB00"]="LIGHT TRAP",
-       ["DC00"]="KAOS TRAP",   
-
-    --[[
-       ITEM 
-    --]]       
-       ["E600"]="HAND OF FATE",        
-       ["E700"]="PIGGYBANK",   
-       ["E800"]="ROCKET RAM",  
-       ["E900"]="TIKI SPEAKY", 
-
-
-    --[[
-       EXPANSION
-    --]]
-       ["012C"]="DRAGONS PEAK",
-       ["012D"]="EMPIRE OF ICE",
-       ["012E"]="PIRATE SEAS",
-       ["012F"]="DARKLIGHT CRYPT",
-       ["0130"]="VOLCANIC VAULT",
-       ["0131"]="MIRROR OF MYSTERY",
-       ["0132"]="NIGHTMARE EXPRESS",
-       ["0133"]="SUNSCRAPER SPIRE",
-       ["0134"]="MIDNIGHT MUSEUM",
+{"0", "0000", "0030", "air", "regular", "Whirlwind"},
+--{"0", "0000", "0030", "air", "regular", "Elite Whirlwind"},
+--{"0", "0000", "0030", "air", "regular", "Polar Whirlwind"},
+{"1", "0100", "0030", "air", "regular", "Sonic Boom"},
+{"2", "0200", "0030", "air", "regular", "Warnado"},
+{"3", "0300", "0030", "air", "regular", "Lightning Rod"},
+{"4", "0400", "0030", "earth", "regular", "Bash"},
+--{"4", "0400", "0030", "earth", "regular", "Birthday Bash"},
+{"5", "0500", "0030", "earth", "regular", "Terrafin"},
+--{"5", "0500", "0030", "earth", "regular", "Elite Terrafin"},
+{"6", "0600", "0030", "earth", "regular", "Dino Rang"},
+{"7", "0700", "0030", "earth", "regular", "Prism Break"},  --lightcore
+{"8", "0800", "0030", "fire", "regular", "Sunburn"},
+{"9", "0900", "0030", "fire", "regular", "Eruptor"}, --lightcore
+--{"9", "0900", "0030", "fire", "regular", "Elite Eruptor"},
+--{"9", "0900", "0030", "fire", "regular", "Volcanic Eruptor"},
+{"10", "0a00", "0030", "fire", "regular", "Ignitor"},
+{"11", "0b00", "0030", "fire", "regular", "Flameslinger"},
+--{"11", "0b00", "0030", "fire", "regular", "Cupid Flameslinger"},
+{"12", "0c00", "0030", "water", "regular", "Zap"},
+{"13", "0d00", "0030", "water", "regular", "Wham Shell"},
+{"14", "0e00", "0030", "water", "regular", "Gill Grunt"},
+--{"14", "0e00", "0030", "water", "regular", "Elite Gill Grunt"},
+{"15", "0f00", "0030", "water", "regular", "Slam Bam"},
+--{"15", "0f00", "0030", "water", "regular", "Surfer Slam Bam"},
+{"16", "1000", "0030", "magic", "regular", "Spyro"},
+{"17", "1100", "0030", "magic", "regular", "Voodood"},
+{"18", "1200", "0030", "magic", "regular", "Double Trouble"},
+--{"18", "1200", "0030", "magic", "regular", "Royal Double Trouble"},
+{"19", "1300", "0030", "tech", "regular", "Trigger Happy"},
+--{"19", "1300", "0030", "tech", "regular", "Elite Trigger Happy"},
+--{"19", "1300", "0030", "tech", "regular", "Springtime Trigger Happy"},
+{"20", "1400", "0030", "tech", "regular", "Drobot"},
+{"21", "1500", "0030", "tech", "regular", "Drill Sergeant"},
+{"22", "1600", "0030", "tech", "regular", "Boomer"},
+--{"22", "1600", "0030", "tech", "regular", "Lucky Boomer"},
+{"23", "1700", "0030", "magic", "regular", "Wrecking Ball"},
+--{"23", "1700", "0030", "magic", "regular", "Buddy Wrecking Ball"},
+{"24", "1800", "0030", "life", "regular", "Camo"},
+{"25", "1900", "0030", "life", "regular", "Zook"},
+{"26", "1a00", "0030", "life", "regular", "Stealth Elf"},
+--{"26", "1a00", "0030", "life", "regular", "Elite Stealth Elf"},
+--{"26", "1a00", "0030", "life", "regular", "Dark Stealth Elf"},
+{"27", "1b00", "0030", "life", "regular", "Stump Smash"},
+--{"27", "1b00", "0030", "life", "regular", "Autumn Stump Smash"},
+{"28", "1c00", "0030", "magic", "regular", "Dark Spyro"},
+--{"28", "1c00", "0030", "magic", "regular", "Elite Spyro"},
+{"29", "1d00", "0030", "undead", "regular", "Hex"},
+--{"29", "1d00", "0030", "undead", "regular", "Hallows' Eve Hex"},
+{"30", "1e00", "0030", "undead", "regular", "Chop Chop"},
+--{"30", "1e00", "0030", "undead", "regular", "Elite Chop Chop"},
+--{"30", "1e00", "0030", "undead", "regular", "Grill Master Chop Chop"},
+{"31", "1f00", "0030", "undead", "regular", "Ghost Roaster"},
+{"32", "2000", "0030", "undead", "regular", "Cynder"},
+--{"32", "2000", "0030", "undead", "regular", "Skeletal Cynder"},
+
+{"100", "6400", "0030", "air", "giant", "Jet Vac"},
+{"101", "6500", "0030", "air", "giant", "Swarm"},
+{"102", "6600", "0030", "earth", "giant", "Crusher"},
+{"103", "6700", "0030", "earth", "giant", "Flashwing"},
+--{"103", "6700", "0030", "earth", "giant", "Jade Flashwing"},
+{"104", "6800", "0030", "fire", "giant", "Hot Head"},
+{"105", "6900", "0030", "fire", "giant", "Hot Dog"},
+--{"105", "6900", "0030", "fire", "giant", "Molten Hot Dog"},
+{"106", "6a00", "0030", "water", "giant", "Chill"},
+{"107", "6b00", "0030", "water", "giant", "Thumpback"},
+--{"107", "6b00", "0030", "water", "giant", "Admiral Thumpback"},
+{"108", "6c00", "0030", "magic", "giant", "Pop Fizz"},
+--{"108", "6c00", "0030", "magic", "giant", "Hoppity Pop Fizz"},
+--{"108", "6c00", "0030", "magic", "giant", "Love Potion Pop Fizz"},
+--{"108", "6c00", "0030", "magic", "giant", "Punch Pop Fizz"},
+{"109", "6d00", "0030", "magic", "giant", "Nin Jini"},
+{"110", "6e00", "0030", "tech", "giant", "Bouncer"},
+{"111", "6f00", "0030", "tech", "giant", "Sprocket"},
+{"112", "7000", "0030", "life", "giant", "Tree Rex"},
+--{"112", "7000", "0030", "life", "giant", "Gnarly Tree Rex"},
+{"113", "7100", "0030", "life", "giant", "Shroomboom"}, --lightcore
+{"114", "7200", "0030", "undead", "giant", "Eye Broawl"},
+{"115", "7300", "0030", "undead", "giant", "Fright Rider"},
+
+{"200", "c800", "0030", "", "item", "Anvil Rain"},
+{"201", "c900", "0030", "", "item", "Platinum Treasure Chest"},
+{"202", "ca00", "0030", "", "item", "Healing Elixer"},
+{"203", "cb00", "0030", "", "item", "Ghost Pirate Swords"},
+{"204", "cc00", "0030", "", "item", "Time Twist Hourglass"},
+{"205", "cd00", "0030", "", "item", "Sky Iron Shield"},
+{"206", "ce00", "0030", "", "item", "Winged Boots"},
+{"207", "cf00", "0030", "", "item", "Sparx"},
+{"208", "d000", "0030", "", "item", "Cannon"},
+{"209", "d100", "0030", "", "item", "Scorpion Striker"},
+
+{"210", "d200", "0230", "magic", "trap", "Biter's Bane"},
+{"210", "d200", "0830", "magic", "trap", "Sorcerous Skull"},
+-- legendary Sorcerous Skull?
+{"210", "d200", "0b30", "magic", "trap", "Axe Of Illusion"},
+{"210", "d200", "0e30", "magic", "trap", "Arcane Hourglass"},
+{"210", "d200", "1230", "magic", "trap", "Spell Slapper"},
+{"210", "d200", "1430", "magic", "trap", "Rune Rocket"},
+
+{"211", "d300", "0130", "water", "trap", "Tidal Tiki"},
+{"211", "d300", "0230", "water", "trap", "Wet Walter"},
+{"211", "d300", "0630", "water", "trap", "Flood Flask"},
+-- legendary flood flask?
+{"211", "d300", "0730", "water", "trap", "Soaking Staff"},
+{"211", "d300", "0b30", "water", "trap", "Aqua Axe"},
+{"211", "d300", "1630", "water", "trap", "Frost Helm"},
+
+{"212", "d400", "0330", "air", "trap", "Breezy Bird"},
+{"212", "d400", "0630", "air", "trap", "Drafty Decanter"},
+{"212", "d400", "0d30", "air", "trap", "Tempest Timer"},
+{"212", "d400", "1030", "air", "trap", "Cloudy Cobra"},
+{"212", "d400", "1130", "air", "trap", "Storm Warning"},
+{"212", "d400", "1830", "air", "trap", "Cycone Saber"},
+
+{"213", "d500", "0430", "undead", "trap", "Spirit Sphere"},
+{"213", "d500", "0830", "undead", "trap", "Spectral Skull"},
+{"213", "d500", "0b30", "undead", "trap", "Haunted Hatchet"},
+{"213", "d500", "0c30", "undead", "trap", "Grim Gripper"},
+{"213", "d500", "1030", "undead", "trap", "Spooky Snake"},
+{"213", "d500", "1730", "undead", "trap", "Dream Piercer"},
+
+{"214", "d600", "0030", "tech", "trap", "tech Totem"},
+{"214", "d600", "0730", "tech", "trap", "Automatic Angel"},
+{"214", "d600", "0930", "tech", "trap", "Factory Flower"},
+{"214", "d600", "0c30", "tech", "trap", "Grabbing Gadget"},
+{"214", "d600", "1630", "tech", "trap", "Makers Mana"},
+{"214", "d600", "1a30", "tech", "trap", "Topsy techy"},
+
+{"215", "d700", "0530", "fire", "trap", "Eternal Flame"},
+{"215", "d700", "0930", "fire", "trap", "fire Flower"},
+{"215", "d700", "1130", "fire", "trap", "Scorching Stopper"},
+{"215", "d700", "1230", "fire", "trap", "Searing Spinner"},
+{"215", "d700", "1730", "fire", "trap", "Spark Spear"},
+{"215", "d700", "1b30", "fire", "trap", "Blazing Belch"},
+
+{"216", "d800", "0030", "earth", "trap", "Banded Boulder"},
+{"216", "d800", "0330", "earth", "trap", "Rock Hawk"},
+{"216", "d800", "0a30", "earth", "trap", "Slag Hammer"},
+{"216", "d800", "0e30", "earth", "trap", "Dust Of Time"},
+{"216", "d800", "1330", "earth", "trap", "Spinning Sandstorm"},
+{"216", "d800", "1a30", "earth", "trap", "Rubble Trouble"},
+
+{"217", "d900", "0330", "life", "trap", "Oak Eagle"},
+{"217", "d900", "0530", "life", "trap", "Emerald Energy"},
+{"217", "d900", "0a30", "life", "trap", "Weed Whacker"},
+{"217", "d900", "1030", "life", "trap", "Seed Serpent"},
+{"217", "d900", "1830", "life", "trap", "Jade Blade"},
+{"217", "d900", "1b30", "life", "trap", "Shrub Shrieker"},
+
+{"218", "da00", "0030", "dark", "trap", "dark Dagger"},
+{"218", "da00", "1430", "dark", "trap", "Shadow Spider"},
+{"218", "da00", "1a30", "dark", "trap", "Ghastly Grimace"},
+
+{"219", "db00", "0030", "light", "trap", "Shining Ship"},
+{"219", "db00", "0f30", "light", "trap", "Heavenly Hawk"},
+{"219", "db00", "1b30", "light", "trap", "Beam Scream"},
+
+{"220", "dc00", "3030", "kaos", "trap", "Kaos trap!"},
+--{"220", "dc00", "3130", "kaos", "trap", "Ultimate Kaos trap!"}, ?
+
+
+{"230", "e600", "0030", "none", "item", "Hand Of Fate"},
+{"231", "e700", "0030", "none", "item", "Piggy Bank"},
+{"232", "e800", "0030", "none", "item", "Rocket Ram"},
+{"233", "e900", "0030", "none", "item", "Tiki Speaky"},
+
+{"300", "2c01", "0030", "none", "location", "Dragons Peak"},
+{"301", "2d01", "0030", "none", "location", "Empire Of Ice"},
+{"302", "2e01", "0030", "none", "location", "Pirate Seas"},
+{"303", "2f01", "0030", "none", "location", "darklight Crypt"},
+{"304", "3001", "0030", "none", "location", "Volcanic Vault"},
+{"305", "3101", "0030", "none", "location", "Mirror Of Mystery"},
+{"306", "3201", "0030", "none", "location", "Nightmare Express"},
+{"307", "3301", "0030", "none", "location", "Sunscraper Spire"},
+{"308", "3401", "0030", "none", "location", "Midnight Museum"},
+
+{"404", "9401", "0030", "earth", "legendary","Bash"},
+{"416", "a001", "0030", "magic", "legendary", "Spyro"},
+       --{"", "", "0030", "magic", "legendary", "Deja Vu"},
+{"419", "a301", "0030", "tech", "legendary", "Trigger Happy"},
+       --{"", "", "0030", "tech", "legendary", "bouncer"},
+       --{"", "", "0030", "tech", "legendary", "jawbreaker"},
+{"430", "ae01", "0030", "undead", "legendary", "Chop Chop"},
+       --{"", "", "0030", "undead", "legendary", "grim creeper"},
+       --{"", "", "0030", "undead", "legendary", "night shift"},
        
-       --[[
-       LEGENDARY
-    --]]       
-       ["0194"]="LEGENDARY BASH",
-       ["01A0"]="LEGENDARY SPYRO",
-       ["01A3"]="LEGENDARY TRIGGER HAPPY",
-       ["01AE"]="LEGENDARY CHOPCHOP",
+       --{"", "", "0030", "air", "legendary", "blades"},
+       --{"", "", "0030", "air", "legendary", "jet vac"},      
+       --{"", "", "0030", "air", "legendary", "Free Ranger"},
+       --{"", "", "0030", "life", "legendary", "stealth elf"},
+       --{"", "", "0030", "life", "legendary", "Bushwhack"},
+       --{"", "", "0030", "fire", "legendary", "ignitor"},
+       --{"", "", "0030", "water", "legendary", "slam bam"},
+       --{"", "", "0030", "water", "legendary", "chill"},
+
+       --{"", "", "0030", "", "legendary", "zoo lou"}, 
        
-       --[[
-       TRAPTEAM
-    --]]
-       ["01C2"]="TRAPTEAM GUSTO",
-       ["01C3"]="TRAPTEAM THUNDERBOLT",
-       ["01C4"]="TRAPTEAM FLING KONG",
-       ["01C5"]="TRAPTEAM BLADES",
-       ["01C6"]="TRAPTEAM WALLOP",
-       ["01C7"]="TRAPTEAM HEAD RUSH",
-       ["01C8"]="TRAPTEAM FIST BUMP",
-       ["01C9"]="TRAPTEAM ROCKY ROLL",
-       ["01CA"]="TRAPTEAM WILDFIRE",
-       ["01CB"]="TRAPTEAM KA BOOM",
-       ["01CC"]="TRAPTEAM TRAIL BLAZER",
-       ["01CD"]="TRAPTEAM TORCH",
-       ["01CE"]="TRAPTEAM SNAP SHOT",
-       ["01CF"]="TRAPTEAM LOB STAR",
-       ["01D0"]="TRAPTEAM FLIP WRECK",
-       ["01D1"]="TRAPTEAM ECHO",
-       ["01D2"]="TRAPTEAM BLASTERMIND",
-       ["01D3"]="TRAPTEAM ENIGMA",
-       ["01D4"]="TRAPTEAM DEJA VU",
-       ["01D5"]="TRAPTEAM COBRA CADABRA",
-       ["01D6"]="TRAPTEAM JAWBREAKER", 
-       ["01D7"]="TRAPTEAM GEARSHIFT",
-       ["01D8"]="TRAPTEAM CHOPPER",
-       ["01D9"]="TRAPTEAM TREAD HEAD",
-       ["01DA"]="TRAPTEAM BUSHWHACK",
-       ["01DB"]="TRAPTEAM TUFF LUCK",
-       ["01DC"]="TRAPTEAM FOOD FIGHT",
-       ["01DD"]="TRAPTEAM HIGH FIVE",
-       ["01DE"]="TRAPTEAM NITRO KRYPT KING",
-       ["01DF"]="TRAPTEAM SHORT CUT",
-       ["01E0"]="TRAPTEAM BAT SPIN",
-       ["01E1"]="TRAPTEAM FUNNY BONE",
-       ["01E2"]="TRAPTEAM KNIGHT LIGHT",
-       ["01E3"]="TRAPTEAM SPOTLIGHT",
-       ["01E4"]="TRAPTEAM KNIGHT MARE",
-       ["01E5"]="TRAPTEAM BLACKOUT",
-
-       --[[
-       PET
-       --]]
-       ["01F6"]="PET BOP",
-       ["01F7"]="PET SPRY",
-       ["01F8"]="PET HIJINX",
-       ["01F9"]="PET TERRAFIN",
-       ["01FA"]="PET BREEZE",
-       ["01FB"]="PET WEERUPTOR",
-       ["01FC"]="PET PET VAC",
-       ["01FD"]="PET SMALL FRY",
-       ["01FE"]="PET DROBIT",
-       ["0202"]="PET GILL GRUNT",
-       ["0207"]="PET TRIGGER SNAPPY",
-       ["020E"]="PET WHISPER ELF",
-       ["021C"]="PET BARKLEY",
-       ["021D"]="PET THUMPLING",
-       ["021E"]="PET MINI JINI",
-       ["021F"]="PET EYE SMALL",
-
-       --[[
-       SWAP FORCE
-       --]]
-       ["0BB8"]="SWAPFORCE SCRATCH",
-       ["0BB9"]="SWAPFORCE POPTHORN",
-       ["0BBA"]="SWAPFORCE SLOBBER TOOTH",
-       ["0BBB"]="SWAPFORCE SCORP",
-       ["0BBC"]="SWAPFORCE HOG WILD FRYNO",
-       ["0BBD"]="SWAPFORCE SMOLDER DASH",
-       ["0BBE"]="SWAPFORCE BUMBLE BLAST",
-       ["0BBF"]="SWAPFORCE ZOO LOU",
-       ["0BC0"]="SWAPFORCE DUNE BUG",
-       ["0BC1"]="SWAPFORCE STAR STRIKE",
-       ["0BC2"]="SWAPFORCE COUNTDOWN",
-       ["0BC3"]="SWAPFORCE WIND UP",
-       ["0BC4"]="SWAPFORCE ROLLER BRAWL",
-       ["0BC5"]="SWAPFORCE GRIM CREEPER",
-       ["0BC6"]="SWAPFORCE RIP TIDE",
-       ["0BC7"]="SWAPFORCE PUNK SHOCK",
+{"450", "c201", "0030", "air", "trapmaster", "Gusto"},
+--{"450", "c201", "0234", "air", "trapmaster", "Special Gusto"},
+{"451", "c301", "0030", "air", "trapmaster", "Thunderbolt"},
+--{"451", "c301", "0234", "air", "trapmaster", "Special Thunderbolt"},
+{"452", "c401", "0030", "air", "regular", "Fling Kong"},
+{"453", "c501", "0030", "air", "regular", "Blades"},
+{"454", "c601", "0030", "earth", "trapmaster", "Wallop"},
+--{"454", "c601", "0234", "earth", "trapmaster", "Special Wallop"},
+{"455", "c701", "0030", "earth", "trapmaster", "Head Rush"},
+{"455", "c701", "0234", "earth", "trapmaster", "Nitro Head Rush"},
+{"456", "c801", "0030", "earth", "regular", "Fist Bump"},
+{"457", "c901", "0030", "earth", "regular", "Rocky Roll"},
+--{"457", "c901", "0030", "earth", "regular", "Rocky Egg Roll"},
+{"458", "ca01", "0030", "fire", "trapmaster", "Wildfire"},
+{"458", "ca01", "0234", "fire", "trapmaster", "Dark Wildfire"},
+{"459", "cb01", "0030", "fire", "trapmaster", "Ka Boom"},
+--{"459", "cb01", "0234", "fire", "trapmaster", "Special Ka Boom"},
+{"460", "cc01", "0030", "fire", "regular", "Trail Blazer"},
+{"461", "cd01", "0030", "fire", "regular", "Torch"},
+{"462", "ce01", "0030", "water", "trapmaster", "Snap Shot"},
+{"462", "ce01", "0234", "water", "trapmaster", "Dark Snap Shot"},
+--, "water", "trapmaster", "Instant Snap Shot"},
+--, "water", "trapmaster", "Merry Snap Shot"},
+{"463", "cf01", "0030", "water", "trapmaster", "Lob Star"},
+{"463", "cf01", "0234", "water", "trapmaster", "Winterfest Lob Star"},
+{"464", "d001", "0030", "water", "regular", "Flip Wreck"},
+{"465", "d101", "0030", "water", "regular", "Echo"},
+{"466", "d201", "0030", "magic", "trapmaster", "Blastermind"},
+--{"466", "d201", "0234", "magic", "trapmaster", "Special Blastermind"},
+{"467", "d301", "0030", "magic", "trapmaster", "Enigma"},
+--{"467", "d301", "0234", "magic", "trapmaster", "Special Enigma"},
+{"468", "d401", "0030", "magic", "regular", "Deja Vu"},
+{"469", "d501", "0030", "magic", "regular", "Cobra Cadabra"},
+--{"469", "d501", "0030", "magic", "regular", "Charming Cobra Cadabra"},
+--{"469", "d501", "0030", "magic", "regular", "King Cobra Cadabra"},
+{"470", "d601", "0030", "tech", "trapmaster", "Jawbreaker"},
+--{"470", "d601", "0234", "tech", "trapmaster", "Special Jawbreaker"},
+--{"470", "d601", "0234", "tech", "trapmaster", "Knockout Jawbreaker"},
+{"471", "d701", "0030", "tech", "trapmaster", "Gearshift"},
+--{"471", "d701", "0234", "tech", "trapmaster", "Special Gearshift"},
+{"472", "d801", "0030", "tech", "regular", "Chopper"},
+{"473", "d901", "0030", "tech", "regular", "Tread Head"},
+{"474", "da01", "0030", "life", "trapmaster", "Bushwhack"},
+--{"474", "da01", "0234", "life", "trapmaster", "Special Bushwhack"},
+{"475", "db01", "0030", "life", "trapmaster", "Tuff Luck"},
+--{"475", "db01", "0234", "life", "trapmaster", "Special Tuff Luck"},
+{"476", "dc01", "0030", "life", "regular", "Food Fight"},
+--{"476", "dc01", "0030", "life", "regular", "Dark Food Fight"},
+--{"476", "dc01", "0030", "life", "regular", "Frosted Food Fight"},
+--{"476", "dc01", "0030", "life", "regular", "Instant Food Fight"},
+{"477", "dd01", "0030", "life", "regular", "High Five"},
+{"478", "de01", "0030", "undead", "trapmaster", "Krypt King"},
+{"478", "de01", "0234", "undead", "trapmaster", "Nitro Krypt King"},
+{"479", "df01", "0030", "undead", "trapmaster", "Short Cut"},
+--{"479", "df01", "0234", "undead", "trapmaster", "Special Short Cut"},
+{"480", "e001", "0030", "undead", "regular", "Bat Spin"},
+{"481", "e101", "0030", "undead", "regular", "Funny Bone"},
+--{"481", "e101", "0030", "undead", "regular", "Fortune Funny Bone"},
+{"482", "e201", "0030", "light", "trapmaster", "Knight light"},
+--{"482", "e201", "0234", "light", "trapmaster", "Special Knight light"},
+{"483", "e301", "0030", "light", "regular", "Spotlight"},
+--{"483", "e301", "0234", "light", "regular", "Special Spotlight"},
+{"484", "e401", "0030", "dark", "trapmaster", "Knight Mare"},
+--{"484", "e401", "0234", "dark", "trapmaster", "Special Knight Mare"},
+{"485", "e501", "0030", "dark", "regular", "Blackout"},
+--{"485", "e501", "0234", "dark", "regular", "Special Blackout"},
+
+{"502", "f601", "0030", "earth", "mini", "Bop"},
+{"503", "f701", "0030", "magic", "mini", "Spry"},
+{"504", "f801", "0030", "undead", "mini", "Hijinx"},
+{"505", "f901", "0030", "earth", "mini", "Terrabite"},
+{"506", "fa01", "0030", "air", "mini", "Breeze"},
+{"507", "fb01", "0030", "fire", "mini", "Weeruptor"},
+--{"507", "fb01", "0030", "fire", "mini", "Eggsellent Weeruptor"},
+{"508", "fc01", "0030", "air", "mini", "Pet Vac"},
+--{"508", "fc01", "0030", "air", "mini", "Power Punch Pet Vac"},
+{"509", "fd01", "0030", "fire", "mini", "Small Fry"},
+{"510", "fe01", "0030", "tech", "mini", "Drobit"},
+{"514", "0202", "0030", "water", "mini", "Gill Runt"},
+{"519", "0702", "0030", "tech", "mini", "Trigger Snappy"},
+{"526", "0e02", "0030", "life", "mini", "Whisper Elf"},
+{"540", "1c02", "0030", "life", "mini", "Barkley"},
+--{"540", "1c02", "0030", "life", "mini", "Gnarly Barkley"},
+{"541", "1d02", "0030", "water", "mini", "Thumpling"},
+{"542", "1e02", "0030", "magic", "mini", "mini Jini"},
+{"543", "1f02", "0030", "undead", "mini", "Eye Small"},
+
+{"3000", "b80b", "0030", "air", "SWAPFORCE", "Scratch"},
+{"3001", "b90b", "0030", "air", "SWAPFORCE", "Pop Thorn"},
+--{"3001", "b90b", "0030", "air", "SWAPFORCE", "Buttered Pop Thorn"},
+{"3002", "ba0b", "0030", "earth", "SWAPFORCE", "Slobber Tooth"},
+--{"3002", "ba0b", "0030", "earth", "SWAPFORCE", "Dark Slobber Tooth"},
+--{"3002", "ba0b", "0030", "earth", "SWAPFORCE", "Sundae Slobber Tooth"},
+{"3003", "bb0b", "0030", "earth", "SWAPFORCE", "Scorp"},
+{"3004", "bc0b", "0138", "fire", "SWAPFORCE", "Hog Wild Fryno"},
+--{"3004", "bc0b", "0138", "fire", "SWAPFORCE", "Flip flop Fryno"},
+{"3005", "bd0b", "0030", "fire", "SWAPFORCE", "Smolderdash"},
+{"3006", "be0b", "0030", "life", "SWAPFORCE", "Bumble Blast"},
+--{"3006", "be0b", "0030", "life", "SWAPFORCE", "Jolly Bumble Blast"},
+{"3007", "bf0b", "0030", "life", "SWAPFORCE", "Zoo Lou"},
+{"3008", "c00b", "0030", "magic", "SWAPFORCE", "Dune Bug"},
+{"3009", "c10b", "0030", "magic", "SWAPFORCE", "Star Strike"},
+--{"3009", "c10b", "0030", "magic", "SWAPFORCE", "Enchanted Star Strike"},
+--{"3009", "c10b", "0030", "magic", "SWAPFORCE", "Mystic Star Strike"},
+{"3010", "c20b", "0030", "tech", "SWAPFORCE", "Countdown"},
+--{"3010", "c20b", "0030", "tech", "SWAPFORCE", "Kickoff Countdown"},
+--{"3010", "c20b", "0030", "tech", "SWAPFORCE", "New Year's Countdown"},
+{"3011", "c30b", "0030", "tech", "SWAPFORCE", "Wind Up"},
+{"3012", "c40b", "0030", "undead", "SWAPFORCE", "Roller Brawl"},
+--{"3012", "c40b", "0030", "undead", "SWAPFORCE", "Snowler Roller Brawl"},
+{"3013", "c50b", "0030", "undead", "SWAPFORCE", "Grim Creeper"},
+{"3014", "c60b", "0030", "water", "SWAPFORCE", "Rip Tide"},
+{"3015", "c70b", "0030", "water", "SWAPFORCE", "Punk Shock"},
+}
+
+local function find( main, sub)
+    
+    for k, v in pairs(_names) do
+               if ( v[2] == main  and v[3] == sub) then
+                       return v
+               end
+       end
+       return nil
+end
+
+return {
+       Find = find,
 }
-return _names
index da1a1ef23bb37a31529a6525966210bde180123f..3b27cac37b31b9e174e7a784ad51950e9694a76c 100644 (file)
@@ -205,7 +205,7 @@ local function main( args)
 
        -- NDEF compliant?
        if b3chars[1] ~= 0xE1 then 
-               return oops("This tag is not NDEF-Complian")
+               return oops("This tag is not NDEF-Compliant")
        end 
 
        local ndefVersion = b3chars[2]  
index 8c9397a780ced1a4939d19f8c08e3c5a9d93d5ee..cad1ab70088d567ebf665f5b90d71865777ebd46 100644 (file)
@@ -3,6 +3,7 @@ local getopt = require('getopt')
 local lib14a = require('read14a')
 local utils = require('utils')
 local pre = require('precalc')
+local toys = require('default_toys')
 
 local lsh = bit32.lshift
 local rsh = bit32.rshift
@@ -10,19 +11,20 @@ local bor = bit32.bor
 local band = bit32.band
 
 example =[[
-       script run tnp3dump
-       script run tnp3dump -h
-       script run tnp3dump -t aa00
+       script run tnp3clone
+       script run tnp3clone -h
+       script run tnp3clone -t aa00 -s 0030
 
 ]]
 author = "Iceman"
-usage = "script run tnp3clone -t <toytype>"
+usage = "script run tnp3clone -t <toytype> -s <subtype>"
 desc =[[
 This script will try making a barebone clone of a tnp3 tag on to a magic generation1 card.
 
 Arguments:
        -h             : this help
-       -k <key>       : toytype id,  4 hex symbols.
+       -t <data>      : toytype id, 4hex symbols.
+       -s <data>      : subtype id, 4hex symbols               
 ]]
 
 
@@ -73,29 +75,45 @@ end
 
 local function main(args)
 
+       print( string.rep('--',20) )
+       print( string.rep('--',20) )
+       
        local numBlocks = 64
     local cset = 'hf mf csetbl '
+       local csetuid = 'hf mf csetuid '
        local cget = 'hf mf cgetbl '
        local empty = '00000000000000000000000000000000'
        local AccAndKeyB = '7F078869000000000000'
        -- Defaults to Gusto
        local toytype = 'C201'
+       local subtype = '0030'
+       local DEBUG = true
        
        -- Arguments for the script
-       for o, a in getopt.getopt(args, 'ht:') do
+       for o, a in getopt.getopt(args, 'ht:s:') do
                if o == "h" then return help() end              
                if o == "t" then toytype = a end
+               if o == "s" then subtype = a end
        end
        
-       if #toytype ~= 4 then return oops('Wrong size in toytype. (4hex symbols)') end  
+       if #toytype ~= 4 then return oops('Wrong size - toytype. (4hex symbols)') end   
+       if #subtype ~= 4 then return oops('Wrong size - subtype. (4hex symbols)') end   
+
+       -- look up type, find & validate types
+       local item = toys.Find( toytype, subtype)
+       if item then
+               print( (' Looking up input: Found %s - %s (%s)'):format(item[6],item[5], item[4]) )
+       else
+               print('Didn\'t find item type. If you are sure about it, report it in')
+       end
+       --15,16
+       --13-14 
+
        
        -- find tag
        result, err = lib14a.read1443a(false)
        if not result then return oops(err)     end
 
-       -- Show tag info
-       print((' Found tag %s'):format(result.name))
-
        -- load keys
        local akeys  = pre.GetAll(result.uid)
        local  keyA = akeys:sub(1, 12 ) 
@@ -111,11 +129,10 @@ local function main(args)
        end
        
        -- wipe card.
-       local cmd  = (cset..' %s 0004 08 w'):format( b0)        
+       local cmd  = (csetuid..'%s 0004 08 w'):format(result.uid)       
        core.console(cmd) 
-
        
-       local b1 = toytype..'000000000000000000000000'
+       local b1 = toytype..'00000000000000000000'..subtype
        local calc = utils.Crc16(b0..b1)
        local calcEndian = bor(rsh(calc,8), lsh(band(calc, 0xff), 8))
        
index 363998fb87ad56e768ce94e03d196f21a9936b2b..f93f9728288afcb53d966ee283007ef18c1ddb32 100644 (file)
@@ -5,8 +5,7 @@ local lib14a = require('read14a')
 local utils = require('utils')
 local md5 = require('md5')
 local dumplib = require('html_dumplib')
-local toyNames = require('default_toys')
-
+local toys = require('default_toys')
 
 example =[[
        script run tnp3dump
@@ -129,7 +128,7 @@ local function main(args)
                if o == "p" then usePreCalc = true end
                if o == "o" then outputTemplate = a end         
        end
-
+       
        -- validate input args.
        keyA =  keyA or '4b0b20107ccb'
        if #(keyA) ~= 12 then
@@ -261,13 +260,16 @@ local function main(args)
                        bindata[#bindata+1] = c
                end
        end 
+
+       print( string.rep('--',20) )
+
        
        local uid = block0:sub(1,8)
-       local itemtype = block1:sub(1,4)
+       local toytype = block1:sub(1,4)
        local cardidLsw = block1:sub(9,16)
        local cardidMsw = block1:sub(16,24)
        local cardid = block1:sub(9,24)
-       local traptype = block1:sub(25,28)
+       local subtype = block1:sub(25,28)
        
        -- Write dump to files
        if not DEBUG then
@@ -277,13 +279,15 @@ local function main(args)
                print(("Wrote a EML dump to:  %s"):format(bar))
        end
 
-       local itemtypename = toyNames[itemtype]
-       if itemtypename == nil then
-               itemtypename = toyNames[utils.SwapEndiannessStr(itemtype,16)]
+       local item = toys.Find(toytype, subtype)
+       if item then
+               local itemStr = ('%s - %s (%s)'):format(item[6],item[5], item[4])
+               print('            ITEM TYPE : '..itemStr )
+       else
+               print(('            ITEM TYPE : 0x%s 0x%s'):format(toytype, subtype))
        end
+       
        -- Show info 
-       print( string.rep('--',20) )
-       print( ('            ITEM TYPE : 0x%s - %s'):format(itemtype, itemtypename) )
        print( (' Alter ego / traptype : 0x%s'):format(traptype) )
        print( ('                  UID : 0x%s'):format(uid) )
        print( ('               CARDID : 0x%s'):format(cardid ) )
index 1d3dbefd176d663d72bd83cca84c42b41f317cde..af3d2d4cfeb5a060bd4df6a36e0771b43948c4bf 100644 (file)
@@ -4,7 +4,7 @@ local bin = require('bin')
 local lib14a = require('read14a')
 local utils = require('utils')
 local md5 = require('md5')
-local toyNames = require('default_toys')
+local toys = require('default_toys')
 
 example =[[
        1. script run tnp3sim
@@ -382,18 +382,22 @@ local function main(args)
        print( string.rep('--',20) )    
        print(' Gathering info')
        local uid = blocks[0]:sub(1,8)
-       local itemtype = blocks[1]:sub(1,4)
+       local toytype = blocks[1]:sub(1,4)
        local cardidLsw = blocks[1]:sub(9,16)
        local cardidMsw = blocks[1]:sub(17,24)
+       local subtype  = blocks[1]:sub(25,28)
 
-       local itemtypename = toyNames[itemtype]
-       if itemtypename == nil then
-               itemtypename = toyNames[utils.SwapEndiannessStr(itemtype,16)]
-       end
-       
        -- Show info 
        print( string.rep('--',20) )
-       print( (' ITEM TYPE : 0x%s - %s'):format(itemtype, itemtypename) )
+       
+       local item = toys.Find( toytype, subtype)
+       if item then
+               local itemStr = ('%s - %s (%s)'):format(item[6],item[5], item[4])
+               print(' ITEM TYPE :'..itemStr )
+       else
+               print( (' ITEM TYPE : 0x%s 0x%s'):format(toytype, subtype) )
+       end     
+       
        print( ('       UID : 0x%s'):format(uid) )
        print( ('    CARDID : 0x%s %s [%s]'):format(
                                                                cardidMsw,cardidLsw, 
Impressum, Datenschutz