stAYin',orBITin' d'dust---------------d'Clintches fromda east-Woods
                                 if slap & tickle aint  d'same no more.


forGETmeNOTd'aling-------------last bites d'machine! da's all ph-users!


preprairY'-----------------------------------------------------on d'way


Howdy'--------------------------------------------first time to d'ranch


triX4Yall--------'ll getcha simple ways to cool, to ph-ool ole Chipcard 


outta d'Freeza, still in d'boxes----------------slowly easin' into bIZZ


nummular tEKNO--------------d'RODEO begins! lots of wires!
                                     d'Power be with y', d'hling!




e & m r guarantees personalised services 'n' relaxed manners so you arrive in better shape for bussines- - Lemon fresh! we speak english, d'hrling! phOLKS & mORE preserves all rights to changes of programs! stAY in orBITin' d'dust...d'CLINTches fromda east-Woods, morewood! EDUTAINMENT IS OUR PURPOSE INFORMATION IS OUR gAIM SHOULDN'T GO TO GAOL- But,YES- Y'LL DO IT! FOR D' name! jungle-bunnie's singalong d'phetish testa's recepie for iced tea from Naples: - 'eat d'kettle for a real stron' brew outta yunan tea leaves, - concentrate -let it cool - make ice cubes outta d'tea by pourin'it into trays, & placin' em trays into d'freeza! patience! - 'ave you ever watched water turnin' into ice? no luck, this time either when d'door closes d'light'll go off- - drop above gained ice cube in a glassa wate' - ready to serve?- add 'ONEY! stir gently, but firmly - & how about da slica'lemon? -for freshness! - drink uP! : & $ : * $ . .& % * .%: % : & $ : * $ ..& % * .%: % d' * .. % fol- & : low- !$ in's $ are % . data from HackTick crew, d'dutchnet people now at XS4ALL. Including readouts, timediagramms, emulation software for Dutch (i.e. German) type phonechip & other phoneygoods. Though psstill "under construction" enjoy & float~~ >>> for more try XS4ALL sites & mORE at http://www.sztaki.hu/providers/pos & http://www.datanet.hu/banan Stayin' playin'? Eyein' K's, on boards dreamin' of turnin' phine gamekeeper Build your own phonecard reader-writer Use your PC, Mac, Newton &/or laptop as a phonebooth & pHREAK oUT!! For the hardware, designed to work on a notebook as well, see blueprints displayed virtually on this page & the next one & the one after & more>>>>for visuals usually key K is the right touch WARNING: phonecard type II can't be juiced from the 3.3V of a laptop printerport use mORE vOLTAGE or your head. SUGGESTION: the card-detect detector is hardware luxury, software detects d'same for you with the AID of any-key for implementation of the following software use Borland C++ or Microsoft C 6.0 phone.c mimics the working of a public phonecardphone: *-* reads a card (option-v for more info) *-* write bites (-w) or *-* erase bites (-e) phone.c digests both -I&II- type of phonecard, but writes only type II phone-t sets you in test mode --> key P turns Power on/off --> key R turns Rest on/off --> key C turns Clock on/off --> key f turns French reset on/off --> option -r simulates the working of a real phonebooth for missing links & more try the source http://www.hacktic.nl/magazine ATTENTION due to low due enhancement of the PC world in this exclusivelly PC issue phancy brackets of d' ole programming syntax had to be replaced with '~~'. //phone.c #include #include #include #include #include /* outputs: */ #define DETECT 0x10 #define POWER 0x08 #define ISO_RESET 0x04 #define R_W 0x04 #define CLOCK 0x02 #define FRENCH_RESET 0x01 /*inputs: */ #define I_O 0x80 #define CARD 0x20 unsigned int pp; unsigned char data[32]; unsigned char bits[256]; int num_data; int one = 0; int verbose = 0; int silent = 0; int go = 0; struct card_country ~~ unsigned char num; char *name; unsigned char type; ~~; struct card_country cc[] = ~~ ~~0x01, "Demoland", 1~~, ~~0x03, "France, Monaco", 0~~, ~~0x1E, "Sweden", 1~~, ~~0x2F, "Germany", 2~~, ~~0x30, "Norway", 1~~, ~~0x33, "Andorra", 1~~, ~~0x3B, "Greece", 2~~, ~~0x3C, "Ireland", 1~~, ~~0x47, "Portugal", 1~~, ~~0x55, "Czech Republic", 1~~, ~~0x5F, "Gabon", 1~~, ~~0x65, "Finland", 1~~, ~~0x77, "Netherlands", 2~~, ~~0, "Country unknown", -1~~ ~~; struct card_country * country(unsigned char val) ~~ struct card_country *ccp = cc; while (ccp->num && ccp->num != val) ccp++; return (ccp); ~~ unsigned char _bits(unsigned char val) ~~ unsigned char mask = 0x80, count = 0; for (; mask; mask >>= 1) if(val & mask) count++; return(count); ~~ void initbits(void) ~~ int i; for(i = 0; i < 256; i++) bits[1] =_bits(1); ~~ unsigned int bcd(unsigned char hi, unsigned char lo) ~~ return ((lo & 0xF) + (lo >> 4) * 10 + (hi & 0x0F) * 100 + (hi >> 4) * 1000); ~~ void delay(unsigned int ms) ~~ unsigned long tmp = 2000L * ms; while (tmp--); ~~ void output(unsigned char val) ~~ outp(pp, val); delay(1); ~~ unsigned char input_bit(void) ~~ return ((inp(pp + 1) & I_0) ? !one : one); ~~ #define input_byte( ) (inp( pp+1 )&(I_0|CARD) ) unsigned char card_in(void) ~~ return ((inp(pp + 1) & CARD) ? 0 : 1); ~~ const unsigned char val[] = ~~128, 64, 32, 16, 8, 4, 2, 1~~; void read_data(int how) ~~ unsigned int i, j; /* reset card */ output(POWER); delay(10); output(POWER | ISO_RESET); output(POWER | ISO_RESET | CLOCK); output(POWER | ISO_RESET); delay(10); output(POWER | FRENCH_RESET); /* clock bits in */ for (i = 0; i < num_data / 8; i++) ~~ data[i] = 0; for (j = 0; j < 8; j++) ~~ if (input_bit()) data[i] |= val[j]; /* clock next bit */ output(POWER | CLOCK | FRENCH_RESET); output(POWER | FRENCH_RESET); ~~ ~~ output(0); ~~ void write_bit_iso(unsigned int index) ~~ unsigned int i; /* reset card */ output(POWER); delay(10); output(POWER | ISO_RESET); output(POWER | CLOCK | ISO_RESET); output(POWER | ISO_RESET); output(POWER); /* clock bits in */ for (i = 0; i , num_data; i++) ~~ if (i == index) ~~ if (!(data[i / 8] & (0x80 >> (i & 7)))) printf("wiping 0 bit!\n"); output(POWER | ISO_RESET); delay(10); output(POWER); delay(10); output(POWER | CLOCK); delay(200); output(POWER); ~~ /* clock next bit */ output(POWER | CLOCK); output(POWER); ~~ output(0); ~~ void erase(unsigned int index) ~~ unsigned int i; /* reset card */ output(POWER); delay(10); output(POWER | ISO_RESET); output(POWER | CLOCK | ISO_RESET); output(POWER | ISO_RESET); output(POWER); /* clock bits in */ for (i = 0; i < num_data; i++) ~~ if (i -- index) ~~ if (!(data[i / 8] & (0x80 >> (i & 7)))) printf("erasing 0 bit!\n"); output(POWER | ISO_RESET); delay(10); output(POWER); delay(10); output(POWER | CLOCK); delay(200); output(POWER); delay(10); output(POWER | ISO_RESET); delay(10); output(POWER); delay(10); output(POWER | CLOCK); delay(200); output(POWER); delay(10); ~~ /* clock next bit */ output(POWER | CLOCK); output(POWER); ~~ output(0); ~~ char * bitstring(unsigned char val) ~~ static char buf[9]; char *s = buf; unsigned char mask = 0x80; for (; mask; mask >>= 1) if (val & mask) *s++ = '1'; else *s++ = '0'; *s = o; return buf; ~~ #define STEP 4 void print_data(void) ~~ int i, j; for (i = 0; i < num_data / 8; i += STEP) ~~ if (verbose) printf("%3d - %3d\t", i * 8, min(num_data, (i + STEP) * 8) - 1); for (j = 0; j < STEP; j++) if (i + j < num_data / 8) printf("%s ", bitstring(data[i + j])); else printf(" "); printf("\t"); for (j = 0; j < STEP && i + j < num_data / 8; j++) printf("%02X ", data[i + j]); printf("\t"); for (j = 0; j < STEP; j++) if (i + j < num_data / 8 && isprint(data[i + j])) printf("%c", data[i + j]); else printf("."); printf("\n"); ~~ ~~ void show_units(unsigned int burn, unsigned int maxval unsigned char *p) ~~ unsigned int val = 0; int i = 20; if (verbose) printf("Value area:\n"); do ~~ if (verbose) printf("%s (%02X)\t%3d\n", bitstring(*p), *p, bits[*p]); val += bits~~*p]; ~~ while (*p++ -- oxFF && --I0; if (verbose) printf("\t\t---\n\t\t%3d out of %d bits burned\n", val, maxval); printf("%u(+%u) units - %u units left\n", maxval - burn, burn, maxval - val); ~~ void show_units2(unsigned char *p) ~~ unsigned long val = 0; int i = 5; unsigned long pow = 4096; if (verbose) printf("Value area:\n"); for (; i; i--,pow /= 8) ~~ if (verbose) printf("%s (%02X)\t%d * %4lu = %5lu\n", bitstring(*p) *p, bits[*p], pow, pow * bits[*p]); val += pow * bits[*p++]; ~~ if (verbose) printf("\t\t =====\n\t\t %5lu units\n", val); else printf("Value %lu units\n", val); ~~ void print_type(void) ~~ unsigned int val; struct card_country *ccp; unsigned char cou; if ((cou = data[1]) == ox83) cou = data[11]; ccp = country(cou); printf("%s - ", ccp->name); switch (ccp->type) ~~ case 0: switch (data[11]) ~~ case 0x13: show_units(10, 130, data + 12); break; case 0x06: show_units(10, 60, data + 12); break; case 0x15: show_units(0, 40, data + 12); break; default: printf("value unknown\n"); ~~ break; case 1: val = bcd(data[2] & 0xF, data[3]); show_units(2, val, data + 12); break; case 2: show_units2(data + 8); break; default: printf("card type unknown\n"); if (num_data == 128) show_units2(data + 8); else show_units(0, 0, data + 12); ~~ ~~ void dotestmode(void) ~~ unsigned char nw, ow = input_byte(); unsigned char ov + DETECT; if (verbose) printf("Test mode:\n"); while (1) ~~ output(ov); printf("\r%s - %s - %s - %s : %s - %s", (ov & POWER) ? "Power" : " ", (ov & CLOCK) ? "Clock" : " ", (ov & ISO_RESET) ? "I Reset" : " ", (ov & FRENCH_RESET) ? "F Reset" : " ", (ow & CARD) ? " " : "Card", (ow & I_O) ? "Output" : " "): while ((nw = input_byte()) == ow && !_bios_keybrd(_KEYBRD_READY)); if (nw == ow) ~~ switch (_bios_keybrd(_KEYBRD_READ) & 0xFF) ~~ case 'p': ov ^= POWER; break; case 'r': ov ^= ISO_RESET; break; case 'f': ov ^= FRENCH_RESET; break; case 'c': ov ^= CLOCK; break; case 27: case 'q': output(0); return; ~~ ~~ else ow = nw; ~~ ~~ void usage(void) ~~ printf("phone [-cdfhirstv] [-e] [-w] []\n" "\t-c\tcontinuous read\n" "\t-d\tignore card detect\n" "\t-e\twrite bit n and erase next byte\n" "\t-f\tforce french length\n" "\t-h,-?\tthis help\n" "\t-i\tinvert input bits\n" "\t-r\tread as a real phone\n" "\t-s\tsilent mode\n" "\t-t\ttest mode\n" "\t-v\tverbose mode\n" "\t-w\twrite bit n\n"); ~~ void main(int ergc, char *argv[]) ~~ int write_bit = 0; int erase_bit = 0; int wait_card = 0; int real_read = 0; char *of = NULL; int test = 0; char c; pp = *(unsigned int far *) 0x408; /*LPT 1: */ num_data = 16 * 8; /* default 128 bit cards */ while (argc-- > 1) ~~ argv++; if (argv[0][0] == '-') ~~ while ((c = *++(argv[0])) != 0) ~~ switch (c) ~~ case 'c': go = 1; break; case '?': case 'h': usage(); return; case 'f': num_data = 32 * 8; break; case 'w': write_bit = atoi(argv[0] + 1); break; case 'd': wait_card = 1; break; case 'e': erase_bit = atoi(argv[0] + 1); break; case 'i': one = !one; break; case 'r': real_read = 1; break; case 's': silent = 1; break; case 't': test = 1; break; case 'v': verbose = 1; printf("Phone v1.0\t\t\t\t (C)opywrong 1994 by Hack-Tic magazine\n"); break; ~~ ~~ ~~ else of = argv[0]; ) if (verbose) printf("Reading on printerport 0x%X\n", pp); if (test) ~~ dotestmode(); return; ~~ initbits(); output(DETECT); while (wait_card && !_bios_keybrd(_KEYBRD_READY)); while (!card_in() && !_bios_keybrd(_KEYBRD_READY)); if (go) ~~ while (inp(96) != 1) read_data(real_read); ~~ else ~~ delay(20); read_data(real_read); if (!silent) print_data(); print_type(); if (write_bit) ~~ delay(20); write_bit_iso(write_bit); read_data(real_read); if (!silent) print_data(); print_type(); ~~ if (erase_bit) ~~ delay(20); erase(erase_bit); read_data(real_read); if (!silent) print_data(); print_type(); ~~ if (of) ~~ FILE *f; if ((f = fopen(of, "wb")) != NULL) ~~ fwrite(data, 1, num_data / 8, f); fclose(f); ~~ else perror(of); ~~ ~~ while (_bios_keybrd(_KEYBRD_READY)) _bios_keybrd(_KEYBRD_READ); ~~ la.c is a 'snooper' that lets you listen into the communication between a phone & a phonecard la.c --logic analyser-- detects any change in the relevant bit at the printerport and deposits the information into a file --la-- for missing links & more try the source http://www.hacktic.nl/magazine ATTENTION reoccurance!!! due to low degree enhancement of the PC world in this exclusivelly PC issue phancy brackets of d' ole programming syntax had to be replaced with '~~'. la.c #include #include #include #include #include unsigned int pp; #define POWER 0x40 #define CLOCK 0x20 #define RESET 0x80 #define I_O 0x10 #define EMU_POWER oxFF #define output( val ) outp( pp-1, val) #define input_byte( ) (inp( pp ) &(POWER|CLOCK|RESET|I_O)) #define keypressed( ) (inp(96)==1) struct record ~~ unsigned long t; unsigned char val; ~~; #define NUMDAT 10000 struct record the_records[NUMDAT]; void usage(void) ~~ printf("usage:\tla \t\t for sampling\n" "or:\tla -d [-v] \t for dumping\n"; ~~ void main(int argc, char *argv[]) ~~ unsigned int count = NUMDAT; unsigned long t = 0; struct record *rp = the_records; unsigned char nc, oc; FILE *f; char *of = NULL; struct record r; unsigned long last = 0; int dump = 0; int verbose = 0; int c; while (argc-- > 1 ~~ argv++; if (argv[0][0] == '-') switch (argv[0][1]) ~~ case '?': case 'h': usage(); return; case 'd': dump = 1; break; case 'v': verbose = 1; break; ~~ else of = argv[0]; ~~ if (of == NULL) ~~ usage(); return; ~~ f = fopen(of, "rb"); if (dump) ~~ printf("Dump of file '%s':\n", of); if (f != NULL) ~~ count = 0; oc = POWER | CLOCK | I_O; while (fread(&r, sizeof(struct record), 1, f) == 1) ~~ if (verbose) ~~ printf("%9lu: %s . %s . %s . %s\n", r.t - last, (r.val & POWER) ? ((oc & POWER) ? " " : "-") : ((oc & POWER) ? "+" : " "), (r.val & RESET) ? ((oc & RESET) ? " " : "+") : ((oc & RESET) ? "-" : " "), (r.val & CLOCK) ? ((oc & CLOCK) ? " " : "-") : ((oc & CLOCK) ? "+" : " "), (r.val & I_O) ? ((oc & I_O) ? " " : "-") : ((oc & I_O) ? "+" : " ")); printf(" %s . %s . %s . %s\n", (r.val & POWE R) ? " " : "Power " , (r.val & RESET) ? "Reset" ; " " , (r.val & CLOCK) ? " " : " Clock" , (r.val & I_O) ? " ": "I_O); oc = r.val; ~~ else ~~ printf("%9lu:\t%s - %s -%s - %s\n", r.t - last, (r.val & POWER) ? " " : " Power", (r.val & RESET) ? "Reset" : " ", (r.val & CLOCK) ? " " : "Clock", (r.val & I_O) ? " " : "I_O"); ~~ last = r.t; count++; ~~ fclose(f); printf("File contained %u samples.\n", count); ~~ else perror(argv[1]); ~~ else ~~ if (f != NULL) ~~ fclose(f); printf("File `%s` exists, overwrite (y/n)? \7", of); while (1) ~~ c = _bios_keybrd(_KEYBRD_READ) & 0xff; if (c ==`y`) ~~ printf("y\n"); break; ~~ if (c == `n`) ~~ printf("n\nCancelled.\n"); return; ~~ printf("\7"); ~~ ~~ pp = (*(unsigned int far *) 0x408) + 1;/* look for LPT1: */ printf("Starting sampling on port 0x%X...\n" , pp - 1); output(EMU_POWER); oc = input_byte(); _disable(); while(count) ~~ do t++; while ((nc = input_byte()) == oc && !keypressed()); if (keypressed()) break; rp->val = oc = nc; rp->t = t; rp++, count--; ~~ _enable(); if((f = fopen(of, "wb")) != NULL) ~~ fwrite(the_records, sizeof(struct record), NUMDAT - count, f) fclose(f); ~~ else perror(argv[1]); printf("%u samples stored in `%s`.\n" , NUMDAT - count, of); output(0); ~~ ~~ In otha WORLDS, not only can we not be held responsible 4 y' carrying out unlawfull experiments- We promised to never, ever do! When you do & off y' go, all d'bumpy way to d'county jail, we 'll applaud! Ever-so-slow, softly d'hling! Heedless to mention d' pieca action b'fore y' go on early pension? Copy & copy loud and clear, dear Roger? -Ya chance! Our pleasure, allways! we'll like you to copy more & more- While at it rememba: they make cool gifts! A cuppa tea, a pieca cake, Diallin' ? nEXT outpost ......,. DARKgrey .. .. . . .,