├── .gitignore
├── LICENSE
├── README.md
├── apprts
├── .gitignore
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── BLANK(空白).dump
│ ├── cmd.json
│ ├── default_keys.txt
│ ├── pm3_version.txt
│ ├── proxmark3.zip
│ ├── template_mifare_info_en.html
│ └── template_tag_info_en.html
│ ├── java
│ └── com
│ │ └── rfidresearchgroup
│ │ ├── activities
│ │ ├── chameleon
│ │ │ └── ChameleonGUIActivity.java
│ │ ├── connect
│ │ │ ├── AbstractPN53XConnectActivity.java
│ │ │ ├── Acr122uHkUsbConnectActivity.java
│ │ │ ├── ChameleonUsb2UartConnectActivity.java
│ │ │ ├── PN532UartConnectActivity.java
│ │ │ ├── PN53XUsbBulkTransferActivity.java
│ │ │ └── Proxmark3Rdv4RRGConnectActivity.java
│ │ ├── main
│ │ │ ├── AppMain.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── GeneralNfcDeviceMain.java
│ │ │ ├── PM3FlasherMainActivity.java
│ │ │ ├── PN53XNfcMain.java
│ │ │ └── PN53XReaderMain.java
│ │ ├── proxmark3
│ │ │ └── rdv4_rrg
│ │ │ │ ├── Proxmark3ConsoleActivity.java
│ │ │ │ ├── Proxmark3NewTerminalInitActivity.java
│ │ │ │ └── Proxmark3Rdv4RRGConsoleActivity.java
│ │ ├── px53x
│ │ │ └── PN53XConsoleActivity.java
│ │ ├── standard
│ │ │ └── AbsStandardM1Activity.java
│ │ └── tools
│ │ │ ├── AboutActicity.java
│ │ │ ├── BaseConsoleActivity.java
│ │ │ ├── ChameleonSoltAliasesActivity.java
│ │ │ ├── DeviceConnectActivity.java
│ │ │ ├── DumpEditActivity.java
│ │ │ ├── DumpListActivity.java
│ │ │ ├── FileListActivity.java
│ │ │ ├── KeyFileEditActivity.java
│ │ │ ├── KeyFileListActivity.java
│ │ │ ├── LoginActivity.java
│ │ │ └── Proxmark3FirmwareActivity.java
│ │ ├── adapter
│ │ ├── AbsResIdArrayAdapter.java
│ │ ├── DevArrayAdapter.java
│ │ ├── EasyBtnAdapter.java
│ │ ├── FragmentListPagerAdapter.java
│ │ └── MyViewPagerAdapter.java
│ │ ├── application
│ │ └── Properties.java
│ │ ├── binder
│ │ ├── BannerImageViewBinder.java
│ │ ├── DeviceInfoViewBinder.java
│ │ ├── FileInfoBinder.java
│ │ ├── ItemCommonBinder.java
│ │ ├── ItemSingleTextBean.java
│ │ ├── ItemTextBinder.java
│ │ ├── ItemToggleBinder.java
│ │ └── TitleTextViewBinder.java
│ │ ├── callback
│ │ ├── ActionCallback.java
│ │ ├── BaseCallback.java
│ │ ├── ConnectCallback.java
│ │ ├── ConnectFailedCtxCallback.java
│ │ ├── DriverCallback.java
│ │ ├── DumpCallback.java
│ │ ├── FileReadLineCallback.java
│ │ ├── FormatConvertCallback.java
│ │ ├── InitNfcCallback.java
│ │ ├── KeyFileCallbak.java
│ │ ├── KeysAuthCallback.java
│ │ ├── LoginCallback.java
│ │ ├── ReaderCallback.java
│ │ ├── TagInformationsCallback.java
│ │ ├── TagStateCallback.java
│ │ └── WriterCallback.java
│ │ ├── driver
│ │ └── StandardDriver.java
│ │ ├── fragment
│ │ ├── base
│ │ │ ├── AppMainDevicesFragment.java
│ │ │ └── BaseFragment.java
│ │ ├── connect
│ │ │ ├── DeviceConnectAllFragment.java
│ │ │ ├── DeviceConnectBaseFragment.java
│ │ │ ├── DeviceConnectFragment.java
│ │ │ └── DeviceConnectNewFragment.java
│ │ ├── init
│ │ │ ├── InitFragment.java
│ │ │ └── LoginFragment.java
│ │ └── tools
│ │ │ ├── AbsMfOperatesFragment.java
│ │ │ ├── AbsShowInformationFragment.java
│ │ │ ├── MainSettingsFragment.java
│ │ │ ├── PN53XShowInformationFragment.java
│ │ │ ├── PN53xMFRWOperateFragment.java
│ │ │ ├── StandardMFRWOperateFragment.java
│ │ │ ├── StandardShowInformationFragment.java
│ │ │ └── ToolsAccessFragment.java
│ │ ├── holder
│ │ ├── BannerImageHolder.java
│ │ └── ItemCommonViewHolder.java
│ │ ├── implement
│ │ └── TextWatcherImpl.java
│ │ ├── javabean
│ │ ├── BannerBean.java
│ │ ├── DevBean.java
│ │ ├── DeviceInfoBean.java
│ │ ├── EasyCMDEntry.java
│ │ ├── FileBean.java
│ │ ├── ItemCommonBean.java
│ │ ├── ItemTextBean.java
│ │ ├── ItemToggleBean.java
│ │ ├── M1Bean.java
│ │ ├── M1KeyBean.java
│ │ ├── TitleBean.java
│ │ └── TitleTextBean.java
│ │ ├── models
│ │ ├── AbsStopableTask.java
│ │ ├── AbsTagKeysCheckModel.java
│ │ ├── AbsTagReadModel.java
│ │ ├── AbsTagStateModel.java
│ │ ├── AbsTagWriteModel.java
│ │ ├── AbsUsb2UartModel.java
│ │ ├── AbstractDeviceModel.java
│ │ ├── AbstractSppDeviceModel.java
│ │ ├── Acr122uUsbRawModel.java
│ │ ├── ChameleonUsb2UartModel.java
│ │ ├── DumpModel.java
│ │ ├── FileReadLineModel.java
│ │ ├── FormatConvertModel.java
│ │ ├── KeyFileModel.java
│ │ ├── PN532SppUartModel.java
│ │ ├── PN532Usb2UartModel.java
│ │ ├── PN53XInformationsModel.java
│ │ ├── PN53XTagReadModel.java
│ │ ├── PN53XTagStateModel.java
│ │ ├── PN53XTagWriteModel.java
│ │ ├── Proxmark3Rdv4SppModel.java
│ │ ├── Proxmark3Rdv4UsbModel.java
│ │ ├── StandardNFCDeviceModel.java
│ │ ├── StandardNFCTagStateModel.java
│ │ ├── StandardTagKeysCheckModel.java
│ │ ├── StandardTagReadModel.java
│ │ ├── StandardTagWriteModel.java
│ │ ├── StdNfcInformationsModel.java
│ │ └── UniversalBulkPN53XRawModel.java
│ │ ├── presenter
│ │ ├── AbsMFMagicCheckPresenter.java
│ │ ├── AbsTagInformationsPresenter.java
│ │ ├── AbsTagKeysCheckPresenter.java
│ │ ├── AbsTagReadPresenter.java
│ │ ├── AbsTagStatePresenter.java
│ │ ├── AbsTagWritePresenter.java
│ │ ├── BasePresenter.java
│ │ ├── DeviceAttachPresenter.java
│ │ ├── DeviceExistsPresenter.java
│ │ ├── DevicePresenter.java
│ │ ├── DumpPresenter.java
│ │ ├── FileReadLinePresenter.java
│ │ ├── FormatConvertPresenter.java
│ │ ├── KeyFilePresenter.java
│ │ ├── PN53XTagInformationsPresenter.java
│ │ ├── PN53XTagKeysCheckModel.java
│ │ ├── PN53XTagKeysCheckPresenter.java
│ │ ├── PN53XTagReadPresenter.java
│ │ ├── PN53XTagStatePresenter.java
│ │ ├── PN53XTagWritePresenter.java
│ │ ├── StandardMFMagicCheckPresenter.java
│ │ ├── StandardTagInformationsPresenter.java
│ │ ├── StandardTagKeysCheckPresenter.java
│ │ ├── StandardTagReadPresenter.java
│ │ ├── StandardTagStatePresenter.java
│ │ ├── StandardTagWritePresenter.java
│ │ └── TagKeysCheckPresenterImpl.java
│ │ ├── settings
│ │ ├── BaseSetting.java
│ │ ├── ChameleonSlotAliasesSetting.java
│ │ └── ChameleonSlotAliasesStatusSetting.java
│ │ ├── util
│ │ ├── Commons.java
│ │ ├── DumpUtils.java
│ │ ├── EasyBtnUtil.java
│ │ ├── InitUtil.java
│ │ ├── LineEqualUtil.java
│ │ ├── Paths.java
│ │ ├── Proxmark3Installer.java
│ │ ├── UnionAction.java
│ │ └── ZipUtils.java
│ │ ├── view
│ │ ├── BaseMvpView.java
│ │ ├── DeviceAttachView.java
│ │ ├── DeviceExistsView.java
│ │ ├── DeviceView.java
│ │ ├── DriverView.java
│ │ ├── DumpEditotView.java
│ │ ├── FileReadLineView.java
│ │ ├── FormatConvertView.java
│ │ ├── KeyFileView.java
│ │ ├── MfKeysCheckView.java
│ │ ├── TagInformationsView.java
│ │ ├── TagReadView.java
│ │ ├── TagStateView.java
│ │ └── TagWriteView.java
│ │ └── widget
│ │ ├── MaterialAlertDialog.java
│ │ └── ProDialog1.java
│ └── res
│ ├── anim
│ ├── alpha_repeat_1_0.xml
│ ├── fade_in.xml
│ └── fade_out.xml
│ ├── color
│ └── color_state_menu_navi_main.xml
│ ├── drawable-hdpi
│ ├── acr122u.png
│ ├── all.png
│ ├── bg_border_blue.xml
│ ├── bg_circular_auto_radius_16dp.xml
│ ├── btn_selector_blue.xml
│ ├── btn_selectot_white.xml
│ ├── chameleon_rdv2.jpg
│ ├── chong.png
│ ├── clear.png
│ ├── clear_blue.png
│ ├── data.png
│ ├── delete.xml
│ ├── dev_blue.png
│ ├── disclaimer_blue.png
│ ├── discovery_1.xml
│ ├── download.png
│ ├── dump_delete.png
│ ├── dump_equals.png
│ ├── dump_extract.png
│ ├── dxl_logo_128.png
│ ├── edit.png
│ ├── gradual.xml
│ ├── gradual2.xml
│ ├── guide_arrow.xml
│ ├── hacker.xml
│ ├── help_blue.png
│ ├── ic_arrow_right_green_24dp.xml
│ ├── ic_folder_yellow_56dp.xml
│ ├── ic_off_green_38x28dp.xml
│ ├── ic_on_green_38x28dp.xml
│ ├── ic_save_black_24dp.xml
│ ├── ic_unknow_black_56dp.xml
│ ├── info.png
│ ├── information.xml
│ ├── key.xml
│ ├── log.png
│ ├── main_emulate.png
│ ├── main_iterator.png
│ ├── main_mfcuk.png
│ ├── main_mfoc.png
│ ├── main_nfclist.png
│ ├── main_settings.png
│ ├── main_union_key.png
│ ├── main_write.png
│ ├── mct.png
│ ├── mf_rw_goto.png
│ ├── mtools.png
│ ├── new_add.png
│ ├── nfctools.png
│ ├── no_1.png
│ ├── no_2.png
│ ├── opera_515151.xml
│ ├── phone_nfc_icon.png
│ ├── pn532core.png
│ ├── proxgrindlogo.png
│ ├── qq.png
│ ├── qq_group_blue.png
│ ├── rdv4.png
│ ├── rdv4_2.png
│ ├── read_tag.xml
│ ├── refresh.xml
│ ├── rename.png
│ ├── reset.png
│ ├── rfid.png
│ ├── rrglogo.png
│ ├── rrglogo500.png
│ ├── scanner.xml
│ ├── sdcard.png
│ ├── selector_shadow.xml
│ ├── shape_bg_blue_600.xml
│ ├── shape_bg_blue_800.xml
│ ├── shape_bg_grey_200.xml
│ ├── shape_bg_white_1000.xml
│ ├── shape_radain_border.xml
│ ├── share.png
│ ├── simple_console_view_example.png
│ ├── single.png
│ ├── toggle_background_selector_off.xml
│ ├── toggle_background_selector_on.xml
│ ├── toggle_drawable_selector.xml
│ ├── update_blue.png
│ ├── upload.png
│ ├── usb_connect.gif
│ ├── wechat.png
│ └── yes.png
│ ├── drawable
│ ├── bg_circular_grey_radius_16dp.xml
│ ├── bg_circular_white_radius_16dp.xml
│ ├── bg_circular_white_radius_5dp.xml
│ ├── gradual_grey.xml
│ ├── ic_add_black_24dp.xml
│ ├── ic_home_grey_24dp.xml
│ ├── ic_inbox_grey_24dp.xml
│ ├── ic_keyboard_arrow_left_grey_24dp.xml
│ ├── ic_menu.xml
│ ├── ic_refresh_white_24dp.xml
│ ├── ic_settings_grey_24dp.xml
│ ├── ic_terminal.xml
│ ├── ic_write_tag.xml
│ └── termux_view_example.png
│ ├── layout-land
│ └── act_app_about.xml
│ ├── layout
│ ├── act_app_about.xml
│ ├── act_app_devices.xml
│ ├── act_app_main.xml
│ ├── act_app_settings.xml
│ ├── act_chameleon_main.xml
│ ├── act_chameleon_slot_aliases.xml
│ ├── act_common_tools.xml
│ ├── act_console_layout.xml
│ ├── act_device_connect.xml
│ ├── act_dump_edit.xml
│ ├── act_file_list.xml
│ ├── act_keys_edit.xml
│ ├── act_login_init.xml
│ ├── act_login_main.xml
│ ├── act_main_pn53x.xml
│ ├── act_main_proxmark3_rdv4_rrg.xml
│ ├── act_mf_main.xml
│ ├── act_pm3_custom_flasher.xml
│ ├── act_pm3_flasher.xml
│ ├── act_pm3_terminal_init.xml
│ ├── act_std_mf_main.xml
│ ├── act_union_action.xml
│ ├── dev_info.xml
│ ├── dialog_materila_alert_dialog.xml
│ ├── dialog_msg_layout.xml
│ ├── dialog_working_msg.xml
│ ├── dump_equal_result_item.xml
│ ├── dump_sector_item.xml
│ ├── easy_button_container.xml
│ ├── file_select_init_list.xml
│ ├── fragment_dev_connect.xml
│ ├── fragment_login.xml
│ ├── fragment_std_tag_information.xml
│ ├── item_act_guide_banner1.xml
│ ├── item_act_guide_banner2.xml
│ ├── item_act_img_banner.xml
│ ├── item_act_main_banner.xml
│ ├── item_content_content.xml
│ ├── item_content_text.xml
│ ├── item_content_toggle.xml
│ ├── item_device_info.xml
│ ├── item_dialog_style1.xml
│ ├── item_easy__btn.xml
│ ├── item_file_info.xml
│ ├── item_list_title.xml
│ ├── item_title.xml
│ ├── item_usb_device_connecting.xml
│ └── mfdata_bean.xml
│ ├── menu
│ ├── act_main_menu.xml
│ ├── activity_device_connect.xml
│ ├── activity_dumpedt.xml
│ ├── activity_keyedt.xml
│ └── bottom_std_mf_changer.xml
│ ├── values-en
│ ├── arrays.xml
│ └── strings.xml
│ ├── values-v11
│ └── styles.xml
│ ├── values-v14
│ └── styles.xml
│ ├── values-v21
│ └── styles.xml
│ ├── values-zh
│ ├── arrays.xml
│ └── strings.xml
│ └── values
│ ├── arrays.xml
│ ├── color.xml
│ ├── strings.xml
│ ├── styles.xml
│ └── tag_type_list.xml
├── build.gradle
├── githubsrc
├── PN532x173.png
├── acr122ux173.png
├── chameleonx173.png
├── phone_nfcx173.png
├── rdv4x173.png
└── rfidx100.png
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── import-summary.txt
├── libcml
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── cn
│ │ └── rfidresearchgroup
│ │ └── chameleon
│ │ ├── defined
│ │ ├── BasicTypesCallback.java
│ │ ├── ChameleonCMDSet.java
│ │ ├── ChameleonClick.java
│ │ ├── ChameleonRespSet.java
│ │ ├── ChameleonSlot.java
│ │ ├── ChameleonType.java
│ │ ├── IChameleonExecutor.java
│ │ └── ResultCallback.java
│ │ ├── executor
│ │ ├── ChameleonExecutor.java
│ │ └── ExecutorImpl.java
│ │ ├── javabean
│ │ ├── DetectionDatas.java
│ │ └── ResultBean.java
│ │ ├── utils
│ │ ├── CRC16_14443.java
│ │ ├── ChameleonCMDStr.java
│ │ ├── ChameleonDetection.java
│ │ ├── ChameleonResult.java
│ │ ├── ChameleonUtils.java
│ │ ├── ChameleonVCUtil.java
│ │ ├── DetectionResult.java
│ │ └── KeyComparer.java
│ │ └── xmodem
│ │ ├── AbstractXModem.java
│ │ ├── XModem1024.java
│ │ └── XModem128.java
│ └── res
│ └── values
│ └── strings.xml
├── libcom
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── namespace.txt
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── proxgrind
│ │ ├── bulkio
│ │ ├── BulkInputStream.java
│ │ └── BulkOutputStream.java
│ │ ├── com
│ │ ├── AbsBluetoothSpp.java
│ │ ├── AbsUsbBulkTransfer.java
│ │ ├── Communication.java
│ │ ├── DevCallback.java
│ │ ├── DeviceChecker.java
│ │ ├── DriverInterface.java
│ │ ├── LocalComBridgeAdapter.java
│ │ ├── SppHasBlock.java
│ │ ├── SppNonBlock.java
│ │ ├── UsbAcr122Raw.java
│ │ ├── UsbBulkTransfer.java
│ │ └── UsbSerialControl.java
│ │ ├── devices
│ │ └── EmptyDeivce.java
│ │ └── utils
│ │ ├── ContextContentProvider.java
│ │ └── HexUtil.java
│ └── res
│ └── values
│ └── strings.xml
├── libcrapto1
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── CMakeLists.txt
│ ├── crapto1.c
│ ├── crypto1.c
│ ├── include
│ │ ├── crapto1.h
│ │ └── crypto1.h
│ └── main.c
│ ├── java
│ └── cn
│ │ └── dxl
│ │ └── crapto1
│ │ └── Crapto1.java
│ └── res
│ └── values
│ └── strings.xml
├── libflasher
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── CMakeLists.txt
│ ├── client
│ │ ├── comms.c
│ │ ├── comms.h
│ │ ├── elf.h
│ │ ├── fileutils.c
│ │ ├── fileutils.h
│ │ ├── flash.c
│ │ ├── flash.h
│ │ ├── mifare
│ │ │ ├── mad.c
│ │ │ ├── mad.h
│ │ │ ├── mfkey.c
│ │ │ ├── mfkey.h
│ │ │ ├── mifare4.c
│ │ │ ├── mifare4.h
│ │ │ ├── mifaredefault.c
│ │ │ ├── mifaredefault.h
│ │ │ ├── mifarehost.c
│ │ │ ├── mifarehost.h
│ │ │ ├── ndef.c
│ │ │ └── ndef.h
│ │ ├── proxendian.h
│ │ ├── proxmark3.c
│ │ ├── proxmark3.h
│ │ ├── tools.c
│ │ ├── tools.h
│ │ ├── uart
│ │ │ ├── README.md
│ │ │ ├── uart.h
│ │ │ ├── uart_posix.c
│ │ │ └── uart_win32.c
│ │ ├── ui.c
│ │ ├── ui.h
│ │ ├── util.c
│ │ └── util.h
│ ├── common
│ │ ├── bucketsort.c
│ │ ├── bucketsort.h
│ │ ├── commonutil.c
│ │ ├── commonutil.h
│ │ ├── crc.c
│ │ ├── crc.h
│ │ ├── crc16.c
│ │ ├── crc16.h
│ │ ├── crc32.c
│ │ ├── crc32.h
│ │ ├── crc64.c
│ │ ├── crc64.h
│ │ ├── parity.c
│ │ ├── parity.h
│ │ ├── util_posix.c
│ │ └── util_posix.h
│ └── include
│ │ ├── ansi.h
│ │ ├── at91sam7s512.h
│ │ ├── common.h
│ │ ├── config_gpio.h
│ │ ├── hitag.h
│ │ ├── legic.h
│ │ ├── mifare.h
│ │ ├── pm3_cmd.h
│ │ ├── pmflash.h
│ │ ├── protocols.h
│ │ ├── proxmark3_arm.h
│ │ └── usart_defs.h
│ └── java
│ └── com
│ └── rfidresearchgroup
│ └── pm3flasher
│ ├── Proxmark3Flasher.java
│ └── Target.java
├── libmfkey
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── CMakeLists.txt
│ ├── at91sam7s512.h
│ ├── bucketsort.c
│ ├── bucketsort.h
│ ├── common.h
│ ├── crapto1.c
│ ├── crapto1.h
│ ├── crypto1.c
│ ├── mfkey.c
│ ├── mfkey.h
│ ├── mfkey32.c
│ ├── mfkey32v2.c
│ ├── mfkey64.c
│ ├── mifare.h
│ ├── parity.c
│ ├── parity.h
│ ├── tools.c
│ ├── tools.h
│ ├── util_posix.c
│ └── util_posix.h
│ ├── java
│ └── cn
│ │ └── dxl
│ │ └── mfkey
│ │ ├── MfKey32.java
│ │ ├── NativeMfKey32.java
│ │ ├── NativeMfKey32V2.java
│ │ ├── NativeMfKey64.java
│ │ ├── Nonce32.java
│ │ └── Nonce64.java
│ └── res
│ └── values
│ └── strings.xml
├── libnfc
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── CMakeLists.txt
│ ├── check
│ │ ├── CMakeLists.txt
│ │ ├── check.c
│ │ ├── crapto1.c
│ │ ├── crapto1.h
│ │ └── crypto1.c
│ ├── libnfc
│ │ ├── CMakeLists.txt
│ │ ├── buses
│ │ │ ├── com.h
│ │ │ ├── com_uart.c
│ │ │ └── uart_posix.c
│ │ ├── chips
│ │ │ ├── pn53x-internal.h
│ │ │ ├── pn53x.c
│ │ │ └── pn53x.h
│ │ ├── conf.c
│ │ ├── drivers
│ │ │ ├── acr122_usb.c
│ │ │ ├── acr122_usb.h
│ │ │ ├── pn532_uart.c
│ │ │ ├── pn532_uart.h
│ │ │ ├── pn53x_usb.c
│ │ │ └── pn53x_usb.h
│ │ ├── include
│ │ │ ├── conf.h
│ │ │ ├── config.h
│ │ │ ├── drivers.h
│ │ │ ├── iso7816.h
│ │ │ ├── log-internal.h
│ │ │ ├── log.h
│ │ │ ├── mirror-subr.h
│ │ │ ├── nfc-internal.h
│ │ │ ├── nfc
│ │ │ │ ├── nfc-emulation.h
│ │ │ │ ├── nfc-types.h
│ │ │ │ ├── nfc-utils.h
│ │ │ │ └── nfc.h
│ │ │ ├── target-subr.h
│ │ │ ├── tools.h
│ │ │ └── uart.h
│ │ ├── iso14443-subr.c
│ │ ├── log-internal.c
│ │ ├── log-printf.c
│ │ ├── log.c
│ │ ├── mirror-subr.c
│ │ ├── nfc-device.c
│ │ ├── nfc-emulation.c
│ │ ├── nfc-internal.c
│ │ ├── nfc-utils.c
│ │ ├── nfc.c
│ │ ├── target-subr.c
│ │ └── tools.c
│ ├── mfclassic
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ │ └── mifare.h
│ │ ├── mfclassic.c
│ │ └── mifare.c
│ ├── mfoc
│ │ ├── CMakeLists.txt
│ │ ├── crapto1.c
│ │ ├── crapto1.h
│ │ ├── crypto1.c
│ │ ├── mfoc.c
│ │ ├── mfoc.h
│ │ ├── mifare.c
│ │ ├── mifare.h
│ │ ├── nfc-utils.c
│ │ ├── nfc-utils.h
│ │ ├── slre.c
│ │ └── slre.h
│ └── pn53x
│ │ ├── CMakeLists.txt
│ │ └── test.c
│ ├── java
│ └── com
│ │ └── rfidresearchgroup
│ │ ├── devices
│ │ └── PN53X.java
│ │ ├── natives
│ │ ├── PN53XTagLeaksAdapter.java
│ │ └── SpclMf.java
│ │ └── utils
│ │ └── HexUtil.java
│ └── res
│ └── values
│ └── strings.xml
├── libpm3
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── jniLibs
│ ├── arm64-v8a
│ └── libpm3rrg_cmd.so
│ ├── armeabi-v7a
│ └── libpm3rrg_cmd.so
│ ├── x86
│ └── libpm3rrg_cmd.so
│ └── x86_64
│ └── libpm3rrg_cmd.so
├── libtag
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── rfidresearchgroup
│ │ └── mifare
│ │ ├── BatchAdapter.java
│ │ ├── HardNestedAdapter.java
│ │ ├── MifareAdapter.java
│ │ ├── MifareClassicUtils.java
│ │ ├── NestedAdapter.java
│ │ ├── NfcTagListenUtils.java
│ │ ├── PRNGAdapter.java
│ │ ├── StdMifareImpl.java
│ │ ├── StdMifareIntent.java
│ │ ├── TagLeaksAdapter.java
│ │ └── TestTaskAdapter.java
│ └── res
│ ├── values-zh
│ └── strings.xml
│ └── values
│ └── strings.xml
├── libutils
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── rfidresearchgroup
│ │ └── common
│ │ ├── activities
│ │ └── CrashActivity.java
│ │ ├── application
│ │ └── App.java
│ │ ├── implement
│ │ ├── AnimationListenerImpl.java
│ │ ├── DialogOnclickListenerImpl.java
│ │ ├── ItemSelectedListenerImpl.java
│ │ ├── OnPageChangeListenerImpl.java
│ │ └── PermissionCallback.java
│ │ ├── interfaces
│ │ ├── OnTouchListener.java
│ │ └── RegexCommon.java
│ │ ├── services
│ │ └── RestartService.java
│ │ ├── util
│ │ ├── AesUtils.java
│ │ ├── AppUtil.java
│ │ ├── ArrayUtils.java
│ │ ├── AssetsUtil.java
│ │ ├── CRC16.java
│ │ ├── ContextUtil.java
│ │ ├── CountDownTask.java
│ │ ├── CrashUtil.java
│ │ ├── DiskKVUtil.java
│ │ ├── DisplayUtil.java
│ │ ├── DynamicLineParseUtil.java
│ │ ├── FileUtils.java
│ │ ├── FragmentUtil.java
│ │ ├── HexUtil.java
│ │ ├── IOUtils.java
│ │ ├── LanguageUtil.java
│ │ ├── LogUtils.java
│ │ ├── NetworkUtil.java
│ │ ├── PermissionUtil.java
│ │ ├── RSAUtil.java
│ │ ├── RegexGroupUtil.java
│ │ ├── RestartUtils.java
│ │ ├── RomUtils.java
│ │ ├── SpinnerInitState.java
│ │ ├── StatusBarUtil.java
│ │ ├── StringUtil.java
│ │ ├── SystemBarTintManager.java
│ │ ├── SystemUtils.java
│ │ ├── TextStyleUtil.java
│ │ ├── VibratorUtils.java
│ │ └── ViewUtil.java
│ │ └── widget
│ │ ├── AdditionSubtractionView.java
│ │ ├── DoubleInputDialog.java
│ │ ├── EditTextWithDelete.java
│ │ ├── FilesSelectorDialog.java
│ │ ├── FillParentWidthDialog.java
│ │ ├── HtmlTextButton.java
│ │ ├── OvalImageView.java
│ │ ├── SingleInputDialog.java
│ │ ├── StatusBarHeightView.java
│ │ ├── StatusPenddingView.java
│ │ ├── ToastUtil.java
│ │ └── ViewPagerSlide.java
│ └── res
│ ├── drawable
│ ├── btn_selector_blue.xml
│ ├── delete.xml
│ ├── file_directory.png
│ ├── file_file.png
│ ├── file_icon.png
│ ├── file_select.png
│ ├── shape_bg_blue_600.xml
│ └── shape_bg_blue_800.xml
│ ├── layout
│ ├── act_crash_main.xml
│ ├── double_input_dialog.xml
│ ├── file_selector.xml
│ ├── file_selector_info.xml
│ ├── item_dialog_single_input.xml
│ ├── view_h_line.xml
│ └── view_v_line.xml
│ ├── values-en
│ └── strings.xml
│ ├── values-zh
│ └── strings.xml
│ ├── values
│ ├── attrs.xml
│ ├── color.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ ├── device_filter.xml
│ ├── file_paths.xml
│ └── nfc_filter.xml
├── settings.gradle
├── terminal-emulator
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── termux
│ │ └── terminal
│ │ ├── ByteQueue.java
│ │ ├── EmulatorDebug.java
│ │ ├── JNI.java
│ │ ├── KeyHandler.java
│ │ ├── TerminalBuffer.java
│ │ ├── TerminalColorScheme.java
│ │ ├── TerminalColors.java
│ │ ├── TerminalEmulator.java
│ │ ├── TerminalOutput.java
│ │ ├── TerminalRow.java
│ │ ├── TerminalSession.java
│ │ ├── TextStyle.java
│ │ └── WcWidth.java
│ └── jni
│ ├── Android.mk
│ └── termux.c
├── terminal-view
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── termux
│ │ └── view
│ │ ├── GestureAndScaleRecognizer.java
│ │ ├── TerminalRenderer.java
│ │ ├── TerminalView.java
│ │ └── TerminalViewClient.java
│ └── res
│ ├── drawable
│ ├── text_select_handle_left_material.xml
│ └── text_select_handle_right_material.xml
│ ├── values-zh
│ └── strings.xml
│ └── values
│ └── strings.xml
├── termux-app
├── build.gradle
├── dev_keystore.jks
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── termux
│ │ ├── app
│ │ ├── BackgroundJob.java
│ │ ├── BellUtil.java
│ │ ├── DialogUtils.java
│ │ ├── ExtraKeysInfos.java
│ │ ├── ExtraKeysView.java
│ │ ├── RunCommandService.java
│ │ ├── TermuxActivity.java
│ │ ├── TermuxHelpActivity.java
│ │ ├── TermuxInstaller.java
│ │ ├── TermuxOpenReceiver.java
│ │ ├── TermuxPreferences.java
│ │ ├── TermuxService.java
│ │ └── TermuxViewClient.java
│ │ └── filepicker
│ │ ├── TermuxDocumentsProvider.java
│ │ └── TermuxFileReceiverActivity.java
│ └── res
│ ├── drawable-anydpi-v26
│ └── ic_launcher.xml
│ ├── drawable
│ ├── banner.png
│ ├── current_session.xml
│ ├── current_session_black.xml
│ ├── ic_foreground.xml
│ ├── ic_launcher.xml
│ ├── ic_new_session.xml
│ ├── ic_service_notification.xml
│ ├── selected_session_background.xml
│ ├── selected_session_background_black.xml
│ ├── session_ripple.xml
│ ├── session_ripple_black.xml
│ └── terminal_scroll_shape.xml
│ ├── layout
│ ├── drawer_layout.xml
│ ├── extra_keys_main.xml
│ ├── extra_keys_right.xml
│ └── line_in_drawer.xml
│ ├── raw
│ └── bell.ogg
│ ├── values-zh
│ └── strings.xml
│ ├── values
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ └── shortcuts.xml
└── update_note.txt
/apprts/src/main/assets/pm3_version.txt:
--------------------------------------------------------------------------------
1 | 20201026_5
2 |
3 | pattern: *_*
4 |
5 | frist *: date
6 | second: number
7 |
8 | example: 20201026_1
9 | example: 20201026_2
10 | example: 20201027_1
--------------------------------------------------------------------------------
/apprts/src/main/assets/proxmark3.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/assets/proxmark3.zip
--------------------------------------------------------------------------------
/apprts/src/main/assets/template_tag_info_en.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Information
4 |
26 |
27 |
28 |
29 | Not a Mifare Classic Tag
30 | Generic Informations
31 | UID:
32 | ${UID}
33 | Technology:
34 | ${Tech}
35 | ATQA:
36 | ${ATQA}
37 | SAK:
38 | ${SAK}
39 | ATS:
40 | ${ATS}
41 | Type and Manufacturer:
42 | ${TM}
43 | Type and Manufacturer might be wrong.
44 |
45 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/activities/connect/AbstractPN53XConnectActivity.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.activities.connect;
2 |
3 | import com.rfidresearchgroup.activities.main.PN53XNfcMain;
4 | import com.rfidresearchgroup.activities.tools.DeviceConnectActivity;
5 | import com.rfidresearchgroup.callback.ConnectFailedCtxCallback;
6 | import com.rfidresearchgroup.rfidtools.R;
7 |
8 | public abstract class AbstractPN53XConnectActivity extends DeviceConnectActivity {
9 |
10 | @Override
11 | public Class getTarget() {
12 | return PN53XNfcMain.class;
13 | }
14 |
15 | @Override
16 | public String getConnectingMsg() {
17 | return getString(R.string.msg_connect_common);
18 | }
19 |
20 | @Override
21 | public ConnectFailedCtxCallback getCallback() {
22 | return this;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/activities/connect/Acr122uHkUsbConnectActivity.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.activities.connect;
2 |
3 | import com.rfidresearchgroup.models.AbstractDeviceModel;
4 | import com.rfidresearchgroup.models.Acr122uUsbRawModel;
5 | import com.rfidresearchgroup.rfidtools.R;
6 |
7 | public class Acr122uHkUsbConnectActivity extends AbstractPN53XConnectActivity {
8 |
9 | @Override
10 | public AbstractDeviceModel[] getModels() {
11 | return new AbstractDeviceModel[]{
12 | new Acr122uUsbRawModel()
13 | };
14 | }
15 |
16 | @Override
17 | public String getConnectingMsg() {
18 | return getString(R.string.msg_connect_122u);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/activities/main/GeneralNfcDeviceMain.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.activities.main;
2 |
3 | import androidx.fragment.app.Fragment;
4 |
5 | import com.rfidresearchgroup.fragment.tools.StandardMFRWOperateFragment;
6 | import com.rfidresearchgroup.fragment.tools.StandardShowInformationFragment;
7 | import com.rfidresearchgroup.activities.standard.AbsStandardM1Activity;
8 |
9 | public class GeneralNfcDeviceMain extends AbsStandardM1Activity {
10 | @Override
11 | protected Fragment getInformatinFragment() {
12 | return new StandardShowInformationFragment();
13 | }
14 |
15 | @Override
16 | protected Fragment getTagOperateFragment() {
17 | return new StandardMFRWOperateFragment();
18 | }
19 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/activities/main/PN53XReaderMain.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.activities.main;
2 |
3 | import androidx.fragment.app.Fragment;
4 |
5 | import com.rfidresearchgroup.fragment.tools.PN53XShowInformationFragment;
6 | import com.rfidresearchgroup.fragment.tools.PN53xMFRWOperateFragment;
7 | import com.rfidresearchgroup.activities.standard.AbsStandardM1Activity;
8 |
9 | public class PN53XReaderMain extends AbsStandardM1Activity {
10 |
11 | @Override
12 | protected Fragment getInformatinFragment() {
13 | return new PN53XShowInformationFragment();
14 | }
15 |
16 | @Override
17 | protected Fragment getTagOperateFragment() {
18 | return new PN53xMFRWOperateFragment();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/adapter/FragmentListPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.adapter;
2 |
3 | import androidx.fragment.app.Fragment;
4 | import androidx.fragment.app.FragmentManager;
5 | import androidx.fragment.app.FragmentPagerAdapter;
6 |
7 | import java.util.List;
8 |
9 | public class FragmentListPagerAdapter
10 | extends FragmentPagerAdapter {
11 |
12 | private List fragmentList;
13 |
14 | public FragmentListPagerAdapter(FragmentManager fm, List fragments) {
15 | super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
16 | fragmentList = fragments;
17 | }
18 |
19 | @Override
20 | public Fragment getItem(int i) {
21 | return fragmentList.get(i);
22 | }
23 |
24 | @Override
25 | public int getCount() {
26 | return fragmentList.size();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/binder/ItemCommonBinder.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.binder;
2 |
3 |
4 | import androidx.annotation.NonNull;
5 |
6 |
7 | import com.rfidresearchgroup.holder.ItemCommonViewHolder;
8 | import com.rfidresearchgroup.javabean.ItemCommonBean;
9 | import me.drakeet.multitype.ItemViewBinder;
10 |
11 | public abstract class ItemCommonBinder
12 | extends ItemViewBinder {
13 |
14 | @Override
15 | protected void onBindViewHolder(@NonNull VH holder, @NonNull T item) {
16 | holder.imgIcon.setImageResource(item.getIconResID());
17 | holder.txtTitle.setText(item.getTitle());
18 | holder.txtSubTitle.setText(item.getSubTitle());
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/ActionCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface ActionCallback {
4 | void onSuccess(S s);
5 |
6 | void onFail(F f);
7 | }
8 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/BaseCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface BaseCallback {
4 |
5 | interface ErrorCallback {
6 | void onError(T e);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/ConnectCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | import java.io.Serializable;
4 |
5 | public interface ConnectCallback extends Serializable {
6 | //连接成功时的回调
7 | void onConnectSucces();
8 |
9 | //连接失败时的回调
10 | void onConnectFail();
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/ConnectFailedCtxCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | import android.app.Activity;
4 |
5 | import java.io.Serializable;
6 |
7 | public interface ConnectFailedCtxCallback extends Serializable {
8 | void onFailed(Activity context);
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/DriverCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface DriverCallback {
4 | interface DriverCheckCallback {
5 | void onCheckCur(String curDriver);
6 | }
7 |
8 | interface DriverChangeCallback {
9 | void onChangeSuccess(String newDriver);
10 |
11 | void onChangeFail(String msg);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/DumpCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface DumpCallback {
4 | /*
5 | * 在dump内容无误时的回调
6 | */
7 | void showContents(String[] contents);
8 |
9 | /*
10 | * dump读取失败
11 | * */
12 | void onFileException();
13 |
14 | /*
15 | * dump格式错误!
16 | * */
17 | void onFormatNoSupport();
18 |
19 | /*
20 | * 成功后的回调
21 | * */
22 | void onSuccess();
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/FileReadLineCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface FileReadLineCallback {
4 | //读取完成的结果数组!
5 | void onReadFinish(String[] line);
6 |
7 | //读取失败的消息!
8 | void onReadFail(String msg);
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/FormatConvertCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface FormatConvertCallback extends BaseCallback {
4 |
5 | //转换回调
6 | interface ConvertCallback {
7 | //转换成功后以字节返回
8 | void onConvertSuccess(byte[] result);
9 |
10 | //转换失败应当有消息
11 | void onConvertFail(String errorMsg);
12 | }
13 |
14 | //保存回调
15 | interface SaveCallback {
16 | //转换成功后以字节返回
17 | void onSaveSuccess();
18 |
19 | //转换失败应当有消息
20 | void onSaveFail(String errorMsg);
21 | }
22 |
23 | //类型检测回调
24 | interface TypeCheckCallback {
25 |
26 | void isTxt();
27 |
28 | void isBin();
29 |
30 | void isNot();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/InitNfcCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface InitNfcCallback {
4 | void onInitSuccess();
5 |
6 | void onInitFail();
7 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/KeyFileCallbak.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface KeyFileCallbak {
4 |
5 | interface KeyFileReadCallbak {
6 | //密钥读取成功时的回调
7 | void onReadSuccess(String msg);
8 |
9 | //密钥读取失败时的回调
10 | void onReadFail();
11 | }
12 |
13 | interface KeyFileWriteCallbak {
14 | //密钥写入成功时的回调
15 | void onWriteSuccess(String msg);
16 |
17 | //密钥写入失败时的回调
18 | void onWriteFail();
19 | }
20 |
21 | interface KeyFileCreateCallback {
22 | void onCreateSuccess();
23 |
24 | void onCreateFail();
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/KeysAuthCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | import com.rfidresearchgroup.javabean.M1KeyBean;
4 |
5 | public interface KeysAuthCallback {
6 | // 标签异常
7 | void onTagAbnormal();
8 |
9 | // 输入秘钥无效!
10 | void onKeysInvalid();
11 |
12 | // 在验证的时候
13 | void onAuth(int sectorRemains);
14 |
15 | // 在秘钥轮询的时候
16 | void onKeys(String key);
17 |
18 | // 在验证完成时的结果回调!
19 | void onResults(M1KeyBean[] keyBeans);
20 | }
21 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/LoginCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface LoginCallback{
4 | //在完成资源注册加载后返回权限码,后期根据权限码注册驱动
5 | void onFinish();
6 |
7 | //在失败加载后返回类型,后期根据类型做处理!
8 | void onFail();
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/ReaderCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface ReaderCallback extends BaseCallback {
4 | //读取扇区成功后的结果回调
5 | void onSuccess(T t);
6 |
7 | void onTagAbnormal();
8 | }
9 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/TagInformationsCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface TagInformationsCallback {
4 | //显示信息是以什么格式传入到上层的!
5 | void onInformationsShow(T t);
6 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/TagStateCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | /**
4 | * 标签状态回调视图
5 | */
6 | public interface TagStateCallback {
7 | // 标签异常
8 | void onTagAbnormal();
9 |
10 | // 标签普通
11 | void onTagOrdinary();
12 |
13 | // 标签特殊
14 | void onTagSpecial();
15 | }
16 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/callback/WriterCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.callback;
2 |
3 | public interface WriterCallback extends BaseCallback {
4 | void onFinish();
5 |
6 | void onDataInvalid();
7 |
8 | void onTagAbnormal();
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/fragment/tools/PN53XShowInformationFragment.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.fragment.tools;
2 |
3 | import com.rfidresearchgroup.presenter.AbsTagInformationsPresenter;
4 | import com.rfidresearchgroup.presenter.PN53XTagInformationsPresenter;
5 |
6 | public class PN53XShowInformationFragment extends AbsShowInformationFragment {
7 | @Override
8 | protected AbsTagInformationsPresenter getPresenter() {
9 | return new PN53XTagInformationsPresenter();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/fragment/tools/StandardShowInformationFragment.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.fragment.tools;
2 |
3 | import com.rfidresearchgroup.presenter.AbsTagInformationsPresenter;
4 | import com.rfidresearchgroup.presenter.StandardTagInformationsPresenter;
5 |
6 | public class StandardShowInformationFragment extends AbsShowInformationFragment {
7 | @Override
8 | protected AbsTagInformationsPresenter getPresenter() {
9 | //使用的是标准的设备获得到的标签信息!
10 | return new StandardTagInformationsPresenter();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/holder/BannerImageHolder.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.holder;
2 |
3 | import android.view.View;
4 |
5 | import com.bumptech.glide.Glide;
6 | import com.rfidresearchgroup.rfidtools.R;
7 | import com.zhpan.bannerview.holder.ViewHolder;
8 |
9 | import com.rfidresearchgroup.common.widget.OvalImageView;
10 | import com.rfidresearchgroup.javabean.BannerBean;
11 |
12 | public class BannerImageHolder implements ViewHolder {
13 | @Override
14 | public int getLayoutId() {
15 | return R.layout.item_act_img_banner;
16 | }
17 |
18 | @Override
19 | public void onBind(View itemView, BannerBean data, int position, int size) {
20 | OvalImageView imageView = itemView.findViewById(R.id.imgView_Banner);
21 | // 加载进IV中
22 | Glide.with(itemView.getContext()).load(data.getImgRes()).into(imageView);
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/holder/ItemCommonViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.holder;
2 |
3 | import android.view.View;
4 | import android.widget.ImageView;
5 | import android.widget.TextView;
6 |
7 | import androidx.annotation.NonNull;
8 | import androidx.recyclerview.widget.RecyclerView;
9 |
10 | import com.rfidresearchgroup.rfidtools.R;
11 |
12 | public class ItemCommonViewHolder extends RecyclerView.ViewHolder {
13 | public TextView txtTitle;
14 | public TextView txtSubTitle;
15 | public ImageView imgIcon;
16 |
17 | public ItemCommonViewHolder(@NonNull View itemView) {
18 | super(itemView);
19 | txtTitle = itemView.findViewById(R.id.txtMainTitle);
20 | txtSubTitle = itemView.findViewById(R.id.txtSubTitle);
21 | imgIcon = itemView.findViewById(R.id.imgIcon);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/implement/TextWatcherImpl.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.implement;
2 |
3 | import android.text.Editable;
4 | import android.text.TextWatcher;
5 |
6 | public class TextWatcherImpl implements TextWatcher {
7 | @Override
8 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {
9 |
10 | }
11 |
12 | @Override
13 | public void onTextChanged(CharSequence s, int start, int before, int count) {
14 |
15 | }
16 |
17 | @Override
18 | public void afterTextChanged(Editable s) {
19 |
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/BannerBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | public class BannerBean {
4 | private BannerBean[] subs;
5 | private String imgRes;
6 |
7 | public BannerBean() {
8 | }
9 |
10 | public BannerBean(BannerBean[] subs, String imgRes) {
11 | this.subs = subs;
12 | this.imgRes = imgRes;
13 | }
14 |
15 | public BannerBean(BannerBean[] subs) {
16 | this.subs = subs;
17 | }
18 |
19 | public BannerBean(String imgRes) {
20 | this.imgRes = imgRes;
21 | }
22 |
23 | public BannerBean[] getSubs() {
24 | return subs;
25 | }
26 |
27 | public void setSubs(BannerBean[] subs) {
28 | this.subs = subs;
29 | }
30 |
31 | public String getImgRes() {
32 | return imgRes;
33 | }
34 |
35 | public void setImgRes(String imgRes) {
36 | this.imgRes = imgRes;
37 | }
38 |
39 | public void onClick() {
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/DevBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | import java.io.Serializable;
4 |
5 | /**
6 | * Created by DXL on 2017/11/14.
7 | */
8 | public class DevBean implements Serializable {
9 |
10 | private String devName;
11 | private String macAddress;
12 |
13 | public DevBean(String name, String addr) {
14 | this.devName = name;
15 | this.macAddress = addr;
16 | }
17 |
18 | public String getDevName() {
19 | return devName;
20 | }
21 |
22 | public String getMacAddress() {
23 | return macAddress;
24 | }
25 |
26 | @Override
27 | public String toString() {
28 | return "DevBean{" +
29 | "devName='" + devName + '\'' +
30 | ", macAddress='" + macAddress + '\'' +
31 | '}';
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/DeviceInfoBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | import androidx.annotation.DrawableRes;
4 | import androidx.annotation.NonNull;
5 |
6 | public class DeviceInfoBean {
7 | @NonNull
8 | private String name;
9 | @DrawableRes
10 | private int icon;
11 | private boolean enable = true;
12 |
13 | public DeviceInfoBean(@NonNull String name, int icon) {
14 | this.name = name;
15 | this.icon = icon;
16 | }
17 |
18 | @NonNull
19 | public String getName() {
20 | return name;
21 | }
22 |
23 | public void setName(@NonNull String name) {
24 | this.name = name;
25 | }
26 |
27 | public int getIcon() {
28 | return icon;
29 | }
30 |
31 | public void setIcon(int icon) {
32 | this.icon = icon;
33 | }
34 |
35 | public boolean isEnable() {
36 | return enable;
37 | }
38 |
39 | public void setEnable(boolean enable) {
40 | this.enable = enable;
41 | }
42 |
43 | public void onClick() {
44 | }
45 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/EasyCMDEntry.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | /**
4 | * 组织命令与其名字对应的实体!
5 | *
6 | * @author DXL
7 | */
8 | public class EasyCMDEntry {
9 | //命令标志
10 | private String cmdName;
11 | //命令内容
12 | private String command;
13 |
14 | public String getCmdName() {
15 | return cmdName;
16 | }
17 |
18 | public EasyCMDEntry setCmdName(String cmdName) {
19 | this.cmdName = cmdName;
20 | return this;
21 | }
22 |
23 | public String getCommand() {
24 | return command;
25 | }
26 |
27 | public EasyCMDEntry setCommand(String command) {
28 | this.command = command;
29 | return this;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/ItemCommonBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | import android.view.View;
4 |
5 | public class ItemCommonBean extends TitleBean {
6 | private String subTitle = "";
7 | private int iconResID;
8 |
9 | public ItemCommonBean(String title) {
10 | super(title);
11 | }
12 |
13 | public String getSubTitle() {
14 | return subTitle;
15 | }
16 |
17 | public void setSubTitle(String subTitle) {
18 | this.subTitle = subTitle;
19 | }
20 |
21 | public int getIconResID() {
22 | return iconResID;
23 | }
24 |
25 | public void setIconResID(int iconResID) {
26 | this.iconResID = iconResID;
27 | }
28 |
29 | public void onClick(View view, int pos) {
30 | }
31 |
32 | public void onChange(View view, int pos, boolean checked) {
33 |
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/ItemTextBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | public class ItemTextBean extends ItemCommonBean {
4 | private String message;
5 |
6 | public ItemTextBean(String title) {
7 | super(title);
8 | }
9 |
10 | public String getMessage() {
11 | return message;
12 | }
13 |
14 | public void setMessage(String message) {
15 | this.message = message;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/ItemToggleBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | public class ItemToggleBean extends ItemCommonBean {
4 | private boolean checked;
5 |
6 | public ItemToggleBean(String title) {
7 | super(title);
8 | }
9 |
10 | public boolean isChecked() {
11 | return checked;
12 | }
13 |
14 | public void setChecked(boolean checked) {
15 | this.checked = checked;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/M1KeyBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | /*
4 | * 这个bean是用来存放验证完成后的key
5 | */
6 | public class M1KeyBean {
7 | //扇区号
8 | private int sector;
9 |
10 | //ab密钥
11 | private String keyA;
12 | private String keyB;
13 |
14 | public int getSector() {
15 | return sector;
16 | }
17 |
18 | public void setSector(int sector) {
19 | this.sector = sector;
20 | }
21 |
22 | public String getKeyA() {
23 | return keyA;
24 | }
25 |
26 | public void setKeyA(String keyA) {
27 | this.keyA = keyA;
28 | }
29 |
30 | public String getKeyB() {
31 | return keyB;
32 | }
33 |
34 | public void setKeyB(String keyB) {
35 | this.keyB = keyB;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/TitleBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | public class TitleBean {
4 | private String title = "";
5 |
6 | public TitleBean(String title) {
7 | this.title = title;
8 | }
9 |
10 | public String getTitle() {
11 | return title;
12 | }
13 |
14 | public void setTitle(String title) {
15 | this.title = title;
16 | }
17 |
18 | @Override
19 | public String toString() {
20 | return "TitleBean{" +
21 | "title='" + title + '\'' +
22 | '}';
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/javabean/TitleTextBean.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.javabean;
2 |
3 | public class TitleTextBean {
4 | private String title;
5 |
6 | public TitleTextBean(String title) {
7 | this.title = title;
8 | }
9 |
10 | public String getTitle() {
11 | return title;
12 | }
13 |
14 | public void setTitle(String title) {
15 | this.title = title;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/AbsStopableTask.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | public abstract class AbsStopableTask {
4 | // 停止标志!
5 | protected boolean stopLable = false;
6 |
7 | public void stop() {
8 | stopLable = true;
9 | }
10 |
11 | public void reset() {
12 | stopLable = false;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/AbsTagStateModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.callback.TagStateCallback;
4 |
5 | public abstract class AbsTagStateModel {
6 | public void check(TagStateCallback callback) {
7 | new Thread(new Runnable() {
8 | @Override
9 | public void run() {
10 | if (checkTagState()) {
11 | if (checkTagMagic())
12 | callback.onTagSpecial(); //标签特殊
13 | else
14 | callback.onTagOrdinary(); //标签普通
15 | } else
16 | callback.onTagAbnormal(); //标签异常
17 | }
18 | }).start();
19 | }
20 |
21 | protected abstract boolean checkTagState();
22 |
23 | protected abstract boolean checkTagMagic();
24 | }
25 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/FileReadLineModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import java.io.File;
4 | import java.io.IOException;
5 |
6 | import com.rfidresearchgroup.common.util.FileUtils;
7 | import com.rfidresearchgroup.callback.FileReadLineCallback;
8 |
9 | public class FileReadLineModel {
10 |
11 | /*
12 | * 读取文件以行,以回调结束!
13 | * */
14 | public static void readFile(File file, FileReadLineCallback callback) {
15 | new Thread(new Runnable() {
16 | @Override
17 | public void run() {
18 | try {
19 | String[] ret = FileUtils.readLines(file);
20 | callback.onReadFinish(ret);
21 | } catch (IOException e) {
22 | e.printStackTrace();
23 | callback.onReadFail(e.getMessage());
24 | }
25 | }
26 | }).start();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/PN532SppUartModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import android.bluetooth.BluetoothAdapter;
4 | import android.bluetooth.BluetoothDevice;
5 |
6 | import com.proxgrind.com.DeviceChecker;
7 |
8 | import com.proxgrind.com.DriverInterface;
9 | import com.proxgrind.com.SppHasBlock;
10 | import com.rfidresearchgroup.devices.PN53X;
11 |
12 | /*
13 | * PN53X连接实现!
14 | * */
15 | public class PN532SppUartModel extends AbstractSppDeviceModel {
16 | @Override
17 | public DriverInterface getDriverInterface() {
18 | return SppHasBlock.get();
19 | }
20 |
21 | @Override
22 | public DeviceChecker getDeviceInitImpl() {
23 | return new PN53X(PN53X.NAME.PN532, mDI);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/PN532Usb2UartModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.proxgrind.com.DeviceChecker;
4 |
5 | import com.rfidresearchgroup.devices.PN53X;
6 |
7 | public class PN532Usb2UartModel extends AbsUsb2UartModel {
8 | @Override
9 | public DeviceChecker getDeviceInitImpl() {
10 | return new PN53X(PN53X.NAME.PN532, mDI);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/PN53XTagReadModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.mifare.MifareAdapter;
4 | import com.rfidresearchgroup.natives.SpclMf;
5 |
6 | public class PN53XTagReadModel extends AbsTagReadModel {
7 | @Override
8 | protected MifareAdapter getTag() {
9 | return SpclMf.get();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/PN53XTagStateModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.natives.SpclMf;
4 |
5 | public class PN53XTagStateModel extends AbsTagStateModel {
6 | private SpclMf spclMf = SpclMf.get();
7 |
8 | @Override
9 | protected boolean checkTagState() {
10 | if (spclMf.scanning()) {
11 | return spclMf.connect();
12 | } else {
13 | return false;
14 | }
15 | }
16 |
17 | @Override
18 | protected boolean checkTagMagic() {
19 | if (!spclMf.scanning()) return false;
20 | if (spclMf.connect()) return spclMf.unlock();
21 | return false;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/PN53XTagWriteModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.mifare.MifareAdapter;
4 | import com.rfidresearchgroup.natives.SpclMf;
5 |
6 | public class PN53XTagWriteModel extends AbsTagWriteModel {
7 | @Override
8 | protected MifareAdapter getTag() {
9 | return SpclMf.get();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/Proxmark3Rdv4SppModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import android.bluetooth.BluetoothAdapter;
4 | import android.bluetooth.BluetoothDevice;
5 |
6 | import com.proxgrind.com.DeviceChecker;
7 |
8 | import java.io.IOException;
9 |
10 | import com.proxgrind.com.DriverInterface;
11 | import com.proxgrind.com.SppNonBlock;
12 |
13 | /*
14 | * PM3 RDV4 SPP连接实现!
15 | * */
16 | public class Proxmark3Rdv4SppModel extends AbstractSppDeviceModel {
17 |
18 | @Override
19 | public DriverInterface getDriverInterface() {
20 | return SppNonBlock.get();
21 | }
22 |
23 | @Override
24 | public DeviceChecker getDeviceInitImpl() {
25 | return new DeviceChecker(mDI) {
26 | @Override
27 | protected boolean checkDevice() throws IOException {
28 | return true;
29 | }
30 |
31 | @Override
32 | public void close() throws IOException {
33 |
34 | }
35 | };
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/Proxmark3Rdv4UsbModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.proxgrind.com.DeviceChecker;
4 |
5 | import java.io.IOException;
6 |
7 | public class Proxmark3Rdv4UsbModel extends AbsUsb2UartModel {
8 | @Override
9 | public DeviceChecker getDeviceInitImpl() {
10 | return new DeviceChecker(mDI) {
11 | @Override
12 | protected boolean checkDevice() throws IOException {
13 | return true;
14 | }
15 |
16 | @Override
17 | public void close() throws IOException {
18 |
19 | }
20 | };
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/StandardTagKeysCheckModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.mifare.MifareAdapter;
4 | import com.rfidresearchgroup.mifare.StdMifareImpl;
5 |
6 | public class StandardTagKeysCheckModel extends AbsTagKeysCheckModel {
7 |
8 | public StandardTagKeysCheckModel(KeyFilesCallback callback) {
9 | super(callback);
10 | }
11 |
12 | @Override
13 | public MifareAdapter getTag() {
14 | return StdMifareImpl.getInstance();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/StandardTagReadModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.mifare.MifareAdapter;
4 | import com.rfidresearchgroup.mifare.StdMifareImpl;
5 |
6 | public class StandardTagReadModel
7 | extends AbsTagReadModel {
8 | @Override
9 | protected MifareAdapter getTag() {
10 | return StdMifareImpl.getInstance();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/models/StandardTagWriteModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.models;
2 |
3 | import com.rfidresearchgroup.mifare.MifareAdapter;
4 | import com.rfidresearchgroup.mifare.StdMifareImpl;
5 |
6 | public class StandardTagWriteModel extends AbsTagWriteModel {
7 | @Override
8 | protected MifareAdapter getTag() {
9 | return StdMifareImpl.getInstance();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/AbsMFMagicCheckPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | /**
4 | * 魔术卡检测支持
5 | *
6 | * @author DXL
7 | */
8 | public abstract class AbsMFMagicCheckPresenter
9 | extends BasePresenter {
10 |
11 | /*
12 | * 检测是否是魔术卡!
13 | * */
14 | protected abstract boolean checkMagic();
15 | }
16 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/AbsTagInformationsPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.view.TagInformationsView;
4 |
5 | public abstract class AbsTagInformationsPresenter
6 | extends BasePresenter> {
7 |
8 | public abstract void show();
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/BasePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.view.BaseMvpView;
4 |
5 | public abstract class BasePresenter {
6 |
7 | protected String LOG_TAG = this.getClass().getSimpleName();
8 |
9 | //中介者持有视图层的对象
10 | public V view = null;
11 |
12 | //优化中介类
13 | public void attachView(V view) {
14 | this.view = view;
15 | }
16 |
17 | public void detachView() {
18 | this.view = null;
19 | }
20 |
21 | public boolean isViewAttach() {
22 | return view != null;
23 | }
24 |
25 | public V getView() {
26 | return view;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/DeviceExistsPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbstractDeviceModel;
4 | import com.rfidresearchgroup.view.DeviceExistsView;
5 |
6 | public class DeviceExistsPresenter
7 | extends DevicePresenter {
8 |
9 | public DeviceExistsPresenter(AbstractDeviceModel model) {
10 | super(model);
11 | }
12 |
13 | //刷新已配对的设备List
14 | public void existsDevList() {
15 | if (isViewAttach()) {
16 | subView.showExistsDev(adm.getHistory());
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagInformationsPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.callback.TagInformationsCallback;
4 | import com.rfidresearchgroup.models.PN53XInformationsModel;
5 |
6 | public class PN53XTagInformationsPresenter extends AbsTagInformationsPresenter {
7 | @Override
8 | public void show() {
9 | if (isViewAttach()) {
10 | new PN53XInformationsModel().collect(new TagInformationsCallback() {
11 | @Override
12 | public void onInformationsShow(CharSequence charSequence) {
13 | view.onInformationsShow(charSequence);
14 | }
15 | });
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagKeysCheckModel.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagKeysCheckModel;
4 |
5 | import com.rfidresearchgroup.mifare.MifareAdapter;
6 | import com.rfidresearchgroup.natives.SpclMf;
7 |
8 | public class PN53XTagKeysCheckModel extends AbsTagKeysCheckModel {
9 | public PN53XTagKeysCheckModel(KeyFilesCallback callback) {
10 | super(callback);
11 | }
12 |
13 | @Override
14 | public MifareAdapter getTag() {
15 | return SpclMf.get();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagKeysCheckPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagKeysCheckModel;
4 |
5 | public class PN53XTagKeysCheckPresenter
6 | extends TagKeysCheckPresenterImpl {
7 | @Override
8 | public AbsTagKeysCheckModel getTagKeysCheckModel() {
9 |
10 | return new PN53XTagKeysCheckModel(this);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagReadPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagReadModel;
4 | import com.rfidresearchgroup.models.PN53XTagReadModel;
5 |
6 | public class PN53XTagReadPresenter extends AbsTagReadPresenter {
7 | @Override
8 | protected AbsTagReadModel getTagReadModel() {
9 | return new PN53XTagReadModel();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagStatePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagStateModel;
4 | import com.rfidresearchgroup.models.PN53XTagStateModel;
5 |
6 | public class PN53XTagStatePresenter extends AbsTagStatePresenter {
7 |
8 | @Override
9 | protected AbsTagStateModel getModel() {
10 | return new PN53XTagStateModel();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/PN53XTagWritePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagWriteModel;
4 | import com.rfidresearchgroup.models.PN53XTagWriteModel;
5 |
6 | public class PN53XTagWritePresenter extends AbsTagWritePresenter {
7 | @Override
8 | protected AbsTagWriteModel getWriteModel() {
9 | return new PN53XTagWriteModel();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardMFMagicCheckPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | public class StandardMFMagicCheckPresenter
4 | extends AbsMFMagicCheckPresenter {
5 | @Override
6 | protected boolean checkMagic() {
7 | // 自带的标准NFC设备默认是没有此类魔术卡的操作实现的!
8 | return false;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardTagInformationsPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.callback.TagInformationsCallback;
4 | import com.rfidresearchgroup.models.StdNfcInformationsModel;
5 |
6 | public class StandardTagInformationsPresenter
7 | extends AbsTagInformationsPresenter {
8 | @Override
9 | public void show() {
10 | new StdNfcInformationsModel().collect(new TagInformationsCallback() {
11 | @Override
12 | public void onInformationsShow(CharSequence s) {
13 | if (isViewAttach())
14 | view.onInformationsShow(s);
15 | }
16 | });
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardTagKeysCheckPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagKeysCheckModel;
4 | import com.rfidresearchgroup.models.StandardTagKeysCheckModel;
5 |
6 | public class StandardTagKeysCheckPresenter
7 | extends TagKeysCheckPresenterImpl {
8 |
9 | @Override
10 | public AbsTagKeysCheckModel getTagKeysCheckModel() {
11 | // 传递秘钥文件的列表来实例化一个数据操作模型!
12 | return new StandardTagKeysCheckModel(this);
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardTagReadPresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagReadModel;
4 | import com.rfidresearchgroup.models.StandardTagReadModel;
5 |
6 | public class StandardTagReadPresenter
7 | extends AbsTagReadPresenter {
8 | @Override
9 | public AbsTagReadModel getTagReadModel() {
10 | return new StandardTagReadModel();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardTagStatePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagStateModel;
4 | import com.rfidresearchgroup.models.StandardNFCTagStateModel;
5 |
6 | public class StandardTagStatePresenter extends AbsTagStatePresenter {
7 |
8 | @Override
9 | protected AbsTagStateModel getModel() {
10 | return new StandardNFCTagStateModel();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/presenter/StandardTagWritePresenter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.presenter;
2 |
3 | import com.rfidresearchgroup.models.AbsTagWriteModel;
4 | import com.rfidresearchgroup.models.StandardTagWriteModel;
5 |
6 | public class StandardTagWritePresenter extends AbsTagWritePresenter {
7 | @Override
8 | protected AbsTagWriteModel getWriteModel() {
9 | return new StandardTagWriteModel();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/settings/BaseSetting.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.settings;
2 |
3 | import java.io.File;
4 |
5 | /*
6 | * 基础设置接口!
7 | * 定义了加载设置的具体步骤!
8 | * */
9 | public interface BaseSetting {
10 |
11 | /**
12 | * 定义设置配置文件!
13 | */
14 | File getSettingsFile();
15 |
16 | /**
17 | * 需要查询的设置!
18 | *
19 | * @return 设置的key
20 | */
21 | String onQuerySetting();
22 |
23 | /**
24 | * 在设置未发现时!
25 | *
26 | * @param key 设置的key
27 | */
28 | void onNotFound(String key);
29 |
30 | /**
31 | * 在设置正常的时候!
32 | *
33 | * @param value 设置的值
34 | */
35 | void onNormal(String[] value);
36 | }
37 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/BaseMvpView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | public interface BaseMvpView {
4 | void showToast(String msg);
5 |
6 | void showDialog(String title, String msg);
7 |
8 | void hideDialog();
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/DeviceAttachView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import com.rfidresearchgroup.javabean.DevBean;
4 |
5 | public interface DeviceAttachView extends DeviceView {
6 | //显示搜寻到的设备的接口
7 | void devAttach(DevBean devBean);
8 | }
9 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/DeviceExistsView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import com.rfidresearchgroup.javabean.DevBean;
4 |
5 | public interface DeviceExistsView
6 | extends DeviceView {
7 | //显示已配对的设备的接口
8 | void showExistsDev(DevBean[] devList);
9 | }
10 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/DeviceView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import com.rfidresearchgroup.javabean.DevBean;
4 | import com.rfidresearchgroup.callback.BaseCallback;
5 |
6 | public interface DeviceView extends BaseMvpView, BaseCallback.ErrorCallback {
7 |
8 | //驱动没有初始化时的异常回调
9 | void onRegisterError(String name);
10 |
11 | //设备移除时的回调
12 | void devDetach(DevBean devBean);
13 |
14 | //连接失败时的操作
15 | void onConnectFail();
16 |
17 | //连接成功的操作
18 | void onConnectSuccess();
19 |
20 | //Nfc设备初始化成功时的回调
21 | void onInitNfcAdapterSuccess();
22 |
23 | //Nfc设备初始化失败时的回调
24 | void onInitNfcAdapterFail();
25 | }
26 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/DriverView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | public interface DriverView
4 | extends BaseMvpView {
5 | //驱动切换,返回检测到的类型
6 | void onCheckDriver(String curDriver);
7 |
8 | //在切换成功后
9 | void onDriverChange(String after);
10 | }
11 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/DumpEditotView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | public interface DumpEditotView extends BaseMvpView {
4 |
5 | /*
6 | * 显示dump的内容
7 | */
8 | void showDumpContent(String[] contents);
9 |
10 | /*
11 | * dump读取失败
12 | * */
13 | void onFileException();
14 |
15 | /*
16 | * dump格式错误!
17 | * */
18 | void onFormatNoSupport();
19 |
20 | void onSuccess();
21 | }
22 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/FileReadLineView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import com.rfidresearchgroup.callback.FileReadLineCallback;
4 |
5 | public interface FileReadLineView extends BaseMvpView, FileReadLineCallback {
6 | //目前直接继承即可!
7 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/FormatConvertView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | public interface FormatConvertView extends BaseMvpView {
4 | void onConvertSucess(byte[] result);
5 |
6 | void onConvertFail(String errorMsg);
7 |
8 | void onSaveSuccess();
9 |
10 | void onSaveFail(String errorMsg);
11 | }
12 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/KeyFileView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 |
4 | /*
5 | *视图操作回调
6 | */
7 | public interface KeyFileView extends BaseMvpView {
8 |
9 | //显示密钥到界面
10 | void showKeyList(String key);
11 |
12 | //显示错误信息
13 | void showKeyError();
14 |
15 | //在修改成功后的回调
16 | void onKeysModifySuccess();
17 |
18 | //创建成功后的回调
19 | void onCreateFileSuccess();
20 |
21 | void onCreateFileFailed();
22 | }
23 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/MfKeysCheckView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import java.io.File;
4 |
5 | import com.rfidresearchgroup.javabean.M1KeyBean;
6 |
7 |
8 | // 因为这个视图是基于MF标签的秘钥检查回调,因此需要扩展标签状态检测的回调。
9 | public interface MfKeysCheckView extends BaseMvpView, TagStateView {
10 | // 提供一个接口,用于获取相关的秘钥文件!
11 | File[] getKeyFiles();
12 |
13 | // 在秘钥验证开始时的回调!
14 | void onStart(int sectorCount);
15 |
16 | void onKeysInvalid();
17 |
18 | // 在验证的时候
19 | void onAuth(int sectorRemains);
20 |
21 | // 在秘钥轮训的时候
22 | void onKeys(String key);
23 |
24 | // 在验证完成时的结果回调!
25 | void onResults(M1KeyBean[] keyBeans);
26 | }
27 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/TagInformationsView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | public interface TagInformationsView
4 | extends BaseMvpView {
5 | //显示信息是以什么格式传入到上层的!
6 | void onInformationsShow(T t);
7 | }
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/TagReadView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 |
4 | import com.rfidresearchgroup.javabean.M1Bean;
5 | import com.rfidresearchgroup.javabean.M1KeyBean;
6 |
7 | public interface TagReadView extends BaseMvpView, TagStateView {
8 | //读取完成的回调
9 | void onReadFinish(M1Bean[] datas);
10 |
11 | int[] getReadeSectorSelected();
12 |
13 | //在读取单扇区时
14 | M1KeyBean[] getKeyBeanForOne();
15 |
16 | //在读取多扇区时
17 | M1KeyBean[] getKeyBeanForAll();
18 | }
19 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/TagStateView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | /**
4 | * 标签状态回调视图
5 | */
6 | public interface TagStateView extends BaseMvpView {
7 | // 标签异常
8 | void onTagAbnormal();
9 |
10 | // 标签普通
11 | void onTagOrdinary();
12 |
13 | // 标签特殊
14 | void onTagSpecial();
15 | }
16 |
--------------------------------------------------------------------------------
/apprts/src/main/java/com/rfidresearchgroup/view/TagWriteView.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.view;
2 |
3 | import com.rfidresearchgroup.javabean.M1Bean;
4 | import com.rfidresearchgroup.javabean.M1KeyBean;
5 |
6 | public interface TagWriteView
7 | extends BaseMvpView, TagStateView {
8 |
9 | // 是否允许写厂商块,必须有这个控制,避免无意中更改UID!
10 | boolean isWriteManufacturerAllow();
11 |
12 | // 是否使用正序写卡,避免出现某些特殊的卡写入失败的情况!
13 | boolean isWriteSecOrderImplement();
14 |
15 | // 写入完成的回调!
16 | void onWriteFinish();
17 |
18 | // 在数据异常时的回调!
19 | void onDataInvalid();
20 |
21 | // 获取单扇区写的参数!
22 | int getSector();
23 |
24 | // 写该扇区某个块
25 | int getBlock();
26 |
27 | // 写入的块数据!
28 | String getData();
29 |
30 | // 在写入时需要的数据
31 | M1Bean[] getDatas();
32 |
33 | //在读取单扇区时需要的秘钥
34 | M1KeyBean[] getKeyBeanForOne();
35 |
36 | //在读取多扇区时需要的秘钥
37 | M1KeyBean[] getKeyBeanForAll();
38 | }
39 |
--------------------------------------------------------------------------------
/apprts/src/main/res/anim/alpha_repeat_1_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
--------------------------------------------------------------------------------
/apprts/src/main/res/anim/fade_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/apprts/src/main/res/anim/fade_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/apprts/src/main/res/color/color_state_menu_navi_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/acr122u.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/acr122u.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/all.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/bg_border_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/bg_circular_auto_radius_16dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/btn_selector_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/btn_selectot_white.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/chameleon_rdv2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/chameleon_rdv2.jpg
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/chong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/chong.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/clear.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/clear_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/clear_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/data.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/delete.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/dev_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/dev_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/disclaimer_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/disclaimer_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/download.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/dump_delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/dump_delete.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/dump_equals.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/dump_equals.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/dump_extract.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/dump_extract.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/dxl_logo_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/dxl_logo_128.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/edit.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/help_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/help_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/ic_arrow_right_green_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/ic_folder_yellow_56dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/ic_save_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/ic_unknow_black_56dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/info.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/info.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/log.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/log.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_emulate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_emulate.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_iterator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_iterator.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_mfcuk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_mfcuk.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_mfoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_mfoc.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_nfclist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_nfclist.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_settings.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_union_key.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_union_key.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/main_write.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/main_write.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/mct.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/mct.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/mf_rw_goto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/mf_rw_goto.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/mtools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/mtools.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/new_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/new_add.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/nfctools.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/nfctools.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/no_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/no_1.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/no_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/no_2.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/phone_nfc_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/phone_nfc_icon.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/pn532core.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/pn532core.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/proxgrindlogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/proxgrindlogo.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/qq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/qq.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/qq_group_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/qq_group_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rdv4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rdv4.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rdv4_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rdv4_2.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/refresh.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
19 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rename.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rename.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/reset.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rfid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rfid.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rrglogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rrglogo.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/rrglogo500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/rrglogo500.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/sdcard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/sdcard.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/selector_shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/shape_bg_blue_600.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/shape_bg_blue_800.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/shape_bg_grey_200.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/shape_bg_white_1000.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/shape_radain_border.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/share.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/share.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/simple_console_view_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/simple_console_view_example.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/single.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/single.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/toggle_background_selector_off.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/toggle_background_selector_on.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/toggle_drawable_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/update_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/update_blue.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/upload.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/usb_connect.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/usb_connect.gif
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/wechat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/wechat.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable-hdpi/yes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable-hdpi/yes.png
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/bg_circular_grey_radius_16dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/bg_circular_white_radius_16dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/bg_circular_white_radius_5dp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_add_black_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_home_grey_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_inbox_grey_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_keyboard_arrow_left_grey_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_menu.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_refresh_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_settings_grey_24dp.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_terminal.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/ic_write_tag.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/apprts/src/main/res/drawable/termux_view_example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/apprts/src/main/res/drawable/termux_view_example.png
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/act_app_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
24 |
25 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/act_device_connect.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
22 |
23 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/act_login_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/act_pm3_flasher.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
24 |
25 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/dialog_working_msg.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
14 |
15 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/dump_sector_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
17 |
26 |
27 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/fragment_login.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
13 |
14 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/fragment_std_tag_information.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
21 |
22 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_act_img_banner.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_act_main_banner.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_device_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
17 |
18 |
25 |
26 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_dialog_style1.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
25 |
26 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_list_title.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
16 |
17 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_title.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/apprts/src/main/res/layout/item_usb_device_connecting.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
--------------------------------------------------------------------------------
/apprts/src/main/res/menu/act_main_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apprts/src/main/res/menu/activity_device_connect.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apprts/src/main/res/menu/activity_keyedt.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apprts/src/main/res/menu/bottom_std_mf_changer.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/apprts/src/main/res/values-zh/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - 卡一
6 | - 卡二
7 | - 卡三
8 | - 卡四
9 | - 卡五
10 | - 卡六
11 | - 卡七
12 | - 卡八
13 |
14 |
15 |
16 |
17 | - 关闭
18 | - UL
19 | - 1K
20 | - 4K
21 | - 侦测
22 |
23 |
24 |
25 |
26 | - 换卡
27 | - 随机卡号
28 | - 卡号左增
29 | - 卡号右增
30 | - 卡号左减
31 | - 卡号右减
32 | - 关闭动作
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/apprts/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | - Slot 1
6 | - Slot 2
7 | - Slot 3
8 | - Slot 4
9 | - Slot 5
10 | - Slot 6
11 | - Slot 7
12 | - Slot 8
13 |
14 |
15 |
16 |
17 | - Close
18 | - UL
19 | - 1K
20 | - 4K
21 | - Detection
22 |
23 |
24 |
25 |
26 | - Change Slot
27 | - Random UID
28 | - UID Left increase
29 | - UID right increase
30 | - UID Left sub
31 | - UID right sub
32 | - Close
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/apprts/src/main/res/values/tag_type_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 | Unknown
10 | MIFARE Classic, Unknown
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | google()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:7.1.2'
9 | classpath('com.github.dcendents:android-maven-gradle-plugin:1.5')
10 | }
11 | }
12 |
13 | allprojects {
14 | repositories {
15 | jcenter()
16 | google()
17 | maven { url 'https://jitpack.io' }
18 | }
19 | }
--------------------------------------------------------------------------------
/githubsrc/PN532x173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/PN532x173.png
--------------------------------------------------------------------------------
/githubsrc/acr122ux173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/acr122ux173.png
--------------------------------------------------------------------------------
/githubsrc/chameleonx173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/chameleonx173.png
--------------------------------------------------------------------------------
/githubsrc/phone_nfcx173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/phone_nfcx173.png
--------------------------------------------------------------------------------
/githubsrc/rdv4x173.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/rdv4x173.png
--------------------------------------------------------------------------------
/githubsrc/rfidx100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/githubsrc/rfidx100.png
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.daemon=true
10 | org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
11 | org.gradle.parallel=true
12 | org.gradle.configureondemand=true
13 | android.useAndroidX=true
14 | android.enableJetifier=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Oct 23 15:04:20 CST 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
7 |
--------------------------------------------------------------------------------
/libcml/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | defaultConfig {
7 | minSdkVersion 19
8 | targetSdkVersion 33
9 | }
10 |
11 | buildTypes {
12 | release {
13 | minifyEnabled false
14 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
15 | }
16 | }
17 | }
18 |
19 | dependencies {
20 | implementation fileTree(dir: 'libs', include: ['*.jar'])
21 |
22 | implementation 'com.github.felHR85:UsbSerial:6.1.0'
23 |
24 | implementation project(path: ':libmfkey')
25 | implementation project(path: ':libtag')
26 |
27 | implementation project(path: ':libutils')
28 | implementation project(path: ':libcom')
29 |
30 | implementation 'androidx.appcompat:appcompat:1.1.0'
31 | }
32 |
--------------------------------------------------------------------------------
/libcml/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libcml/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/ChameleonCMDSet.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | public enum ChameleonCMDSet {
4 | HELP,
5 | GET_VERSION,
6 | SET_CONFIG,
7 | QUERY_CONFIG,
8 | QUERY_UID,
9 | SET_UID,
10 | QUERY_READONLY,
11 | SET_READONLY,
12 | UPLOAD_XMODEM,
13 | DOWNLOAD_XMODEM,
14 | RESET_DEVICE,
15 | GET_MEMORY_SIZE,
16 | GET_UID_SIZE,
17 | GET_ACTIVE_SLOT,
18 | SET_ACTIVE_SLOT,
19 | GET_BUTTON_CLICK,
20 | SET_BUTTON_CLICK,
21 | CLEAR_ACTIVE_SLOT,
22 | GET_RSSI_VOLTAGE,
23 | UPLOAD_ENCRYPTED,
24 | DETECTION,
25 | KEYAUTH,
26 | SETKEY,
27 | GENKEY,
28 | }
29 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/ChameleonClick.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | public interface ChameleonClick {
4 | String CLICK_CLOSED = "CLOSED";
5 | String CLICK_RANDOM_UID = "RANDOM_UID";
6 | String CLICK_UID_LEFT_INCREMENT = "UID_LEFT_INCREMENT";
7 | String CLICK_UID_RIGHT_INCREMENT = "UID_RIGHT_INCREMENT";
8 | String CLICK_UID_LEFT_DECREMENT = "UID_LEFT_DECREMENT";
9 | String CLICK_UID_RIGHT_DECREMENT = "UID_RIGHT_DECREMENT";
10 | String CLICK_SWITCHCARD = "SWITCHCARD";
11 | }
12 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/ChameleonSlot.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | public interface ChameleonSlot {
4 | String STATE_CLOSED = "CLOSED";
5 | String STATE_UL = "MF_ULTRALIGHT";
6 | String STATE_1K = "MF_CLASSIC_1K";
7 | String STATE_4K = "MF_CLASSIC_4K";
8 | String STATE_DETECTION = "MF_DETECTION";
9 | }
10 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/ChameleonType.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | public enum ChameleonType {
4 | /*
5 | * 变色龙有版本的区别,分别,G 和 V版本!
6 | * 版本不同命令也不同!
7 | * */
8 | REVE,
9 | REVG
10 | }
11 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/IChameleonExecutor.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | import com.proxgrind.com.Communication;
4 |
5 | import java.io.IOException;
6 |
7 | /**
8 | * 接口,定义变色龙的执行器的功能!
9 | *
10 | * @author DXL
11 | */
12 | public interface IChameleonExecutor {
13 | boolean initExecutor(Communication com);
14 |
15 | byte[] requestChameleon(String at, int timeout, boolean xmodemMode);
16 |
17 | byte[] requestChameleon(int timeout, int length);
18 |
19 | void requestChameleon(String at) throws IOException;
20 |
21 | Communication getCom();
22 |
23 | int clear(int timeout);
24 | }
25 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/defined/ResultCallback.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.defined;
2 |
3 | public interface ResultCallback {
4 | void onSuccess(S s);
5 |
6 | void onFaild(F f);
7 | }
8 |
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/javabean/DetectionDatas.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.javabean;
2 |
3 | import cn.dxl.mfkey.Nonce32;
4 |
5 | public class DetectionDatas {
6 | //数据对应的UID
7 | private int uid;
8 | //数据对应的块
9 | private int block;
10 | //密钥类型! 0 -> A | 1 -> B | -1 -> ERROR
11 | private int type;
12 | //数据对应的通信数据!
13 | private Nonce32 nonce32;
14 |
15 | public int getUid() {
16 | return uid;
17 | }
18 |
19 | public void setUid(int uid) {
20 | this.uid = uid;
21 | }
22 |
23 | public int getBlock() {
24 | return block;
25 | }
26 |
27 | public void setBlock(int block) {
28 | this.block = block;
29 | }
30 |
31 | public Nonce32 getNonce32() {
32 | return nonce32;
33 | }
34 |
35 | public void setNonce32(Nonce32 nonce32) {
36 | this.nonce32 = nonce32;
37 | }
38 |
39 | public int getType() {
40 | return type;
41 | }
42 |
43 | public void setType(int type) {
44 | this.type = type;
45 | }
46 | }
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/utils/KeyComparer.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.utils;
2 |
3 | import android.os.Build;
4 |
5 | import java.util.Comparator;
6 |
7 | import cn.rfidresearchgroup.chameleon.javabean.DetectionDatas;
8 |
9 | public class KeyComparer implements Comparator {
10 | @Override
11 | public int compare(DetectionDatas x, DetectionDatas y) {
12 | //simply
13 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
14 | return Integer.compare(x.getBlock(), y.getBlock());
15 | } else {
16 | return Integer.valueOf(x.getBlock()).compareTo(y.getBlock());
17 | }
18 | }
19 | }
--------------------------------------------------------------------------------
/libcml/src/main/java/cn/rfidresearchgroup/chameleon/xmodem/XModem1024.java:
--------------------------------------------------------------------------------
1 | package cn.rfidresearchgroup.chameleon.xmodem;
2 |
3 | import java.io.IOException;
4 | import java.io.InputStream;
5 | import java.io.OutputStream;
6 |
7 | public class XModem1024 extends AbstractXModem {
8 |
9 | //起始头!
10 | private byte STX = 0x02;
11 |
12 | public XModem1024(InputStream input, OutputStream output) {
13 | super(input, output);
14 | }
15 |
16 | @Override
17 | public boolean send(InputStream sources) throws IOException {
18 | return false;
19 | }
20 |
21 | @Override
22 | public boolean recv(OutputStream target) throws IOException {
23 | return false;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/libcml/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | chameleon
3 |
4 |
--------------------------------------------------------------------------------
/libcom/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | defaultConfig {
7 | minSdkVersion 19
8 | targetSdkVersion 33
9 | }
10 |
11 | buildTypes {
12 | release {
13 | minifyEnabled false
14 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
15 | }
16 | }
17 |
18 | }
19 |
20 | dependencies {
21 | implementation fileTree(dir: 'libs', include: ['*.jar'])
22 | implementation 'com.github.felHR85:UsbSerial:6.1.0'
23 | implementation 'androidx.annotation:annotation:1.1.0'
24 | }
25 |
--------------------------------------------------------------------------------
/libcom/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libcom/consumer-rules.pro
--------------------------------------------------------------------------------
/libcom/namespace.txt:
--------------------------------------------------------------------------------
1 | DXL.ASL.COM
--------------------------------------------------------------------------------
/libcom/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libcom/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/com/Communication.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.com;
2 |
3 | import java.io.InputStream;
4 | import java.io.OutputStream;
5 | import java.io.Serializable;
6 |
7 | /**
8 | * author DXL
9 | *
10 | * @version 1.0
11 | */
12 | public interface Communication extends Serializable {
13 | /**
14 | * Get OutputStream implement!
15 | */
16 | OutputStream getOutput();
17 |
18 | /**
19 | * Get InputStream implement!
20 | */
21 | InputStream getInput();
22 | }
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/com/DevCallback.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.com;
2 |
3 | import java.io.Serializable;
4 |
5 | public interface DevCallback extends Serializable {
6 | //新设备发现回调
7 | void onAttach(T dev);
8 |
9 | //设备移除回调
10 | void onDetach(T dev);
11 | }
12 |
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/com/DriverInterface.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.com;
2 |
3 | /*
4 | * 驱动程序类
5 | * 泛型1 -> 设备实体类
6 | * 泛型2 -> 适配器类
7 | */
8 | public interface DriverInterface extends Communication {
9 | //注册广播之类的事件
10 | void register(DevCallback callback);
11 |
12 | //链接到设备
13 | boolean connect(D t);
14 |
15 | //得到当前的驱动程序适配器类
16 | A getAdapter();
17 |
18 | //得到当前的驱动程序的设备类
19 | D getDevice();
20 |
21 | //断开与设备的链接(在某些设备上不一定是立刻生效的)
22 | void disconect();
23 |
24 | //解注册广播之类的
25 | void unregister();
26 | }
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/com/SppNonBlock.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.com;
2 |
3 | import android.annotation.SuppressLint;
4 |
5 | import java.io.InputStream;
6 | import java.io.OutputStream;
7 |
8 | /**
9 | * Created by DXL on 2017/8/21.
10 | */
11 | public class SppNonBlock extends AbsBluetoothSpp {
12 | private static final Object LOCK = new Object();
13 | @SuppressLint("StaticFieldLeak")
14 | private static SppNonBlock bluetoothSpp = null;
15 |
16 | //单例模式因此需要将此构造方法私有化
17 | private SppNonBlock() { /*can't using this constructor*/ }
18 |
19 | public static SppNonBlock get() {
20 | synchronized (LOCK) {
21 | if (bluetoothSpp == null) {
22 | //在同步块里建立实例
23 | bluetoothSpp = new SppNonBlock();
24 | }
25 | }
26 | return bluetoothSpp;
27 | }
28 |
29 | @Override
30 | public OutputStream getOutput() {
31 | return outputStream;
32 | }
33 |
34 | @Override
35 | public InputStream getInput() {
36 | return inputStream;
37 | }
38 | }
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/com/UsbBulkTransfer.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.com;
2 |
3 | /**
4 | * 通用USB Bulk传输实现!
5 | *
6 | * @author dxl
7 | * @version 1.0
8 | */
9 | public class UsbBulkTransfer extends AbsUsbBulkTransfer {
10 |
11 | private static UsbBulkTransfer transfer = new UsbBulkTransfer();
12 |
13 | public static UsbBulkTransfer getTransfer() {
14 | return transfer;
15 | }
16 |
17 | @Override
18 | public boolean isRawDevice(int producetId, int ventorId) {
19 | return true;
20 | }
21 |
22 | @Override
23 | public String getDeviceDiscoveryAction() {
24 | return "cn.rrg.com.UniversalBulkTransfer";
25 | }
26 |
27 | @Override
28 | public String getDeviceNameOnFound() {
29 | return "PN53X";
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/libcom/src/main/java/com/proxgrind/devices/EmptyDeivce.java:
--------------------------------------------------------------------------------
1 | package com.proxgrind.devices;
2 |
3 | import com.proxgrind.com.Communication;
4 | import com.proxgrind.com.DeviceChecker;
5 |
6 | import java.io.IOException;
7 |
8 | public class EmptyDeivce extends DeviceChecker {
9 |
10 | public EmptyDeivce(Communication communication) {
11 | super(communication);
12 | }
13 |
14 | @Override
15 | protected boolean checkDevice() throws IOException {
16 | return true;
17 | }
18 |
19 |
20 | @Override
21 | public void close() throws IOException {
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/libcom/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | commapping
3 |
4 |
--------------------------------------------------------------------------------
/libcrapto1/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | defaultConfig {
7 | minSdkVersion 19
8 | targetSdkVersion 33
9 | externalNativeBuild {
10 | cmake {
11 | arguments '-DANDROID_STL=c++_static'
12 | abiFilters "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
13 | }
14 | //abiFilters "armeabi"
15 | /*abiFilters "arm64-v8a"*/
16 | /*abiFilters "x86_64"*/
17 | /*abiFilters "arm64-v8a"
18 | abiFilters "mips"
19 | abiFilters "mips64"
20 | abiFilters "x86"
21 | abiFilters "x86_64"*/
22 | }
23 | }
24 | externalNativeBuild {
25 | cmake {
26 | version '3.10.2'
27 | path 'src/main/cpp/CMakeLists.txt'
28 | }
29 | }
30 |
31 | buildTypes {
32 | release {
33 | minifyEnabled false
34 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
35 | }
36 | }
37 | }
--------------------------------------------------------------------------------
/libcrapto1/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libcrapto1/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/libcrapto1/src/main/cpp/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #需要的最cmake版本
2 | cmake_minimum_required(VERSION 3.4.1)
3 |
4 | #进行库(动态)的添加,在之后的参数中引入cpp/c文件
5 | add_library(
6 | crapto1 SHARED
7 | crapto1.c
8 | crypto1.c
9 | main.c)
10 |
11 | #进行头文件的添加!
12 | target_include_directories(crapto1 PRIVATE
13 | ${CMAKE_CURRENT_SOURCE_DIR}/include)
14 |
15 | #进行最终动态库的链接!
16 | target_link_libraries(
17 | crapto1
18 | android
19 | log)
--------------------------------------------------------------------------------
/libcrapto1/src/main/cpp/include/crypto1.h:
--------------------------------------------------------------------------------
1 | //---------------------------------------------------------------------------
2 | #ifndef crypto1H
3 | #define crypto1H
4 | //---------------------------------------------------------------------------
5 | #include "crapto1.h"
6 | #include
7 |
8 | struct Crypto1State *crypto1_create(uint64_t key);
9 |
10 | void crypto1_destroy(struct Crypto1State *state);
11 |
12 | void crypto1_get_lfsr(struct Crypto1State *state, uint64_t *lfsr);
13 |
14 | unsigned int crypto1_word(struct Crypto1State *s, unsigned int in_word, int fb);
15 |
16 | unsigned int prng_successor(unsigned int x, unsigned int n);
17 |
18 | #endif
19 |
20 |
--------------------------------------------------------------------------------
/libcrapto1/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Crapto1
3 |
4 |
--------------------------------------------------------------------------------
/libflasher/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libflasher/consumer-rules.pro
--------------------------------------------------------------------------------
/libflasher/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libflasher/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/client/mifare/mad.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Copyright (C) 2019 Merlok
3 | //
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 | // at your option, any later version. See the LICENSE.txt file for the text of
6 | // the license.
7 | //-----------------------------------------------------------------------------
8 | // MIFARE Application Directory (MAD) functions
9 | //-----------------------------------------------------------------------------
10 |
11 | #ifndef _MAD_H_
12 | #define _MAD_H_
13 |
14 | #include "common.h"
15 |
16 | typedef struct {
17 | uint16_t AID;
18 | const char *Description;
19 | } madAIDDescr;
20 |
21 | int MADCheck(uint8_t *sector0, uint8_t *sector10, bool verbose, bool *haveMAD2);
22 | int MADDecode(uint8_t *sector0, uint8_t *sector10, uint16_t *mad, size_t *madlen);
23 | int MAD1DecodeAndPrint(uint8_t *sector, bool verbose, bool *haveMAD2);
24 | int MAD2DecodeAndPrint(uint8_t *sector, bool verbose);
25 |
26 |
27 | #endif // _MAD_H_
28 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/client/mifare/mfkey.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Merlok - June 2011
3 | // Roel - Dec 2009
4 | // Unknown author
5 | //
6 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
7 | // at your option, any later version. See the LICENSE.txt file for the text of
8 | // the license.
9 | //-----------------------------------------------------------------------------
10 | // MIFARE Darkside hack
11 | //-----------------------------------------------------------------------------
12 |
13 | #ifndef MFKEY_H
14 | #define MFKEY_H
15 |
16 | #include "common.h"
17 | #include "mifare.h"
18 |
19 | uint32_t nonce2key(uint32_t uid, uint32_t nt, uint32_t nr, uint32_t ar, uint64_t par_info, uint64_t ks_info, uint64_t **keys);
20 | bool mfkey32(nonces_t *data, uint64_t *outputkey);
21 | bool mfkey32_moebius(nonces_t *data, uint64_t *outputkey);
22 | int mfkey64(nonces_t *data, uint64_t *outputkey);
23 |
24 | int compare_uint64(const void *a, const void *b);
25 | uint32_t intersection(uint64_t *listA, uint64_t *listB);
26 |
27 | #endif
28 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/client/uart/README.md:
--------------------------------------------------------------------------------
1 | # uart
2 |
3 | This contains functionality for talking to UART/Serial devices on different platforms. The official client will build either `uart_posix.c` and `uart_win32.c`. Build targets for these files are contained in `client/Makefile`.
4 |
5 | If you want to implement support for other platforms, you need to implement the methods provided in `uart.h`.
6 |
7 | ## Implementing a new driver
8 |
9 | Each driver is called with a string, typically containing a path or other reference to a serial port on the host. The methods outlined in `uart.h` need to be implemented.
10 |
11 | The hardware uses `common/usb_cdc.c` to implement a USB CDC endpoint exposed by the Atmel MCU.
12 |
13 |
14 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/common/bucketsort.h:
--------------------------------------------------------------------------------
1 | #ifndef BUCKETSORT_H__
2 | #define BUCKETSORT_H__
3 |
4 | #include "common.h"
5 |
6 | typedef struct bucket {
7 | uint32_t *head;
8 | uint32_t *bp;
9 | } bucket_t;
10 |
11 | typedef bucket_t bucket_array_t[2][0x100];
12 |
13 | typedef struct bucket_info {
14 | struct {
15 | uint32_t *head, *tail;
16 | } bucket_info[2][0x100];
17 | uint32_t numbuckets;
18 | } bucket_info_t;
19 |
20 | void bucket_sort_intersect(uint32_t *const estart, uint32_t *const estop,
21 | uint32_t *const ostart, uint32_t *const ostop,
22 | bucket_info_t *bucket_info, bucket_array_t bucket);
23 |
24 | #endif
25 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/common/crc32.c:
--------------------------------------------------------------------------------
1 | #include "crc32.h"
2 |
3 | #define htole32(x) (x)
4 | #define CRC32_PRESET 0xFFFFFFFF
5 |
6 | static void crc32_byte(uint32_t *crc, const uint8_t value);
7 |
8 | static void crc32_byte(uint32_t *crc, const uint8_t value) {
9 | /* x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 */
10 | const uint32_t poly = 0xEDB88320;
11 |
12 | *crc ^= value;
13 | for (int current_bit = 7; current_bit >= 0; current_bit--) {
14 | int bit_out = (*crc) & 0x00000001;
15 | *crc >>= 1;
16 | if (bit_out)
17 | *crc ^= poly;
18 | }
19 | }
20 |
21 | void crc32_ex(const uint8_t *data, const size_t len, uint8_t *crc) {
22 | uint32_t desfire_crc = CRC32_PRESET;
23 | for (size_t i = 0; i < len; i++) {
24 | crc32_byte(&desfire_crc, data[i]);
25 | }
26 |
27 | *((uint32_t *)(crc)) = htole32(desfire_crc);
28 | }
29 |
30 | void crc32_append(uint8_t *data, const size_t len) {
31 | crc32_ex(data, len, data + len);
32 | }
33 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/common/crc32.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 | // at your option, any later version. See the LICENSE.txt file for the text of
4 | // the license.
5 | //-----------------------------------------------------------------------------
6 | // CRC32
7 | //-----------------------------------------------------------------------------
8 |
9 | #ifndef __CRC32_H
10 | #define __CRC32_H
11 |
12 | #include "common.h"
13 |
14 | void crc32_ex(const uint8_t *data, const size_t len, uint8_t *crc);
15 | void crc32_append(uint8_t *data, const size_t len);
16 |
17 | #endif
18 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/common/crc64.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 | // at your option, any later version. See the LICENSE.txt file for the text of
4 | // the license.
5 | //-----------------------------------------------------------------------------
6 | // CRC64 ECMA
7 | //-----------------------------------------------------------------------------
8 |
9 | #ifndef __CRC64_H
10 | #define __CRC64_H
11 |
12 | #include "common.h"
13 |
14 | void crc64(const uint8_t *data, const size_t len, uint64_t *crc) ;
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/common/util_posix.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Copyright (C) 2010 iZsh
3 | //
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 | // at your option, any later version. See the LICENSE.txt file for the text of
6 | // the license.
7 | //-----------------------------------------------------------------------------
8 | // utilities requiring Posix library functions
9 | //-----------------------------------------------------------------------------
10 |
11 | #ifndef UTIL_POSIX_H__
12 | #define UTIL_POSIX_H__
13 |
14 | #include "common.h"
15 |
16 | #ifdef _WIN32
17 | # include
18 | # define sleep(n) Sleep(1000 *(n))
19 | # define msleep(n) Sleep((n))
20 | #else
21 | void msleep(uint32_t n); // sleep n milliseconds
22 | #endif // _WIN32
23 |
24 | uint64_t msclock(void); // a milliseconds clock
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/include/ansi.h:
--------------------------------------------------------------------------------
1 | #ifndef __ANSI_H
2 | #define __ANSI_H
3 |
4 | #define AEND "\x1b[0m "
5 |
6 | #define _BLUE_(s) "\x1b[34m" s AEND
7 | #define _RED_(s) "\x1b[31m" s AEND
8 | #define _GREEN_(s) "\x1b[32m" s AEND
9 | #define _YELLOW_(s) "\x1b[33m" s AEND
10 | #define _MAGENTA_(s) "\x1b[35m" s AEND
11 | #define _CYAN_(s) "\x1b[36m" s AEND
12 | #define _WHITE_(s) "\x1b[37m" s AEND
13 |
14 | #endif
15 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/include/legic.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // (c) 2016 Iceman
3 | //
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 | // at your option, any later version. See the LICENSE.txt file for the text of
6 | // the license.
7 | //-----------------------------------------------------------------------------
8 | // LEGIC type prototyping
9 | //-----------------------------------------------------------------------------
10 |
11 | #ifndef _LEGIC_H_
12 | #define _LEGIC_H_
13 |
14 | #include "common.h"
15 |
16 | //-----------------------------------------------------------------------------
17 | // LEGIC
18 | //-----------------------------------------------------------------------------
19 | typedef struct {
20 | uint8_t uid[4];
21 | uint32_t tagtype;
22 | uint8_t cmdsize;
23 | uint8_t addrsize;
24 | uint16_t cardsize;
25 | } legic_card_select_t;
26 |
27 | #endif // _LEGIC_H_
28 |
--------------------------------------------------------------------------------
/libflasher/src/main/cpp/include/usart_defs.h:
--------------------------------------------------------------------------------
1 | #ifndef __USART_DEFS_H
2 | #define __USART_DEFS_H
3 |
4 | //#define USART_BAUD_RATE 9600
5 | #define USART_BAUD_RATE 115200
6 | // BT HC-06 physical layer runs at 128kbps
7 | // so it's possible to gain a little bit by using 230400
8 | // with some risk to overflow its internal buffers:
9 | //#define USART_BAUD_RATE 230400
10 |
11 | #define USART_BUFFLEN 512
12 | #define USART_FIFOLEN (2*USART_BUFFLEN)
13 |
14 | // Higher baudrates are pointless, only increasing overflow risk
15 |
16 | #define USART_PARITY 'N'
17 |
18 | #if defined (_WIN32)
19 | #define SERIAL_PORT_EXAMPLE_H "com3"
20 | #elif defined(__APPLE__)
21 | #define SERIAL_PORT_EXAMPLE_H "/dev/tty.usbmodemiceman1"
22 | #else
23 | #define SERIAL_PORT_EXAMPLE_H "/dev/ttyACM0"
24 | #endif
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/libflasher/src/main/java/com/rfidresearchgroup/pm3flasher/Target.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.pm3flasher;
2 |
3 | public enum Target {
4 | BOOT, CLIENT
5 | }
6 |
--------------------------------------------------------------------------------
/libmfkey/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/libmfkey/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libmfkey/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/libmfkey/src/main/cpp/bucketsort.h:
--------------------------------------------------------------------------------
1 | #ifndef BUCKETSORT_H__
2 | #define BUCKETSORT_H__
3 |
4 | #include
5 | #include
6 |
7 | typedef struct bucket {
8 | uint32_t *head;
9 | uint32_t *bp;
10 | } bucket_t;
11 |
12 | typedef bucket_t bucket_array_t[2][0x100];
13 |
14 | typedef struct bucket_info {
15 | struct {
16 | uint32_t *head, *tail;
17 | } bucket_info[2][0x100];
18 | uint32_t numbuckets;
19 | } bucket_info_t;
20 |
21 | void bucket_sort_intersect(uint32_t* const estart, uint32_t* const estop,
22 | uint32_t* const ostart, uint32_t* const ostop,
23 | bucket_info_t *bucket_info, bucket_array_t bucket);
24 | #endif
--------------------------------------------------------------------------------
/libmfkey/src/main/cpp/common.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Hagen Fritsch - June 2010
3 | //
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 | // at your option, any later version. See the LICENSE.txt file for the text of
6 | // the license.
7 |
8 | //-----------------------------------------------------------------------------
9 | // Interlib Definitions
10 | //-----------------------------------------------------------------------------
11 |
12 | #ifndef __COMMON_H
13 | #define __COMMON_H
14 |
15 | #include
16 | #include
17 | #include
18 | #include
19 | typedef unsigned char byte_t;
20 |
21 | #ifndef MIN
22 | # define MIN(a, b) (((a) < (b)) ? (a) : (b))
23 | #endif
24 | #ifndef MAX
25 | # define MAX(a, b) (((a) > (b)) ? (a) : (b))
26 | #endif
27 | #ifndef ABS
28 | # define ABS(a) ( ((a)<0) ? -(a) : (a) )
29 | #endif
30 |
31 |
32 | #define RAMFUNC __attribute((long_call, section(".ramfunc")))
33 |
34 | #endif
35 |
--------------------------------------------------------------------------------
/libmfkey/src/main/cpp/tools.h:
--------------------------------------------------------------------------------
1 | //
2 | // Created by dell on 2017/9/1.
3 | //
4 |
5 | #ifndef DXL_TOOLS_H
6 | #define DXL_TOOLS_H
7 |
8 | #include
9 | #include
10 | #include
11 | #include
12 |
13 | //JNI LOG
14 | #define TAG "DXL"
15 | #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,TAG,__VA_ARGS__)
16 | #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)
17 | #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__)
18 | #define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG,__VA_ARGS__)
19 | #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
20 |
21 | //全局的环境变量定义
22 | JavaVM *g_JavaVM;
23 |
24 | //线程环境指针获取函数
25 | JNIEnv *getJniEnv();
26 |
27 | //子线程释放函数,必须是native层创建的线程才可以调用
28 | void deatchThread();
29 |
30 | typedef struct {
31 | char **cmd;
32 | int len;
33 | } CMD;
34 |
35 | //命令行解析函数
36 | CMD *parse_command_line(const char *commandStr);
37 |
38 | //解析结果释放函数!
39 | void free_command_line(CMD *);
40 |
41 | //重置getopt函数
42 | void recovery_getopt_opt();
43 |
44 | #endif //DXL_TOOLS_H
--------------------------------------------------------------------------------
/libmfkey/src/main/cpp/util_posix.h:
--------------------------------------------------------------------------------
1 | //-----------------------------------------------------------------------------
2 | // Copyright (C) 2010 iZsh
3 | //
4 | // This code is licensed to you under the terms of the GNU GPL, version 2 or,
5 | // at your option, any later version. See the LICENSE.txt file for the text of
6 | // the license.
7 | //-----------------------------------------------------------------------------
8 | // utilities requiring Posix library functions
9 | //-----------------------------------------------------------------------------
10 |
11 | #ifndef UTIL_POSIX_H__
12 | #define UTIL_POSIX_H__
13 |
14 | #include
15 |
16 | #ifdef _WIN32
17 | # include
18 | # define sleep(n) Sleep(1000 *(n))
19 | # define msleep(n) Sleep((n))
20 | #else
21 | extern void msleep(uint32_t n); // sleep n milliseconds
22 | #endif // _WIN32
23 |
24 | extern uint64_t msclock(); // a milliseconds clock
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/MfKey32.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | public interface MfKey32 {
4 | /**
5 | * 单独实现一个原生函数,直接做计算操作,不走控制台实现!
6 | *
7 | * @return key
8 | */
9 | String decrypt4IntParams(
10 | int uid, /* 计算的UID,整形类型 */
11 | int nt0,
12 | int nr0,
13 | int ar0,
14 | int nt1,
15 | int nr1,
16 | int ar1
17 | );
18 |
19 | /*
20 | * 参数重写,传入的参数进行重新转换之类的!
21 | * */
22 | String decrypt4StrParams(
23 | String uid, /* 计算的UID,16HEX字符类型 */
24 | String nt0,
25 | String nr0,
26 | String ar0,
27 | String nt1,
28 | String nr1,
29 | String ar1
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/NativeMfKey32.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | public class NativeMfKey32 implements MfKey32 {
4 |
5 | static {
6 | System.loadLibrary("mfkey32");
7 | }
8 |
9 | /**
10 | * 单独实现一个原生函数,直接做计算操作,不走控制台实现!
11 | *
12 | * @return key
13 | */
14 | public native String decrypt4IntParams(
15 | int uid, /* 计算的UID,整形类型 */
16 | int nt0,
17 | int nr0,
18 | int ar0,
19 | int nt1,
20 | int nr1,
21 | int ar1
22 | );
23 |
24 | /*
25 | * 参数重写,传入的参数进行重新转换之类的!
26 | * */
27 | public native String decrypt4StrParams(
28 | String uid, /* 计算的UID,16HEX字符类型 */
29 | String nt0,
30 | String nr0,
31 | String ar0,
32 | String nt1,
33 | String nr1,
34 | String ar1
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/NativeMfKey32V2.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | public class NativeMfKey32V2 implements MfKey32 {
4 |
5 | static {
6 | System.loadLibrary("mfkey32v2");
7 | }
8 |
9 | /**
10 | * 单独实现一个原生函数,直接做计算操作,不走控制台实现!
11 | *
12 | * @return key
13 | */
14 | public native String decrypt4IntParams(
15 | int uid, /* 计算的UID,整形类型 */
16 | int nt0,
17 | int nr0,
18 | int ar0,
19 | int nt1,
20 | int nr1,
21 | int ar1
22 | );
23 |
24 | /*
25 | * 参数重写,传入的参数进行重新转换之类的!
26 | * */
27 | public native String decrypt4StrParams(
28 | String uid, /* 计算的UID,16HEX字符类型 */
29 | String nt0,
30 | String nr0,
31 | String ar0,
32 | String nt1,
33 | String nr1,
34 | String ar1
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/NativeMfKey64.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | public class NativeMfKey64 {
4 | static {
5 | System.loadLibrary("mfkey64");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/Nonce32.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | /**
4 | * 32长度随机数恢复!
5 | * 部分功能链式调用!
6 | *
7 | * @author DXL
8 | */
9 | public class Nonce32 {
10 | private int nt;
11 | private int nr;
12 | private int ar;
13 |
14 | public Nonce32() {
15 | //空构造!
16 | }
17 |
18 | public Nonce32(int nt, int nr, int ar) {
19 | this.nt = nt;
20 | this.nr = nr;
21 | this.ar = ar;
22 | }
23 |
24 | public int getNt() {
25 | return nt;
26 | }
27 |
28 | public Nonce32 setNt(int nt) {
29 | this.nt = nt;
30 | return this;
31 | }
32 |
33 | public int getNr() {
34 | return nr;
35 | }
36 |
37 | public Nonce32 setNr(int nr) {
38 | this.nr = nr;
39 | return this;
40 | }
41 |
42 | public int getAr() {
43 | return ar;
44 | }
45 |
46 | public Nonce32 setAr(int ar) {
47 | this.ar = ar;
48 | return this;
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/libmfkey/src/main/java/cn/dxl/mfkey/Nonce64.java:
--------------------------------------------------------------------------------
1 | package cn.dxl.mfkey;
2 |
3 | /**
4 | * @author DXL
5 | * Nonce64类比Nonce32类多了几个属性变量,
6 | * 其他的一致相同,此时可以继承复用!
7 | */
8 | public class Nonce64 extends Nonce32 {
9 | private int at;
10 | private int[] enc;
11 |
12 | public Nonce64(int nt, int nr, int ar, int at) {
13 | super(nt, nr, ar);
14 | this.at = at;
15 | }
16 |
17 | public int getAt() {
18 | return at;
19 | }
20 |
21 | public Nonce64 setAt(int at) {
22 | this.at = at;
23 | return this;
24 | }
25 |
26 | public int[] getEnc() {
27 | return enc;
28 | }
29 |
30 | public Nonce64 setEnc(int[] enc) {
31 | this.enc = enc;
32 | return this;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/libmfkey/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | mfkey
3 |
4 |
--------------------------------------------------------------------------------
/libnfc/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libnfc/consumer-rules.pro
--------------------------------------------------------------------------------
/libnfc/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libnfc/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #########################################################
2 | # #
3 | # Main build script #
4 | # @author DXL #
5 | # @date 2019/04/22 #
6 | # #
7 | #########################################################
8 |
9 | #需要的最cmake版本
10 | cmake_minimum_required(VERSION 3.4.1)
11 |
12 | #提供啰嗦(详细)的日志输出
13 | set(CMAKE_VERBOSE_MAKEFILE on)
14 |
15 | #设置当前的cmake路径,以当前的cmake文件所在的路径为相对路径
16 | set(lib_src_DIR ${CMAKE_CURRENT_SOURCE_DIR})
17 |
18 | #设置全局宏定义,开启NDK配置定义!
19 | add_definitions("-D__ANDROID_NDK__")
20 |
21 | #目录分级,进行子项目录添加,分别编译自身(注意编译顺序)!
22 | add_subdirectory(${lib_src_DIR}/libnfc)
23 | add_subdirectory(${lib_src_DIR}/mfoc)
24 | add_subdirectory(${lib_src_DIR}/mfclassic)
25 | add_subdirectory(${lib_src_DIR}/pn53x)
26 | add_subdirectory(${lib_src_DIR}/check)
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/check/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #添加动态库定义
2 | add_library(pn53x_prng_check SHARED
3 | crapto1.c
4 | crypto1.c
5 | check.c)
6 |
7 | #添加头文件配置
8 | target_include_directories(pn53x_prng_check PRIVATE
9 | ../libnfc/include/
10 | ${CMAKE_CURRENT_SOURCE_DIR}/)
11 |
12 | #添加动态库链接!
13 | target_link_libraries(pn53x_prng_check nfc android log)
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/libnfc/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #添加预编译宏定义参数,此次的作用是开启配置文件的引入!
2 | add_definitions(-DHAVE_CONFIG_H)
3 |
4 | #进行库(动态)的添加,在之后的参数中引入cpp/c文件
5 | add_library(nfc SHARED
6 | conf.c tools.c
7 | log.c log-printf.c
8 | chips/pn53x.c
9 | buses/uart_posix.c
10 | buses/com_uart.c
11 | drivers/pn532_uart.c
12 | drivers/acr122_usb.c
13 | drivers/pn53x_usb.c
14 | nfc.c nfc-device.c
15 | nfc-emulation.c nfc-internal.c
16 | mirror-subr.c target-subr.c
17 | iso14443-subr.c nfc-utils.c)
18 | #进行头文件的添加,注意,必须要添加上一级目录中init的头文件
19 | target_include_directories(nfc PRIVATE
20 | ${CMAKE_CURRENT_SOURCE_DIR}/buses/
21 | ${CMAKE_CURRENT_SOURCE_DIR}/chips/
22 | ${CMAKE_CURRENT_SOURCE_DIR}/drivers/
23 | ${CMAKE_CURRENT_SOURCE_DIR}/include/
24 | ${CMAKE_CURRENT_SOURCE_DIR}/include/nfc/)
25 |
26 | #进行最终动态库的链接!
27 | target_link_libraries(nfc android log)
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/libnfc/buses/com.h:
--------------------------------------------------------------------------------
1 | #ifndef __NFC_BUS_UART_H__
2 | # define __NFC_BUS_UART_H__
3 |
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 | #include
10 |
11 | bool c_open();
12 |
13 | void c_close();
14 |
15 | int c_read(uint8_t *pbtRx, size_t szRx, int timeout);
16 |
17 | int c_write(const uint8_t *pbtTx, size_t szTx, int timeout);
18 |
19 | #endif // __NFC_BUS_UART_H__
20 |
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/libnfc/include/conf.h:
--------------------------------------------------------------------------------
1 | /*-
2 | * Copyright (C) 2012 Romuald Conty
3 | *
4 | * This program is free software: you can redistribute it and/or modify it
5 | * under the terms of the GNU Lesser General Public License as published by the
6 | * Free Software Foundation, either version 3 of the License, or (at your
7 | * option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful, but WITHOUT
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 | * more details.
13 | *
14 | * You should have received a copy of the GNU Lesser General Public License
15 | * along with this program. If not, see
16 | */
17 | #include "nfc-internal.h"
18 |
19 | void conf_load(nfc_context *context);
20 |
21 |
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/libnfc/include/config.h:
--------------------------------------------------------------------------------
1 | #define PACKAGE_NAME "libnfc"
2 | #define PACKAGE_VERSION "1.7.1"
3 | //#define PACKAGE_STRING "libnfc 1.7.1"
4 | //TODO 不开启配置文件加载,改为直接指定设备名字的方式!
5 | // #define CONFFILES
6 | //开启日志打印
7 | #define LOG
8 | //导入需要的库的头文件
9 | #include
10 | //配置开启了PN532_UART
11 | #define DRIVER_PN532_UART_ENABLED
12 | //配置开启ACR122 USB
13 | #define DRIVER_ACR122_USB_ENABLED
14 | // 配置开启PN53X的支持
15 | #define DRIVER_PN53X_UART_ENABLED
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/mfclassic/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #添加动态库定义
2 | add_library(mfclassic SHARED
3 | mifare.c
4 | mfclassic.c)
5 |
6 | #添加头文件配置
7 | target_include_directories(mfclassic PRIVATE
8 | ../libnfc/include/
9 | ${CMAKE_CURRENT_SOURCE_DIR}/include)
10 |
11 | #添加动态库链接!
12 | target_link_libraries(mfclassic nfc android log)
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/mfoc/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required (VERSION 2.6)
2 |
3 | project (mfoc C)
4 |
5 | #添加动态库定义
6 | set(SOURCE_FILES
7 | crapto1.c
8 | crypto1.c
9 | nfc-utils.c
10 | mfoc.c
11 | mifare.c)
12 |
13 | #添加头文件配置
14 | include_directories(
15 | ../libnfc/include/
16 | ${CMAKE_CURRENT_SOURCE_DIR}/)
17 |
18 | set(OUTPUT_NAME lib${PROJECT_NAME}.so)
19 |
20 | add_executable(${OUTPUT_NAME} ${SOURCE_FILES})
21 |
22 | target_link_libraries(${OUTPUT_NAME} nfc)
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/mfoc/mfoc.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libnfc/src/main/cpp/mfoc/mfoc.c
--------------------------------------------------------------------------------
/libnfc/src/main/cpp/pn53x/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #添加动态库定义
2 | add_library(pn53x SHARED test.c)
3 |
4 | #添加头文件配置
5 | target_include_directories(pn53x PRIVATE
6 | ../libnfc/include/)
7 |
8 | #添加动态库链接!
9 | target_link_libraries(pn53x nfc android log)
--------------------------------------------------------------------------------
/libnfc/src/main/java/com/rfidresearchgroup/natives/PN53XTagLeaksAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.natives;
2 |
3 | import com.rfidresearchgroup.mifare.TagLeaksAdapter;
4 |
5 | public class PN53XTagLeaksAdapter implements TagLeaksAdapter {
6 |
7 | static {
8 | System.loadLibrary("pn53x_prng_check");
9 | }
10 |
11 | @Override
12 | public native boolean isDarksideSupported();
13 |
14 | @Override
15 | public native boolean isNestedSupported();
16 |
17 | @Override
18 | public native boolean isHardnestedSupported();
19 | }
20 |
--------------------------------------------------------------------------------
/libnfc/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | pn53x
3 |
4 |
--------------------------------------------------------------------------------
/libpm3/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/libpm3/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdk 29
5 |
6 | defaultConfig {
7 | minSdk 21
8 | targetSdk 29
9 | }
10 |
11 | buildTypes {
12 | release {
13 | minifyEnabled false
14 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
15 | }
16 | }
17 | compileOptions {
18 | sourceCompatibility JavaVersion.VERSION_1_8
19 | targetCompatibility JavaVersion.VERSION_1_8
20 | }
21 | }
22 |
23 | dependencies {
24 |
25 | implementation 'androidx.appcompat:appcompat:1.2.0'
26 | implementation 'com.google.android.material:material:1.3.0'
27 |
28 | }
--------------------------------------------------------------------------------
/libpm3/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libpm3/consumer-rules.pro
--------------------------------------------------------------------------------
/libpm3/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/libpm3/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/libpm3/src/main/jniLibs/arm64-v8a/libpm3rrg_cmd.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libpm3/src/main/jniLibs/arm64-v8a/libpm3rrg_cmd.so
--------------------------------------------------------------------------------
/libpm3/src/main/jniLibs/armeabi-v7a/libpm3rrg_cmd.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libpm3/src/main/jniLibs/armeabi-v7a/libpm3rrg_cmd.so
--------------------------------------------------------------------------------
/libpm3/src/main/jniLibs/x86/libpm3rrg_cmd.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libpm3/src/main/jniLibs/x86/libpm3rrg_cmd.so
--------------------------------------------------------------------------------
/libpm3/src/main/jniLibs/x86_64/libpm3rrg_cmd.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libpm3/src/main/jniLibs/x86_64/libpm3rrg_cmd.so
--------------------------------------------------------------------------------
/libtag/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | defaultConfig {
7 | minSdkVersion 19
8 | targetSdkVersion 33
9 |
10 | consumerProguardFiles 'consumer-rules.pro'
11 | }
12 |
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 | }
20 |
21 | dependencies {
22 | implementation fileTree(dir: 'libs', include: ['*.jar'])
23 | implementation 'androidx.appcompat:appcompat:1.1.0'
24 | }
25 |
--------------------------------------------------------------------------------
/libtag/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libtag/consumer-rules.pro
--------------------------------------------------------------------------------
/libtag/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libtag/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/libtag/src/main/java/com/rfidresearchgroup/mifare/HardNestedAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.mifare;
2 |
3 | public interface HardNestedAdapter extends TestTaskAdapter {
4 | /**
5 | * 以一个已知秘钥测试其他的秘钥,使用HardNested漏洞!
6 | *
7 | * @param srcSector 已知的秘钥的扇区
8 | * @param srcKey 已知的秘钥
9 | * @param isKeyA 已知的秘钥的类型
10 | * @param targetSector 欲测试的扇区
11 | * @param getKeyA 欲获得的扇区的秘钥类型
12 | */
13 | byte[] prepare(int srcSector, byte[] srcKey, boolean isKeyA, int targetSector, boolean getKeyA);
14 | }
15 |
--------------------------------------------------------------------------------
/libtag/src/main/java/com/rfidresearchgroup/mifare/NestedAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.mifare;
2 |
3 | public interface NestedAdapter extends TestTaskAdapter {
4 | /**
5 | * 以一个已知秘钥测试其他的秘钥!
6 | *
7 | * @param srcSector 已知的秘钥的扇区
8 | * @param srcKey 已知的秘钥
9 | * @param isKeyA 已知的秘钥的类型
10 | * @param targetSector 欲测试的扇区
11 | * @param getKeyA 欲获得的扇区的秘钥类型
12 | */
13 | void prepare(int srcSector, byte[] srcKey, boolean isKeyA, int targetSector, boolean getKeyA);
14 | }
15 |
--------------------------------------------------------------------------------
/libtag/src/main/java/com/rfidresearchgroup/mifare/PRNGAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.mifare;
2 |
3 | public interface PRNGAdapter extends TestTaskAdapter {
4 | byte[] prepare(int sector, boolean getKeyA);
5 | }
--------------------------------------------------------------------------------
/libtag/src/main/java/com/rfidresearchgroup/mifare/TagLeaksAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.mifare;
2 |
3 | import java.io.Serializable;
4 |
5 | /**
6 | * @author DXL the TagLeaksAdapter can scan a leak for tag
7 | * impl at subclass
8 | */
9 | public interface TagLeaksAdapter extends Serializable {
10 | /*
11 | * Darkside test, form a nack(4bit) recovery a key.
12 | * don't need any key.
13 | * if tag no nack response, the darkside can't wrok.
14 | * */
15 | boolean isDarksideSupported();
16 |
17 | /*
18 | * Nested test, from a available auth data pack recovery a key.
19 | * need a key
20 | * if tag no prng available, the nested can't running.
21 | * */
22 | boolean isNestedSupported();
23 |
24 | /*
25 | * Harden nested, must have a key available and powerful processors.
26 | * */
27 | boolean isHardnestedSupported();
28 | }
--------------------------------------------------------------------------------
/libtag/src/main/java/com/rfidresearchgroup/mifare/TestTaskAdapter.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.mifare;
2 |
3 | import java.io.Serializable;
4 |
5 | public interface TestTaskAdapter extends Serializable {
6 | // start work.
7 | void start();
8 |
9 | // call at start finished.
10 | void onStart();
11 |
12 | // on test progress
13 | void progress(int max, int now);
14 |
15 | // stop task and recycle source
16 | void stop();
17 |
18 | // call at stop finished.
19 | void onStop(int status);
20 |
21 | // return a key if exists.
22 | byte[] getKeys();
23 | }
24 |
--------------------------------------------------------------------------------
/libtag/src/main/res/values-zh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Mifare标签
3 |
4 |
--------------------------------------------------------------------------------
/libtag/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | mifaretag
3 |
4 |
--------------------------------------------------------------------------------
/libutils/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | defaultConfig {
7 | minSdkVersion 19
8 | targetSdkVersion 33
9 | }
10 |
11 | buildTypes {
12 | release {
13 | minifyEnabled false
14 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
15 | }
16 | }
17 |
18 | }
19 |
20 | dependencies {
21 | implementation fileTree(dir: 'libs', include: ['*.jar'])
22 | implementation 'androidx.appcompat:appcompat:1.1.0'
23 | }
24 |
--------------------------------------------------------------------------------
/libutils/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/implement/AnimationListenerImpl.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.implement;
2 |
3 | import android.view.animation.Animation;
4 |
5 | public class AnimationListenerImpl implements Animation.AnimationListener {
6 | @Override
7 | public void onAnimationStart(Animation animation) {
8 |
9 | }
10 |
11 | @Override
12 | public void onAnimationEnd(Animation animation) {
13 |
14 | }
15 |
16 | @Override
17 | public void onAnimationRepeat(Animation animation) {
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/implement/DialogOnclickListenerImpl.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.implement;
2 |
3 | import android.content.DialogInterface;
4 |
5 | public class DialogOnclickListenerImpl implements DialogInterface.OnClickListener {
6 | @Override
7 | public void onClick(DialogInterface dialogInterface, int i) {
8 |
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/implement/ItemSelectedListenerImpl.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.implement;
2 |
3 | import android.view.View;
4 | import android.widget.AdapterView;
5 |
6 | public class ItemSelectedListenerImpl
7 | implements AdapterView.OnItemSelectedListener {
8 | @Override
9 | public void onItemSelected(AdapterView> parent, View view, int position, long id) {
10 |
11 | }
12 |
13 | @Override
14 | public void onNothingSelected(AdapterView> parent) {
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/implement/OnPageChangeListenerImpl.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.implement;
2 |
3 | import androidx.viewpager.widget.ViewPager;
4 |
5 | public class OnPageChangeListenerImpl implements ViewPager.OnPageChangeListener {
6 | @Override
7 | public void onPageScrolled(int i, float v, int i1) {
8 |
9 | }
10 |
11 | @Override
12 | public void onPageSelected(int i) {
13 |
14 | }
15 |
16 | @Override
17 | public void onPageScrollStateChanged(int i) {
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/implement/PermissionCallback.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.implement;
2 |
3 | import com.rfidresearchgroup.common.util.PermissionUtil;
4 |
5 | public class PermissionCallback implements PermissionUtil.Callback {
6 | @Override
7 | public void onStartChecks(PermissionUtil util) {
8 |
9 | }
10 |
11 | @Override
12 | public void onPermissionLose(PermissionUtil util) {
13 |
14 | }
15 |
16 | @Override
17 | public void onPermissionNormal(PermissionUtil util) {
18 |
19 | }
20 |
21 | @Override
22 | public void whatPermissionLose(String per, PermissionUtil util) {
23 |
24 | }
25 |
26 | @Override
27 | public void onEndChecks() {
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/interfaces/OnTouchListener.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.interfaces;
2 |
3 | import android.view.MotionEvent;
4 |
5 | /*
6 | * 在触发时的回调!
7 | * */
8 | public interface OnTouchListener {
9 | boolean onTouch(MotionEvent event);
10 | }
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/interfaces/RegexCommon.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.interfaces;
2 |
3 | public interface RegexCommon {
4 |
5 | //邮箱匹配规则!
6 | String email = "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?";
7 | }
8 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/util/AppUtil.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.util;
2 |
3 | import android.app.Activity;
4 |
5 | import com.rfidresearchgroup.common.application.App;
6 |
7 | public class AppUtil {
8 | private static AppUtil thiz = null;
9 | private static App app;
10 |
11 | private AppUtil() {
12 | }
13 |
14 | public static AppUtil getInstance() {
15 | if (thiz == null) {
16 | thiz = new AppUtil();
17 | }
18 | return thiz;
19 | }
20 |
21 | public static void register(App app) {
22 | AppUtil.app = app;
23 | }
24 |
25 | public App getApp() {
26 | return app;
27 | }
28 |
29 | public void finishAll() {
30 | for (Activity activity : CrashUtil.activities) {
31 | activity.finish();
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/util/FragmentUtil.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.util;
2 |
3 | import android.app.Activity;
4 |
5 | import androidx.fragment.app.Fragment;
6 | import androidx.fragment.app.FragmentManager;
7 |
8 | import java.util.List;
9 |
10 | /*
11 | * 一些碎片开发使用上的工具!
12 | * */
13 | public class FragmentUtil {
14 |
15 | //隐藏所有的碎片!
16 | public static void hides(FragmentManager manager, Fragment exclude) {
17 | List fragmentList = manager.getFragments();
18 | //迭代隐藏所有的碎片!
19 | for (Fragment fragment : fragmentList)
20 | //排除指定的碎片!
21 | if (fragment != exclude)
22 | manager.beginTransaction().hide(fragment).commitAllowingStateLoss();
23 | }
24 |
25 | public static void runOnUiThread(Activity activity, Runnable runnable) {
26 | if (activity != null)
27 | activity.runOnUiThread(runnable);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/util/IOUtils.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.util;
2 |
3 | import androidx.annotation.Nullable;
4 |
5 | import java.io.Closeable;
6 | import java.io.Flushable;
7 | import java.io.IOException;
8 |
9 | public class IOUtils {
10 | public static boolean close(@Nullable Closeable closeable) {
11 | if (closeable == null) return false;
12 | try {
13 | closeable.close();
14 | return true;
15 | } catch (IOException e) {
16 | e.printStackTrace();
17 | }
18 | return false;
19 | }
20 |
21 | public static boolean flush(@Nullable Flushable flushable) {
22 | if (flushable == null) return false;
23 | try {
24 | flushable.flush();
25 | return true;
26 | } catch (IOException e) {
27 | e.printStackTrace();
28 | return false;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/util/SpinnerInitState.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.util;
2 |
3 | import android.util.SparseIntArray;
4 | import android.widget.Spinner;
5 |
6 | /*
7 | * 保存Spinner的加载状态!
8 | * */
9 | public class SpinnerInitState {
10 | //利用键值对进行第一次加载的限制!
11 | private SparseIntArray spinnerFirstState = new SparseIntArray();
12 |
13 | public boolean isNotInitialized(Spinner spinner) {
14 | if (spinnerFirstState.get(spinner.getId(), -1) == -1) {
15 | //判断到没有初始化,则设置为初始化!
16 | setInitialized(spinner);
17 | return true;
18 | }
19 | return false;
20 | }
21 |
22 | public void setNotInitialized(Spinner spinner) {
23 | if (spinnerFirstState.get(spinner.getId(), -1) != -1) {
24 | spinnerFirstState.delete(spinner.getId());
25 | }
26 | }
27 |
28 | public void setInitialized(Spinner spinner) {
29 | if (spinnerFirstState.get(spinner.getId(), -1) == -1) {
30 | spinnerFirstState.put(spinner.getId(), spinner.getId());
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/libutils/src/main/java/com/rfidresearchgroup/common/util/VibratorUtils.java:
--------------------------------------------------------------------------------
1 | package com.rfidresearchgroup.common.util;
2 |
3 | import android.content.Context;
4 | import android.os.VibrationEffect;
5 | import android.os.Vibrator;
6 |
7 | /**
8 | * 震动工具!
9 | *
10 | * @author DXL
11 | */
12 | public class VibratorUtils {
13 |
14 | //进行抖动!
15 | public static void runOneAsDelay(Context context, int delay) {
16 | Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
17 | if (vibrator != null && vibrator.hasVibrator()) { //有振动器
18 | if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
19 | VibrationEffect vibrationEffect = VibrationEffect.createOneShot(delay, VibrationEffect.DEFAULT_AMPLITUDE);
20 | vibrator.vibrate(vibrationEffect);
21 | } else {
22 | vibrator.vibrate(delay);
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/btn_selector_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/delete.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/file_directory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libutils/src/main/res/drawable/file_directory.png
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/file_file.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libutils/src/main/res/drawable/file_file.png
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/file_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libutils/src/main/res/drawable/file_icon.png
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/file_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/libutils/src/main/res/drawable/file_select.png
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/shape_bg_blue_600.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/libutils/src/main/res/drawable/shape_bg_blue_800.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/libutils/src/main/res/layout/act_crash_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/libutils/src/main/res/layout/item_dialog_single_input.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
18 |
19 |
--------------------------------------------------------------------------------
/libutils/src/main/res/layout/view_h_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
--------------------------------------------------------------------------------
/libutils/src/main/res/layout/view_v_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/libutils/src/main/res/values-en/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | common
3 | File Path Selector
4 | Cancel
5 | Confirm
6 | Up
7 | Loading.....
8 | empty dir
9 | Save
10 | Item
11 |
12 |
--------------------------------------------------------------------------------
/libutils/src/main/res/values-zh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | common
4 | 文件路径选择器
5 | 取消
6 | 确认
7 | 上一级
8 | 加载中...
9 | 空目录
10 | 保存
11 | 项
12 |
--------------------------------------------------------------------------------
/libutils/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/libutils/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | common
3 | File Path Selector
4 | Cancel
5 | Confirm
6 | Up
7 | Loading.....
8 | empty dir
9 | Save
10 | Item
11 |
12 |
--------------------------------------------------------------------------------
/libutils/src/main/res/xml/device_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
12 |
13 |
14 |
15 |
16 |
17 |
20 |
21 |
22 |
25 |
26 |
27 |
30 |
31 |
32 |
35 |
--------------------------------------------------------------------------------
/libutils/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/libutils/src/main/res/xml/nfc_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
27 |
28 | android.nfc.tech.MifareClassic
29 |
30 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':apprts', ':libcml', ':libcom', ':libnfc'
2 | include ':libflasher', ':libutils', ':libtag'
3 | include ':termux-app', ':terminal-emulator', ':terminal-view'
4 | include ':libcrapto1', ':libmfkey'
5 | include ':libpm3'
6 |
--------------------------------------------------------------------------------
/terminal-emulator/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/fornwall/lib/android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/terminal-emulator/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/terminal-emulator/src/main/java/com/termux/terminal/EmulatorDebug.java:
--------------------------------------------------------------------------------
1 | package com.termux.terminal;
2 |
3 | import android.util.Log;
4 |
5 | public final class EmulatorDebug {
6 |
7 | /** The tag to use with {@link Log}. */
8 | public static final String LOG_TAG = "termux";
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/terminal-emulator/src/main/jni/Android.mk:
--------------------------------------------------------------------------------
1 | LOCAL_PATH:= $(call my-dir)
2 | include $(CLEAR_VARS)
3 | LOCAL_MODULE:= libtermux
4 | LOCAL_SRC_FILES:= termux.c
5 | include $(BUILD_SHARED_LIBRARY)
6 |
--------------------------------------------------------------------------------
/terminal-view/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 33
5 |
6 | dependencies {
7 | implementation "androidx.annotation:annotation:1.1.0"
8 | api project(":terminal-emulator")
9 | }
10 |
11 | defaultConfig {
12 | minSdkVersion 21
13 | targetSdkVersion 33
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 | }
16 |
17 | buildTypes {
18 | release {
19 | minifyEnabled false
20 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
21 | }
22 | }
23 |
24 | compileOptions {
25 | sourceCompatibility JavaVersion.VERSION_1_8
26 | targetCompatibility JavaVersion.VERSION_1_8
27 | }
28 | }
29 |
30 | dependencies {
31 | testImplementation 'junit:junit:4.13'
32 | }
33 |
--------------------------------------------------------------------------------
/terminal-view/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/fornwall/lib/android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 |
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 |
--------------------------------------------------------------------------------
/terminal-view/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/terminal-view/src/main/res/drawable/text_select_handle_left_material.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/terminal-view/src/main/res/drawable/text_select_handle_right_material.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/terminal-view/src/main/res/values-zh/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | 粘贴
3 | 复制
4 | 更多…
5 |
6 |
--------------------------------------------------------------------------------
/terminal-view/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Paste
3 | Copy
4 | More…
5 |
6 |
--------------------------------------------------------------------------------
/termux-app/dev_keystore.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/termux-app/dev_keystore.jks
--------------------------------------------------------------------------------
/termux-app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in android-sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | -renamesourcefileattribute SourceFile
11 | -keepattributes SourceFile,LineNumberTable
12 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/termux-app/src/main/res/drawable/banner.png
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/current_session.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/current_session_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/ic_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
18 |
19 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
12 |
13 |
14 |
24 |
25 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/ic_new_session.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
13 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/selected_session_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/selected_session_background_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/session_ripple.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/session_ripple_black.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/drawable/terminal_scroll_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
21 |
22 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/layout/extra_keys_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/layout/extra_keys_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/layout/line_in_drawer.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/termux-app/src/main/res/raw/bell.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RfidResearchGroup/RFIDtools/8279e0cfae5a1333899cb2b7d0913be139eb3d9b/termux-app/src/main/res/raw/bell.ogg
--------------------------------------------------------------------------------
/update_note.txt:
--------------------------------------------------------------------------------
1 | 2019/09/26 ver1.3.1:
2 | 1.MFCUK (fully encrypted) can determine whether a vulnerability can be tested. If it is judged that there is no vulnerability in the card, it will not execute the program to avoid getting stuck in the dead cycle.
3 |
4 | 2019/09/27 ver1.3.2:
5 | 1. Fixed the problem that the equipment needs to be found in the interface.
6 |
7 | 2. Fixed the problem of USB device removing the connection status that could not be updated.
8 |
9 | 3. ACU122 equipment changed its name to ACS-ACR_122U (Longjie-ACR_122U)
10 |
11 | 4. Change the name of USB_UART device to OTGToUart Serial (OTG to serial port)
12 |
13 | 5. Delete Signature File Configuration
14 |
15 | 6.Add signature configuration input windows.
16 |
17 | 7.fixed signature configuration input.
18 |
19 | 2019/12/21 ver1.3.2:
20 | Temporary addition of compatibility support for Android 10.
--------------------------------------------------------------------------------