📄 mf.c
字号:
#include <stdio.h>#include <sys/ioctl.h>#include "rc531.h"/* MIFARE function */int loadkeye2(int addr){ char sbuf[16], rbuf[16]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x0b; cmd.timeout = 0x1a; cmd.bytesent = 2; *(int*)sbuf = addr; ioctl(fd531, RC531_CMD, &cmd); return cmd.status;}int loadkey(char *kbuf){ int i; char sbuf[16], rbuf[16]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x19; cmd.timeout = 0x1a; cmd.bytesent = 12; for(i=0; i<12; i++){ sbuf[i] = kbuf[i]; } ioctl(fd531, RC531_CMD, &cmd); return cmd.status;}int authent(int uid, int sector, int type){ char *cuid; int i; char sbuf[16], rbuf[16]; struct rc531_cmd cmd; cuid = (char *)&uid; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.timeout = 0x1a; cmd.cmd = 0x0c; cmd.bytesent = 6; sbuf[0] = type; sbuf[1] = sector; for(i=0; i<4; i++){ sbuf[2+i] = cuid[i]; } ioctl(fd531, RC531_CMD, &cmd); if(cmd.status){ return cmd.status; } cmd.cmd = 0x14; cmd.bytesent = 0; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status){ return cmd.status; } if(r531(0x09)&0x08){ return E_OK; } return E_AUTH;}int mfvalue(int vcmd, int addr, int value){ int i, data; char *p; char sbuf[8], rbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x1e; cmd.timeout = 0x50; cmd.bytesent = 2; sbuf[0] = vcmd; //inc/dec command sbuf[1] = addr; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x80){ return cmd.status; } if((r531(0x05)&0x07)!=4){ return E_BIT; } data = rbuf[0]&0x0f; if(data == 0){ return E_NAUTH; }else if(data == 0x01){ return E_VALUE; }else if(data != 0x0a){ return E_CODE; } cmd.bytesent = 4; p = (char *)&value; for(i=0; i<4; i++){ sbuf[i] = p[i]; } ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x80){ return E_OK; } if((r531(0x05)&0x07)!=4){ return E_BIT; } data = rbuf[0]&0x0f; if(data == 0){ return E_NAUTH; }else if(data == 0x01){ return E_VALUE; }else if(data != 0x0a){ return E_CODE; } return E_OK;}int mftransfer(int tcmd, int addr){ int data; char sbuf[8], rbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x1e; cmd.timeout = 0x50; cmd.bytesent = 2; sbuf[0] = tcmd; //transfer/restore command sbuf[1] = addr; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x80){ return cmd.status; } if((r531(0x05)&0x07)!=4){ return E_BIT; } data = rbuf[0]&0x0f; if(data == 0){ return E_NAUTH; }else if(data == 0x01){ return E_VALUE; }else if(data != 0x0a){ return E_CODE; } return 0;}int mfwrite(int addr, char *buf){ int i, data; char sbuf[32], rbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = rbuf; cmd.cmd = 0x1e; cmd.timeout = 0x50; cmd.bytesent = 2; sbuf[0] = 0xa0; sbuf[1] = addr; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x80){ return cmd.status; } if((r531(0x05)&0x07)!=4){ return E_BIT; } data = rbuf[0]&0x0f; if((data&0x0a) == 0){ return E_NAUTH; }else if(data != 0x0a){ return E_CODE; } cmd.bytesent = 16; for(i=0; i<16; i++){ sbuf[i] = buf[i]; } ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x80){ return cmd.status; } if((r531(0x05)&0x07)!=4){ return E_BIT; } data = rbuf[0]&0x0f; if((data&0x0a) == 0){ return E_NAUTH; }else if(data != 0x0a){ return E_CODE; } return E_OK;}int mfread(int addr, char *buf){ int data; char sbuf[8]; struct rc531_cmd cmd; cmd.sendbuf = sbuf; cmd.recvbuf = buf; cmd.cmd = 0x1e; cmd.timeout = 0x50; cmd.bytesent = 2; sbuf[0] = 0x30; sbuf[1] = addr; ioctl(fd531, RC531_CMD, &cmd); if(cmd.status&0x86){ return cmd.status; } if(cmd.byterecv==1 && (r531(0x05)&0x07)==4){ data = buf[0]&0x0f; if((data&0x0a) == 0){ printf("read: not authent!\n"); return E_NAUTH; }else{ printf("read: code error!\n"); return E_CODE; } }// if(cmd.byterecv!=16){// return E_BYTE;// } return E_OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -