當前位置:首頁 » 密碼管理 » cmps加密

cmps加密

發布時間: 2022-09-22 04:29:45

① molebox v2.3x脫殼

【脫殼內容】

首先Peid查殼,為MoleBox 2.x.x -> Mole Studio [Overlay],OD載入運行,無任何異常,判斷其為壓縮殼。

004CD61C > 60 pushad //外殼入口,和Upx等查不多。當我們脫殼上一個台階後,普通殼就不用慢慢跟蹤了。
004CD61D E8 4F000000 call imcast.004CD671 //F8單步到這里,看Esp=0012FFA4
004CD622 2120 and dword ptr ds:[eax], esp
004CD624 76 41 jbe short imcast.004CD667
004CD626 B4 13 mov ah, 13
004CD628 3B63 51 cmp esp, dword ptr ds:[ebx+51]
004CD62B 38CA cmp dl, cl
004CD62D D8ACD0 BBB52910 fsubr dword ptr ds:[eax+edx*8+1029B5BB]
004CD634 9F lahf
004CD635 A7 cmps dword ptr ds:[esi], dword ptr es:[e>
004CD636 9B wait
004CD637 BD B2BB61F4 mov ebp, F461BBB2
004CD63C B4 C9 mov ah, 0C9
004CD63E 17 pop ss
004CD63F BB 652286EE mov ebx, EE862265
004CD644 97 xchg eax, edi
004CD645 2AED sub ch, ch
004CD647 30DD xor ch, bl
004CD649 BB A64DED09 mov ebx, 9ED4DA6
004CD64E 5D pop ebp
004CD64F FC cld
004CD650 B7 01 mov bh, 1
004CD652 C01A AD rcr byte ptr ds:[edx], 0AD
004CD655 DFEF fucomip st, st(7)
004CD657 FD std
004CD658 ED in eax, dx
004CD659 A7 cmps dword ptr ds:[esi], dword ptr es:[e>
004CD65A 6A 38 push 38
004CD65C CE into
............................................................................
啟用Esp定律。

dd 12ffa4

下硬體訪問-Dword斷點。

F9運行

硬體中斷。

004CD5D0 61 popad // 關鍵字
004CD5D1 - FFE0 jmp eax // 斷在這里,往上看到Popad關鍵字

0048636F 55 push ebp //F8到達Oep,Loadpe直接脫殼。
00486370 8BEC mov ebp, esp
00486372 6A FF push -1
00486374 68 E0144900 push imcast.004914E0
00486379 68 2C654800 push imcast.0048652C ; jmp to MSVCRT._except_handler3
0048637E 64:A1 00000000 mov eax, dword ptr fs:[0]
00486384 50 push eax
00486385 64:8925 0000000>mov dword ptr fs:[0], esp
0048638C 83EC 68 sub esp, 68
0048638F 53 push ebx
00486390 56 push esi
00486391 57 push edi
00486392 8965 E8 mov dword ptr ss:[ebp-18], esp
00486395 33DB xor ebx, ebx
00486397 895D FC mov dword ptr ss:[ebp-4], ebx
0048639A 6A 02 push 2
0048639C FF15 C4984800 call dword ptr ds:[4898C4] ; MSVCRT.__set_app_type
004863A2 59 pop ecx
004863A3 830D B42C4A00 F>or dword ptr ds:[4A2CB4], FFFFFFFF
004863AA 830D B82C4A00 F>or dword ptr ds:[4A2CB8], FFFFFFFF
004863B1 FF15 C8984800 call dword ptr ds:[4898C8] ; MSVCRT.__p__fmode
............................................................................

脫殼後發現程序不能運行,這時需要用Imprec修復引入函數表(Import Table)

在Oep處填8636F,點IT自動搜索,然後點獲輸入信息,有9個指針沒有修復。

千萬別用等級1修復,等級修復的些什麼,這些假東西保存程序肯定無法運行的。

呵呵,用跟蹤等級3為我們修復3個,剩下6個就靠我們自己了。

我以 00089100 處 004D48A8 處的指針修復舉個例子。

右鍵-反匯編/16進制顯示

004D48BF call [4D80F0] // = kernel32.dll/001F/CloseHandle //這里最先看到CloseHandle就是我們要修復的指針。

其餘的方法一樣,注意並不是所有的脫殼程序都可以用這個方法,如Asprotect 1.23rc4無法修復的指針就可以用這個辦法修復,切勿過於依賴,每個加密殼處理方法都不相同。

於是我們手動填入 CloseHandle

同理修復。

00089120 004D4793



CreateFileA

0008912C 004D498A



GetFileAttributesA

00089148 004D4BC9



UnmapViewOfFile

0008914C 004D4B8A



MapViewOfFile

0008915C 004D49B0



CreateFileMappingA

全部指針修復,修復抓取文件,正常運行。

你試試吧

② 求匯編程序!在N1和N2兩數據區中。。。

1.在N1和N2兩數據區中,分別有10H個帶符號數。試編制一源程序,找出對應項中較小的數據,並將這些較小的數據存入N3數據區中(要求:對應項比較時必須用CMPS指令)。

STACKSEG SEGMENT STACK
DB 1024 DUP(0)
STACKSEG ENDS
DATA SEGMENT
N1 DB 5Ah,6Fh,2Eh,0D8h,0E3h,9Ch,0DBh,0B7h,5Bh,21h,35h,8Eh,4Ah,15h,58h,75h
N2 DB 58h,0FFh,5Eh,38h,0C7h,0A1h,26h,86h,48h,35h,48h,16h,0BAh,0FAh,0DFh,0E9h
N3 DB 10H DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSEG
START: MOV AX,DATA
MOV DS,AX
INC AX
MOV ES,AX
MOV SI,0FFFFH
MOV DI,0FFFFH
MOV CX,10h
MOV BX,OFFSET N3
CLD
AGAIN: CMPS BYTE PTR N1,BYTE PTR N2
JL N1LES
MOV AL,[SI+10h]
MOV [BX][SI],AL
JMP CMPAGAIN
N1LES: MOV AL,[sI]
MOV [BX][SI],AL
CMPAGAIN: dec cx
jnz again
MOV AH,4CH
INT 21H
CODE ENDS
END START

2.加密移動字元串,設緩沖區SBUFF中有20個小寫字母a,將每個a加上它相對於緩沖區的位移量後傳送到緩沖區DBUFF。

STACKSEG SEGMENT STACK
DB 1024 DUP(0)
STACKSEG ENDS
DATA SEGMENT
SBUFF DB 20 DUP('a')
DBUFF DB 20 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKSEG
START: MOV AX,DATA
MOV DS,AX
MOV CX,20
MOV SI,0
CLD
AGAIN: LODSB
MOV BX,SI
DEC BX
ADD AX,BX
MOV DBUFF[SI-1],AL
LOOP AGAIN
DBUFF
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

③ debug 的用發 誰知道呢

首頁 熱門推薦 電腦網路維護 辦公設備維護 電腦沙龍 網站建設 聯系我們

--------------------------------------------------------------------------------

Debug的使用方法郵件群發搜索軟體:iScanBMail | 常用MD5密碼破解加密查詢軟體:iScanMD5 Debug的使用方法 滾屏 Debug的使用方法

Debug-PC之開山老祖
Debug 原意是殺蟲子。這里是機器調試工具。
其實,Debug的由來,還有一則趣聞,在早期美國的一計算機房中,科學家正在緊張的工作。同時,許多台大型的計算機也在不停的運行著。大概是由於,機器過熱,引來許的小蟲子,以至於,計算機無法正常運行。科學們,只好停下來,捉蟲子...蟲子捉完了,計算機運行也正常了,後來,這個名詞就沿用至今了....
雖然,現在好的軟體越來越多了,但是有些,我們只需動手,用Debug就可解決,且快而好!接下來,我們就一起學習Debug在各方面的運用吧!(在殺毒、加解密、系統...)下面我和大家一起學習一些,Debug的用法,雖然,現在好的軟體越來越多了,但是有些,我們只需動手,用Debug就可解決,且快而好!

Debug常用命令集

名稱 解釋 格式
a (Assemble) 逐行匯編 a [address]
c (Compare) 比較兩內存塊 c range address
d (Dump) 內存16進制顯示 d [address]或 d [range]
e (Enter) 修改內存位元組 e address [list]
f (fin) 預置一段內存 f range list
g (Go) 執行程序 g [=address][address...]
h (Hexavithmetic) 制算術運算 h value value
i (Input) 從指定埠地址輸入 i pataddress
l (Load) 讀盤 l [address [driver seetor]]
m (Move) 內存塊傳送 m range address
n (Name) 置文件名 n filespec [filespec...]
o (Output) 從指定埠地址輸出 o portadress byte
q (Quit) 結束 q
r (Register) 顯示和修改寄存器 r [register name]
s (Search) 查找位元組串 s range list
t (Trace) 跟蹤執行 t [=address] [value]
u (Unassemble) 反匯編 u [address ]或range
w (Write) 存檔 w [address[driver sector secnum]]
? 聯機幫助 ?

debug小匯編a命令

debug小匯編a命令是一個很有用的功能,許多的小程序都要他來做。

編一些小程序比匯編要來得方便,快潔。
在Debug中,中斷是非常有用的,首先,讓我們先了解一下中斷。
所謂中斷,其實,就是,當你做某事時,有人過來找你有其他事,你先放下手中的事(計算機中,稱為保護現場),再去與叫你的那個人辦事去,等完了,你又回,接著做剛才的事。這是個很通俗的講法。
計算機在運行時,也會出現這種情況,我們叫之中斷。
下面是他的一些常用中斷向量的入口值詳解:(記住哦,很用的...呵呵)
IBM PC 中斷 int10
ooH 屏幕方式設置

入口:AH=0,AL=顯示方式代碼(0--6)
0:40*25 黑白
1:40*25 彩色
2:80*25 黑白
3:80*25 彩色文本
4:320*200 彩色
5:320*200 黑白
6:640*200 黑白圖形模式
7:80*25 單色字元(單色顯示器)

0BH 色彩設置
入口:AH=0B,BL=0 設背景色,BH=0--15 BL=1 設調色碼,BH=0--1
0CH 寫圖形點
入口:AH=0C,CX:DX=列號:行號,AL=顏色
ODH 讀圖形點
入口:AH=0D,CX:DX=列號:行號
返回:AL=顏色
0EH 在當前頁、當前游標處寫字元
入口:AH=0E,AL=字元的ASCII碼,BL=前景色
OFH 顯示器狀態
入口:AH=0F
返回:AL=當前顯示器方式,AH=屏幕列數,BH=當前頁號

01H 游標設置
入口:AH=1,CH=游標起始行號(00--0C),CL=游標結束行號(00--0C)
註:CH > CL
02H 游標定位
入口:AH=2,BH=頁號,DH:DL=起始行:列
03H 讀游標位置
入口:AH=3,BH=頁號。
返回:DH:DL=起始行:列
06H 窗口上卷
入品:AH=6,AL=窗口上卷行數,CH:CL-DH:DL 窗口坐標
註:AL=0 卷動整個窗口
07H 窗口下卷
入口:AH=7,AL=窗口下卷行數,CH:CL-DH:DL 窗口坐標
08H 讀當前游標處字元和屬性
入口:AH=8,BH=頁號。
返回:AH:AL=字元的顏色:字元的ASCII碼
註:顏色代碼見下對照表
09H:在當前游標處寫字元和屬性
註:游標不下移
入口:AH=9,BH=頁號,BL:AL=字元的顏色:字元的ASCII碼,CX=重復次數
1 2 3 4 5 6 7 8
BL R G B I R G B
閃爍 字元底色 加亮 字元顏色

中斷向量號表

中斷號 解釋 中斷號 解釋
0 除數為0錯 19 引導裝入程序
1 音步中斷 1A 日時調用
2 不可屏蔽中斷NMI 1B 鍵盤阻斷時得到控制權
3 斷電中斷(CCH) 1C 時鍾中斷時得到控制權
4 溢出中斷 1D 指向CRT初始參數表
5 屏幕列印中斷 1E 指向盒帶參數表
6-7 保留 1F 1KB圖形模式
8 計時器中斷(18.2秒) 20 結束DOS程序
9 鍵盤中斷 21 DOS功能調用
A-D 保留 22 結束地址(建義用EXEC)
E 軟盤機中斷 23 DOS Crtl-Break退出地址
F 保留 24 DOS致命錯向量
10 屏幕I/O調用 25 DOS絕對磁碟讀
11 設備檢查調用 26 DOS絕對磁碟寫
12 存儲器檢查調用 27 結束程序並駐留(建義用31h)
13 軟盤機I/O調用 28-3F DOS保留
14 RS-233I/O調用 40-7F 未用
15 盒帶機I/O調用 80-85 BASIC保留
16 鍵盤I/O調用 86-F0 BASIC解釋程序用
17 列印機I/O調用 F1-FF 未用
18 ROM-BASIC入口

指令名詳解
call 指令(過程調用)(控制指令-長轉移)

詳解:

段內直接調用

段內間接調用(寄存器)

段內間接調用(存儲器)

段間直接調用

段間間接調用

指令名
jmp 指令(無條件轉移指令)(控制指令-長轉移)

詳解:
段內直接跳轉

短段內直接跳轉

段內間接跳轉(寄存器)

段內間接跳轉(存儲器)

段間直接跳轉

段間間接跳轉

指令名
ret 指令(過程返回)(控制指令-長轉移)

詳解:

段內返回

段內返回立即數加於sp

段間返回

段間返回立即數加於sp

na/jnbe 指令(控制指令-短轉移) 不小於或不等於時轉移

jae/jnb 指令 (控制指令-短轉移) 大於或等於時轉移

jb/jnae 指令 (控制指令-短轉移) 小於轉移

jbe/jna 指令 (控制指令-短轉移) 小於或等 於轉移

jg/jnle 指令(控制指令-短轉移) 大於轉移

jge/jnl 指令 (控制指令-短轉移) 大於或等於轉移

jl/jnge 指令 (控制指令-短轉移) 小於轉移

jle/jng 指令 (控制指令-短轉移) 小於或等 於轉移

je/jz 指令 (控制指令-短轉移) 等於轉移

jne/jnz 指令 (控制指令-短轉移) 不等於轉移

jc 指令 (控制指令-短轉移) 有進位時轉移

jnc 指令 (控制指令-短轉移) 列進位時轉移
jno 指令 (控制指令-短轉移) 不溢出時轉移
jnp/jpo 指令 (控制指令-短轉移) 奇偶性為奇數時轉移

jns 指令 (控制指令-短轉移) 符號位為"0"轉移

jo 指令 (控制指令-短轉移) 溢出轉移

jp/jpe 指令 (控制指令-短轉移) 奇偶性為偶數時轉移

js 指令 (控制指令-短轉移) 符號位為"1"時轉移

loop 指令 (循環控制指令-短轉移) cx 不為0時循環

loope/loopz 指令 (循環控制指令-短轉移) cx 不為0且標志 z=1 時循環

loopne/loopnz 指令 (循環控制指令-短轉移) cx 不為0且標志 z=0 時循環

jcxz 指令 (循環控制指令-短轉移) cx 為0時轉移

★int 指令 (中斷指令) 中斷指令(後詳解)

into 指令 (中斷指令) 溢出中斷

iret 指令 (中斷指令) 中斷返回

指令名
shl 指令(邏輯左移)
sal 指令(算術左移)
shr 指令(邏輯右移)
sar 指令(算術右移) 寄存器,1
rol 指令(循環左移) 寄存器,cl
ror 指令(循環右移) 存儲器,1
rcl 指令(通過進位的循環左移)存儲器,cl
rcr 指令(通過進位的循環右移)(邏輯運算)
not 指令(取反運算)寄存器求反

(邏輯運算)存儲器求反

and 指令(與運算) (邏輯運算)

寄存器 and 寄存器 寄存器
寄存器 and 存儲器 寄存器

存儲器 and 寄存器 存儲器

立即數 and 存儲器 存儲器

立即數 and 累加器 累加器

or 指令(或運算)(邏輯運算)

寄存器 or 寄存器 寄存器
寄存器 or 存儲器 寄存器

存儲器 or 寄存器 存儲器

立即數 or 存儲器 存儲器

立即數 or 累加器 累加器

test 指令(測試) (邏輯運算)

寄存器 test 寄存器
寄存器 test 存儲器
寄存器 test 立即數
存儲器 test 立即數
累加器 test 立即數

movs 指令(串傳送)(字元串操作指令)
單個傳送
重復傳送

cmps 指令(串比較) (字元串操作指令)
單個比較
重復比較

scas 指令(串掃描)(字元串操作指令)
單個搜索
重復搜索

lods 指令(裝入串)
(字元串操作指令)
單個裝載
重復裝載

stos 指令(保存串) (字元串操作指令)
單個存儲
重復存儲

mov 指令(傳送字或位元組)(數據傳送命令)
寄存器與寄存器間傳送
存儲器與寄存器間傳送
立即數傳送給存儲器
立即數傳送給寄存器
存儲器傳送給累加器
累加器傳送存儲器
寄存器傳送給段寄存器
存儲器傳送給段寄存器
段寄存器傳送給寄存器
段寄存器傳送給存儲存器

pop 指令(把字彈出堆棧) (數據傳送命令)

push 指令(把字壓入堆棧)
存儲器
寄存器
段寄器
xchg 指令(交換字或位元組) (數據傳送命令)
寄存器與寄存器交換
存儲器與寄存器交換
寄存器與累加器交換

in 指令(埠輸入) (數據傳送命令)
直接輸入
間接輸入

out 指令(埠輸出) (數據傳送指令)
直接輸出
間接輸出

add 指令(加法)(算術指令)
adc 指令(帶進位加法)
寄存器+寄存器 寄存器
寄存器+存儲器 寄存器
存儲器+寄存器 存儲器
立即數+存儲器 存儲器
立即數+累加器 累加器

inc 指令(加1)(算術指令)
存儲器增量
寄存器增量

④ 數字電視的市場特徵

隨著數字電視技術走進尋常百姓家裡,他就伴隨著豐富的節目內容和實用而又充滿娛樂的互動式應用。互動式應用為電視用戶發掘節目內容提供了必要的手段。一個典型的互動式應用為電子節目指南(EPG),他能夠提供不同頻道在不同時間段上的節目內容,包括種類、內容簡介、播出時間等信息,還能提供自動錄入磁帶,待機時自動喚醒等功能。

有數字電視節目而不提供准節目點播(NVOD)或付費收視(PPV)是不可想像的。因此每一個數字電視運營商在推出其數字電視業務時總是有NVOD服務的,否則他們寧可晚些時推出其數字電視業務。最佳的情況當然是視頻點播服務(VOD),但在廣播(broadcast)的環境中由於帶寬的限制,真正意義上的「點播」是非常難實現的。對大部分的電視用戶來說,准節目點播(NVOD)提供的服務已足夠了。NVOD的特徵是採用多個頻道,在定點定時重復播放,如每隔30分鍾播放一次,這就同點播差不多了。

互動式應用的最大好處就是為運營商帶來了新的收入增長點,這也是在數字電視運營不斷向前發展走向成熟而逐步認識到的。他主要表目前電子商務的概念運用到電視中,形成了沒有泡沫,簡單易行,深受歡迎的電視電子商務,或簡稱「電視商務」。有幾個典型的應用是屬於電視商務的,如電視購物、家庭銀行、股票信息及博彩等。電視購物程式將豐富的商品分類,並有簡易的文字和圖片介紹,觀眾可選擇他們所喜愛的商品,只要在遙控器上按幾下鍵,就可完成選購和交款的工作,且商品會在短時間內送上門來,大大地方便了人們的生活。家庭銀行能夠為觀眾提供銀行帳戶的查詢及轉帳的工作,無須再到銀行櫃台前去排隊填表了,節省了時間。股票和博彩更是將人們和外面的世界緊密地聯系在一起,通過指頭一點便了解令人激動的股票行情,熱情投入到炒股大軍中,豈不是一大快樂?體育彩票是一項有益的活動,他既為國家創造利潤,也為自己帶來樂趣和收益(在運氣好時)。 一般的交互應用更有非常多,如天氣預告、新聞和本地信息、交通狀況通報、和實時節目有關的信息及廣告等,多得不可勝數。總之這些應用都給運營商帶來了良好的品牌形象和較大的經濟效益,同時也大大的吸引新的電視用戶和使老用戶更加忠誠。

隨著科學技術的不斷發展,尤其是永久存儲介質(如硬碟等)價格的下降,在個人計算機PC機習以為常的硬碟正被用於數字電視機頂盒中,這不僅為軟硬體的設計和研發提出了新的挑戰,也使得運營商從新的角度來發掘互動式應用的市場。

新一代互動式應用的技術特徵

存儲設備(包括硬碟、內存等)是一種高技術產品,其容量的增加和價格的減低都是呈指數曲線變化,但這一變化趨勢不象處理器能力的增強和帶寬的增加這兩種數字技術的發展那麼引起人們的注意。但他們是同樣重要。他將影響到數字產品的類型、新的服務及新的商業模式。事實上,已有一些技術公司將高容量數字存儲設備(一般都在30G以上)用於數字電視機頂盒中,正在研發新的應用和服務。在下面的介紹中我們將這種本地數字存儲設備簡稱為硬碟。

如果只將高容量的硬碟當作一種簡單的存儲介質(如PC機的硬碟那樣),用作數字錄相機(Digital Recorder), 那未免就有點目光短淺。基於這種存儲的新服務和業務正給消費者、廣告商、版權所有者、電視運營商及OEM技術供給商等帶來令人激動的機遇和新的收益。實際上,他能如此引起人們的重視,是因為有了他,數字電視機頂盒就變成了一個實實在在的「家庭媒體伺服器(Home Media Server)」。

家庭媒體伺服器的特徵

完備的家庭媒體伺服器具有下面的特徵:

1. 大容量:他可存儲幾十小時甚至幾天的節目內容。

2. 非線性搜索:他象磁碟而非磁帶那樣能進行非線性搜索,快速尋找已存儲的資料,且能夠同時進行讀和寫,提供一邊觀看一邊錄的功能。

3. 支持「宏數據(Meta Data)」處理。這種數據用來描述一個節目或其中的一段,能夠將節目內容進行「聰明」的管理和分類。

4. 提供相應的用戶界面友好的軟體以便非常容易的找尋和播放已存儲的節目內容。

家庭媒體伺服器的工作方式

由於能進行大容量的存儲,家庭媒體伺服器或帶有硬碟的數字電視機頂盒被用來預先存儲大量的節目,以便電視用戶隨時觀看。

家庭媒體伺服器主要有兩種工作方式:

1. 邊錄邊看正在播放的節目,即Time-Shifting功能

2. 定時下載並存儲非正在播放的節目,即Content Push

邊錄邊看(Time-Shifting)應該是這種新一代數字電視機頂盒的一項內置基本功能。由於有足夠的存儲空間,在電視用戶觀賞某一節目時,組成該節目的音視頻及數據流(MPEG-2 Streams)也自動地記錄了下來。這樣有兩種用途:

暫停觀看而不中斷。如正在觀看某一出色電影,可忽然電話響了,是一好朋友打來的,且長時間沒見面了,那自然要聊上一會兒。這樣可暫停觀看,而該電影從此時刻起所有的內容被自動記錄下來了。15分鍾或半個小時後,你能從以前中斷的地方接著往下觀看。這樣既沒有耽誤你的電話,又不中斷節目的觀看。

隨意瀏覽其他頻道。有些人在觀看某個頻道時,其節目內容不錯,但又想知道其他的頻道在放什麼。這時,Time-Shifting又可幫上大忙了:他可繼續記錄當前的頻道和播放的內容,而你可調節到其他的頻道上去,看看有什麼更出色的節目。這樣能在又回到原來的頻道上時接著當時暫停的地方繼續看下去。當然這種功能需要有2個調諧器(Tuner)。

邊錄邊觀看(Time-Shifting)並不是這種家庭媒體伺服器機頂盒最誘人的功能。他最多給電視用戶帶來許多新的方便而已。他並不能帶來什麼新的增值服務,就象EPG於第一代機頂盒相同,為人們查找電視節目帶來方便。但並不是個能帶來經濟效益的交互應用。

自然人們會想到利用新一代機頂盒的存儲功能,給電視用戶「悄悄地」送去許多新的內容。這些內容大致能分為兩類:

1. 需付費才能收看的:如新電影、文件資料等

2. 免費資料:這主要是一些廣告等資料

這些節目及資料能通過這些用戶自己選擇, 根據他感興趣的內容在預定的時間, 當不必看電視時(如深夜),通過網路(衛星,有線網等)自動下載並存儲到電視用戶的機頂盒中。在用戶想觀看時,他選擇想觀看的內容,自動播放,並且提供(當然地)暫停、回放或快進等功能。這些節目的觀看能是付費的,每觀看一次要付一定的費用。這樣「家庭媒體伺服器」就變成了一種「本地視頻點播器(Local Video On Demand),從另一個角度來完成VOD的功能。

節目內容的存儲

能想像,一旦家中有了一個大容量的數字存儲設備,其容量隨著技術的進步而越來越大,但其價格也越來越低,其可存儲的內容也就會越來越多。他包括加密的用於點播的付費節目(Pay-Per-View),也包括一些來源於某些運營商的節目,他們可能形成一個「虛擬頻道」,即有一個連續結構指向某伺服器,而且一個電視用戶還可接收不同的運營商送來的節目,當然電視用戶也可存儲其個人資料,如相片等。當這種存儲的內容達到一定的數量時,那存儲設備就會分成不同的塊,形成一些不完整的部分。怎麼將這些復雜的內容向用戶展示,提供一個簡單的索引和目錄(Catalogue),是值得研究的。

伺服器的技術難點

盡管大容量的存儲設備(如硬碟)在PC機環境下使用已非常多年了,但要確保他在數字電視機頂盒的環境下良好運行並不是那麼容易的。這主要的原因有二:

1. 機頂盒是個實時工作環境。數據的讀取和存儲需求能滿足用戶的實時習慣:看電視是實時的,每秒要播放25幅圖像呢。而PC機則不是個實時工作環境,因而對實時性需求不強。

2. 機頂盒的內存是有限的。一般為8M或16M,有些更少。而PC則至少需要64M,甚至128M或256M才能正常工作。

帶硬碟的機頂盒的技術難點主要在以下幾個方面:

1. 怎樣在存儲設備(硬碟)建立一個有效的、存取容易的文件系統,以便滿足節目內容存取的實時性需求。 2. 怎麼確保伺服器能實時地接收從解復用模塊來的數據並把他再合成TS流而存儲到硬碟上。

3. 在存儲的同時,伺服器怎麼能確保響應媒體播放器的需求,不斷地讀取數據並把他再送到MPEG-2解碼器,讓內容完整地播放出來,且可能同時有幾個媒體播放器在工作。

4. 怎麼對存儲的內容進行加擾,而在播放時再解擾,而怎麼保護節目內容供給商的版權以保護他們在新一代的數字電視機頂盒的互動式應用中獲取更多的利益。

這些技術難點主要都是在和存儲設備應用有關的軟體系統的設計和研發上。

節目內容版權的保護

電視節目和電影等的製作需要投入大量的人力物力。怎麼保護這些節目內容,使得製作者的權益不受侵犯。這便是硬碟機頂盒和以此為基礎的新一代交互應用是否有市場前景的關鍵問題。如果節目內容(如電影等)被下載存儲到機頂盒中,電視用戶可隨意觀看而不交所有費用,那內容提供商是不會樂意的,因而也就不會提供好的節目,運營商也就不能從中獲利。如果存儲的新電影每次再看都能收取一定的費用,且別人不可能盜版到其他的地方去,那將會給節目提供商和內容運營商帶來巨大的利益。 TV Anytime 專家組(TV Anytime Forum)對這個問題作了不少研究,提出了版權管理和保護系統的概念(Content Management and Protection System,簡稱CMPS)。CMPS和數字電視機頂盒中的條件接收(Conditional Access)系統緊密聯系,也和「家庭媒體伺服器」直接相聯。 CMPS模塊的主要功能如下:

1. 當媒體伺服器需要向硬碟文件系統寫文件時,他向CMPS模塊發出請求,CMPS獲取Bitstreams中的ECM信息並能通過Smart Card模塊實時地產生EMM。ECM和EMM信息通過再復用模塊和應該存儲的節目內容(如由Video/Audio PID指使的Bitstreams)一起再復用變成TS流,這個TS流就直接以文件的形式存在硬碟的文件系統中。

2. 當媒體播放器要播放用戶選擇的節目時,媒體伺服器從硬碟文件系統中讀取相應的TS流文件,將TS流傳給解復用模塊,同時媒體伺服器將相應的ECM/EMM信息傳給CMPS模塊。根據用戶的許可權,CMPS又再將ECM/EMM送給Smart Card模塊。SC模塊將控制字解碼出來,通過伺服器送給解擾模塊。這樣用戶就能觀看播放的節目內容了。

根據不同的節目內容和不同的商業運營模式,能採用不同的收視控制方式,如一個節目(一部電影)可允許觀看3次,還能象PPV那樣提供一定時間的預覽等。所有這些信息都由CMPS提供管理。

市場需求預測

目前數字家庭媒體伺服器機頂盒市場並未大規模啟動。Tivo和Replay TV在美國推出了這一服務,但只用於模擬電視領域。但鑒於這種新一代機頂盒所能帶來的利益,能認為他是有前途和生命力的。英國的Durlacher公司對帶硬碟的機頂盒將在歐洲市場的情況作了預測。根據電視用戶對電視節目的喜好、數字電視增長的情況和硬碟存儲設備價格的下降,能有兩種可能的情況:

1. 快速增長的情況

2. 慢速增長的情況

即使根據這個保守的估計,這種新一代機頂盒和新的互動式服務的市場發展也是令人鼓舞的。

未來展望和結論

目前已有一些公司在研究這種帶大容量存儲能力的數字電視機頂盒,Tivo和Replay TV是兩家在這一領域起步較早的公司,且他們已在美國市場上推出了這一服務(目前尚限於模擬電視領域)。

目前已知正在這一領域進行研究的公司有機頂盒的設計和製造商(如TMM、Nokia、PACE、EchoStar, SONY等),有數字電視系統技術研發商(如Canal+ Technologies 、 NDS 、Liberate, EnReach, Metabyte 等),也有一些運營商已推出了服務(如 AOL的AOL TV ),Microsoft 推出了具有PVR功能的UltimateTV。法國電視運營商 Canal+和Canal Satellite 正在集成和測試新一代機頂盒,預計在2002年9月正式推出和硬碟存儲器相關的服務。

毫無疑問,帶大容量存儲能力的硬碟數字電視機頂盒是數字電視技術發展的趨勢,他的使用必將給互動式應用無論從形式還是商業模式上都會帶來生機和新的動力,為運營商和內容提供商帶來新的收入增長點和更大的經濟利益,也為電視用戶帶來豐富的節目內容和更多的娛樂。

⑤ 各位大蝦幫我一下吧!翻譯這段代碼

怎麼截獲一個游戲的封包? 怎麼去檢查游戲伺服器的ip地址和埠號?

Internet用戶使用的各種信息服務,其通訊的信息最終均可以歸結為以IP包為單位的信息傳送,IP包除了包括要傳送的數據信息外,還包含有信息要發送到的目的IP地址、信息發送的源IP地址、以及一些相關的控制信息。當一台路由器收到一個IP數據包時,它將根據數據包中的目的IP地址項查找路由表,根據查找的結果將此IP數據包送往對應埠。下一台IP路由器收到此數據包後繼續轉發,直至發到目的地。路由器之間可以通過路由協議來進行路由信息的交換,從而更新路由表。

那麼我們所關心的內容只是IP包中的數據信息,我們可以使用許多監聽網路的工具來截獲客戶端與伺服器之間的交換數據,下面就向你介紹其中的一種工具:WPE。

WPE使用方法: 執行WPE會有下列幾項功能可選擇:

SELECT GAME 選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。

TRACE 追蹤功能。用來追蹤擷取程式送收的封包。 WPE必須先完成點選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。 您可以隨時按下 | | 暫停追蹤,想繼續時請再按下 | | 。 按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。 若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設定值自動停止。 如果您沒有擷取到資料,試試將OPTION里調整為Winsock Version 2。 WPE 及 Trainers 是設定在顯示至少16 bits 顏色下才可執行。

FILTER 過濾功能。用來分析所擷取到的封包,並且予以修改。

SEND PACKET 送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER 製作修改器。

OPTIONS 設定功能。讓您調整WPE的一些設定值。

FILTER的詳細教學

- 當FILTER在啟動狀態時 ,ON的按鈕會呈現紅色。 - 當您啟動FILTER時,您隨時可以關閉這個視窗。FILTER將會保留在原來的狀態,直到您再按一次 on / off 鈕。 - 只有FILTER啟用鈕在OFF的狀態下,才可以勾選Filter前的方框來編輯修改。 - 當您想編輯某個Filter,只要雙擊該Filter的名字即可。

NORMAL MODE:

範例:

當您在 Street Fighter Online [快打旋風線上版]游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包: SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44

您的第一個火球讓對方減了16滴[16 = 10h]的生命值, 而您觀察到第4跟第5個封包的位置4有10h的值出現,應該就是這里了。

您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數值是發出火球的關鍵。

因此您將0A 09 C1 10填在搜尋列[SEARCH],然後在修改列[MODIFY]的位置4填上FF。如此一來,當您再度發出火球時,FF會取代之前的10,也就是攻擊力為255的火球了!

ADVANCED MODE:

範例: 當您在一個游戲中,您不想要用真實姓名,您想用修改過的假名傳送給對方。在您使用TRACE後,您會發現有些封包裡面有您的名字出現。假設您的名字是Shadow,換算成16進位則是[53 68 61 64 6F 77];而您打算用moon[6D 6F 6F 6E 20 20]來取代他。 1) SEND-> 0000 08 14 21 06 01 04 2) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 09 4) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔細看,您的名字在每個封包中並不是出現在相同的位置上

- 在第2個封包里,名字是出現在第4個位置上 - 在第4個封包里,名字是出現在第6個位置上

在這種情況下,您就需要使用ADVANCED MODE - 您在搜尋列[SEARCH]填上:53 68 61 64 6F 77 [請務必從位置1開始填] - 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數值被發現的位置開始替代連續數值[from the position of the chain found]。 - 現在,在修改列[MODIFY]000的位置填上:6D 6F 6F 6E 20 20 [此為相對應位置,也就是從原來搜尋欄的+001位置開始遞換] - 如果您想從封包的第一個位置就修改數值,請選擇[from the beginning of the packet]

了解一點TCP/IP協議常識的人都知道,互聯網是將信息數據打包之後再傳送出去的。每個數據包分為頭部信息和數據信息兩部分。頭部信息包括數據包的發送地址和到達地址等。數據信息包括我們在游戲中相關操作的各項信息。那麼在做截獲封包的過程之前我們先要知道游戲伺服器的IP地址和埠號等各種信息,實際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲伺服器的IP地址,比如金庸群俠傳就是如此,那麼除了這個我們還可以在DOS下使用NETSTAT這個命令,

NETSTAT命令的功能是顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。或者你可以使用木馬客星等工具來查看網路連接。工具是很多的,看你喜歡用哪一種了。

NETSTAT命令的一般格式為: NETSTAT [選項]

命令中各選項的含義如下: -a 顯示所有socket,包括正在監聽的。 -c 每隔1秒就重新顯示一遍,直到用戶中斷它。 -i 顯示所有網路介面的信息。 -n 以網路IP地址代替名稱,顯示出網路連接情形。 -r 顯示核心路由表,格式同"route -e"。 -t 顯示TCP協議的連接情況。 -u 顯示UDP協議的連接情況。 -v 顯示正在進行的工作。

三:怎麼來分析我們截獲的封包?

首先我們將WPE截獲的封包保存為文本文件,然後打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):

第一個文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12

第二個文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77

我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。

因為一般的數據包加密都是異或運算,所以這里先講一下什麼是異或。 簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今後會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。

下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些位元組空間來便於日後的擴充,也就是說數據包里會存在一些"00"的位元組,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!

我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:

第一個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

第二個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!

接下來就是搞清楚一些關鍵的位元組所代表的含義,這就需要截獲大量的數據來分析。

首先我們會發現每個數據包都是"F4 44"開頭,第3個位元組是變化的,但是變化很有規律。我們來看看各個包的長度,發現什麼沒有?對了,第3個位元組就是包的長度! 通過截獲大量的數據包,我們判斷第4個位元組代表指令,也就是說客戶端告訴伺服器進行的是什麼操作。例如向伺服器請求戰斗指令為"30",戰斗中移動指令為"D4"等。 接下來,我們就需要分析一下上面第一個包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什麼信息呢?應該有通知伺服器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什麼地方。 我們再PK一個小嘍羅(就是大理客棧外的那個咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利於游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,伺服器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在後面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了! (這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)

第一個包的分析暫時就到這里(裡面還有的信息我們暫時不需要完全清楚了)

我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2隻哦)看看包的格式: SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣伺服器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。

那麼,這個包的格式應該比較清楚了:第3個位元組為包的長度,"DA"為指令,第5個位元組為NPC個數,從第7個位元組開始的10個位元組代表一個NPC的信息,多一個NPC就多10個位元組來表示。

大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。

通過在戰斗中出現增援截獲的數據包,我們會發現伺服器端發送了這樣一個包: F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8個位元組為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。 那麼,我們就利用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。

四:怎麼冒充"客戶端"向"伺服器"發我們需要的封包?

這里我們需要使用一個工具,它位於客戶端和伺服器端之間,它的工作就是進行數據包的接收和轉發,這個工具我們稱為代理。如果代理的工作單純就是接收和轉發的話,這就毫無意義了,但是請注意:所有的數據包都要通過它來傳輸,這里的意義就重大了。我們可以分析接收到的數據包,或者直接轉發,或者修改後轉發,或者壓住不轉發,甚至偽造我們需要的封包來發送。

下面我們繼續講怎樣來同時欺騙伺服器和客戶端,也就是修改封包和偽造封包。 通過我們上節的分析,我們已經知道了打多個NPC的封包格式,那麼我們就動手吧!

首先我們要查找客戶端發送的包,找到戰斗的特徵,就是請求戰斗的第1個包,我們找"F4 44 1F 30"這個特徵,這是不會改變的,當然是要解密後來查找哦。 找到後,表示客戶端在向伺服器請求戰斗,我們不動這個包,轉發。 繼續向下查找,這時需要查找的特徵碼不太好辦,我們先查找"DA",這是客戶端發送NPC信息的數據包的指令,那麼可能其他包也有"DA",沒關系,我們看前3個位元組有沒有"F4 44"就行了。找到後,我們的工作就開始了!

我們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。

然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意演算法,不要造成較大延遲。

上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^

發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00 00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。

以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。

上面講的需要一定的編程基礎,但是不難,即使你不會編程,相信你繼續看下去就會有收獲了。

五:怎麼用計算機語言去寫一個單機代理?

在上一章,我們已經對於代理的原理進行了講解,大家對於代理已經有了一個初步的認識,現在我教大家如何用計算機語言編寫一個自己的代理,我們考慮到簡單明了,我們選用VB,因為用VB編寫代理只需要很少的代碼。

代碼如下:

Private Sub Form_Load() DaiLi.LocalPort = "1234" Server.RemotePort = "1234" Server.RemoteHost = "211.100.20.26" DaiLi.Listen End Sub

Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect Client.Accept requestIDEnd Sub

Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte Client.GetData ClientToServer Server.SendData ClientToServerEnd Sub

Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte Server.GetData ServerToClient Client.SendData ServerToClientEnd Sub

Form_Load()這個過程表示在程序啟動的時候要做的一些初始化操作。 DaiLi.LocalPort = "1234" 設定監聽埠 Server.RemotePort = "1234" 設定象游戲伺服器連接的埠(和監聽埠是相同的) Server.RemoteHost = "211.100.20.26" 設定游戲伺服器的IP地址 DaiLi.Listen 監聽本地的連接請求 這時你只要將游戲的伺服器列表的IP改成127.0.0.1,那麼游戲的客戶端程序就會來連接我們的代理,我們的代理會調用如下的過程: Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect 代理客戶端向伺服器連接 Client.Accept requestID 接受客戶端的連接請求 End Sub

當客戶端向伺服器發送數據時,就會調用下邊的過程 Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte 變數定義,請求了一個用於存放數據的空間 Client.GetData ClientToServer 客戶端的連接接收這些數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發向伺服器。

Server.SendData ClientToServer 伺服器的連接把這些數據發向伺服器 End Sub

當伺服器發送數據給客戶端時,會調用下邊的過程 Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte 變數定義,請求了一個用於存放數據的空間 Server.GetData ServerToClient 伺服器連接接收數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發給客戶端。

Client.SendData ServerToClient End Sub

用其他語言編寫基本的原理也是差不多的,不過可能稍微要麻煩一些,因為VB本身有一個MSWINSCK.OCX控制項,這個控制項封裝了WINDOWS的網路操作,而且介面很簡單,推薦大家使用。

六:如果單機代理被封,我們怎麼利用底層的技術來接管游戲的發包?

在WINDOWS系統中,網路通訊的任務是由一個叫WSOCK32.DLL(在SYSTEM目錄下)來完成的,每當游戲被運行時,他都會自動的去調用這個動態連接庫,因為在WINDOWS系統中對於文件的搜索順序是 程序目錄>系統目錄>路徑中設置的目錄,所以我們就有機會替換掉系統的WSOCK32.DLL使的游戲調用我們的WSOCK32.DLL,這樣我們就有了對於游戲封包絕對的控制權,有人問:"我們應該怎麼做呢?",我們只要自己編寫一個WSOCK32.DLL放到游戲的目錄下,就OK了,當然讓我們完全自己去編寫一個WSOCK32.DLL是不太現實的,因為本身網路通訊要處理很多更底層的東西,比如說從網卡讀取BIT流,所以我們選擇由我們的WSOCK32.DLL去調用系統的WSOCK32.DLL來完成這個功能。

WSOCK32.DLL有很多的輸出函數,函數如下: __WSAFDIsSet accept AcceptEx Arecv Asend bind closesocket closesockinfo connect dn_expand EnumProtocolsA EnumProtocolsW GetAcceptExSockaddrs GetAddressByNameA GetAddressByNameW gethostbyaddr gethostbyname gethostname GetNameByTypeA GetNameByTypeW getnetbyname getpeername getprotobyname getprotobynumber getservbyname getservbyport GetServiceA GetServiceW getsockname getsockopt GetTypeByNameA GetTypeByNameW htonl htons inet_addr inet_network inet_ntoa ioctlsocket listen MigrateWinsockConfiguration NPLoadNameSpaces NSPStartup ntohl ntohs rcmd recv recvfrom rexec rresvport s_perror select send sendto sethostname SetServiceA SetServiceW setsockopt shutdown socket TransmitFile WEP WSAAsyncGetHostByAddr WSAAsyncGetHostByName WSAAsyncGetProtoByName WSAAsyncGetProtoByNumber WSAAsyncGetServByName WSAAsyncGetServByPort WSAAsyncSelect WSACancelAsyncRequest WSACancelBlockingCall WSACleanup WSAGetLastError WSAIsBlocking WSApSetPostRoutine WSARecvEx WSASetBlockingHook WSASetLastError WSAStartup WSAUnhookBlockingHook WsControl WSHEnumProtocols

在這里,不是所有的函數都要修改,因為我們只關心發送和接收的封包,所以我們只要修改send 和recv兩個函數,前者是發送封包的後者是接收封包的,我們在這兩個函數的處理中加入我們自己的代碼,來完成封包的辨認,修改以及轉發等功能。

七:怎麼來分析客戶端的有關資料?

自己作外掛,大多時候要分析封包,不過因為有的功能是由客戶端來辨別的,所以分析客戶端的程序同樣也很重要,分析客戶端首先要求你能看懂匯編指令(只要"看懂",要求很低的),其次是要能夠熟練的運用一些工具,然後能剩下的也就是運氣和游戲公司的漏洞了。(哈,不是每次都能成功的啊)下邊我分步教給大家。

第一章 8086匯編指令

註:AX,BX,CX...,EAX,EBX,ECX...這些都是CPU用來存儲數據的地方。

一、數據傳輸指令 作用:它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或位元組. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. PUSH 把字壓入堆棧. POP 把字彈出堆棧. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧. BSWAP 交換32位寄存器里位元組的順序 XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數) CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX ) XADD 先交換再累加.( 結果在第一個操作數里 ) XLAT 位元組查表轉換. BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即 0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )

2. 輸入輸出埠傳送指令. IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} ) OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 ) 輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,其范圍是 0-65535.

3. 目的地址傳送指令. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 標志傳送指令. LAHF 標志寄存器傳送,把標志裝入AH. SAHF 標志寄存器傳送,把AH內容裝入標志寄存器. PUSHF 標志入棧. POPF 標志出棧. PUSHD 32位標志入棧. POPD 32位標志出棧.

二、算術運算指令 ADD 加法. ADC 帶進位加法. INC 加 1. AAA 加法的ASCII碼調整. DAA 加法的十進制調整. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之). CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果). AAS 減法的ASCII碼調整. DAS 減法的十進制調整. MUL 無符號乘法. IMUL 整數乘法. 以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算), AAM 乘法的ASCII碼調整. DIV 無符號除法. IDIV 整數除法. 以上兩條,結果回送: 商回送AL,余數回送AH, (位元組運算); 或 商回送AX,余數回送DX, (字運算). AAD 除法的ASCII碼調整. CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去) CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去) CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去) CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令 AND 與運算. OR 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 通過進位的循環左移. RCR 通過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操作碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL

四、串指令 DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重復次數計數器. AL/AX 掃描值. D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量. Z標志 用來控制掃描或比較操作的結束. MOVS 串傳送. ( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字元. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串作比較,比較結果反映在標志位. LODS 裝入串. 把源串中的元素(字或位元組)逐一裝入AL或AX中. ( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重復. REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復. REPC 當CF=1且CX/ECX<>0時重復. REPNC 當CF=0且CX/ECX<>0時重復.

五、程序轉移指令 1>無條件轉移指令 (長轉移) JMP 無條件轉移指令 CALL 過程調用 RET/RETF過程返回. 2>條件轉移指令 (短轉移,-128到+127的距離內) ( 當且僅當(SF XOR OF)=1時,OP1循環控制指令(短轉移) LOOP CX不為零時循環. LOOPE/LOOPZ CX不為零且標志Z=1時循環. LOOPNE/LOOPNZ CX不為零且標志Z=0時循環. JCXZ CX為零時轉移. JECXZ ECX為零時轉移. 4>中斷指令 INT 中斷指令 INTO 溢出中斷 IRET 中斷返回 5>處理器控制指令 HLT 處理器暫停, 直到出現中斷或復位信號才繼續. WAIT 當晶元引線TEST為高電平時使CPU進入等待狀態. ESC 轉換到外處理器. LOCK 封鎖匯流排. NOP 空操作. STC 置進位標志位. CLC 清進位

⑥ 求WPE在武林外傳的用法

怎麼截獲一個游戲的封包? 怎麼去檢查游戲伺服器的ip地址和埠號?

Internet用戶使用的各種信息服務,其通訊的信息最終均可以歸結為以IP包為單位的信息傳送,IP包除了包括要傳送的數據信息外,還包含有信息要發送到的目的IP地址、信息發送的源IP地址、以及一些相關的控制信息。當一台路由器收到一個IP數據包時,它將根據數據包中的目的IP地址項查找路由表,根據查找的結果將此IP數據包送往對應埠。下一台IP路由器收到此數據包後繼續轉發,直至發到目的地。路由器之間可以通過路由協議來進行路由信息的交換,從而更新路由表。

那麼我們所關心的內容只是IP包中的數據信息,我們可以使用許多監聽網路的工具來截獲客戶端與伺服器之間的交換數據,下面就向你介紹其中的一種工具:WPE。

WPE使用方法: 執行WPE會有下列幾項功能可選擇:

SELECT GAME 選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。

TRACE 追蹤功能。用來追蹤擷取程式送收的封包。 WPE必須先完成點選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。 您可以隨時按下 | | 暫停追蹤,想繼續時請再按下 | | 。 按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。 若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設定值自動停止。 如果您沒有擷取到資料,試試將OPTION里調整為Winsock Version 2。 WPE 及 Trainers 是設定在顯示至少16 bits 顏色下才可執行。

FILTER 過濾功能。用來分析所擷取到的封包,並且予以修改。

SEND PACKET 送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER 製作修改器。

OPTIONS 設定功能。讓您調整WPE的一些設定值。

FILTER的詳細教學

- 當FILTER在啟動狀態時 ,ON的按鈕會呈現紅色。 - 當您啟動FILTER時,您隨時可以關閉這個視窗。FILTER將會保留在原來的狀態,直到您再按一次 on / off 鈕。 - 只有FILTER啟用鈕在OFF的狀態下,才可以勾選Filter前的方框來編輯修改。 - 當您想編輯某個Filter,只要雙擊該Filter的名字即可。

NORMAL MODE:

範例:

當您在 Street Fighter Online 〔快打旋風線上版〕游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包: SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44

您的第一個火球讓對方減了16滴〔16 = 10h〕的生命值, 而您觀察到第4跟第5個封包的位置4有10h的值出現,應該就是這里了。

您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數值是發出火球的關鍵。

因此您將0A 09 C1 10填在搜尋列〔SEARCH〕,然後在修改列〔MODIFY〕的位置4填上FF。如此一來,當您再度發出火球時,FF會取代之前的10,也就是攻擊力為255的火球了!

ADVANCED MODE:

範例: 當您在一個游戲中,您不想要用真實姓名,您想用修改過的假名傳送給對方。在您使用TRACE後,您會發現有些封包裡面有您的名字出現。假設您的名字是Shadow,換算成16進位則是〔53 68 61 64 6F 77〕;而您打算用moon〔6D 6F 6F 6E 20 20〕來取代他。 1) SEND-> 0000 08 14 21 06 01 04 2) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 09 4) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔細看,您的名字在每個封包中並不是出現在相同的位置上

- 在第2個封包里,名字是出現在第4個位置上 - 在第4個封包里,名字是出現在第6個位置上

在這種情況下,您就需要使用ADVANCED MODE - 您在搜尋列〔SEARCH〕填上:53 68 61 64 6F 77 〔請務必從位置1開始填〕 - 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數值被發現的位置開始替代連續數值〔from the position of the chain found〕。 - 現在,在修改列〔MODIFY〕000的位置填上:6D 6F 6F 6E 20 20 〔此為相對應位置,也就是從原來搜尋欄的+001位置開始遞換〕 - 如果您想從封包的第一個位置就修改數值,請選擇〔from the beginning of the packet〕

了解一點TCP/IP協議常識的人都知道,互聯網是將信息數據打包之後再傳送出去的。每個數據包分為頭部信息和數據信息兩部分。頭部信息包括數據包的發送地址和到達地址等。數據信息包括我們在游戲中相關操作的各項信息。那麼在做截獲封包的過程之前我們先要知道游戲伺服器的IP地址和埠號等各種信息,實際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲伺服器的IP地址,比如金庸群俠傳就是如此,那麼除了這個我們還可以在DOS下使用NETSTAT這個命令,

NETSTAT命令的功能是顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。或者你可以使用木馬客星等工具來查看網路連接。工具是很多的,看你喜歡用哪一種了。

NETSTAT命令的一般格式為: NETSTAT [選項]

命令中各選項的含義如下: -a 顯示所有socket,包括正在監聽的。 -c 每隔1秒就重新顯示一遍,直到用戶中斷它。 -i 顯示所有網路介面的信息。 -n 以網路IP地址代替名稱,顯示出網路連接情形。 -r 顯示核心路由表,格式同"route -e"。 -t 顯示TCP協議的連接情況。 -u 顯示UDP協議的連接情況。 -v 顯示正在進行的工作。

三:怎麼來分析我們截獲的封包?

首先我們將WPE截獲的封包保存為文本文件,然後打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):

第一個文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12

第二個文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77

我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。

因為一般的數據包加密都是異或運算,所以這里先講一下什麼是異或。 簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今後會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。

下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些位元組空間來便於日後的擴充,也就是說數據包里會存在一些"00"的位元組,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!

我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:

第一個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

第二個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!

接下來就是搞清楚一些關鍵的位元組所代表的含義,這就需要截獲大量的數據來分析。

首先我們會發現每個數據包都是"F4 44"開頭,第3個位元組是變化的,但是變化很有規律。我們來看看各個包的長度,發現什麼沒有?對了,第3個位元組就是包的長度! 通過截獲大量的數據包,我們判斷第4個位元組代表指令,也就是說客戶端告訴伺服器進行的是什麼操作。例如向伺服器請求戰斗指令為"30",戰斗中移動指令為"D4"等。 接下來,我們就需要分析一下上面第一個包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什麼信息呢?應該有通知伺服器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什麼地方。 我們再PK一個小嘍羅(就是大理客棧外的那個咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利於游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,伺服器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在後面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了! (這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)

第一個包的分析暫時就到這里(裡面還有的信息我們暫時不需要完全清楚了)

我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2隻哦)看看包的格式: SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣伺服器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。

那麼,這個包的格式應該比較清楚了:第3個位元組為包的長度,"DA"為指令,第5個位元組為NPC個數,從第7個位元組開始的10個位元組代表一個NPC的信息,多一個NPC就多10個位元組來表示。

大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。

通過在戰斗中出現增援截獲的數據包,我們會發現伺服器端發送了這樣一個包: F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8個位元組為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。 那麼,我們就利用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。

四:怎麼冒充"客戶端"向"伺服器"發我們需要的封包?

這里我們需要使用一個工具,它位於客戶端和伺服器端之間,它的工作就是進行數據包的接收和轉發,這個工具我們稱為代理。如果代理的工作單純就是接收和轉發的話,這就毫無意義了,但是請注意:所有的數據包都要通過它來傳輸,這里的意義就重大了。我們可以分析接收到的數據包,或者直接轉發,或者修改後轉發,或者壓住不轉發,甚至偽造我們需要的封包來發送。

下面我們繼續講怎樣來同時欺騙伺服器和客戶端,也就是修改封包和偽造封包。 通過我們上節的分析,我們已經知道了打多個NPC的封包格式,那麼我們就動手吧!

首先我們要查找客戶端發送的包,找到戰斗的特徵,就是請求戰斗的第1個包,我們找"F4 44 1F 30"這個特徵,這是不會改變的,當然是要解密後來查找哦。 找到後,表示客戶端在向伺服器請求戰斗,我們不動這個包,轉發。 繼續向下查找,這時需要查找的特徵碼不太好辦,我們先查找"DA",這是客戶端發送NPC信息的數據包的指令,那麼可能其他包也有"DA",沒關系,我們看前3個位元組有沒有"F4 44"就行了。找到後,我們的工作就開始了!

我們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。

然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意演算法,不要造成較大延遲。

上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^

發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00 00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。

以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。

上面講的需要一定的編程基礎,但是不難,即使你不會編程,相信你繼續看下去就會有收獲了。

五:怎麼用計算機語言去寫一個單機代理?

在上一章,我們已經對於代理的原理進行了講解,大家對於代理已經有了一個初步的認識,現在我教大家如何用計算機語言編寫一個自己的代理,我們考慮到簡單明了,我們選用VB,因為用VB編寫代理只需要很少的代碼。

代碼如下:

Private Sub Form_Load() DaiLi.LocalPort = "1234" Server.RemotePort = "1234" Server.RemoteHost = "211.100.20.26" DaiLi.Listen End Sub

Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect Client.Accept requestIDEnd Sub

Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte Client.GetData ClientToServer Server.SendData ClientToServerEnd Sub

Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte Server.GetData ServerToClient Client.SendData ServerToClientEnd Sub

Form_Load()這個過程表示在程序啟動的時候要做的一些初始化操作。 DaiLi.LocalPort = "1234" 設定監聽埠 Server.RemotePort = "1234" 設定象游戲伺服器連接的埠(和監聽埠是相同的) Server.RemoteHost = "211.100.20.26" 設定游戲伺服器的IP地址 DaiLi.Listen 監聽本地的連接請求 這時你只要將游戲的伺服器列表的IP改成127.0.0.1,那麼游戲的客戶端程序就會來連接我們的代理,我們的代理會調用如下的過程: Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect 代理客戶端向伺服器連接 Client.Accept requestID 接受客戶端的連接請求 End Sub

當客戶端向伺服器發送數據時,就會調用下邊的過程 Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte 變數定義,請求了一個用於存放數據的空間 Client.GetData ClientToServer 客戶端的連接接收這些數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發向伺服器。

Server.SendData ClientToServer 伺服器的連接把這些數據發向伺服器 End Sub

當伺服器發送數據給客戶端時,會調用下邊的過程 Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte 變數定義,請求了一個用於存放數據的空間 Server.GetData ServerToClient 伺服器連接接收數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發給客戶端。

Client.SendData ServerToClient End Sub

用其他語言編寫基本的原理也是差不多的,不過可能稍微要麻煩一些,因為VB本身有一個MSWINSCK.OCX控制項,這個控制項封裝了WINDOWS的網路操作,而且介面很簡單,推薦大家使用。

六:如果單機代理被封,我們怎麼利用底層的技術來接管游戲的發包?

在WINDOWS系統中,網路通訊的任務是由一個叫WSOCK32.DLL(在SYSTEM目錄下)來完成的,每當游戲被運行時,他都會自動的去調用這個動態連接庫,因為在WINDOWS系統中對於文件的搜索順序是 程序目錄>系統目錄>路徑中設置的目錄,所以我們就有機會替換掉系統的WSOCK32.DLL使的游戲調用我們的WSOCK32.DLL,這樣我們就有了對於游戲封包絕對的控制權,有人問:"我們應該怎麼做呢?",我們只要自己編寫一個WSOCK32.DLL放到游戲的目錄下,就OK了,當然讓我們完全自己去編寫一個WSOCK32.DLL是不太現實的,因為本身網路通訊要處理很多更底層的東西,比如說從網卡讀取BIT流,所以我們選擇由我們的WSOCK32.DLL去調用系統的WSOCK32.DLL來完成這個功能。

WSOCK32.DLL有很多的輸出函數,函數如下: __WSAFDIsSet accept AcceptEx Arecv Asend bind closesocket closesockinfo connect dn_expand EnumProtocolsA EnumProtocolsW GetAcceptExSockaddrs GetAddressByNameA GetAddressByNameW gethostbyaddr gethostbyname gethostname GetNameByTypeA GetNameByTypeW getnetbyname getpeername getprotobyname getprotobynumber getservbyname getservbyport GetServiceA GetServiceW getsockname getsockopt GetTypeByNameA GetTypeByNameW htonl htons inet_addr inet_network inet_ntoa ioctlsocket listen MigrateWinsockConfiguration NPLoadNameSpaces NSPStartup ntohl ntohs rcmd recv recvfrom rexec rresvport s_perror select send sendto sethostname SetServiceA SetServiceW setsockopt shutdown socket TransmitFile WEP WSAAsyncGetHostByAddr WSAAsyncGetHostByName WSAAsyncGetProtoByName WSAAsyncGetProtoByNumber WSAAsyncGetServByName WSAAsyncGetServByPort WSAAsyncSelect WSACancelAsyncRequest WSACancelBlockingCall WSACleanup WSAGetLastError WSAIsBlocking WSApSetPostRoutine WSARecvEx WSASetBlockingHook WSASetLastError WSAStartup WSAUnhookBlockingHook WsControl WSHEnumProtocols

在這里,不是所有的函數都要修改,因為我們只關心發送和接收的封包,所以我們只要修改send 和recv兩個函數,前者是發送封包的後者是接收封包的,我們在這兩個函數的處理中加入我們自己的代碼,來完成封包的辨認,修改以及轉發等功能。

七:怎麼來分析客戶端的有關資料?

自己作外掛,大多時候要分析封包,不過因為有的功能是由客戶端來辨別的,所以分析客戶端的程序同樣也很重要,分析客戶端首先要求你能看懂匯編指令(只要"看懂",要求很低的),其次是要能夠熟練的運用一些工具,然後能剩下的也就是運氣和游戲公司的漏洞了。(哈,不是每次都能成功的啊)下邊我分步教給大家。

第一章 8086匯編指令

註:AX,BX,CX...,EAX,EBX,ECX...這些都是CPU用來存儲數據的地方。

一、數據傳輸指令 作用:它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或位元組. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. PUSH 把字壓入堆棧. POP 把字彈出堆棧. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧. BSWAP 交換32位寄存器里位元組的順序 XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數) CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX ) XADD 先交換再累加.( 結果在第一個操作數里 ) XLAT 位元組查表轉換. BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即 0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )

2. 輸入輸出埠傳送指令. IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} ) OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 ) 輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,其范圍是 0-65535.

3. 目的地址傳送指令. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 標志傳送指令. LAHF 標志寄存器傳送,把標志裝入AH. SAHF 標志寄存器傳送,把AH內容裝入標志寄存器. PUSHF 標志入棧. POPF 標志出棧. PUSHD 32位標志入棧. POPD 32位標志出棧.

二、算術運算指令 ADD 加法. ADC 帶進位加法. INC 加 1. AAA 加法的ASCII碼調整. DAA 加法的十進制調整. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之). CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果). AAS 減法的ASCII碼調整. DAS 減法的十進制調整. MUL 無符號乘法. IMUL 整數乘法. 以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算), AAM 乘法的ASCII碼調整. DIV 無符號除法. IDIV 整數除法. 以上兩條,結果回送: 商回送AL,余數回送AH, (位元組運算); 或 商回送AX,余數回送DX, (字運算). AAD 除法的ASCII碼調整. CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去) CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去) CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去) CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令 AND 與運算. OR 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 通過進位的循環左移. RCR 通過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操作碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL

四、串指令 DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重復次數計數器. AL/AX 掃描值. D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量. Z標志 用來控制掃描或比較操作的結束. MOVS 串傳送. ( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字元. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串作比較,比較結果反映在標志位. LODS 裝入串. 把源串中的元素(字或位元組)逐一裝入AL或AX中. ( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重復. REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復. REPC 當CF=1且CX/ECX<>0時重復. REPNC 當CF=0且CX/ECX<>0時重復.

⑦ 哪裡有這方面的教程

看看這些是不是你想要的:
1、電子書下載:匯編語言程序設計http://dielian.net/web/info/12610.html
2、電子書下載:匯編語言程序設計
http://www.people.com.cn/GB/wenhua/22226/29647/30812/2266952.html
3、匯編語言程序設計
http://www.52eshu.com/Software/Catalog11/3974.html
4、匯編語言程序設計--PDF電子書
http://www.longtengwang.com/Soft/yiyong/huibian/200606/109.html
5、匯編語言程序設計課件
http://cache..com/c?word=%BB%E3%B1%E0%3B%D3%EF%D1%D4%3B%B3%CC%D0%F2%3B%C9%E8%BC%C6%2C%B5%E7%D7%D3%3B%CA%E9&url=http%3A//www%2Eebook%2Ddn%2Ecn/soft/1/2006/200608202829%2Ehtml&b=15&a=17&user=

⑧ iris怎麼攔截某一程序

怎麼截獲一個游戲的封包? 怎麼去檢查游戲伺服器的ip地址和埠號?

Internet用戶使用的各種信息服務,其通訊的信息最終均可以歸結為以IP包為單位的信息傳送,IP包除了包括要傳送的數據信息外,還包含有信息要發送到的目的IP地址、信息發送的源IP地址、以及一些相關的控制信息。當一台路由器收到一個IP數據包時,它將根據數據包中的目的IP地址項查找路由表,根據查找的結果將此IP數據包送往對應埠。下一台IP路由器收到此數據包後繼續轉發,直至發到目的地。路由器之間可以通過路由協議來進行路由信息的交換,從而更新路由表。

那麼我們所關心的內容只是IP包中的數據信息,我們可以使用許多監聽網路的工具來截獲客戶端與伺服器之間的交換數據,下面就向你介紹其中的一種工具:WPE。

WPE使用方法: 執行WPE會有下列幾項功能可選擇:

SELECT GAME 選擇目前在記憶體中您想攔截的程式,您只需雙擊該程式名稱即可。

TRACE 追蹤功能。用來追蹤擷取程式送收的封包。 WPE必須先完成點選欲追蹤的程式名稱,才可以使用此項目。 按下Play鍵開始擷取程式收送的封包。 您可以隨時按下 | | 暫停追蹤,想繼續時請再按下 | | 。 按下正方形可以停止擷取封包並且顯示所有已擷取封包內容。 若您沒按下正方形停止鍵,追蹤的動作將依照OPTION里的設定值自動停止。 如果您沒有擷取到資料,試試將OPTION里調整為Winsock Version 2。 WPE 及 Trainers 是設定在顯示至少16 bits 顏色下才可執行。

FILTER 過濾功能。用來分析所擷取到的封包,並且予以修改。

SEND PACKET 送出封包功能。能夠讓您送出假造的封包。

TRAINER MAKER 製作修改器。

OPTIONS 設定功能。讓您調整WPE的一些設定值。

FILTER的詳細教學

- 當FILTER在啟動狀態時 ,ON的按鈕會呈現紅色。 - 當您啟動FILTER時,您隨時可以關閉這個視窗。FILTER將會保留在原來的狀態,直到您再按一次 on / off 鈕。 - 只有FILTER啟用鈕在OFF的狀態下,才可以勾選Filter前的方框來編輯修改。 - 當您想編輯某個Filter,只要雙擊該Filter的名字即可。

NORMAL MODE:

範例:

當您在 Street Fighter Online [快打旋風線上版]游戲中,您使用了兩次火球而且擊中了對方,這時您會擷取到以下的封包: SEND-> 0000 08 14 21 06 01 04 SEND-> 0000 02 09 87 00 67 FF A4 AA 11 22 00 00 00 00 SEND-> 0000 03 84 11 09 11 09 SEND-> 0000 0A 09 C1 10 00 00 FF 52 44 SEND-> 0000 0A 09 C1 10 00 00 66 52 44

您的第一個火球讓對方減了16滴[16 = 10h]的生命值, 而您觀察到第4跟第5個封包的位置4有10h的值出現,應該就是這里了。

您觀察10h前的0A 09 C1在兩個封包中都沒改變,可見得這3個數值是發出火球的關鍵。

因此您將0A 09 C1 10填在搜尋列[SEARCH],然後在修改列[MODIFY]的位置4填上FF。如此一來,當您再度發出火球時,FF會取代之前的10,也就是攻擊力為255的火球了!

ADVANCED MODE:

範例: 當您在一個游戲中,您不想要用真實姓名,您想用修改過的假名傳送給對方。在您使用TRACE後,您會發現有些封包裡面有您的名字出現。假設您的名字是Shadow,換算成16進位則是[53 68 61 64 6F 77];而您打算用moon[6D 6F 6F 6E 20 20]來取代他。 1) SEND-> 0000 08 14 21 06 01 04 2) SEND-> 0000 01 06 99 53 68 61 64 6F 77 00 01 05 3) SEND-> 0000 03 84 11 09 11 09 4) SEND-> 0000 0A 09 C1 10 00 53 68 61 64 6F 77 00 11 5) SEND-> 0000 0A 09 C1 10 00 00 66 52 44

但是您仔細看,您的名字在每個封包中並不是出現在相同的位置上

- 在第2個封包里,名字是出現在第4個位置上 - 在第4個封包里,名字是出現在第6個位置上

在這種情況下,您就需要使用ADVANCED MODE - 您在搜尋列[SEARCH]填上:53 68 61 64 6F 77 [請務必從位置1開始填] - 您想要從原來名字Shadow的第一個字母開始置換新名字,因此您要選擇從數值被發現的位置開始替代連續數值[from the position of the chain found]。 - 現在,在修改列[MODIFY]000的位置填上:6D 6F 6F 6E 20 20 [此為相對應位置,也就是從原來搜尋欄的+001位置開始遞換] - 如果您想從封包的第一個位置就修改數值,請選擇[from the beginning of the packet]

了解一點TCP/IP協議常識的人都知道,互聯網是將信息數據打包之後再傳送出去的。每個數據包分為頭部信息和數據信息兩部分。頭部信息包括數據包的發送地址和到達地址等。數據信息包括我們在游戲中相關操作的各項信息。那麼在做截獲封包的過程之前我們先要知道游戲伺服器的IP地址和埠號等各種信息,實際上最簡單的是看看我們游戲目錄下,是否有一個SERVER.INI的配置文件,這個文件里你可以查看到個游戲伺服器的IP地址,比如金庸群俠傳就是如此,那麼除了這個我們還可以在DOS下使用NETSTAT這個命令,

NETSTAT命令的功能是顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。或者你可以使用木馬客星等工具來查看網路連接。工具是很多的,看你喜歡用哪一種了。

NETSTAT命令的一般格式為: NETSTAT [選項]

命令中各選項的含義如下: -a 顯示所有socket,包括正在監聽的。 -c 每隔1秒就重新顯示一遍,直到用戶中斷它。 -i 顯示所有網路介面的信息。 -n 以網路IP地址代替名稱,顯示出網路連接情形。 -r 顯示核心路由表,格式同"route -e"。 -t 顯示TCP協議的連接情況。 -u 顯示UDP協議的連接情況。 -v 顯示正在進行的工作。

三:怎麼來分析我們截獲的封包?

首先我們將WPE截獲的封包保存為文本文件,然後打開它,這時會看到如下的數據(這里我們以金庸群俠傳里PK店小二客戶端發送的數據為例來講解):

第一個文件: SEND-> 0000 E6 56 0D 22 7E 6B E4 17 13 13 12 13 12 13 67 1B SEND-> 0010 17 12 DD 34 12 12 12 12 17 12 0E 12 12 12 9B SEND-> 0000 E6 56 1E F1 29 06 17 12 3B 0E 17 1A SEND-> 0000 E6 56 1B C0 68 12 12 12 5A SEND-> 0000 E6 56 02 C8 13 C9 7E 6B E4 17 10 35 27 13 12 12 SEND-> 0000 E6 56 17 C9 12

第二個文件: SEND-> 0000 83 33 68 47 1B 0E 81 72 76 76 77 76 77 76 02 7E SEND-> 0010 72 77 07 1C 77 77 77 77 72 77 72 77 77 77 6D SEND-> 0000 83 33 7B 94 4C 63 72 77 5E 6B 72 F3 SEND-> 0000 83 33 7E A5 21 77 77 77 3F SEND-> 0000 83 33 67 AD 76 CF 1B 0E 81 72 75 50 42 76 77 77 SEND-> 0000 83 33 72 AC 77

我們發現兩次PK店小二的數據格式一樣,但是內容卻不相同,我們是PK的同一個NPC,為什麼會不同呢? 原來金庸群俠傳的封包是經過了加密運算才在網路上傳輸的,那麼我們面臨的問題就是如何將密文解密成明文再分析了。

因為一般的數據包加密都是異或運算,所以這里先講一下什麼是異或。 簡單的說,異或就是"相同為0,不同為1"(這是針對二進制按位來講的),舉個例子,0001和0010異或,我們按位對比,得到異或結果是0011,計算的方法是:0001的第4位為0,0010的第4位為0,它們相同,則異或結果的第4位按照"相同為0,不同為1"的原則得到0,0001的第3位為0,0010的第3位為0,則異或結果的第3位得到0,0001的第2位為0,0010的第2位為1,則異或結果的第2位得到1,0001的第1位為1,0010的第1位為0,則異或結果的第1位得到1,組合起來就是0011。異或運算今後會遇到很多,大家可以先熟悉熟悉,熟練了對分析很有幫助的。

下面我們繼續看看上面的兩個文件,按照常理,數據包的數據不會全部都有值的,游戲開發時會預留一些位元組空間來便於日後的擴充,也就是說數據包里會存在一些"00"的位元組,觀察上面的文件,我們會發現文件一里很多"12",文件二里很多"77",那麼這是不是代表我們說的"00"呢?推理到這里,我們就開始行動吧!

我們把文件一與"12"異或,文件二與"77"異或,當然用手算很費事,我們使用"M2M 1.0 加密封包分析工具"來計算就方便多了。得到下面的結果:

第一個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 08 3 SEND-> 0000 F4 44 09 D2 7A 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

第二個文件: 1 SEND-> 0000 F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 70 6B 00 00 00 00 05 00 05 00 00 00 1A 2 SEND-> 0000 F4 44 0C E3 3B 13 05 00 29 1C 05 84 3 SEND-> 0000 F4 44 09 D2 56 00 00 00 48 4 SEND-> 0000 F4 44 10 DA 01 B8 6C 79 F6 05 02 27 35 01 00 00 5 SEND-> 0000 F4 44 05 DB 00

哈,這一下兩個文件大部分都一樣啦,說明我們的推理是正確的,上面就是我們需要的明文!

接下來就是搞清楚一些關鍵的位元組所代表的含義,這就需要截獲大量的數據來分析。

首先我們會發現每個數據包都是"F4 44"開頭,第3個位元組是變化的,但是變化很有規律。我們來看看各個包的長度,發現什麼沒有?對了,第3個位元組就是包的長度! 通過截獲大量的數據包,我們判斷第4個位元組代表指令,也就是說客戶端告訴伺服器進行的是什麼操作。例如向伺服器請求戰斗指令為"30",戰斗中移動指令為"D4"等。 接下來,我們就需要分析一下上面第一個包"F4 44 1F 30 6C 79 F6 05 01 01 00 01 00 01 75 09 05 00 CF 26 00 00 00 00 05 00 1C 00 00 00 89",在這個包里包含什麼信息呢?應該有通知伺服器你PK的哪個NPC吧,我們就先來找找這個店小二的代碼在什麼地方。 我們再PK一個小嘍羅(就是大理客棧外的那個咯): SEND-> 0000 F4 44 1F 30 D4 75 F6 05 01 01 00 01 00 01 75 09 SEND-> 0010 05 00 8A 19 00 00 00 00 11 00 02 00 00 00 C0 我們根據常理分析,游戲里的NPC種類雖然不會超過65535(FFFF),但開發時不會把自己限制在字的范圍,那樣不利於游戲的擴充,所以我們在雙字里看看。通過"店小二"和"小嘍羅"兩個包的對比,我們把目標放在"6C 79 F6 05"和"CF 26 00 00"上。(對比一下很容易的,但你不能太遲鈍咯,呵呵)我們再看看後面的包,在後面的包里應該還會出現NPC的代碼,比如移動的包,游戲允許觀戰,伺服器必然需要知道NPC的移動坐標,再廣播給觀戰的其他玩家。在後面第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00"里我們又看到了"6C 79 F6 05",初步斷定店小二的代碼就是它了! (這分析里邊包含了很多工作的,大家可以用WPE截下數據來自己分析分析)

第一個包的分析暫時就到這里(裡面還有的信息我們暫時不需要完全清楚了)

我們看看第4個包"SEND-> 0000 F4 44 10 DA 01 DB 6C 79 F6 05 02 27 35 01 00 00",再截獲PK黃狗的包,(狗會出來2隻哦)看看包的格式: SEND-> 0000 F4 44 1A DA 02 0B 4B 7D F6 05 02 27 35 01 00 00 SEND-> 0010 EB 03 F8 05 02 27 36 01 00 00

根據上面的分析,黃狗的代碼為"4B 7D F6 05"(100040011),不過兩只黃狗伺服器怎樣分辨呢?看看"EB 03 F8 05"(100140011),是上一個代碼加上100000,呵呵,這樣伺服器就可以認出兩只黃狗了。我們再通過野外遇敵截獲的數據包來證實,果然如此。

那麼,這個包的格式應該比較清楚了:第3個位元組為包的長度,"DA"為指令,第5個位元組為NPC個數,從第7個位元組開始的10個位元組代表一個NPC的信息,多一個NPC就多10個位元組來表示。

大家如果玩過網金,必然知道隨機遇敵有時會出現增援,我們就利用游戲這個增援來讓每次戰斗都會出現增援的NPC吧。

通過在戰斗中出現增援截獲的數據包,我們會發現伺服器端發送了這樣一個包: F4 44 12 E9 EB 03 F8 05 02 00 00 03 00 00 00 00 00 00 第5-第8個位元組為增援NPC的代碼(這里我們就簡單的以黃狗的代碼來舉例)。 那麼,我們就利用單機代理技術來同時欺騙客戶端和伺服器吧!

好了,呼叫NPC的工作到這里算是完成了一小半,接下來的事情,怎樣修改封包和發送封包,我們下節繼續講解吧。

四:怎麼冒充"客戶端"向"伺服器"發我們需要的封包?

這里我們需要使用一個工具,它位於客戶端和伺服器端之間,它的工作就是進行數據包的接收和轉發,這個工具我們稱為代理。如果代理的工作單純就是接收和轉發的話,這就毫無意義了,但是請注意:所有的數據包都要通過它來傳輸,這里的意義就重大了。我們可以分析接收到的數據包,或者直接轉發,或者修改後轉發,或者壓住不轉發,甚至偽造我們需要的封包來發送。

下面我們繼續講怎樣來同時欺騙伺服器和客戶端,也就是修改封包和偽造封包。 通過我們上節的分析,我們已經知道了打多個NPC的封包格式,那麼我們就動手吧!

首先我們要查找客戶端發送的包,找到戰斗的特徵,就是請求戰斗的第1個包,我們找"F4 44 1F 30"這個特徵,這是不會改變的,當然是要解密後來查找哦。 找到後,表示客戶端在向伺服器請求戰斗,我們不動這個包,轉發。 繼續向下查找,這時需要查找的特徵碼不太好辦,我們先查找"DA",這是客戶端發送NPC信息的數據包的指令,那麼可能其他包也有"DA",沒關系,我們看前3個位元組有沒有"F4 44"就行了。找到後,我們的工作就開始了!

我們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。

然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意演算法,不要造成較大延遲。

上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^

發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00 00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。

以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。

上面講的需要一定的編程基礎,但是不難,即使你不會編程,相信你繼續看下去就會有收獲了。

五:怎麼用計算機語言去寫一個單機代理?

在上一章,我們已經對於代理的原理進行了講解,大家對於代理已經有了一個初步的認識,現在我教大家如何用計算機語言編寫一個自己的代理,我們考慮到簡單明了,我們選用VB,因為用VB編寫代理只需要很少的代碼。

代碼如下:

Private Sub Form_Load() DaiLi.LocalPort = "1234" Server.RemotePort = "1234" Server.RemoteHost = "211.100.20.26" DaiLi.Listen End Sub

Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect Client.Accept requestIDEnd Sub

Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte Client.GetData ClientToServer Server.SendData ClientToServerEnd Sub

Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte Server.GetData ServerToClient Client.SendData ServerToClientEnd Sub

Form_Load()這個過程表示在程序啟動的時候要做的一些初始化操作。 DaiLi.LocalPort = "1234" 設定監聽埠 Server.RemotePort = "1234" 設定象游戲伺服器連接的埠(和監聽埠是相同的) Server.RemoteHost = "211.100.20.26" 設定游戲伺服器的IP地址 DaiLi.Listen 監聽本地的連接請求 這時你只要將游戲的伺服器列表的IP改成127.0.0.1,那麼游戲的客戶端程序就會來連接我們的代理,我們的代理會調用如下的過程: Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long) Server.Connect 代理客戶端向伺服器連接 Client.Accept requestID 接受客戶端的連接請求 End Sub

當客戶端向伺服器發送數據時,就會調用下邊的過程 Private Sub Client_DataArrival(ByVal bytesTotal As Long) Dim ClientToServer() As Byte 變數定義,請求了一個用於存放數據的空間 Client.GetData ClientToServer 客戶端的連接接收這些數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發向伺服器。

Server.SendData ClientToServer 伺服器的連接把這些數據發向伺服器 End Sub

當伺服器發送數據給客戶端時,會調用下邊的過程 Private Sub Server_DataArrival(ByVal bytesTotal As Long) Dim ServerToClient() As Byte 變數定義,請求了一個用於存放數據的空間 Server.GetData ServerToClient 伺服器連接接收數據 在這里我們可以添加自己的代碼,對封包進行修改,然後再發給客戶端。

Client.SendData ServerToClient End Sub

用其他語言編寫基本的原理也是差不多的,不過可能稍微要麻煩一些,因為VB本身有一個MSWINSCK.OCX控制項,這個控制項封裝了WINDOWS的網路操作,而且介面很簡單,推薦大家使用。

六:如果單機代理被封,我們怎麼利用底層的技術來接管游戲的發包?

在WINDOWS系統中,網路通訊的任務是由一個叫WSOCK32.DLL(在SYSTEM目錄下)來完成的,每當游戲被運行時,他都會自動的去調用這個動態連接庫,因為在WINDOWS系統中對於文件的搜索順序是 程序目錄>系統目錄>路徑中設置的目錄,所以我們就有機會替換掉系統的WSOCK32.DLL使的游戲調用我們的WSOCK32.DLL,這樣我們就有了對於游戲封包絕對的控制權,有人問:"我們應該怎麼做呢?",我們只要自己編寫一個WSOCK32.DLL放到游戲的目錄下,就OK了,當然讓我們完全自己去編寫一個WSOCK32.DLL是不太現實的,因為本身網路通訊要處理很多更底層的東西,比如說從網卡讀取BIT流,所以我們選擇由我們的WSOCK32.DLL去調用系統的WSOCK32.DLL來完成這個功能。

WSOCK32.DLL有很多的輸出函數,函數如下: __WSAFDIsSet accept AcceptEx Arecv Asend bind closesocket closesockinfo connect dn_expand EnumProtocolsA EnumProtocolsW GetAcceptExSockaddrs GetAddressByNameA GetAddressByNameW gethostbyaddr gethostbyname gethostname GetNameByTypeA GetNameByTypeW getnetbyname getpeername getprotobyname getprotobynumber getservbyname getservbyport GetServiceA GetServiceW getsockname getsockopt GetTypeByNameA GetTypeByNameW htonl htons inet_addr inet_network inet_ntoa ioctlsocket listen MigrateWinsockConfiguration NPLoadNameSpaces NSPStartup ntohl ntohs rcmd recv recvfrom rexec rresvport s_perror select send sendto sethostname SetServiceA SetServiceW setsockopt shutdown socket TransmitFile WEP WSAAsyncGetHostByAddr WSAAsyncGetHostByName WSAAsyncGetProtoByName WSAAsyncGetProtoByNumber WSAAsyncGetServByName WSAAsyncGetServByPort WSAAsyncSelect WSACancelAsyncRequest WSACancelBlockingCall WSACleanup WSAGetLastError WSAIsBlocking WSApSetPostRoutine WSARecvEx WSASetBlockingHook WSASetLastError WSAStartup WSAUnhookBlockingHook WsControl WSHEnumProtocols

在這里,不是所有的函數都要修改,因為我們只關心發送和接收的封包,所以我們只要修改send 和recv兩個函數,前者是發送封包的後者是接收封包的,我們在這兩個函數的處理中加入我們自己的代碼,來完成封包的辨認,修改以及轉發等功能。

七:怎麼來分析客戶端的有關資料?

自己作外掛,大多時候要分析封包,不過因為有的功能是由客戶端來辨別的,所以分析客戶端的程序同樣也很重要,分析客戶端首先要求你能看懂匯編指令(只要"看懂",要求很低的),其次是要能夠熟練的運用一些工具,然後能剩下的也就是運氣和游戲公司的漏洞了。(哈,不是每次都能成功的啊)下邊我分步教給大家。

第一章 8086匯編指令

註:AX,BX,CX...,EAX,EBX,ECX...這些都是CPU用來存儲數據的地方。

一、數據傳輸指令 作用:它們在存貯器和寄存器、寄存器和輸入輸出埠之間傳送數據. 1. 通用數據傳送指令. MOV 傳送字或位元組. MOVSX 先符號擴展,再傳送. MOVZX 先零擴展,再傳送. PUSH 把字壓入堆棧. POP 把字彈出堆棧. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧. BSWAP 交換32位寄存器里位元組的順序 XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數) CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX ) XADD 先交換再累加.( 結果在第一個操作數里 ) XLAT 位元組查表轉換. BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即 0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )

2. 輸入輸出埠傳送指令. IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} ) OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 ) 輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,其范圍是 0-65535.

3. 目的地址傳送指令. LEA 裝入有效地址. 例: LEA DX,string ;把偏移地址存到DX. LDS 傳送目標指針,把指針內容裝入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI. LES 傳送目標指針,把指針內容裝入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI. LFS 傳送目標指針,把指針內容裝入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI. LGS 傳送目標指針,把指針內容裝入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI. LSS 傳送目標指針,把指針內容裝入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 標志傳送指令. LAHF 標志寄存器傳送,把標志裝入AH. SAHF 標志寄存器傳送,把AH內容裝入標志寄存器. PUSHF 標志入棧. POPF 標志出棧. PUSHD 32位標志入棧. POPD 32位標志出棧.

二、算術運算指令 ADD 加法. ADC 帶進位加法. INC 加 1. AAA 加法的ASCII碼調整. DAA 加法的十進制調整. SUB 減法. SBB 帶借位減法. DEC 減 1. NEC 求反(以 0 減之). CMP 比較.(兩操作數作減法,僅修改標志位,不回送結果). AAS 減法的ASCII碼調整. DAS 減法的十進制調整. MUL 無符號乘法. IMUL 整數乘法. 以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算), AAM 乘法的ASCII碼調整. DIV 無符號除法. IDIV 整數除法. 以上兩條,結果回送: 商回送AL,余數回送AH, (位元組運算); 或 商回送AX,余數回送DX, (字運算). AAD 除法的ASCII碼調整. CBW 位元組轉換為字. (把AL中位元組的符號擴展到AH中去) CWD 字轉換為雙字. (把AX中的字的符號擴展到DX中去) CWDE 字轉換為雙字. (把AX中的字元號擴展到EAX中去) CDQ 雙字擴展. (把EAX中的字的符號擴展到EDX中去)

三、邏輯運算指令 AND 與運算. OR 或運算. XOR 異或運算. NOT 取反. TEST 測試.(兩操作數作與運算,僅修改標志位,不回送結果). SHL 邏輯左移. SAL 算術左移.(=SHL) SHR 邏輯右移. SAR 算術右移.(=SHR) ROL 循環左移. ROR 循環右移. RCL 通過進位的循環左移. RCR 通過進位的循環右移. 以上八種移位指令,其移位次數可達255次. 移位一次時, 可直接用操作碼. 如 SHL AX,1. 移位>1次時, 則由寄存器CL給出移位次數. 如 MOV CL,04 SHL AX,CL

四、串指令 DS:SI 源串段寄存器 :源串變址. ES:DI 目標串段寄存器:目標串變址. CX 重復次數計數器. AL/AX 掃描值. D標志 0表示重復操作中SI和DI應自動增量; 1表示應自動減量. Z標志 用來控制掃描或比較操作的結束. MOVS 串傳送. ( MOVSB 傳送字元. MOVSW 傳送字. MOVSD 傳送雙字. ) CMPS 串比較. ( CMPSB 比較字元. CMPSW 比較字. ) SCAS 串掃描. 把AL或AX的內容與目標串作比較,比較結果反映在標志位. LODS 裝入串. 把源串中的元素(字或位元組)逐一裝入AL或AX中. ( LODSB 傳送字元. LODSW 傳送字. LODSD 傳送雙字. ) STOS 保存串. 是LODS的逆過程. REP 當CX/ECX<>0時重復. REPE/REPZ 當ZF=1或比較結果相等,且CX/ECX<>0時重復. REPNE/REPNZ 當ZF=0或比較結果不相等,且CX/ECX<>0時重復. REPC 當CF=1且CX/ECX<>0時重復. REPNC 當CF=0且CX/ECX<>0時重復.

五、程序轉移指令 1>無條件轉移指令 (長轉移) JMP 無條件轉移指令 CALL 過程調用 RET/RETF過程返回. 2>條件轉移指令 (短轉移,-128到+127的距離內) ( 當且僅當(SF XOR OF)=1時,OP1循環控制指令(短轉移) LOOP CX不為零時循環. LOOPE/LOOPZ CX不為零且標志Z=1時循環. LOOPNE/LOOPNZ CX不為零且標志Z=0時循環. JCXZ CX為零時轉移. JECXZ ECX為零時轉移. 4>中斷指令 INT 中斷指令 INTO 溢出中斷 IRET 中斷返回 5>處理器控制指令 HLT 處理器暫停, 直到出現中斷或復位信號才繼續. WAIT 當晶元引線TEST為高電平時使CPU進入等待狀態. ESC 轉換到外處理器. LOCK 封鎖匯流排. NOP 空操作. STC 置進位標志位. CLC 清進位

熱點內容
光遇無翼號怎麼弄安卓 發布:2025-07-15 10:45:59 瀏覽:365
什麼是法人賬號密碼 發布:2025-07-15 10:34:59 瀏覽:876
編程題抽獎 發布:2025-07-15 10:34:00 瀏覽:629
linux手動編譯的內核怎麼刪 發布:2025-07-15 10:31:56 瀏覽:96
存儲行業發展趨勢 發布:2025-07-15 10:25:22 瀏覽:243
怎麼刪除配置提示 發布:2025-07-15 10:21:27 瀏覽:246
java深入學習 發布:2025-07-15 10:13:50 瀏覽:535
linux應用程序開發pdf 發布:2025-07-15 10:11:37 瀏覽:912
解壓冷知識 發布:2025-07-15 10:11:35 瀏覽:79
outlook郵件的伺服器是什麼 發布:2025-07-15 09:45:59 瀏覽:483