`
`Symantec 1032
`IPR of U.S. Pat. No. 7,757,298
`
`
`
`Warning concerning copyright
`restrictions
`
`The copyright law of the United States (Title
`17, United States Code) governs the
`making of photocopies or other
`reproductions of copyrighted material.
`
`Under certain conditions specified in the
`law, libraries and archives are authorized to
`furnish a photocopy or other reproduction.
`One of these specified conditions is that the
`photocopy or reproduction is not to be used
`for any purpose other than private study,
`scholarship, or research. if a user makes a
`request for, or later uses, a photocopy or
`reproduction for purposes in excess of fair
`use, that user may be liable for copyright
`infringement.
`
`This institution reserves the right to refuse
`to accept a copying order if, in its judgment,
`fulfillment of the order would involve
`
`violation of Copyrightoibaw.
`
`000002
`
`
`
`000003
`
`
`
` 9
`
`>'0£IiAtL
`S I_004_§_m_iiE:
`1‘ 0
`Pii'0Ff55/01%.’
`.
`JOURNAL
`
`FEATURES
`
`A CONVERSATION WITH EVA BOZOKI
`/1} '_/r Ida Wueb r
`i;‘(II1l'(.‘[)[ WIIOSC time C|c;IrIj.' has come, and. zirylzick finch‘. Out this
`.\‘ct\mi‘k Suctirity is '.l
`Iunnth. DSNT Chief .Ht'ik‘l1li.'-‘ul HI-it Bozoki is in the thick of things, Sectirity wise.
`
`THE RIPEMD-160 CRYPTOGRAPHIC HASH FUNCTION
`by .'lH!()Ui.' B().\‘.\‘(’/(i'L’.'_\‘. Hem: I)rJt'JlJerr:'II. and Bar? Pivizcael
`CI'_\'pt:IgI".Ip|IiL'
`lI;I.~h |1IIICtiuIIS are an eSSenti:Ii huilding block for ;ippl1't':IIionS [hflt rcquirc
`tl;It;I iztlcizrity. In this ;:itI'CIC. our autliurs propose that the RIPEMD~l()U hash function is :1
`Nct'tII‘L- I‘L*p|2IL'CtltL‘IIt fut‘ MD-‘i and TVIDS.
`
`REED-SOLOMON ERROR CORRECTION
`by ling!) L_1j)j)eI:,\'
`DUI’ :III_\‘ Iitiiiihcr Oi‘ I‘C;IStIn.S. RCCd—S0lOIIIon error Correction is Commonly intpleiuented in
`|]:II‘(i‘\\':1I‘L‘. Here. Hugo p|‘t'?»t.‘!1lS ‘.1 higlily optiiiiizetl software iiiipieiiiuntation Of Reed-
`Suicmitnii error C0l“1‘L‘L‘litII1, writteii in C++ and I1S:st:IIIl)ly langtizigu.
`
`THE ZLIB COMPRESSION LIBRARY
`b_ 1' .'lIan’.? A’. I-‘\'c»!.\'mI
`.\i;iI'k CN;iI1IIIIt-S zhli. ll iiliiury of C routines that can he usecl to t'OnIpr<:SS Or exp;Imi files
`Iireiitu thc szinie deflate :I1gnrithm popularized by PKZIP ZU.
`
`WINDOWS NT SYSTEM-CALL HOOKING
`by ‘'1 15111? RII5SI'nrI:'fcl7 mm’ Btjyce Cugswe/1'
`:1 tool that lists
`I\I;Irk and Bi'_VL'€ present the design and i1'I1ph:'[l]t'I‘II1l[iOI'i Of NTRL‘§.’,I11()n.
`hnu]-ting to Show dt-tailed iiifnritizition about <'.".lL'h and every registry ‘.lt‘C<.‘SS [hut tl(‘k'l|r€~
`On Q!
`\\"'i.'It|nt\'.~: .\'T S_\'NtcIII.
`
`STEGANOGRAPHY FOR DOS PROGRAMMERS
`J31‘ AlciII_]o.hiISmI
`5tcg;IIIc:gI;IplI§' is ;I hr;IIIClI OI‘ an-'pt0gmplI)' that deals with ctmCt';I|ing I:IcSs:IgcS.
`
`I6
`
`24
`
`30
`
`36
`
`42
`
`48
`
`E
`
`BEQDED SiYS_T_§iitS_
`
`I)eIIvCr :tt|'[)()I1 :ItItnItI;ttCd Iiziggzige fiasco. er. .. SINICIII.
`
`SIMULATION AND DEVICE-DRIVER DEVELOPMENT
`by Edrflr QHf(.‘»(15‘(I” mm’ Kw: Gfbsorr
`T0 C'.I.-C the pr<>CCSS of writiiig ticvice drivers for ncw lI:1r(l\\';Ire tic~igII.~.. our ;I1IthOI.~
`present :1 Sinitilzttinn L‘I1\-’il'(.)nmL'l'll. To i|lu.~:tr;ttC its Lise, they use the mznplu Adapter
`AHA-'l‘:=i() S(ZSI minipoit dI'i\‘t.'I' that writes with the \\7’iIIc|0w~; _\II' [)1 )i\'.
`
`SIMULATING THE DENVER AIRPORT AUTOMATED BAGGAGE SYSTEM
`b_1'_[ubn Swartz
`john llHL‘.‘a Xlisp to i[I1Plt‘n1(‘fll 1! Ctmiputer Siintihitinii OI‘ the essential Ctmiponcnts Of thr
`
`2
`
`000004
`
`Dr. [)r;bi'7'.\‘_[rI1.n'ImI’,_](mmI.vj' IOU
`
`_
`
`000004
`
`
`
`N I
`
`jAhflLARY'1997
`
`VOLUME22,ISSUE1
`
`NETWORKED SYSTEMS
`
`EXAMINING EXTENDED MAP1 1.0
`by Les Tbaler
`The Extended Messaging Application Programming Interface 1.0, not to be confused
`with the previous— generation “Simple MAPI," was created to standardize the interfaces
`between messaging applications and the underlying ntessaging systems.
`
`64
`
`PROGRllMMER’S i00L(HESi
`
`10
`
`.m'?..-A
`
`__~i”M"°*__'" ' Om"
`
`PUBLISHING DYNAMIC DATA ON THE INTERNET
`'
`_£-tr-_-_w'e=_eg--=-"~'-'0'-1-rt-'--fit-c
`by Lauren Higbtower
`Allaire‘s Cold Fusion is a development tool that provides access (via the Web) to any F,
`database the web server can access using ODBC. Cold Fusion runs as a multithreaded
`Windows i\'I' system service and works with any ODBC-compliant database.
`INSIDE ITERATED SYSTEMS’ FRACTAL DEVELOPMENT KIT
`lg; Dino 1‘-Lsposiro
`The Fractal Development Kit from Iterated Systems is a libntry that makes it possible for
`you to embed fr:tctal—irnaging capabilities into C/C++ Windows and Macintosh applications.
`
`8
`
`F 0 R U M
`74 L‘;
`EDITORIAL
`6
`”fV»’°”"”’“" M550"
`LETTERS
`bayou
` j Nawssvmws
`PROGRAMMING PARADIGMS
`88
`”-”""’”D’ ‘W
`by Michael Swame
`IN-I-E
`Michael looks at paradigms past, focusing this month on spreadsheets.
`gvFEuge”el:.§cS;1.m
`C PROGRAMMING
`SWAIN,” FWIES
`by Al 5“-"’5’"5
`by Michael‘ Stuame
`Users expect standard Windows Help for all applications, no matter how small or how
`intuitive the procedures. To that end, Al updates a property page dialog-based
`application to include context-sensitive help for the controls on the dialog pages.
`
`it
`
`"8
`m
`
`92
`
`C 0 D E
`S 0 U R E E
`AVAILABILITY
`
`JAVA Q&A
`by Cjyjfggy-g
`Cliff examines how you can use java to implement :1 CORBA application that is
`representative of the way CORBA is likely to be used. In doing so, he revisits the chat
`application introduced in a previous column.
`
`»
`*
`Heaps are usually implemented via binary trees. with the property that for every subtree,
`the rootismthe minimum item. Here, John describes how to implement exceptionally fast
`F1b0nd“-ll h‘5lP5-
`
`UME
`‘i
`by Robert R. Comm‘
`Robert launches an examination of the Intel System Management Mode (SMM), cornpanng
`the SMM's RSM instruction to the ICE mode‘s undocumented LOADALL instruction.
`
`100
`
`I
`
`As a servioe to ottr readers, all source
`Cod‘: l-‘i =“’flil3bl€ 0“ 21 Single disk am‘
`°“l5”9’- T0 07d“ the ‘“5l‘- Wild 314-95
`(California resitlents add sales tax) to Dr.
`D0bb‘s_]o1tmaI, 411 Bore] Ave, San
`Mateo, CA 94402, call 415-655-4100 X5701.
`
`or use your Credit card to order by fax,
`(1
`415-559» 749. s
`-'
`'.
`dam C03‘: is a£::;f,l:li'l:::'l:
`ill;
`DD] Forum on Oompusem (type G0
`DDJ), via anonymous FTP front site
`Ftp.mv.com (192.80.84.3) in the /pub/ddj
`directory, on the World Wide Web at
`hrrp://www.ddj.con1. and through DD]
`Online. a free service accessible via direct
`dial ‘-11 415-5533357 04-4 W305. 3'N'1)~
`
`be
`
`PROGRAMMER’S BOOKSHELF
`by Ron van der Wat‘ and William Stallfngs
`Ron examines Stanley i.ippntan‘s Inside the C++ Ol;y‘ectModef, while Wflfiain looks at
`Peter \V:ty=ner's Disappearing Ct}ptograpby: Being and Nothingness on the Net.
`
`Dr. Dobb sfournal, January 1997
`
`000005
`
`I16
`
`N E X T
`
`M 3 N T H
`
`Soflwm. qu._,hW_ debugging‘ and [wing
`are in the sp(,.[igh, in our ;.~ebmm, i_..,.,ue_
`
`3
`
`000005
`
`
`
`
`
`Steganography for
`DOS Programmers
`
`Hiding a tree
`inside (I forest
`
`Alan Johnson
`
`;t brunch nl cryp-
`is‘
`It-;,>.ti1:a;_:_i';tpl1_\'
`tugrztplty that {le';ll5 with C()l1CL‘.'lll1‘1_L{
`tt1e,<.~.t5_r,e~'.
`It has unique [’>U§3.<il)ililiL'.\'.
`p.ll'llL'lllt1l'l}' \\‘hen _mL1 h;t\'e lel';1l7}'lL'>3
`ml" inlc II'l]1;lIiHn — mLlL'l1 of it rnundzme ur
`1I]l'l'L‘(ll|L'I1Il}' ;;eee~.~»e(l — that oll'et' hiding
`pltlees‘ l-()I' ilnpcntmrtt inlt>1‘111'.tlinn. The leth-
`niqtles I pI'e.~:en[ here will engtlwle you In
`ell‘eeli\el_\' hide CI'l'flC:ll iitltxrtltzilintt \\'itl1—
`in ;t
`l'.I]'f_1L* minute of data.
`
`Text Versus Binary Files
`The dil'let'enL‘e hL"t\\'een DOS text :1]1Ll hi—
`
`I1:tt3‘ l"ile.~. is :1[ [he l1e;u1 (ll. [l1i.- ;1pp[‘n:lCl]
`In .a[e_::.tt1r>_et';iplty. A l)< )5 text lile is gen-
`ei';tll_v euittpnsc-(l of text. euntri 1| e|1;I1';te—
`ters. and m:ty'he g_v,:';tpltie.~; L‘l1‘.lI".1L'lL'l'.H,
`II
`is
`:1 "l2l5[-J'et'nI'(l—el‘Jeel<" l_\-'pe of llle.
`Ine'.tn—
`ing that the last record i~ :1 ll;tg nr senliltel
`ll1:tt n1;n'|<.~ the end ml" the file.
`\V'hen
`
`opened for listittg or re;tdin_t_r,. the h'_\-'fileI11
`keeps reading r.l;1t:1 until
`it hits Ihe end—
`
`,vllrr1t_[olJ1Lmi: [ms .»‘.ftm’."ed at Ho1'1'mrr/ I lmle
`Cl‘Ji'?1[)f'('lJt’H.\'l£'(’ in Imzr/r»i:. I-.'ng.’rnrr/. and
`[ms been m’m‘a!e(4' 1'.-r erm2,'mIerprrgtgmtm
`tizfiig at Himrbulcli .S'!cr.fe {='trit'c'r5i'l_l' in
`.-’\'r,2r1.f.tertr (.'at'gf('»'tIr'(i. He liars rc>c'wti'.f1' w.ut—
`[).’t»1‘ed (I lnrirtile on j)rt’.r'rrt'e L!e_1'-c-m'i_‘1',I)Ifr:r.'
`p.v't;grmrrrr1t'rig.
`
`48
`
`lint‘ an ur-
`ml‘-lile (Ii()l"l ll;rL:_ then .N‘[(J])\.
`din:n'_\' IJUS le.\I Iile.
`this IZUI’ IlI;lI‘l-\L'I'
`in
`e:mlI'<>l—7. (.t\S(Il| _’(1l.
`A l3iI1;lI‘_\‘
`lile. on the other hnntl, um
`cnnlztin t'lt;u':teIeI'.~e in ;m_\' carder. ~‘inee
`lhere in" nu l§()l’ |l'.I\-.1 in Iain-.u'_\ nlude.
`I-lnd—c>l'-lile is t';Il(‘lll;ll(_‘(_l frmtl the d1'ret‘—
`
`
`
`|'L".lLl.‘~2 the lile spL'C.\ It)
`hill"). The a_\'.~:tent
`|1yle:~'
`:II'('
`in the lile
`See hem‘
`tn;m_\
`l1'e:‘t)I'LlL‘Ll;llllle l;L~'l \\'rilL'luEllL'l'ilL'i:II1d
`atups re;uiin}_{ \\ hen il ll;l\ rend ll1.ll nt.tn_\
`a‘l1;II‘;u[eI'.~.,
`l5i|1.Ir\
`lilea ;I1'e Iteeeaa;tr\'
`I} )1‘
`.(I('}.\]
`.‘illLl
`AETXIC
`|'ilL'.s. as
`tn;It'|tir1e—
`l:t1tglL;Igt' files |Il:l_\' end up lt;t\in_L{ illl
`.~\.\(Ill
`tlt:I|".teIe|' _’() fur :1n_\
`(tiller Lll.ll'-
`:teler> ;tn_\'\\ltere.
`:\ |'i|e U11 klllilx um he upeltetl l(lt' t'e;td—
`ing_=,
`:11‘
`\\'rilin§_r,
`in either lain-.1r.\ or text
`tnode.
`|'L'_L‘.ll'(ll\'P~,\' ml" \\'|telhe1'
`its inlern:t|
`l't)mI;tl
`is text
`in’ ltiIt'.t1'y. Yntl
`i':In I‘e;Id :1
`te.\I llle in l1lI‘I'.lt'_\'
`I]1IJLlL'. H1‘
`:1
`|>it1;II'}' file
`in lexl mnde.
`
`000006
`
`
`
`Enter DOS
`H'inL'L' l)()S u.-«tlzllly stores liles \\iiit.:t.
`;In li()l’ l11'.l|'l\'l.‘|'. Ilte ()pU|'illll1g eg\'~li'|:
`must: c:1|ett|;tle 1"-.01’ lmin the Clll'L‘t'lHE".
`lln\\'e\'eI'. I11;ttt\' IJOH L|llllllL'.H ;ll>i() alter-
`linr L‘tml:‘nl-Z.
`'l'l1e HUS 'I'Yl’T,.
`.\lHl\'l
`and l"ll\'l) I.'( lJl]Il]1lI1LlP~‘ open files lot‘ i‘t'.:t‘.—
`int,’ in text mode. (JUPY. X(?()l’Y,
`;m.
`.\'I()\'l-1. on the other lt;1nd_ open :1 file ll‘
`l1ll'l'.ll’_\' mode (they 111:1)’ he cnp_\'inj_'n=‘
`
`Int>\‘iI'Jg :l
`.(I().\l in‘ .I:..
`if file). The 0 W1
`L'tJI11l11:1nLl
`l1'.l.~€
`'.l A .\\\'ll('l1 It)!‘ L‘np\'1n'.
`:\.\(Zll (te.\lI l’ile.H. hut L|eI';tu|l.~5 to hinnr.
`
`lile is en‘:-.nt=t,
`nmde— except when :1
`t1~i11_£: the (Z( )|’\' ent11n1;tnd {mm [lie L-‘f'.'
`Milt t(I(_)I’\' (II J\ _filt-mirmil. This e:~;*.Lt~
`lrcnn [he ke_\lWtr.1rd (.\‘i'd1'Ji‘J to the file ur-
`til euntrnl-7.
`is typed.
`.S'.'rI1'H and sitlwni
`:tI'e lext l-iles.
`
`ii" _\'uu \\'et'(:* to open -.1 text llle r
`\‘\"lr.tt
`|w1n.tr}‘ nu ule. and appentl ;1nnt]1ert'ilt't
`the end ml‘ lhe first \\'hile e.\'pliCitl)'
`\\l']l-
`in_4 the l-If )1’ llilfi at Lite end till the ll|'.~l
`lilt-
`The 1'e-uh is lint [he ‘-1C('U[1Ll text is llitl
`clen l)L‘}'()[1Ll the EOF llzig, The only \‘..:i
`In }_',e[ In it
`is In rc-Ad [he lile ;l}_{;1in in l‘
`nun‘ mcrde. Remember. 'l'Yl’1-I I‘e‘.id\ in to.’
`Il]Il(lL’. The dam l)t’_\'(Ji1Ll
`l-i()F is ltiddn“
`in un '.lI'l_\'< me l 2: nking ;ll'tJllI1Ll in _\'()lll'
`ll.:!'.
`LlI'l\L'.
`II’ yutt LI,\'e this leeltttiqtle In .il.l\I
`.HII1‘.lll
`;ll11()LlI3[ nl'd;1['.l. .~:;t}‘
`] or 2 }{lS_1~.
`lill'_L£l.‘ lile (H;1_\'
`Int) KBI. the L‘.‘{[l".l
`len_;1
`\\ill likely not he t1()liL‘eLl
`if‘ [he file 1'
`'|'\'|’l'Ied In the sereen. For ex en l7-:[1e:‘ ~k
`
`
`-
`
`eurily. _\'t>tJ um ene:'_\'pt the hidden p.
`.
`and it will
`lr)Hl\' like ttmdntn f_’Ll['l7:I:_[L‘
`the end of the text file. .\']mt people \\'cut.lL
`umsider tltis just ‘.1 syalettt nr di,-l< eiwi
`men if they 1} mnd il.
`lile ll1.il r
`It
`in heat In eltnoeae 1| [ext
`tI.-ed only Iin‘ |'eJLlitt3_‘{. ll Jnnllter pr: i_qi.itt'
`
`1):‘. l)c:hi';'_s'_/r)1rr'H(:/. _/(HHi'(I.'_‘}'
`
`[WV
`
`000006
`
`
`
`“WE NEED A DEVICE
`
`THAT CAN FIND A NEEDLE
`
`IN A HAYSTACK, I‘:-rs IN Youn
`BACK POCKET, AND RETAILS
`DER $9.95. COULD WE SEE
`
`A PROTOTYPE NEXT WEEl{?”
`
`
`
`EMBEDDED
`
`SYSTEMS
`
`CONFERENCE EAST
`
`March 10-12, 1997
`
`Hynes Convention Center
`
`Boston, Massachusetts
`
`
`
`Come to the world's largest embedded systems conference
`and tradeshow— now on the east coast. Don't miss three
`
`days of in-depth technical courses taught by the industry
`Experts. More than 70 courses in all, including:
`- State Machines and State Charts
`
`
`
`
`I
`I am Interested ‘II'l:
`Attending
`Exhibiting
`I
`_ Receiving conference e-mail updates
`
`- Stepping Up to C++
`- Java in Embedded Systems
`- Hardware/Software Co-Design
`- Advanced Device Drivers
`
`Gain new skills. see new products, and most of al ,
`sympathy from programmers and engineers just li
`
`u!
`
`
`
`CALI. Us:
`ATFENDEE: 617-821-9222
`
`EXHIBITOR-EAST:415-278—5278
`
`exuranomwesn415-278-5213
`PA}! US: 617-828-8198
`
`E-Mun. lls: esce@exporeg.com
`EM 3 E D D ED sunr us: www'embedSy5c°n'c°m
`5 T E M 5
`-lI"‘|n]‘hII‘Ifl 31-*I":|*]1
`
`Neg
`ce
`'~I
`'-
`'»
`‘ We-I"
`E A
`T
`'J_1 Mm” yrremnan
`
`_ ___.-. _ — .
`N ’””’
`_ _
`
`_ _ _
`
`_ __
`
`_ _
`
`" "
`
`_— —_
`
`'
`
`rm
`
`.
`
`—
`
`—
`
`—
`
`—
`
`— — —
`
`"
`
`‘
`
`‘ 11,?-._f I " '
`
`.w..
`
`’
`
`I
`
`1
`I
`
`___
`3
`Please fax coupon to: 617-828-8198
`GM
`0r mail to: Embedd
`ysterns Conference East, ;
`I
`P..
`ox 431
`2
`E
`canton, MA 02021
`C
`‘®QQQO_7________________________ y //
`
`I
`
`IIIIIIIIIIIIIIIIIIIIIIIIII
`
`000007
`
`
`
`
`end of the host file. The reason is th};
`(Continuedfrom page 48)
`text file. If you read from a file opened
`opens the host file in text mode for up-
`as text, and write to a file opened as bi-
`if you are encrypting with pS€I.lClOl."aI1~
`dating, the hidden data will likely be lost.
`na1'y— as LWRITE does— you must man-
`dom numbers to generate a random c-.—
`Use reference files as the host files, and
`ually convert each newline to a CR-LF
`pher byte for each byte of cleartext
`combination.
`consider using ATTRIB to make them
`sooner or later an encrypted byte tvi|_
`read-only.
`fall on control-Z. If just one such cipher
`file is hidden beyond EOF, LSPLIT vril.
`find it, as an EOF precedes all the ci-
`pher. lf LSPLIT is used to try to separate
`appended cipher files, eventually it xvi.
`split a cipher file. If your encryptior.
`scheme disallows a value of integer 2+’:
`(control-Z), then hidden cipher files car.
`be directly stacked beyond EOF. Other-
`wise, LAPPEND all the files to be hidder.
`while they are still text. then encrypt [l’1EI‘l'.
`as one file—EOFs and all — then LAP-
`PEND that one cipher file to the host file.
`When using [SPLIT and decrypting, all the
`files will be cleartext and IAPPENDed to-
`gether. Subsequent files will still be bid-
`den beyond EOF, even though they are
`decrypted. If the actual data to be kept
`confidential is in one of the following
`hidden files, it may remain undiscovered.
`even if decrypted. You can leave the fol-
`lowing ones as hidden, or split them off
`with LSPLIT.
`
`The purpose of Listing Five, FIND]-I.C, is
`to find hidden data, in Case you forget which
`is the host file{s). FINDI-l.C looks for con-
`trol-Z in the file at a point before the phys-
`ical end of the file, and prints the filename
`to the screen. The wildcard characters
`and
`can be used, and all the files in a
`directory can be scanned for possible hid-
`
`The difference
`between a text and
`
`binary file is at the
`heart of this
`approach to
`steganography
`
`The Source Code
`Because XCOPY and COPY do not sup-
`port the kind of appending We just de-
`scribed, you must write special programs
`to implement this technique under DOS.
`Listing One (listings begin on page 51) is
`LLIST.C, a program that lists binary files
`to the screen. (LLIST stands for “l0ng—list,"
`implying a long listing beyond EOF.) LLIST
`will list a text file, then list the hidden data
`after EOF.
`
`Listing Two, LAPPENDC (short for “long-
`append") tacks a second file onto the first
`wim a control—Z between them to keep the
`second file hidden. Be aware, however, that
`the second file is not automatically delet-
`ed from the disk. You must manually delete
`it, or a copy of the hidden data will be left
`in the open. (Or, you can Lise the option-
`al removef) command supplied in a com-
`ment line in LAPPEND.)
`Listing Three, LSPLIT.C, copies the hid-
`den data to the temporary file TElV[P.1 This
`can be modified to place the data in a file
`supplied by the user as the second com-
`mand-line argument. Change the fopen
`statement for tbedata to use params[2}' as
`the filename, and change zf(n == 2) to
`yo: == 3 ). Remove the #define statement
`and Change the error-message printfs to
`show the new command format [split
`<sorrrce> <desn‘narz'on>.
`Hidden data can be removed from the
`host file by redirecting the output of TYPE.
`For example, tjpe host > drnnmy. To re-
`turn the data to the host, copy dummy
`host. Then delete dummy. The same re-
`sult can be obtained using the COPY com-
`mantl with the /A switch, except that the
`EOF flag is retained. Of course, you
`should do this after recovering the bid-
`den data with LSPLIT.
`
`Listing Four, LVI/RITE.C, allows the writ-
`ing of data from the keyboard to the far
`end of EOF of the target file, and requires
`21 bit of extra explanation. DOS uses two
`characters — a caniage return (ASCII 13,
`CR) and a line feed (ASCII 10, LF)— to
`separate the lines of a text file on disk.
`In contrast, when you type on a key-
`board, you obviously only press one key,
`the Enter key. To make things consistent,
`and to simplify the processing of text files,
`the C library getcO function converts all
`line separators to newline characters
`(ASCII 10, LF). This ensures that whether
`you read text from the keyboard or a disk
`file, you’ll see one newline character at
`the end of each line. This conversion is
`
`only performed if you open the file as a
`
`50
`
`den data. Each directory must be searched
`individually. If you use “*.*", any .COM or
`.E)CE file may show up as a false possibil-
`ity if it happens to contain a control-Z at
`some point.
`To read the directory, FINDH uses the
`ffna'firsI() and fr‘ndnext() functions.
`These are not completely standard, so
`you may have to rewrite them to work
`with alternate compilers.
`I am using
`PowerC 1.1.6 from MIX Software. Most
`compilers should support some equiva-
`lent of these two functions; Microsoft
`QuickC, for instance, has _d0.s_finafirSt()
`and _dos_fz‘ndnext(').
`LAPPEND and LSPLIT offer another in-
`teresting possibility. You are not limited
`to placing only one hidden file beyond
`EOF; they can be stacked tip behind each
`other. LAPPEND will keep adding new
`hidden files onto the end of the host file,
`and LSPLIT splits off everything behind
`the FIRST EOF to TEMP.1. You can have
`
`a hidden part, hidden on the end of an-
`other hidden part, which is hidden itself,
`and so on. To recover the next layer of
`hidden data, use LSPLIT on a renamed
`T'EMP.1.
`
`You cannot stack up hidden files if
`they are individually encrypted with
`pseudorandom numbers.
`I advise LAP-
`PENDing multiple files together, then en-
`crypting, then placing the cipher at the
`000008
`
`You also could super encipher mes-
`sages by using LAPPENI) to join a cipher
`file to a text, encrypting both, then LAP-
`PENDing the cipher to a host file. The
`first cipher file is now super enciphered.
`possibly with a different key the Second
`time. This could be used to give en-
`crypted instructions for using the first ci-
`pher file to an intermediary, without the
`intermediary necessarily knowing the key
`to the first cipher. Be careful, however.
`that your plans and protocols don't be-
`come too complicated.
`
`Conclusion
`Other steganography techniques hide
`data by altering one bit-per-pixel-record
`in a high-resolution graphic, or one-bit-
`per-sound record in digitized music or
`speech. You can hide data that‘s on your
`own system, sent over phone lines. or
`mailed on a disk. These methods can be
`
`used to distribute keys for more-rapic
`encrypted communication and are use-
`ful for couriers.
`Remember to encrypt the hidden Cl.:1t;l
`for me best security. and to erase the LAP-
`PENDed Files. or program LAPPEND to dc
`so automatically by including the remote! -
`statement supplied with LAPPEND. Don't
`forget that an erased file on disk still con-
`tains data until something new is written
`over that portion of disk, so creating an
`overwrite-erase utility is advisable. Or, just
`work on a Ramdisk, and keep the cipher
`on the hard drive.
`
`DDJ
`
`Dr Dobb’sjournal, January 1997 I
`
`000008
`
`
`
`
`
`1
`
`J: printf("\ncannnt open a Ei]e..\n"):
`fcloselthadatal:
`fclosetthefilelz
`
`print{(’'\nprnper format is:\n1split <datafi1e>\n"):
`prin:{["hidden data [if any) will he in :enp.l\n"):
`
`1
`(
`else
`
`J
`
`H
`
`.
`.
`‘
`hshng F00!‘
`3.’
`If lwritellc
`nnclude
`std1n.h
`m““["'W“”'3)
`1"‘ "5
`{ char *parsms[]-:
`me Hhefile:
`:_Lnt ch=B:
`1f(l “ Z 1 l
`purs§"rype cnnrro1—z to £innish")=
`Th“-‘h :.£°p?'_1( P“'m$“]'
`"Eh" }‘
`‘-f[': 3395119
`' NULL 3
`fseeklthefile. B. 2}:
`putc(26.thefi1eJ:
`."'<-add new EDI’. ..':'
`wh.[ile E {ch = 5etc(stdin))
`!= ED? 3
`if l
`‘H " 13 l
`puI:|:(l3.l:hefi1e): it explicitly add CR.*.’
`pucc(ch.thefi1e):
`
`}
`
`1
`91?“
`l
`
`printf(“\ru:ennor. open f:i.1e..\n"):
`.
`_
`fcloseithenlel.
`
`prinl:§l"\npr:Iper fannat
`
`is:\x1.lvrite (filenaIe)\n"l:
`
`]
`elee
`(
`}
`
`l
`
`listing Five
`Ir findh.c
`-I
`“include "stdia.h"
`Enclude :d""°F_'h"
`“"1‘"_iE d'f5'h
`read-f1¥e”11°“‘“'E)
`_
`téhat *f:.1ens.neH:
`_e'
`F_'I£-E_"‘:e:“1:l'1El'-l'|1l-5:31
`_
`_-
`_ u
`.
`-
`:
`
`'5;‘i’l1’e‘1’::&fl'I_m
`:“g1’[::n:'
`.,
`::::;?:::;:.,;t:::*:;£‘:%%"s:::2:23’gs uf
`‘I
`filelength = ftelliresdingthisl :."*<-find filelength
`fseek(readingtl1is.0l..U)z/'<-return to hegiuing: Ru-rind!‘-’
`.
`.
`.
`.
`u11?1e(
`(mbyte = getchendxngthasl
`cuu.nt++:
`if (inbyte == 26 554
`( “om-°opH__
`printf("\n:-‘s has possible hidden data ". filenemel:
`printffi"
`/1d bytes from the begining. ..".coum:):
`
`)
`
`!= E0!‘ 55 Estoploop )
`
`( ceum: < filelengtlrl )
`
`l
`
`1
`)
`fcluseuaadingthial:
`sin (mperamsl
`char tpezems H:
`int
`11:
`[
`struct ffblk fldnte:
`int (:1:
`if ( n }= 2 3*
`{
`
`}m
`
`I‘ ‘H
`
`fa:(c1=1:c1<n:cl+*)
`if (findfirstiparumn [c1].M'1c1s:e.[FA,NORHAL : FA_RDUN'LYll
`[
`resdsfilelfldets.Et',nuIe):
`I-d1i1e( findnexttéuflduul
`|= -ll
`(
`rear:l_t'l1e(fldue.ff,name):
`l
`
`l
`else
`[
`printf("\n..no matching file(sl for -'s\n".psrans[cl]):
`3
`J:'*endfpr‘:'
`
`findh filenuehl \n"):
`pn'm:t'("\npmper farm: is:
`pr:intE(" vildcsrds ‘I’ and '1'‘ may be ueed.\n"):
`
`J
`else
`[
`
`)
`
`1
`
`gm *\:hefile.*thed,a:a:
`?§‘(°H_’i J )
`1 [
`" "
`thefile = fupem’ pnran:u[ll. "ab" ):
`thedata = fopen( p.arnms[2], "rb" ):
`if ( thefile 2: NULL 55. rhedate l= NULL )
`fseektthehie.
`(3). 2):
`(
`
`putc(26.thefilP):
`[
`while (
`(cl: = getdthedetall
`,
`
`!= E0? )
`
`]
`else
`[
`l
`
`1'!
`Elie
`(
`
`Primf(..\r,_cMmm We" a fi1E__\n..):
`‘
`.
`§:l:::E$:gll:i§
`:enuve(paran:::[f']\;
`
`option to erase the source of the hidden data ‘I’
`
`ie:\n1append (file appended cc» ")1
`printf("\npr:oper tomat
`J pr1ntf( (fxle to .1ppcnci>\n ).
`
`1 l
`
`isting nu-ee
`In 1ep1it.c
`*1
`‘include "sl:diu.h"
`‘define TEHPFILE "ramp. 1''
`mein(n.parsms)
`int n:
`
`{ char fiperamsll;
`FILE U|:hefi1g_ttheda(a;
`in: ch=B.hiddendsza=D:
`if ( n == 2 )
`[
`
`thefile = fopenl psrsnelil. "rb" )2
`thedata = fopen: TE)1?FII.E. "uh" );
`if { Ehefile != NULL l
`I
`
`!= EDP’
`(ch = getchht-§i1e))
`uhile [
`I
`if (ch == 26 J hiddendets”:
`if (hiddendata)
`I
`
`(ch = gecctcm-£i1e))
`while (
`E
`putcI.'ch,thedeu):
`
`I
`
`l
`
`l
`
`I
`else
`
`)
`
`!= EDP )
`
`‘
`Dr. Dobb sjournal, jcmzumjy I997
`
`000009
`
`51
`
`....this pro ram lists a file in binar mode:
`ALL chergcters are shown.
`Y
`
`41'
`0:’
`
`!= E0?
`
`C" fl) l
`=
`’
`"° Em 1”
`comp-+;
`‘d d‘
`1
`f
`1-1. W 1
`'
`remove these comment marks to
`if ( byte |= 26 )
`§K§i1—z‘§5 Z{d§ut°?§fmin.:e§ §§2‘
`program on soue systems‘
`'1'
`]
`putc{byte.stdouI:):
`=la5E‘;‘:,_g”:
`
`1*
`
`'
`'
`Llshng one
`1"‘ 11ist.c
`*1’
`*
`sinfargmergvl
`.*-include "stdiu.h"f
`m
`It
`int
`azgc:
`char *ergv[]:
`L
`‘mt byte:
`:
`I
`1.1
`:
`gig :c_=uf(_I§=91:
`if ( arse == 2 )
`[
`infl = fopen(er3v[l] ."rb"l:
`if ( infl
`!= NULL 2»
`h'l
`C
`(
`31
`{
`" 1 °{
`
`)
`(
`else
`]
`
`print:‘~"\n‘.r
`'
`H "
`
`cannot open input file
`
`\n\n")'
`'
`
`V "
`
`1
`If
`else
`1
`n
`u
`llshng Two
`."* lappend.c M’
`finclude "s1:dio.h"
`main|.'n.peram5l
`int n:
`char *param5[I:
`
`p:intf("\n\n‘ ...must supply one file name. . .\n"):
`
`)
`
`{
`
`000009
`
`
`
`PERIODICAL
`THIS BOOK IS DUE ON THE LAST DATE
`STAMPED BELOW
`
`BOOKS REQUESTED BY ANOTHER BOFIFIOWEFI
`ARE SUBJECT TO IMMEDIATE RECALL
`
`
`
`um LIBRARY
`
`DUHJAN U8 .2‘
`
`'s.|*.:.-,
`
`LIBRARY, UNIVERSITY OF CALIFORNIA. DAVIS
`http:/.'Iibnte.ucdavis.edu.'PaIronFlenew.htm|
`Automated Phone Renewal (24-hour): (530) 752-1132
`D4611 (4.'99}M
`
`000010
`
`000010
`
`
`
`PERIODICAL
`
`ummmua1i:r\xwn»@@mnu1@@|g»an
`
`311750
`
`000011
`
`000011