Проблемы с циклом FOR

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012
for(key.keyByte[0]=0x00; key.keyByte[0]<0xFF; key.keyByte[0]+=0x01)
{
  for(key.keyByte[1]=0x00; key.keyByte[1]<0xFF; key.keyByte[1]+=0x01)
  {
    for(key.keyByte[2]=0x00; key.keyByte[2]<0xFF; key.keyByte[2]+=0x01)
    {
      for(key.keyByte[3]=0x00; key.keyByte[3]<0xFF; key.keyByte[3]+=0x01)
      {
        for(key.keyByte[4]=0x00; key.keyByte[4]<0xFF; key.keyByte[4]+=0x01)
        {
          for(key.keyByte[5]=0x00; key.keyByte[5]<0xFF; key.keyByte[5]+=0x01)// FE not FF
          //for(key.keyByte[5]=0x00; key.keyByte[5]<=0xFF; key.keyByte[5]+=0x01)//ok FF not FE //not ring
          {

Если установить key.keyByte[5]<0xFF то заканчиватся на 0xFE и переходит на следущий цикл

А если key.keyByte[5]<=0xFF то не переходит на следущий цикл

А нужно чтоб переходило на следующий цикл после 0xFF

 

 

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012

То есть конечный результат должен получится после перебора FF FF FF FF FF FF

rkit
Offline
Зарегистрирован: 23.11.2016

Байт не может быть больше 0xFF.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Код надо публиковать полностью.

Вы опустили описание переменных, а это в данном случае важно.

Измените тип счетчиков цикла на int. Переменная типа byte не может принимать 257 различных значений.

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012

Само сабой!!! Но при key.keyByte[5]<0xFF конечный результат 0xFE и переход!!! а нужно чтоб переход был после 0XFF

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

или заменить на цикл  c  do {}while )))

-NMi-
Offline
Зарегистрирован: 20.08.2018

rkit пишет:

Байт не может быть больше 0xFF.

Это в основном зависит от уровня площадки(форума). Помнишь анекдот про танки и температуру + -300 градусов?

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012
//Brute Force Default KEY <<MIFARE 1K S50>>
//ver.1.0.4

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN    9 
#define SS_PIN    10 
MFRC522 mfrc522(SS_PIN, RST_PIN); 
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600); 
  SPI.begin(); 
  mfrc522.PCD_Init(); 
  //Serial.println("Brute Force Default KEY <<MIFARE 1K S50>> by BlackPhreaker(C)");
  Serial.println("Brute Force KEY <<MIFARE 1K S50>> by BlackPhreaker(C)");
  Serial.println(" ");
}

void loop() {

for(key.keyByte[0]=0x00; key.keyByte[0]<0xFF; key.keyByte[0]+=0x01)
{
  for(key.keyByte[1]=0x00; key.keyByte[1]<0xFF; key.keyByte[1]+=0x01)
  {
    for(key.keyByte[2]=0x00; key.keyByte[2]<0xFF; key.keyByte[2]+=0x01)
    {
      for(key.keyByte[3]=0x00; key.keyByte[3]<=0xFF; key.keyByte[3]+=0x01)
      {
        for(key.keyByte[4]=0x00; key.keyByte[4]<0xFF; key.keyByte[4]+=0x01)
        {
          for(key.keyByte[5]=0x00; key.keyByte[5]<0xFF; key.keyByte[5]+=0x01)// FE not FF
          //for(key.keyByte[5]=0x00; key.keyByte[5]<=0xFF; key.keyByte[5]+=0x01)//ok FF not FE //not ring
          {

if ( ! mfrc522.PICC_IsNewCardPresent()) {return;}
if ( ! mfrc522.PICC_ReadCardSerial()) {return;}
byte status, len;
  
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 0, &key, &(mfrc522.uid));

//Ограничения выводимой информации для мониторинга
if (status!=0){
   char HEX_DAMP[18]; //7
   sprintf(HEX_DAMP, "%02X %02X %02X %02X %02X %02X ", key.keyByte[0], key.keyByte[1], key.keyByte[2], key.keyByte[3], key.keyByte[4], key.keyByte[5]);
   Serial.print(HEX_DAMP);
   Serial.print("Status: "); Serial.println(status); 
}

//Если ключ верный 
if (status==0){
   Serial.print("<<Brute Force KEY OK>> Status: "); Serial.println(status); 
   Serial.print("KEY is: ");
   char HEX_DAMP[18]; //7
   sprintf(HEX_DAMP, "%02X %02X %02X %02X %02X %02X", key.keyByte[0], key.keyByte[1], key.keyByte[2], key.keyByte[3], key.keyByte[4], key.keyByte[5]);
   Serial.println(HEX_DAMP);
}
          }
        }
      }
    }
  }
} 

}




 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Phreaker Chernie пишет:

Само сабой!!! Но при key.keyByte[5]<0xFF конечный результат 0xFE и переход!!! а нужно чтоб переход был после 0XFF

А зачем вот так вот непонятно как из-за угла лопатить вложенные пустые циклы? Это новый delay() ???

+++

А, фсё, код добавил, я все понял. Брутфорс.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Мда. Жулики уже ничего не стесняюца. Хорошо, что тупые. 

-NMi-
Offline
Зарегистрирован: 20.08.2018

DetSimen пишет:

Мда. Жулики уже ничего не стесняюца. Хорошо, что тупые. 

Дет, ну такое "фуфло" предусмотрено на этапе разработки. Там 130 лет помому перебор вот таким способом в датащях детерминирован. Так-шо пущщай развлекаюцца поколениями.

-NMi-
Offline
Зарегистрирован: 20.08.2018

ua6em пишет:

или заменить на цикл  c  do {}while )))

При таком подходе в байт уже больше 255 влезет???

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012

Ну насчет тупых...

Эт пишится для спортивного интересса...

Так как все сделано на много проще при linux и ARC122U... Если тупые слишали про Crypto1 ))

и про уязвимости MIFARE Clossic

Green
Offline
Зарегистрирован: 01.10.2015

-NMi- пишет:

ua6em пишет:

или заменить на цикл  c  do {}while )))

При таком подходе в байт уже больше 255 влезет???


А именно 256!)

key.keyByte[0] = 0;
do {
//...
}
while (++key.keyByte[0]);

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

-NMi- пишет:

ua6em пишет:

или заменить на цикл  c  do {}while )))

При таком подходе в байт уже больше 255 влезет???

ДА! ДА!! и ещЁ раз ДА!!!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Phreaker Chernie пишет:

Ну насчет тупых...

Эт пишится для спортивного интересса...

Так как все сделано на много проще при linux и ARC122U... Если тупые слишали про Crypto1 ))

и про уязвимости MIFARE Clossic

Если б это про тебя было написано, ты б таких вопросов не задавал.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Green пишет:

А именно 256!)

Т.о. при while (until, repeat, do) буит 256 итераций а при for 0 255 ++ будет 255 итераций??? Дануна...

Green
Offline
Зарегистрирован: 01.10.2015

Потому что for проверку делает в начале цикла, в отличие от do while.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

-NMi- пишет:

Green пишет:

А именно 256!)

Т.о. при while (until, repeat, do) буит 256 итераций а при for 0 255 ++ будет 255 итераций??? Дануна...

ну так он же проверяет на выходе, цикл то прошёл жеж

Phreaker Chernie
Offline
Зарегистрирован: 11.02.2012
while(key.keyByte[5]<0xFF){
if (key.keyByte[0]==0xFF) key.keyByte[1]+=0x01;
if (key.keyByte[1]==0xFF) key.keyByte[2]+=0x01;
if (key.keyByte[2]==0xFF) key.keyByte[3]+=0x01;
if (key.keyByte[3]==0xFF) key.keyByte[4]+=0x01;
if (key.keyByte[4]==0xFF) key.keyByte[5]+=0x01;
key.keyByte[0]+=0x01;

Кому то уже приходила идея))

 

 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Green пишет:

Потому что for проверку делает в начале цикла, в отличие от do while.

Твое утверждение прям как в квн: -патамуШО хладиолус и ниип@т!!!

А теперь произведём подход к снаряду: т.о. цикл вида

for (int a=0; a==255; a++) {  }  

сработает РОВНО от а==0 до а== 255 и никак по другому!!!

 

-NMi-
Offline
Зарегистрирован: 20.08.2018

ua6em пишет:

ну так он же проверяет на выходе, цикл то прошёл жеж

 

ну давай вообще вот так сделаем, без циклоФ:

int a=0

L_001:

чотоделаем

a++

if (a != 255)

 goto L_001

В этом случае оператор сравнения можно ставить хоть сверху, хоть снизу, всёравно "прокрутит" с 0 до 255.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Phreaker Chernie пишет:

Само сабой!!! Но при key.keyByte[5]<0xFF конечный результат 0xFE и переход!!! а нужно чтоб переход был после 0XFF

"После 0XFF" будет 0x0100, а это в байт уже не лезет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
247. I = F6
248. I = F7
249. I = F8
250. I = F9
251. I = FA
252. I = FB
253. I = FC
254. I = FD
255. I = FE
256. I = FF
257. I = 0
258. I = 1
259. I = 2
260. I = 3
261. I = 4

 

volatile uint8_t i = 0x00;
volatile uint16_t s = 1;
void setup() {
Serial.begin(115200);
}

void loop() {
 do{
  Serial.print(s);
  Serial.print(". I = ");
  Serial.println(i,HEX);
  s++;
  i++;
  delay(100);
   }while(i<=0xFF);
   Serial.println(" IS OK ");
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

256 это число итераций, на 0 жеж тоже проход цикла был и при 0хFF тоже

-NMi-
Offline
Зарегистрирован: 20.08.2018

ua6em пишет:

volatile uint8_t i = 0x00;
volatile uint16_t s = 1;

Зачем ты пытаешься лукавить? Счёт по while у тебя по i=0 а сцукоблее вывод по s=1. Ичо? Вот тебе и расхождение, ибо в математике усёбуит "чики-чики", просто здеся имеет место быть концепция ZERO, уотт и весь фокус-покус)))