mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 13:53:55 -07:00
FIX: the lfsampling.c for t55xx had a tendecy to enter a neverending loop. Moved exit branch into the while statement, which seems to solve it.
FIX: Strange int -> uint8_t casting behavior (0x05 gets the 25bit set and becomes 0x10005 instead) in fskdemod, removed int and sscanf.
This commit is contained in:
parent
fff6d2a3ba
commit
3f26796673
3 changed files with 21 additions and 22 deletions
|
@ -271,7 +271,7 @@ void doT55x7Acquisition(size_t sample_size) {
|
||||||
uint8_t curSample = 0;
|
uint8_t curSample = 0;
|
||||||
uint8_t lastSample = 0;
|
uint8_t lastSample = 0;
|
||||||
uint16_t skipCnt = 0;
|
uint16_t skipCnt = 0;
|
||||||
while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt<1000) {
|
while(!BUTTON_PRESS() && !usb_poll_validate_length() && skipCnt < 1000 && (i < bufsize) ) {
|
||||||
WDT_HIT();
|
WDT_HIT();
|
||||||
if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
|
if (AT91C_BASE_SSC->SSC_SR & AT91C_SSC_TXRDY) {
|
||||||
AT91C_BASE_SSC->SSC_THR = 0x43;
|
AT91C_BASE_SSC->SSC_THR = 0x43;
|
||||||
|
@ -306,11 +306,10 @@ void doT55x7Acquisition(size_t sample_size) {
|
||||||
// if just found start - recover last sample
|
// if just found start - recover last sample
|
||||||
if (!startFound) {
|
if (!startFound) {
|
||||||
dest[i++] = lastSample;
|
dest[i++] = lastSample;
|
||||||
startFound = true;
|
startFound = true;
|
||||||
}
|
}
|
||||||
// collect samples
|
// collect samples
|
||||||
dest[i++] = curSample;
|
dest[i++] = curSample;
|
||||||
if (i >= bufsize-1) break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -934,15 +934,15 @@ char *GetFSKType(uint8_t fchigh, uint8_t fclow, uint8_t invert)
|
||||||
int FSKrawDemod(const char *Cmd, bool verbose)
|
int FSKrawDemod(const char *Cmd, bool verbose)
|
||||||
{
|
{
|
||||||
//raw fsk demod no manchester decoding no start bit finding just get binary from wave
|
//raw fsk demod no manchester decoding no start bit finding just get binary from wave
|
||||||
|
uint8_t rfLen, invert, fchigh, fclow;
|
||||||
|
|
||||||
//set defaults
|
//set defaults
|
||||||
int rfLen = 0;
|
|
||||||
int invert = 0;
|
|
||||||
int fchigh = 0;
|
|
||||||
int fclow = 0;
|
|
||||||
|
|
||||||
//set options from parameters entered with the command
|
//set options from parameters entered with the command
|
||||||
sscanf(Cmd, "%i %i %i %i", &rfLen, &invert, &fchigh, &fclow);
|
rfLen = param_get8ex(Cmd, 0, 0, 10);
|
||||||
|
invert = param_get8ex(Cmd, 1, 0, 10);
|
||||||
|
fchigh = param_get8ex(Cmd, 2, 0, 10);
|
||||||
|
fclow = param_get8ex(Cmd, 3, 0, 10);
|
||||||
|
|
||||||
if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
|
if (strlen(Cmd)>0 && strlen(Cmd)<=2) {
|
||||||
if (rfLen==1){
|
if (rfLen==1){
|
||||||
invert = 1; //if invert option only is used
|
invert = 1; //if invert option only is used
|
||||||
|
@ -958,31 +958,31 @@ int FSKrawDemod(const char *Cmd, bool verbose)
|
||||||
if (fchigh==0 || fclow == 0){
|
if (fchigh==0 || fclow == 0){
|
||||||
fcs = countFC(BitStream, BitLen, 1);
|
fcs = countFC(BitStream, BitLen, 1);
|
||||||
if (fcs==0){
|
if (fcs==0){
|
||||||
fchigh=10;
|
fchigh = 10;
|
||||||
fclow=8;
|
fclow = 8;
|
||||||
}else{
|
} else {
|
||||||
fchigh = (fcs >> 8) & 0xFF;
|
fchigh = (fcs >> 8) & 0xFF;
|
||||||
fclow = fcs & 0xFF;
|
fclow = fcs & 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//get bit clock length
|
//get bit clock length
|
||||||
if (rfLen==0){
|
if (rfLen == 0){
|
||||||
rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
|
rfLen = detectFSKClk(BitStream, BitLen, fchigh, fclow);
|
||||||
if (rfLen == 0) rfLen = 50;
|
if (rfLen == 0) rfLen = 50;
|
||||||
}
|
}
|
||||||
int size = fskdemod(BitStream,BitLen,(uint8_t)rfLen,(uint8_t)invert,(uint8_t)fchigh,(uint8_t)fclow);
|
int size = fskdemod(BitStream, BitLen, rfLen, invert, fchigh, fclow);
|
||||||
if (size>0){
|
if (size > 0){
|
||||||
setDemodBuf(BitStream,size,0);
|
setDemodBuf(BitStream, size, 0);
|
||||||
|
|
||||||
// Now output the bitstream to the scrollback by line of 16 bits
|
// Now output the bitstream to the scrollback by line of 16 bits
|
||||||
if (verbose || g_debugMode) {
|
if (verbose || g_debugMode) {
|
||||||
PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%d", rfLen, invert, fchigh, fclow);
|
PrintAndLog("\nUsing Clock:%d, invert:%d, fchigh:%d, fclow:%u", rfLen, invert, fchigh, fclow);
|
||||||
PrintAndLog("%s decoded bitstream:",GetFSKType(fchigh,fclow,invert));
|
PrintAndLog("%s decoded bitstream:", GetFSKType(fchigh, fclow, invert));
|
||||||
printDemodBuff();
|
printDemodBuff();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
} else{
|
} else {
|
||||||
if (g_debugMode) PrintAndLog("no FSK data found");
|
if (g_debugMode) PrintAndLog("no FSK data found");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -1407,7 +1407,7 @@ int CmdT55xxBruteForce(const char *Cmd) {
|
||||||
found = tryDetectModulation();
|
found = tryDetectModulation();
|
||||||
|
|
||||||
if ( found ) {
|
if ( found ) {
|
||||||
PrintAndLog("Found valid password:[%08X]", testpwd);
|
PrintAndLog("Found valid password: [%08X]", testpwd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue