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
.. .. . . .,