用途:对 Java Card / SIM / USIM / 银行卡 applet 的 CAP 文件(Converted Applet Package,.cap)做逆向,解析组件结构、还原 CAP 字节码、重建 AID 与 process(APDU) 分派逻辑。不适用于通用 .class/.jar 逆向、APDU 抓包或卡族弱点分析。
主要能力:按 Java Card 规范 12 组件(Header、Directory、Applet、Import、ConstantPool、Class、Method、StaticField、ReferenceLocation、Export、Descriptor、Debug)解析 CAP;校验 Header 魔数 0xDECAFFED;读取包 AID 与 applet AID、install() 偏移;还原方法体与 CAP 指令集反汇编;解析常量池 token 与跨包引用;重建 CLA/INS 分派表与安装参数写入点。
使用方式:CAP 是 ZIP,先 unzip -l 确认结构,组件以 tag+size 逐文件解析。可用工具:ant-javacard 的 capfile 库、caprunner(python3 readcap.py <file.cap>)、pysim 的 pySim/javacard.py CapFile 类、GlobalPlatformPro(java -jar gp.jar --list)。CAP 内嵌 .class 可用 javap -c -p 对照。仿真可选 JCardSim + vsmartcard + pyscard。Ghidra/IDA 无原生 CAP 加载器,需脚本化导入。
适用场景:EEPROM dump、固件镜像提取、资料包样本或授权读卡提取的 CAP 分析;SIM/USIM/银行卡应用逻辑还原;多版本 CAP 对比。
限制:CAP 指令集独立编号,不可当 JVM 字节码反汇编;外部引用需 Import/Export 或 SDK .exp 文件解析;加密或截断 dump 需先解密;读卡、提取、写卡均需确认卡归属与分析目的授权,动态执行默认沙箱。