📄 mifare1.lst
字号:
311 3 }
312 2 }
313 1 if(m1keyidx == 0xff)
314 1 {
315 2 cmd[0] = FAIL;
316 2 cmd[1] = MI_NOTAUTHERR;
317 2 return 2;
318 2 }
319 1 if((m1keystatus[m1keyidx] & 0x80) == 0x80) // key b
320 1 {
321 2 if(MI_OK == M500Auth(PICC_AUTHENT1B, snr, m1keys[m1keyidx], m1sector))
322 2 fkeypassed = 1;
323 2 else if(MI_OK == M500Auth(PICC_AUTHENT1B, snr, m1keys[m1keyidx], m1sector))
324 2 fkeypassed = 1;
325 2 else if(MI_OK == M500Auth(PICC_AUTHENT1B, snr, m1keys[m1keyidx], m1sector))
326 2 fkeypassed = 1;
327 2 }
328 1 else // key a
329 1 {
330 2 if(MI_OK == M500Auth(PICC_AUTHENT1A, snr, m1keys[m1keyidx], m1sector))
331 2 fkeypassed = 1;
332 2 else if(MI_OK == M500Auth(PICC_AUTHENT1A, snr, m1keys[m1keyidx], m1sector))
333 2 fkeypassed = 1;
334 2 else if(MI_OK == M500Auth(PICC_AUTHENT1A, snr, m1keys[m1keyidx], m1sector))
335 2 fkeypassed = 1;
336 2 }
337 1 if(!fkeypassed)
338 1 {
339 2 cmd[0] = FAIL;
340 2 cmd[1] = MI_AUTHERR;
341 2 return 2;
342 2 }
343 1
344 1 if(cmd[1] == CMD_READ) // READ M1 CARD
345 1 {
346 2 if(len != 4)
347 2 {
348 3 cmd[0] = ERRORCMDLEN;
349 3 return 1;
350 3 }
351 2
352 2 if(m1block == ALLBLOCK)
353 2 {
354 3 if((i = M500Read((m1sector<<2), cmd+1)) != MI_OK)
355 3 {
356 4 // error
357 4 cmd[0] = FAIL;
358 4 cmd[1] = i;
359 4 return 2;
360 4 }
361 3 else if((i = M500Read((m1sector<<2) + 1, cmd+1+16)) != MI_OK)
362 3 {
363 4 // error
364 4 cmd[0] = FAIL;
C51 COMPILER V8.00 MIFARE1 04/23/2009 15:56:16 PAGE 7
365 4 cmd[1] = i;
366 4 return 2;
367 4 }
368 3 else if((i = M500Read((m1sector<<2) + 2, cmd+1+16+16)) != MI_OK)
369 3 {
370 4 // error
371 4 cmd[0] = FAIL;
372 4 cmd[1] = i;
373 4 return 2;
374 4 }
375 3 else
376 3 {
377 4 // success
378 4 cmd[0] = SUCCESS;
379 4 return 49;
380 4 }
381 3 }
382 2 else
383 2 {
384 3 if((i = M500Read((m1sector<<2) + m1block, cmd+1)) != MI_OK)
385 3 {
386 4 // read error
387 4 cmd[0] = FAIL;
388 4 cmd[1] = i;
389 4 return 2;
390 4 }
391 3 else
392 3 {
393 4 cmd[0] = SUCCESS;
394 4 return 17;
395 4 }
396 3 }
397 2 }
398 1 else if(cmd[1] == CMD_WRITE)
399 1 {
400 2 if(len != 20)
401 2 {
402 3 cmd[0] = ERRORCMDLEN;
403 3 return 1;
404 3 }
405 2
406 2 if((i = M500Write((m1sector<<2) + m1block, m1data)) != MI_OK)
407 2 {
408 3 cmd[0] = FAIL;
409 3 cmd[1] = i;
410 3 return 2;
411 3 }
412 2 else if((i = M500Read((m1sector<<2) + m1block, cmd+1)) != MI_OK) // read back
413 2 {
414 3 cmd[0] = FAIL;
415 3 cmd[1] = i;
416 3 return 2;
417 3 }
418 2 else
419 2 {
420 3 cmd[0] = SUCCESS;
421 3 return 17;
422 3 }
423 2 }
424 1
425 1 // 钱包 ////////////////////////////////////////////
426 1 else if(cmd[1] == CMD_INCEP)
C51 COMPILER V8.00 MIFARE1 04/23/2009 15:56:16 PAGE 8
427 1 {
428 2 uchar m1bakblock, m1eptype;
429 2
430 2 m1bakblock = m1data[0];
431 2 m1eptype = m1data[1];
432 2 m1data += 2;
433 2 m1block = (m1sector << 2) + m1block;
434 2 m1bakblock = (m1sector << 2) + m1bakblock;
435 2
436 2 if(len != 10)
437 2 {
438 3 cmd[0] = ERRORCMDLEN;
439 3 return 1;
440 3 }
441 2
442 2 epvalue = buftolong86(m1data);
443 2
444 2 i = M500ReadValue(m1block, cmd, m1bakblock);
445 2 if(i != MI_OK)
446 2 {
447 3 // error
448 3 cmd[0] = FAIL;
449 3 cmd[1] = i;
450 3 return 2;
451 3 }
452 2
453 2 if(!m1eptype) // lsb first ep
454 2 oldepvalue = buftolong86(cmd);
455 2 else // msb first ep
456 2 oldepvalue = buftolong51(cmd);
457 2
458 2 epvalue += oldepvalue;
459 2
460 2 if(!m1eptype) // lsb first ep
461 2 longtobuf86(epvalue, cmd);
462 2 else // msb first ep
463 2 longtobuf51(epvalue, cmd);
464 2
465 2 if(MI_OK != (i = M500WriteValue(m1block, cmd, m1bakblock)))
466 2 {
467 3 // error
468 3 cmd[0] = FAIL;
469 3 cmd[1] = i;
470 3 return 2;
471 3 }
472 2
473 2 i = M500ReadValue(m1block, cmd+1, m1bakblock);
474 2 if(i != MI_OK)
475 2 {
476 3 cmd[0] = FAIL;
477 3 cmd[1] = i;
478 3 return 2;
479 3 }
480 2 else
481 2 {
482 3 if(m1eptype) // msb first ep
483 3 {
484 4 epvalue = buftolong51(cmd+1);
485 4 longtobuf86(epvalue, cmd+1);
486 4 }
487 3 // success
488 3 cmd[0] = SUCCESS;
C51 COMPILER V8.00 MIFARE1 04/23/2009 15:56:16 PAGE 9
489 3 return 5;
490 3 }
491 2 }
492 1 else if(cmd[1] == CMD_DECEP)
493 1 {
494 2 uchar m1bakblock, m1eptype;
495 2
496 2 m1bakblock = m1data[0];
497 2 m1eptype = m1data[1];
498 2 m1data += 2;
499 2 m1block = (m1sector << 2) + m1block;
500 2 m1bakblock = (m1sector << 2) + m1bakblock;
501 2
502 2 if(len != 10)
503 2 {
504 3 cmd[0] = ERRORCMDLEN;
505 3 return 1;
506 3 }
507 2
508 2 epvalue = buftolong86(m1data);
509 2
510 2 i = M500ReadValue(m1block, cmd, m1bakblock);
511 2 if(i != MI_OK)
512 2 {
513 3 cmd[0] = FAIL;
514 3 cmd[1] = i;
515 3 return 2;
516 3 }
517 2
518 2 if(!m1eptype) // lsb first ep
519 2 oldepvalue = buftolong86(cmd);
520 2 else // msb first ep
521 2 oldepvalue = buftolong51(cmd);
522 2
523 2 epvalue = oldepvalue - epvalue;
524 2
525 2 if(!m1eptype) // lsb first ep
526 2 longtobuf86(epvalue, cmd);
527 2 else // msb first ep
528 2 longtobuf51(epvalue, cmd);
529 2
530 2 if(MI_OK != (i = M500WriteValue(m1block, cmd, m1bakblock)))
531 2 {
532 3 cmd[0] = FAIL;
533 3 cmd[1] = i;
534 3 return 2;
535 3 }
536 2
537 2 i = M500ReadValue(m1block, cmd+1, m1bakblock);
538 2 if(i != MI_OK)
539 2 {
540 3 cmd[0] = FAIL;
541 3 cmd[1] = i;
542 3 return 2;
543 3 }
544 2 else
545 2 {
546 3 if(m1eptype) // msb first ep
547 3 {
548 4 epvalue = buftolong51(cmd+1);
549 4 longtobuf86(epvalue, cmd+1);
550 4 }
C51 COMPILER V8.00 MIFARE1 04/23/2009 15:56:16 PAGE 10
551 3 // success
552 3 cmd[0] = SUCCESS;
553 3 return 5;
554 3 }
555 2 }
556 1 else if(cmd[1] == CMD_RDEP)
557 1 {
558 2 uchar m1bakblock, m1eptype;
559 2
560 2 m1bakblock = m1data[0];
561 2 m1eptype = m1data[1];
562 2 m1data += 2;
563 2 m1block = (m1sector << 2) + m1block;
564 2 m1bakblock = (m1sector << 2) + m1bakblock;
565 2
566 2 if(len != 6)
567 2 {
568 3 cmd[0] = ERRORCMDLEN;
569 3 return 1;
570 3 }
571 2
572 2 i = M500ReadValue(m1block, cmd+1, m1bakblock);
573 2 if(i != MI_OK)
574 2 {
575 3 cmd[0] = FAIL;
576 3 cmd[1] = i;
577 3 return 2;
578 3 }
579 2 else
580 2 {
581 3 if(m1eptype) // msb first ep
582 3 {
583 4 epvalue = buftolong51(cmd+1);
584 4 longtobuf86(epvalue, cmd+1);
585 4 }
586 3 // success
587 3 cmd[0] = SUCCESS;
588 3 return 5;
589 3 }
590 2 }
591 1 else if(cmd[1] == CMD_WREP)
592 1 {
593 2 uchar m1bakblock, m1eptype;
594 2
595 2 m1bakblock = m1data[0];
596 2 m1eptype = m1data[1];
597 2 m1data += 2;
598 2 m1block = (m1sector << 2) + m1block;
599 2 m1bakblock = (m1sector << 2) + m1bakblock;
600 2
601 2 if(len != 10)
602 2 {
603 3 cmd[0] = ERRORCMDLEN;
604 3 return 1;
605 3 }
606 2
607 2 if(m1eptype) // msb first ep
608 2 {
609 3 epvalue = buftolong86(m1data);
610 3 longtobuf51(epvalue, m1data);
611 3 }
612 2
C51 COMPILER V8.00 MIFARE1 04/23/2009 15:56:16 PAGE 11
613 2 if(MI_OK != (i = M500WriteValue(m1block, m1data, m1bakblock)))
614 2 {
615 3 cmd[0] = FAIL;
616 3 cmd[1] = i;
617 3 return 2;
618 3 }
619 2 i = M500ReadValue(m1block, cmd+1, m1bakblock);
620 2 if(i != MI_OK)
621 2 {
622 3 cmd[0] = FAIL;
623 3 cmd[1] = i;
624 3 return 2;
625 3 }
626 2 else
627 2 {
628 3 if(m1eptype) // msb first ep
629 3 {
630 4 epvalue = buftolong51(cmd+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -