Extract Binary File from Palm *.pdb format


Recommended Posts

I've been scouring the net for almost three days trying to figure out how to extract a binary file from a Palm PDB file.

Here's the back story. I'm trying to recover/flash a Treo 755p manually, and I need to extract some binary files out of their *.pdb containers. I tried WavePDB, but it said the files were not in it's own format, but it was able to read the PDB headers and tell me what the database type was, who the creator was, and how many records it has.

Anyone here know how to extract a binary file (not text, not an ebook) from a Palm PDB file?

Link to comment
Share on other sites

I eventually found T3.jar on Shadowmite's forum, and after some retooling, I made it a little more dynamic. For those that come after me looking for this solution, simply compile this java code and run it in a directory with the PDB files.

/***
 * T3_allfiles
 * based upon T3_APR.java from Shadowmite's forum
 *
 * This file will extract a binary file from it's
 * Palm PDB prison.  Just drop this in the directory
 * that contains the *.pdb files, and run it.  It'll
 * get them all.  Well, mostly.  See next.
 *
 * This file is NOT made to extract the rom image.
 * Use Grack's RomTool for that.
 */

import java.io.*;

public class T3_allfiles
{
	/* Toggle this to show step-by-step console debug */
	static boolean debug = true;



	public static void main( String[] args ) throws Exception 
	{
		File directory = new File( "./" );
		String[] files = directory.list( new PDBfilter() );

		for( String individualFile: files )
		{
			/* trim .pdb from filename so we can export the original file */
			zipOut = new BufferedOutputStream( new FileOutputStream( individualFile.substring(0,individualFile.length()-4) ) );
			pdb2(individualFile);
			zipOut.close();
		}
	}



	/* Starting here, this is taken verbatim from T3_APR.java */
	static OutputStream zipOut;

	static void pdb2(String file) throws Exception 
	{
		RandomAccessFile in = new RandomAccessFile(file, "r");
		in.skipBytes(76);
		int numRec = in.readShort();
		int[] toc = new int[numRec];
		for (int i=0; i<numRec; ++i) 
		{
			toc[i] = in.readInt();
			in.readInt();
		}
		for (int i=0; i<numRec; ++i) 
		{
			in.seek(toc[i]+4);
			int blksize = in.readInt();
			byte[] buf = new byte[blksize];
			in.read(buf);
			zipOut.write(buf);
		}
	}
	/* This is the end of T3_APR.java */
}



class PDBfilter implements FilenameFilter
{
	public boolean accept( File dir, String name )
	{
		if ( new File( dir, name ).isDirectory() )
		{
			return false;
		}

		name = name.toLowerCase();
		return name.endsWith( ".pdb" );
	}
}

Link to comment
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.