MifareLab is a desktop application built with Electron and React for analyzing MIFARE card dumps. It provides a user-friendly interface to view, analyze, and compare MIFARE card data.
MIFARE is a series of contactless smart card chips widely used in access control systems, public transportation cards, student IDs, and payment systems worldwide. These NFC-compatible cards store data in a structured format across multiple sectors, each protected by different access keys and conditions.
MifareLab helps security researchers, system administrators, and enthusiasts understand the structure and content of these cards through its analysis tools.
MifareLab provides comprehensive analysis of MIFARE Classic 1K/4K and MIFARE Ultralight card dumps, revealing:
- Manufacturer data and card identifiers
- Sector-by-sector breakdown of card contents
- Detailed access condition interpretation
- Value block identification and decoding
MifareLab leverages modern web technologies within a desktop application framework:
- React + Vite: Uses React 19's latest features including concurrent rendering for responsive UI
- Electron: Provides cross-platform desktop capabilities with native system access
- Crypto-JS: Used only for identifying the blocks in the DOM
- TailwindCSS: Enables responsive design with dark/light theme support
- Settings System: Persistent user preferences with localized UI and theme options
The application architecture follows a clear separation of concerns:
- Card data parsing and processing is isolated in dedicated service modules
- UI components follow atomic design principles for consistency
- IPC communication channels manage secure data flow between Electron and React
- Settings management with localStorage persistence and application-wide state
The settings page provides configuration options for:
- Theme selection (Dark/Light modes)
- Language preferences (English, Italian, German)
- Developer tools toggle
- Visual indicators for settings that require application restart
The roadmap for MifareLab includes:
- Light mode (CSS)
- Help page with documentation and tutorials
- Diff page supporting simultaneous comparison of up to 4 files using color coding
- Collaborative analysis features for team research
- Marker system for highlighting and saving references to important bytes
MifareLab welcomes contributions from the security research and development community. Areas especially in need of collaboration include:
- Additional card type support
- UI/UX enhancements
- Documentation and examples
Please see the contribution guidelines before submitting pull requests.
react^19.0.0 - UI frameworkreact-dom^19.0.0 - React DOM renderingelectron^35.0.3 - Desktop application frameworkcrypto-js^4.2.0 - Cryptographic functionstailwindcss^4.0.15 - CSS framework@tailwindcss/vite^4.0.15 - Tailwind CSS Vite plugin
vite^6.2.0 - Build tool and dev server@vitejs/plugin-react^4.3.4 - React plugin for Viteeslint^9.21.0 - Code linting@eslint/js^9.21.0 - ESLint JavaScript supporteslint-plugin-react-hooks^5.1.0 - React Hooks lintingeslint-plugin-react-refresh^0.4.19 - React Refresh supportelectron-builder- Packaging and distribution tool for Electron applications
concurrently^9.1.2 - Run multiple commands concurrentlycross-env^7.0.3 - Cross-platform environment variableswait-on^8.0.3 - Wait for resources to become availableelectron-builder- Creates distributables for Windows, macOS, and Linux
- Install dependencies:
npm install- Start development server:
npm run electron:dev- Build for production:
npm run app:buildnpm run dev- Start Vite development servernpm run build- Build the React application with TypeScript checksnpm run serve- Preview the built applicationnpm run electron- Start Electron in development modenpm run electron:pack- Package the application without creating installersnpm run electron:dev- Start development environment (React + Electron)npm run electron:builder- Build distributable packages using electron-buildernpm run build:for:electron- Build React specifically for Electron environmentnpm run app:build- Complete production build process (React build + electron-builder)
├── dist/ # Built React application
├── dist_electron/ # Final packaged application builds
├── electron/ # Electron main process files
├── public/
│ ├── fonts/ # Font files
│ ├── lang/ # Language files
│ └── Icon/ # Application icons
└── src/
├── components/ # React components
├── css/ # CSS styles
├── pages/ # Page components
└── utils/ # Utility functions
We welcome contributions to MifareLab! This section outlines the process for contributing to the project and the coding standards we follow.
-
Documentation: Use JSDoc-style comments for functions and components
/** * Component description * * @param {Object} props - Component props * @param {string} props.someParam - Description of the parameter * @returns {JSX.Element} - What the component renders */
-
React Components: Use functional components with hooks
-
CSS: Use TailwindCSS utility classes for styling, with custom CSS only when necessary
-
Naming: Use descriptive variable and function names
- Components should use PascalCase
- Functions and variables should use camelCase
-
File Structure: Place components in appropriate directories:
- Reusable components in
/src/components - Page components in
/src/pages - Utility functions in
/src/utils
- Reusable components in
- Create a branch for your feature:
git checkout -b feature/your-feature-name - Make your changes following the code style guidelines
- Test your changes in both development and production builds
- Commit with clear, descriptive messages
- Push to your fork and submit a pull request
- Ensure your PR description clearly describes the problem and solution
- For minor changes: Submit a pull request directly with the implementation
- For major features:
- First open an issue describing the feature
- Discuss implementation approach with maintainers
- Create a pull request referencing the issue
When reporting issues, please include:
- A clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- System information (OS, browser, MifareLab version)
By contributing to MifareLab, you agree to license your code under the same GNU General Public License v3.0 that covers the project.
This project is licensed under the GNU General Public License v3.0.