?? tpa.c
字號:
#include <stdio.h>#include <unistd.h>#include "rc531.h"int main(void){ int retv, uid, sector, data; int cmd, value, i;// char keyb[12] = {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,// 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}; char keyc[12] = {0x5a, 0xf0, 0x5a, 0xe1, 0x5a, 0xd2, 0x5a, 0xc3, 0x5a, 0xb4, 0x5a, 0xa5}; char cmdbuf[128]; char cbuf[128]; retv = pcd_reset(RESET_TYPEA); retv = pcd_open(); if(retv){ printf("Cannot open rc531!\n"); return retv; } while(1){ printf("-"); fgets(cmdbuf, 128, stdin); if(cmdbuf[0]=='q') break; switch(cmdbuf[0]){ case 'a': retv = anticolla(&uid); mferror(retv); if(retv){ printf("Anticollision error.\n"); }else{ printf("Card return ID: %08x\n", uid); } break; case 's': retv = selecta(uid, &data); mferror(retv); if(retv){ printf("Can't select card.\n"); }else{ printf("Card return SAK: %02x\n", data); } break; case 'r': retv = reqa(REQA, &data); mferror(retv); if(retv){ printf("No card.\n"); }else{ printf("Card return ATQA: %04x\n", data); } break; case 'l': sector = 0; retv = sscanf(cmdbuf+1, "%x", §or);// retv = sscanf(cmdbuf+1, "%x %2x %2x %2x %2x %2x %2x", §or,// &keyc[0], &keyc[1], &keyc[2], &keyc[3], &keyc[4], &keyc[5]);// if(retv==7){// for(i=10; i>=0; i-=2){// keyc[i+1] = keyc[i>>2]&0x0f;// keyc[i] = keyc[i>>2]>>4;// } retv = loadkey(keyc);// }else{// retv = loadkey(keyb);// } retv = authent(uid, sector, AUTH_KEYA); mferror(retv); if(retv){ printf("authent error!\n"); }else{ printf("authent OK!\n"); } break; case 'e': sector = 0; sscanf(cmdbuf+1, "%x", §or); retv = mfread(sector, cbuf); mferror(retv); if(retv){ printf("read error!\n"); }else{ printf("read OK!\n"); printf("return data: "); for(i=0; i<16; i++){ printf("%02x ", cbuf[i]); } printf("\n"); } break; case 'v': if(cmdbuf[1] == 'i'){ cmd = 0xc1; }else if(cmdbuf[1] == 'd'){ cmd = 0xc0; }else{ break; } sector = 1; value = 1; sscanf(cmdbuf+2, "%d %d", §or, &value); retv = mfvalue(cmd, sector, value); mferror(retv); if(retv){ printf("value error!\n"); }else{ printf("value OK!\n"); } break; case 't': sector = 1; sscanf(cmdbuf+1, "%d", §or); retv = mftransfer(0xb0, sector); mferror(retv); if(retv){ printf("transfer error!\n"); }else{ printf("transfer OK!\n"); } break; case 'o': sector = 1; sscanf(cmdbuf+1, "%d", §or); retv = mftransfer(0xc2, sector); mferror(retv); if(retv){ printf("restore error!\n"); }else{ printf("restore OK!\n"); } break; case 'p': sector = 0; data = 0x11111111; sscanf(cmdbuf+1, "%x %d", §or, &data); *(int*)&cbuf[0] = data; *(int*)&cbuf[4] = ~data; *(int*)&cbuf[8] = data; cbuf[12]=cbuf[14] = sector; cbuf[13]=cbuf[15] = ~sector; retv = mfwrite(sector, cbuf); mferror(retv); if(retv){ printf("write error!\n"); }else{ printf("write OK!\n"); } break; case 'h': halta(); break; case 'w': retv = reqa(WAKEUPA, &data); mferror(retv); if(retv){ printf("No card.\n"); }else{ printf("Card return ATQA: %04x\n", data); } break; case 'z': while(1){ retv = reqa(WAKEUPA, &data); if(retv){ printf("ERROR!\n"); }else{ printf("OK!\n"); } retv = anticolla(&uid); if(retv){ printf("ERROR!\n"); }else{ printf("OK!\n"); } retv = selecta(uid, &data); if(retv){ printf("ERROR!\n"); }else{ printf("OK!\n"); } halta(); printf("---\n"); } default: } }; pcd_close(); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -