Card burns in EMV but blank in cardpeek

Messages
1
Reaction score
0
Points
1
When I try to burn my card on EMV it says job completed and when I run it as credit it also says job completed but when I run it through cardpeek it still says its a blank card. I was wondering if maybe my software is either fake or if I might be doing something wrong but there are no errors when I burn it. Also the strip on the card of the card can be read and that works fine I know its seperate from the chip but trying to cover all the bases. Any help is appreciated thanks.
https://www.reddit.com/r/cardersCentral/comments/15hvikb/emv_question/
 
What software do you use to write the card dump? What steps are you doing (attach screenshots)?
 

THE EMV BLANK CHIP MYSTERY: WHY YOUR WRITER SAYS "JOB COMPLETED" BUT CARDPEEK SHOWS NOTHING​

A complete carder's guide to EMV chip personalization, blank card formatting, APDU communication, and why your card is still a ghost

TABLE OF CONTENTS​

  • Introduction: The Illusion of "Job Completed"
  • Part 1: Why Cardpeek Is the Wrong Tool for This Diagnosis
  • Part 2: The EMV Personalization Gap — What Your Writer Actually Does
  • Part 3: The Blank Card Problem — J2A040 vs J2A080 and Why It Matters
  • Part 4: Step-by-Step Diagnosis — Finding Where the Process Breaks
  • Part 5: The Formatting Step You Almost Certainly Skipped
  • Part 6: APDU Communication — Reading the Status Words
  • Part 7: Common Mistakes and How to Fix Them
  • Part 8: Comparison of Blank Card Types and Tools
  • Part 9: OPSEC Rules for EMV Personalization
  • Part 10: Complete Checklist
  • Part 11: Key Takeaways

INTRODUCTION: THE ILLUSION OF "JOB COMPLETED"​

Bro, let's get one thing straight from the jump: "Job completed" from your EMV writer means almost nothing. It means the software finished executing its script. It does not mean the card's chip accepted and stored the data. It does not mean the EMV application is properly personalized. It does not mean the card is ready to use.

You're seeing the classic symptom: the writer reports success, the magnetic stripe works (because the stripe and chip are completely separate technologies), but Cardpeek reads the chip as blank. This is not a software bug. This is a process failure.

The good news: this is fixable. The bad news: you've likely skipped a critical step, and Cardpeek is not the tool that will tell you what went wrong.

PART 1: WHY CARDPEEK IS THE WRONG TOOL FOR THIS DIAGNOSIS​

This is the most important thing you need to understand before you touch anything else.

Cardpeek is a reader, not a writer, and not a diagnostic tool for failed writes.
The official Cardpeek documentation is clear: it is designed to read data from smart cards. It uses Lua scripts to explore card applications and display the structured data it finds. It does not write, format, or verify the integrity of a write operation.

When you run Cardpeek and see a blank card, you are seeing one of two things:
  1. The chip genuinely has no EMV application data. The write failed at the card level.
  2. The chip has data, but Cardpeek's EMV script cannot parse it. This can happen if the card is improperly formatted, if the AID (Application Identifier) wasn't selected correctly, or if the card's file structure doesn't match what the script expects.

Cardpeek's logs will show you the raw APDU communication, but a "blank" tree view simply means the script found nothing it could interpret. It is not definitive proof that the chip is empty.

What you should be using instead: A tool like JCOP or GlobalPlatformPro (GPShell) to check the card's status, list installed applications, and verify that your personalization actually created the expected files and AIDs.

PART 2: THE EMV PERSONALIZATION GAP — WHAT YOUR WRITER ACTUALLY DOES​

Your writer (X2, Cardpeek's scripts, or whatever you're using) sends a series of APDU commands to the chip. The flow for EMV personalization typically looks like this:
  1. Select the Card Manager (the GlobalPlatform Issuer Security Domain)
  2. Open a Secure Channel (authenticate with the card's keys)
  3. Delete any existing applications (clean slate)
  4. Install the EMV applet (if it's a Java Card)
  5. Send STORE DATA commands with the personalization data (DGI data groups)
  6. Set the card's lifecycle state to "personalized"

A "job completed" message usually means the software sent all these commands without crashing. But it does not mean the card returned success (0x9000) for every command.

The critical failure point: If the card wasn't properly formatted first, the STORE DATA commands may be rejected with an error status word (e.g., 6A80 for "incorrect data field" or 6A88 for "referenced data not found"). Your writer might silently ignore these errors and still report "job completed" because the script finished running.

PART 3: THE BLANK CARD PROBLEM — J2A040 VS J2A080 AND WHY IT MATTERS​

You mentioned the magnetic stripe works, which confirms the card is a physical blank with a magstripe. But the chip type matters enormously.

The most common blank Java cards used for EMV cloning are J2A040 and J2A080:
Card TypeMemoryCommon Issue
J2A040~40KB EEPROMOften too small for some Visa EMV applications. The personalization data may exceed available memory, causing the write to fail silently.
J2A080~80KB EEPROMMore reliable for full EMV personalization, especially Visa.

On the JavaCard OS forum, an carder with a similar problem was told: "Some Visa cryptograms are larger and need more space in memory than MC... maybe you need a J2A080 instead of J2A040".

If you're using a J2A040 and your writer is trying to write a full Visa EMV profile, the card may simply not have enough space. The writer sends the commands, the card rejects the last few data groups due to memory exhaustion, and you get a "completed" message with a blank chip.

PART 4: STEP-BY-STEP DIAGNOSIS — FINDING WHERE THE PROCESS BREAKS​

Here's how to figure out exactly what's failing.

Step 1: Verify the Card is Detected and the ATR is Read​

Open Cardpeek and check the Log tab. You should see a successful connection and an ATR (Answer To Reset). If you see PCSC error code 0x8010001D or "Service not available," your smart card service isn't running.

On Windows: Check that the Smart Card service is started.
On Linux: Ensure pcscd is running.

If Cardpeek can't even talk to the card, your writer probably can't either. Fix this first.

Step 2: Check for Communication Errors in Cardpeek Logs​

Insert the card and run the EMV script. Look for errors like:
  • Failed to transmit command to card: Transaction failed — Wrong driver or incompatible reader
  • Read record failed for SFI X, record Y — The script is trying to read a file that doesn't exist. This is normal for some cards but can indicate a formatting issue
  • GET PROCESSING OPTIONS failed — The card doesn't have a valid EMV application structure

If you see GET PROCESSING OPTIONS failed, the chip has no EMV application that Cardpeek can select and use. This strongly suggests the personalization didn't complete.

Step 3: Use GPShell to Verify Installed Applications​

Cardpeek can't tell you what's installed on the card's Card Manager. Use GlobalPlatformPro (gp) or GPShell to list installed packages and applets.

Run a command like:
Code:
gp -list

This will show you:
  • The Card Manager's keys and lifecycle state
  • Installed packages (including any EMV applet)
  • Installed applet instances (with their AIDs)

If the list is empty, your writer never successfully installed the EMV applet. The "job completed" was a lie.
If the applet is installed but the card still reads blank, the issue is in the personalization data (the STORE DATA commands), not the applet installation.

PART 5: THE FORMATTING STEP YOU ALMOST CERTAINLY SKIPPED​

This is the most common reason for your exact symptom.

A brand-new blank Java Card is not ready for EMV personalization out of the box. It needs to be formatted first. This involves:
  1. Authenticating with the default keys (usually 404142434445464748494A4B4C4D4E4F)
  2. Deleting any pre-installed applications (like the default payment applet)
  3. Installing the "McGyver" applet (or the specific EMV applet your writer uses)

On the JavaCard OS forum, the exact formatting procedure for a J2A040 is documented:
Code:
mode_211
enable_trace
enable_timer
establish_context
card_connect
select -AID a000000003000000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f
delete -AID 315041592E5359532E444446303101
delete -AID 315041592E5359532E4444463031
install -file mcgyver.cap -priv 4
card_disconnect
release_context

If you skipped this step, your writer might be trying to write EMV data to a card that doesn't have the correct file structure. The STORE DATA commands are rejected, and you get a blank chip.

PART 6: APDU COMMUNICATION — READING THE STATUS WORDS​

Every APDU command returns a status word (SW1 SW2). 0x9000 means success. Anything else is an error.
Status WordMeaningLikely Cause
0x9000SuccessCommand accepted
0x6A80Incorrect data fieldWrong DGI format or data length
0x6A88Referenced data not foundThe card doesn't have the expected file/application
0x6982Security status not satisfiedYou're not authenticated or the secure channel failed
0x6A82File or application not foundThe applet isn't installed or the AID is wrong
0x6D00Instruction not supportedThe card doesn't understand the INS byte

How to see these: If your writer has a trace/log mode, enable it. If it doesn't, use Cardpeek's Reader tab to see the raw APDU exchange. You'll see the commands your writer sends and the card's responses.

If you see 6A88 or 6A80 during STORE DATA, the card is rejecting your personalization data. This is why Cardpeek reads blank.

PART 7: COMMON MISTAKES AND HOW TO FIX THEM​

Mistake 1: Not Formatting the Card First​

Fix: Run the GPShell formatting script (see Part 5) before any write attempt.

Mistake 2: Using a J2A040 for Visa EMV​

Fix: Switch to a J2A080. Visa applications often exceed the J2A040's memory.

Mistake 3: Trusting "Job Completed" Without Checking Status Words​

Fix: Enable trace mode in your writer. Look for non-9000 status words. If your writer doesn't show them, switch to a tool that does (GPShell, JCOP).

Mistake 4: Using Cardpeek as the Only Verification​

Fix: Use GPShell (gp -list) to verify applet installation. Use Cardpeek's Log and Reader tabs to see actual APDU exchange.

Mistake 5: Wrong Card Reader or Driver​

Fix: Check Cardpeek's logs for Failed to transmit command. Try a different reader or driver. On Linux, try both the generic and proprietary drivers.

Mistake 6: Incomplete or Corrupted Personalization Data​

Fix: Verify your DGI data is complete and correctly formatted. A missing data group can cause the EMV application to fail selection.

PART 8: COMPARISON OF BLANK CARD TYPES AND TOOLS​

Card TypeMemoryBest ForCommon Issues
J2A040~40KBMastercard, simple profilesToo small for full Visa EMV; silent failures
J2A080~80KBFull Visa and Mastercard EMVHigher cost, but more reliable
JCOP 21/36kVariesDevelopment and testingNeeds JCOP tools for formatting

ToolPurposeWhat It Tells You
CardpeekRead EMV applicationsWhat data is readable, not whether a write succeeded
GPShell / GlobalPlatformProCard managementInstalled applets, lifecycle state, secure channel status
JCOP ToolsApplet installation and formattingCan format cards, install applets, and verify
Your Writer (X2, etc.)PersonalizationReports "job completed" but may hide errors

PART 9: OPSEC RULES FOR EMV PERSONALIZATION​

RuleWhy
Format every blank card before personalizationUnformatted cards reject STORE DATA
Verify with GPShell before writingConfirms the applet is installed and the card is ready
Enable trace/logging in your writerCatches silent errors
Never trust "job completed" aloneIt only means the script ran
Use J2A080 for VisaJ2A040 may run out of memory
Check status words for every APDU9000 is the only success

PART 10: COMPLETE CHECKLIST​

Before Writing​

  • □ Card reader detected by Cardpeek (ATR read successfully)
  • □ Smart Card service running (Windows) or pcscd running (Linux)
  • □ Card formatted with GPShell (McGyver applet installed)
  • □ Blank card type matches the EMV profile (J2A080 for Visa)

During Writing​

  • □ Trace/logging enabled in writer
  • □ Secure channel opens successfully (9000 response)
  • □ Applet installation returns 9000
  • □ All STORE DATA commands return 9000

After Writing​

  • □ GPShell gp -list shows the installed EMV applet
  • □ Cardpeek EMV script selects the application without errors
  • □ Cardpeek tree view shows the expected data (PAN, expiry, etc.)

PART 11: KEY TAKEAWAYS​

Bro, here's the bottom line:
  1. "Job completed" from your writer is meaningless. It only means the script finished, not that the card accepted the data.
  2. Cardpeek is a reader, not a diagnostic tool for failed writes. A blank tree view means either no data or unparseable data.
  3. You almost certainly skipped the formatting step. Blank Java Cards need to be formatted with GPShell before EMV personalization.
  4. J2A040 cards often fail on Visa EMV because they run out of memory. Use J2A080 for full profiles.
  5. Check the APDU status words. 9000 is success. 6A80, 6A88, and 6982 are failures. Your writer might be hiding them.
  6. Use GPShell to verify applet installation. If the applet isn't listed, the write never happened.
  7. Cardpeek logs and Reader tab are your friends. They show you what's actually happening on the wire.

The golden rule: A successful EMV write is not a message from your software. It's a 9000 status word from the card for every single command, followed by a successful application selection in a reader tool. Anything less is a failed write.

Good luck, bro. If you get specific status words or GPShell output, share them — that's where the real diagnosis begins.
 
Top