mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-22 06:13:51 -07:00
allow for t55xx detection to search for 0xE039 (Silicon Craft technology)
This commit is contained in:
parent
c26d33dfd3
commit
ddfbd7f549
1 changed files with 68 additions and 46 deletions
|
@ -3498,7 +3498,8 @@ out:
|
|||
// some return all page 1 (64 bits) and others return just that block (32 bits)
|
||||
// unfortunately the 64 bits makes this more likely to get a false positive...
|
||||
bool tryDetectP1(bool getData) {
|
||||
uint8_t preamble[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1};
|
||||
uint8_t preamble_atmel[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1};
|
||||
uint8_t preamble_silicon[] = {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1};
|
||||
size_t startIdx = 0;
|
||||
uint8_t fc1 = 0, fc2 = 0, ans = 0;
|
||||
int clk = 0, firstClockEdge = 0;
|
||||
|
@ -3512,61 +3513,74 @@ bool tryDetectP1(bool getData) {
|
|||
// try fsk clock detect. if successful it cannot be any other type of modulation... (in theory...)
|
||||
ans = fskClocks(&fc1, &fc2, (uint8_t *)&clk, &firstClockEdge);
|
||||
if (ans && ((fc1 == 10 && fc2 == 8) || (fc1 == 8 && fc2 == 5))) {
|
||||
if ((FSKrawDemod(0, 0, 0, 0, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
|
||||
if ((FSKrawDemod(0, 0, 0, 0, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
if ((FSKrawDemod(0, 1, 0, 0, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
}
|
||||
|
||||
if ((FSKrawDemod(0, 1, 0, 0, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// try ask clock detect. it could be another type even if successful.
|
||||
clk = GetAskClock("", false);
|
||||
if (clk > 0) {
|
||||
if ((ASKDemod_ext(0, 0, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if ((ASKDemod_ext(0, 0, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
st = true;
|
||||
if ((ASKDemod_ext(0, 1, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if ((ASKDemod_ext(0, 1, 1, 0, false, false, false, 1, &st) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((ASKbiphaseDemod(0, 0, 1, 2, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if ((ASKbiphaseDemod(0, 0, 0, 2, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if ((ASKbiphaseDemod(0, 0, 1, 2, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// try NRZ clock detect. it could be another type even if successful.
|
||||
clk = GetNrzClock("", false); //has the most false positives :(
|
||||
if (clk > 0) {
|
||||
if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if ((NRZrawDemod(0, 0, 1, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
if ((NRZrawDemod(0, 1, 1, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
|
||||
}
|
||||
if ((NRZrawDemod(0, 1, 1, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Fewer card uses PSK
|
||||
|
@ -3577,33 +3591,41 @@ bool tryDetectP1(bool getData) {
|
|||
// save_restoreGB(GRAPH_SAVE);
|
||||
// skip first 160 samples to allow antenna to settle in (psk gets inverted occasionally otherwise)
|
||||
//CmdLtrim("-i 160");
|
||||
if ((PSKDemod(0, 0, 6, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
if ((PSKDemod(0, 0, 6, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
//save_restoreGB(GRAPH_RESTORE);
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
if ((PSKDemod(0, 1, 6, false) == PM3_SUCCESS) &&
|
||||
preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
}
|
||||
|
||||
if ((PSKDemod(0, 1, 6, false) == PM3_SUCCESS) && (g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
//save_restoreGB(GRAPH_RESTORE);
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// PSK2 - needs a call to psk1TOpsk2.
|
||||
if (PSKDemod(0, 0, 6, false) == PM3_SUCCESS) {
|
||||
psk1TOpsk2(g_DemodBuffer, g_DemodBufferLen);
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble, sizeof(preamble), &g_DemodBufferLen, &startIdx, false) &&
|
||||
(g_DemodBufferLen == 32 || g_DemodBufferLen == 64)) {
|
||||
|
||||
if (g_DemodBufferLen == 32 || g_DemodBufferLen == 64) {
|
||||
//save_restoreGB(GRAPH_RESTORE);
|
||||
if (preambleSearchEx(g_DemodBuffer, preamble_atmel, sizeof(preamble_atmel), &g_DemodBufferLen, &startIdx, false) ||
|
||||
preambleSearchEx(g_DemodBuffer, preamble_silicon, sizeof(preamble_silicon), &g_DemodBufferLen, &startIdx, false)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} // inverse waves does not affect PSK2 demod
|
||||
//undo trim samples
|
||||
//save_restoreGB(GRAPH_RESTORE);
|
||||
// no other modulation clocks = 2 or 4 so quit searching
|
||||
if (fc1 != 8) return false;
|
||||
if (fc1 != 8) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
// does this need to be a callable command?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue