<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    飛艷小屋

    程序--人生--哲學___________________歡迎艷兒的加入

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
    VB 從零開始編外掛(一)
    需要VB API函數:
    FindWindow ←尋找窗口列表中第一個符合指定條件的頂級窗口
    GetWindowThreadProcessId ←獲取與指定窗口關聯在一起的一個進程和線程標識符
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關API聲明:
    FindWindow

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

    GetWindowThreadProcessId

    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long)
    As Long
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要的控件:Label、Timer
    -------------------------------------------------------------------------------------------------------------------------------------------------------- 自定義函數:
    Dim hwnd As Long
    -------------------------------------------------------------------------------------------------------------------------------------------------------- 源代碼:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long)As Long
    Private Sub Timer1_Timer()
    Dim hwnd As Long'' 儲存 FindWindow 函數返回的句柄
    hwnd = FindWindow(vbNullString, "Windows Media Player")'' 取得進程標識符
    ''只要把Windows Media Player換成游戲的名稱就可了!
    If hwnd = 0 Then
    Label1.Caption = "游戲未運行"
    Else
    Label1.Caption = "游戲已運行"
    End If
    End Sub

    VB 從零開始編外掛(二)
    相信大家,在制作游戲外掛的時候,都會用到FPE、金山游俠、GE修改器、Game Master8.0等等這些軟件,但是如今的網絡游戲基本上都加了NP,下面來了解一下NP。知己知彼,百戰不殆嘛!
    什么是nProtect?
    nProtect是設計用于保護個人電腦終端不被病毒和黑客程序感染的新概念的基于網絡的反黑客和反病毒的工具。他幫助確保所有輸入個人電腦終端的信息在網絡上不落入黑客手中。在最終用戶在執行電子貿易時,可以通過將nProtect配置在那些提供電子商務、進口貿易,電子貿易的金融機構的網站上,來提高安全等級。nProtect怎樣工作?nProtect是一種基于服務器端的解決方案并且當那些需要保護的任何網絡應用被運行時而自動啟動。nProtect被載入內存,所以最終用戶不需要安裝任何應用程序,只要nProtect啟動,就開始拒絕黑客工具和病毒的入侵!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    下面介紹它如何工作:
    用戶登陸時nProtect自動啟動。
    瀏覽器確認和自動安裝安全模塊到用戶的個人電腦。掃描黑客工具和病毒通知用戶目前的安全狀態如果有黑客工具和病毒嘗試刪除在被入侵時端駐留內存來鎖定黑客工具直到電腦或者nProtect關閉。
    可惡的韓國人,把這個加進了網絡游戲。我只能說:“呸!”
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    下面講講躲過NP的掃描的幾個方法:
    一、FPE篇
    臺灣人開發的東西,哎。出名了的,沒辦法誰叫它這么好呢!
    1.先裝一個FPE把,呵呵←這個是廢話!
    2.不要把安裝程序刪除,按照:開始→運行→regedit→HEKY_LOCAL_MACHINE→SOFTWARE
    →jaw→FPE 打開!(問:有什么用? 答:修改呀!)
    3.運行FPE,然后在搜索里面輸入 ''jaw''(一定要家'''')一般是6個地址,然后全部都選中輸入:
    313131c313131(意思就是111,兩邊多輸入31就是1111!)不要關FPE!(關了就完了!)
    4.修改注冊表,把注冊表里面的jaw、FPE(FPE的是全改)關閉FPE出現對話框。(什么鳥語不認識!呵呵)
    5.將現在FPE的文件夾修改為1112000(原來是FPE2000撒),把FPE.exe修改為111.exe
    6.然后重新安裝一次FPE也把那個DLL文件復制到你修改過的FPE文件目錄下!(呵呵!)
    7.開FPE進游戲里面亂來拉!哈哈
    --------------------------------------------------------------------------------------------------------------------------------------------------------



    二、任務管理器篇
    比爾·蓋茨那崽兒設計的東西,還可以在這上面派上用場!(問:是什么東西?答WINDOWS自帶的撒!呵呵!)
    1.首先用快捷鍵Ctrl+Alt+Delete/.打開任務管理器
    2.查看進程,一般垃圾點的網絡游戲會出現多的進程。你就殺了就行了!
    3.沒有多的進程怎么辦?BIN這個是大多數網絡游戲都有的把,官方的登陸器和私服的登陸器一樣的,都是調用BIN進入游戲。登陸器打開后,更新完畢。點擊運行游戲,間隔幾秒殺掉登陸器的進程(這個要看你自己的計算機配置如何了,可能是2秒、可能是10秒!反正不超過15秒)這樣就可以閉屏NP拉!
    呵呵又可以亂來了!
    --------------------------------------------------------------------------------------------------------------------------------------------------------


    三、直接篇
    直接篇說白了就不用任何東西!怎么做?跟著我眼鏡來撒!
    《封神榜》知道把?(答:不知道!反答:去死!)它的保護是有的,官方都已經公布了
    但是有些人說《封神榜》沒NP,(注意:NP現在就是保護的代名詞了!)別聽那些人的!
    首先,運行登陸器(更新的那個)進入游戲。關閉用登陸器進入的游戲馬上運行Game.exe
    呵呵,沒NP了。FPE等東西可以亂來了。魔法疊加、免負重等等都可以實現!
    還有一種就是DAT文件或者BIN文件直接修改為EXE。呵呵!
    --------------------------------------------------------------------------------------------------------------------------------------------------------


    四、編程篇(VB、VC、DELPHI等等!)
    怎么辦呢?呵呵,我不懂怎么編VC和DELPHI的。***我就喜歡VB怎么著?
    VB可以簡單的實現虛擬nProtect的消息發送。具體的就不說了!
    一句話虛擬nProtect消息(你不等于沒說嘛!)-_-!呵呵這個嘛......!
    代碼就不寫了,麻煩。就像用WPE這些發包一樣的原理

    VB 從零開始編外掛(三)
    躲避了NP的掃描現在就可以模擬了!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數:
    keybd_event ←函數模擬了鍵盤行動
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關API聲明:
    keybd_event

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要的控件:Timer(interval不為空)
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Sub Timer1_Timer()
    Call keybd_event(82, 0, 0, 0) ''模擬按下"R"鍵
    End Sub
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    其它模擬:
    方法一:
    AppActivate sTitle
    SendKeys "5"
    方法二:
    AppActivate sTitle
    SendKeys vbKey5
    方法三:
    SendMessage Hwnd, WM_KEYDOWN, vbKey5, 0&
    SendMessage Hwnd, WM_KEYUP, vbKey5, 0&
    方法四:
    AppActivate sTitle
    keybd_event 53, 0, 0, 0
    keybd_event 53, 0, KEYEVENTF_KEYUP, 0
    方法五:
    PostMessage lHwnd, WM_KEYDOWN, vbKey5, 0&
    PostMessage lHwnd, WM_KEYUP, vbKey5, 0&
    VB 從零開始編外掛(四)
    添加快捷鍵
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數:
    GetAsyncKeyState ←判斷函數調用時指定虛擬鍵的狀態
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關API聲明:
    GetAsyncKeyState

    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
    Private Function MyHotKey(vKeyCode) As Boolean
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要的控件:Timer(interval不為空)
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
    Private Function MyHotKey(vKeyCode) As Boolean
    MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
    End Function
    ''然后在循環中或Timer的Timer事件中檢測:
    Private Sub Timer1_Timer()
    If MyHotKey(vbKeyA) And vbKeyControl Then ''ctrl+A
    End ''關閉
    End If
    ''其中vbkeyA是鍵盤″A″的常數,其他鍵可按F1查得。
    End Sub
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    其它方法:
    比如按下"ctrl+A"就退出!
    ''可以設置Form的KeyPreview屬性為True,然后在Form_KeyDown事件中添加代碼:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = Asc("A") And Shift = vbCtrlMask Then unload me ''如果ctrl+A鍵被按下就退出
    End Sub
    VB 從零開始編外掛(五)
    前邊談了模擬鍵盤,下面說說模擬鼠標。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數:
    mouse_event ←模擬一次鼠標事件
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關API聲明:
    mouse_event

    Private Declare Sub mouse_event Lib "user32" ( ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long )
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    定義變量:
    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_MOVE = &H1
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    MOUSEEVENTF_LEFTDOWN''鼠標左鍵按下
    MOUSEEVENTF_LEFTUP''鼠標松開
    MOUSEEVENTF_RIGHTDOWN ''鼠標右鍵按下
    MOUSEEVENTF_RIGHTUP''鼠標右鍵松開
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    Private Declare Sub mouse_event Lib "user32" ( ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long )
    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_MOVE = &H1
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    ''這里是 鼠標左鍵按下 和松開兩個事件的組合即一次單擊
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    ''模擬鼠標右鍵單擊事件
    mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
    ''兩次連續的鼠標左鍵單擊事件 構成一次鼠標雙擊事件
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

    VB 從零開始編外掛(六)

    文章類別:VB專區????發表日期:2005-08-21

    --------------------------------------------------------------------------------------------------------------------------------------------------------
    應用實戰
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數:
    FindWindow
    GetWindowThreadProcessId
    OpenProcess
    ReadProcessMemory
    CloseHandle
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關API聲明:
    FindWindow

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( ByVal lpClassName As String , ByVal lpWindowName As String ) As Long

    GetWindowThreadProcessId

    Private Declare Function GetWindowThreadProcessId Lib "user32" ( ByVal hwnd As Long , lpdwProcessId As Long )
    As Long

    OpenProcess

    Private Declare Function OpenProcess Lib "kernel32" ( ByVal dwDesiredAccess As Long , ByVal bInheritHandle As Long , ByVal dwProcessId As Long ) As Long

    ReadProcessMemory

    Private Declare Function ReadProcessMemory Lib "kernel32" ( ByVal hProcess As Long , ByVal lpBaseAddress As Any , ByVal lpBuffer As Any , ByVal nSize As Long , lpNumberOfBytesWritten As Long ) As Long

    CloseHandle

    Private Declare Function CloseHandle Lib "kernel32" ( ByVal hObject As Long ) As Long

    GetCurrentProcess

    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要的控件: Label 、 Timer(interval不為空)、Text
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    定義函數:
    Dim SetHp As Integer ' 定義設定的體力值
    Dim SetMp As Integer ' 定義設定的魔法值
    Dim NowHp As Long ' 定義目前的體力值
    Dim NowMp As Long ' 定義目前的魔法值
    Dim MaxHp As Long ' 定義角色的最高體力值
    Dim MaxMp As Long ' 定義角色的最高魔法值
    Dim DiZhi As Long '定義內存地址函數
    Dim hwnd As Long ' 儲存 FindWindow 函數返回的句柄
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( ByVal lpClassName As String , ByVal lpWindowName As String ) As Long
    Private Declare Function GetWindowThreadProcessId Lib "user32" ( ByVal hwnd As Long , lpdwProcessId As Long )
    As Long
    Private Declare Function OpenProcess Lib "kernel32" ( ByVal dwDesiredAccess As Long , ByVal bInheritHandle As Long , ByVal dwProcessId As Long ) As Long
    Private Declare Function ReadProcessMemory Lib "kernel32" ( ByVal hProcess As Long , ByVal lpBaseAddress As Any , ByVal lpBuffer As Any , ByVal nSize As Long , lpNumberOfBytesWritten As Long ) As Long
    Private Declare Function CloseHandle Lib "kernel32" ( ByVal hObject As Long ) As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Dim SetHp As Integer ' 定義設定的體力值
    Dim SetMp As Integer ' 定義設定的魔法值
    Dim NowHp As Long ' 定義目前的體力值
    Dim NowMp As Long ' 定義目前的魔法值
    Dim MaxHp As Long ' 定義角色的最高體力值
    Dim MaxMp As Long ' 定義角色的最高魔法值
    Dim DiZhi As Long '定義內存地址函數

    Private Function ncnr(lpADDress As Long ) As Integer
    ' 聲明一些需要的變量
    Dim hwnd As Long ' 儲存 FindWindow 函數返回的句柄
    Dim pid As Long ' 儲存進程標識符( Process Id )
    Dim pHandle As Long ' 儲存進程句柄
    hwnd = FindWindow(vbNullString, "封神榜·網絡版")
    ' 取得進程標識符
    GetWindowThreadProcessId hwnd, pid
    ' 使用進程標識符取得進程句柄
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
    ' 在內存地址中讀取數據
    ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&
    ' 關閉進程句柄
    CloseHandle hProcess
    End Function
    Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Const SYNCHRONIZE = &H100000
    Const SPECIFIC_RIGHTS_ALL = &HFFFF
    Const STANDARD_RIGHTS_ALL = &H1F0000
    Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF
    Const PROCESS_VM_OPERATION = &H8&
    Const PROCESS_VM_READ = &H10&
    Const PROCESS_VM_WRITE = &H20&

    Private Sub Form_Load()
    ' 體力:07F68F3 這里替換你所搜索到的地址 魔法:07F6860 同前
    DiZhi = &H 07F68F3
    Timer1.Enabled = True
    Timer2.Enabled = False
    Timer3.Enabled = False
    End Sub

    Private Sub Timer1_Timer()
    Dim hwnd As Long
    hwnd = FindWindow(vbNullString, "封神榜·網絡版")

    If hwnd = 0 Then
    Label12.Caption = "游戲未加載"
    Timer1.Enabled = True
    Timer2.Enabled = False
    Timer3.Enabled = False
    Exit Sub
    End If

    Label12.Caption = "游戲已加載"
    SetHp = Text1.Text ' 獲取設定的體力值
    SetMp = Text2.Text ' 獲取設定的魔法值
    NowHp = ncnr(DiZhi) ' 獲取當前的體力值
    NowMp = ncnr(DiZhi + 12) ' 獲取當前的魔法值
    MaxHp = ncnr(DiZhi + 4) ' 獲取角色的最高體力值
    MaxMp = ncnr(DiZhi + 16) ' 獲取角色的最高魔法值
    Label3.Caption = Str(NowHp) + "/" + Str(MaxHp) ' 顯示角色體力值狀態
    Label4.Caption = Str(NowMp) + "/" + Str(MaxMp) ' 顯示角色魔法值狀態

    If Check1.Value Then
    Timer2.Enabled = True
    Else
    Timer2.Enabled = False
    End If
    If Check2.Value Then
    Timer3.Enabled = True
    Else
    Timer3.Enabled = False
    End If
    End Sub

    Private Sub Timer2_Timer()
    ' 體力值小于設定值按下數字鍵1
    If (NowHp) < SetHp Then
    SendKeys "1"
    End If
    End Sub

    Private Sub Timer3_Timer()
    ' 魔法值小于設定值按下數字鍵2
    If (NowMp) < SetMp Then
    SendKeys "2"
    End If
    End Sub
    --------------------------------------------------------------------------------------------------------------------------------------------------------

    VB 從零開始編外掛(七)

    文章類別:VB專區????發表日期:2005-08-21
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    鉤子:喜歡外掛的人都知道,很多外掛都是在游戲當中才能呼出。這個就用到了鉤子
    N多人說:“哎,VB做鉤子想都別想!去學C語言吧!”只要大家遇到這種人,就別理會他。
    可以說他是個垃圾。在實現鉤子方面VB可能沒有VC快,但是也不像那種人說的“想都別想”
    C語言,我最近幾天看了看。{ } ;這些太多了。腦袋也大了!可能那些學C語言的人是接觸電腦
    編程的時候就學的它吧!但是呢,我接觸電腦學的就是VB。沒辦法我愛它!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    好了下面介紹簡單的鉤子吧!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    SetWindowsHookEx定義如下:
    Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" ( ByVal idHook As Long , ByVal lpfn As Long , ByVal hmod As Long , ByVal dwThreadId As Long ) As Long
    idHook是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉鼠標消息。
    hmod用于全局鉤子,VB要實現鉤子,必須設為0。
    dwThreadId用于線程鉤子VB中可以設置為App.ThreadID。
    lpfn為鉤子函數,在VB中可以使用AddressOf獲得鉤子函數的地址。
    這個函數因為鉤子類型不同而有所不同。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    如鍵盤鉤子為:
    Public Function KeyboardProc( ByVal nCode As Long , ByVal wParam As Long , ByVal lParam As Long ) As Long
    '如果Code不為0,鉤子函數必須調用CallNextHookEx,將消息傳遞給下面的鉤子。wParam和lParam不是按鍵 。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    下面給大家一個VB鉤子運用很好的例子!(全局鉤子)
    我在論壇上遇到了王者,王者可以說是我見到的VB最棒的一個人。可以說王者是個
    VB狂人,很多學C語言的人看來VB不能實現的東西。王者都實現了!這不是在打廣告
    這是真的。VB實現全局鉤子前幾年在某某VB學習網站上看見過“VB全局鉤子是根本不能實現的!站長發布”呵呵!真的有點駭人聽聞!
    但是大家看到了下面這個“萬能吃藥”外掛就知道了!
    http://www.v2best.com/dispbbs.asp?boardID=6&ID=171&page=1
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    其它的就不多說了,開學了。到暑假的時候再寫東西吧!
    希望大家努力,相信一點,
    什么工具什么語言不重要,只要有思路就行!
    --------------------------------------------------------------------------------------------------------------------------------------------------------

    VB 從零開始編外掛(八)
    Private Sub Form_Load()
    CountID = 0
    ExitID = False
    ListView1.ColumnHeaders.Add 1, , "源 IP", 1500
    ListView1.ColumnHeaders.Add 2, , "源端口", 1500
    ListView1.ColumnHeaders.Add 3, , "目標 IP", 1500
    ListView1.ColumnHeaders.Add 4, , "目標端口", 1500
    ListView1.ColumnHeaders.Add 5, , "協議", 1500
    ListView1.ColumnHeaders.Add 6, , "時間", 1500
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    Call WCleanup(s)
    Unload Me
    End Sub

    Private Sub ListView1_Click()
    Dim coun As Long
    Dim sar As String, sar3 As String
    Dim sar1 As String, sar2 As String

    RichTextBox1.Text = "" ''清除 RichTextBox1
    Dim buffer() As Byte
    buffer = str

    If ListView1.SelectedItem Is Nothing Then ''如果 ListView1 控件沒有數值則提示錯誤
    Exit Sub
    End If


    ''將 buffer 的值(即通過 Recibir 接收的數據包)轉換為一定格式并在 RichTextBox1 控件下顯示出來
    For i = 0 To resarray(ListView1.SelectedItem.Index)
    coun = coun + 1
    If Len(Hex(buffer(i))) = 1 Then
    sar = "0" & Hex(buffer(i))
    Else
    sar = Hex(buffer(i))
    End If

    sar3 = sar3 & sar

    If Asc(Chr("&h" & Hex(buffer(i)))) < 32 Then
    sar1 = "."
    Else
    sar1 = Chr("&h" & Hex(buffer(i)))
    End If

    sar2 = sar2 & sar1
    RichTextBox1.Text = RichTextBox1.Text & sar & " "

    If coun = 15 Then
    RichTextBox1.Text = RichTextBox1.Text & " |" & sar2 & vbCrLf:
    coun = 0
    sar2 = ""
    sar3 = ""
    End If
    Next i

    If coun < 15 Then
    r = 44 - (coun * 3) + 1
    es = String(r, Chr(32))
    RichTextBox1.Text = RichTextBox1.Text & es & " |" & sar2
    End If
    End Sub

    Private Sub M_Clear_Click()
    ListView1.ListItems.Clear
    RichTextBox1.Text = ""
    End Sub

    ''程序開始捕捉
    Private Sub M_Start_Click()
    ListView1.ListItems.Clear
    RichTextBox1.Text = ""
    Connecting ip(hostname), MsgHwnd ''開始截取封包
    End Sub


    Private Sub M_Stop_Click()
    ExitID = True ''停止截取封包
    End Sub

    Private Sub MsgHwnd_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    CountID = CountID + 1
    Recibir s, 1
    If ExitID = True Then
    Call WCleanup(s)
    ExitID = False
    MsgBox "退出", vbOKOnly, "數據封包截取"
    End If
    End Sub

    模塊:

    Option Explicit

    ''WSAstartup 用來判斷 Windows 所支持的 Winsock 版本,也就是初始化 Winsock DLL,其中第一個參數為你所想需要的Winsock版本!低字節為主版本,高字節為副版本!由于目前Winsock有兩個版本:1.1和2.2,因此該參數可以是0x101或0x202;第二個參數是一個WSADATA結構,用于接收函數的返回信息!WSAStartup函數調用成功會返回0,否則返回非0值!
    ''WSACleanup 用來關閉 Winsock,與 WSAstartup 一起使用,即 WSAstartup 也可以看為啟動 Winsock
    ''gethostbyname 用來返回一個關于主機信息的結構的指針
    Public Declare Function WSAstartup Lib "wsock32.dll" Alias "WSAStartup" (ByVal wVersionRequired As Integer, ByRef lpWSAData As WSAdata) As Long
    Public Declare Function WsACleanup Lib "wsock32.dll" Alias "WSACleanup" () As Long
    Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)
    Public Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Any) As Long
    Public Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
    Public Declare Function inet_ntoa Lib "wsock32.dll" (ByVal addr As Long) As Long
    Public Declare Function gethostname Lib "wsock32.dll" (ByVal name As String, ByVal namelen As Long) As Long
    Public Declare Function gethostbyname Lib "wsock32.dll" (ByVal name As String) As Long
    Public Declare Function closesocket Lib "wsock32.dll" (ByVal s As Long) As Long
    Public Declare Function recv Lib "wsock32.dll" (ByVal s As Long, buf As Any, ByVal buflen As Long, ByVal flags As Long) As Long
    Public Declare Function socket Lib "wsock32.dll" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long
    Public Declare Function WSAAsyncSelect Lib "wsock32.dll" (ByVal s As Long, ByVal hWnd As Long, ByVal wMsg As Long, ByVal lEvent As Long) As Long
    Public Declare Function WSAIoctl Lib "ws2_32.dll" (ByVal s As Long, ByVal dwIoControlCode As Long, lpvInBuffer As Any, ByVal cbInBuffer As Long, lpvOutBuffer As Any, ByVal cbOutBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As Long, lpCompletionRoutine As Long) As Long
    Public Declare Function inet_addr Lib "wsock32.dll" (ByVal cp As String) As Long
    Public Declare Function bind Lib "wsock32.dll" (ByVal s As Integer, addr As sockaddr, ByVal namelen As Integer) As Integer
    Public Declare Function ntohs Lib "wsock32.dll" (ByVal netshort As Long) As Integer


    Public Type WSAdata
    wVersion As Integer
    wHighVersion As Integer
    szDescription As String * 255
    szSystemStatus As String * 128
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpVendorInfo As Long
    End Type


    ''sock 地址結構
    Public Type sockaddr
    sin_family As Integer
    sin_port As Integer
    sin_addr As Long
    sin_zero As String * 8
    End Type

    Public Type HOSTENT
    h_name As Long
    h_aliases As Long
    h_addrtype As Integer
    h_length As Integer
    h_addr_list As Long
    End Type



    ''ip 頭結構
    Public Type ipheader
    lenver As Byte
    tos As Byte
    len As Integer
    ident As Integer
    flags As Integer
    ttl As Byte
    proto As Byte
    checksum As Integer
    sourceIP As Long
    destIP As Long
    End Type


    ''TCP 頭結構
    Public Type tcp_hdr
    th_sport As Integer
    th_dport As Integer
    th_seq As Long
    th_ack As Long
    th_lenres As Byte
    th_flag As Byte
    th_win As Integer
    th_sum As Integer
    th_urp As Integer
    End Type


    ''UDP 頭結構
    Public Type udp_hdr
    th_sport As Integer
    th_dport As Integer
    th_len As Integer
    th_sum As Integer
    End Type


    ''ICMP 頭結構
    Public Type icmp_hdr
    th_type As Byte
    th_code As Byte
    th_sum As Integer
    th_id As Integer
    th_seq As Integer
    th_time As Long
    End Type

    ''常量
    Public Const PF_INET = 2
    Public Const SOCK_RAW = 3
    Public Const AF_INET = 2
    Public Const FD_READ = &H1
    Public Const SIO_RCVALL = &H98000001
    Public Const EM_REPLACESEL = &HC2

    Public host As HOSTENT
    Public s As Long
    Public sock As sockaddr

    Public Header As ipheader
    Public tcpHead As tcp_hdr
    Public udpHead As udp_hdr
    Public icmpHead As icmp_hdr


    Public resarray() As Long, str As String
    Public i As Long, CountID As Long ''i 為臨時變量,循環語句用,CountID 用來計算一共有多少個數據包
    Public protocol As String
    Public buffer() As Byte ''存放數據包
    Public res As Long ''返回值,臨時變量
    Public ExitID As Boolean ''退出標識


    ''開始
    Public Sub Wstartup()
    Dim Data As WSAdata
    Call WSAstartup(&H202, Data) ''初始化 Winsock 為 2.2
    End Sub

    ''結束
    Public Sub WCleanup(s As Long)
    Call WsACleanup ''關閉 Winsock
    closesocket s
    End Sub

    ''獲得當前主機的 IP
    Public Function ip(ByRef address As String) As String
    Dim pip As Long
    Dim uip As Long
    Dim s As Long
    Dim ss As String
    Dim cul As Long

    CopyMemory host, ByVal gethostbyname(address), Len(host) ''將 gethostbyname 獲得的值放到 host
    CopyMemory pip, ByVal host.h_addr_list, 4 ''將 host.h_addr_list 的值放到 pip
    CopyMemory uip, ByVal pip, 4 ''將 pip 的值放到 uip
    s = inet_ntoa(uip) ''將 uip 轉換為標準的 IPV4 格式
    ss = Space(lstrlen(s)) ''去掉空格
    cul = lstrcpy(ss, s)
    ip = ss ''獲得 IPV4 格式的地址并將其放如 ip
    End Function

    ''獲得當前機器的主機名
    Public Function hostname() As String
    Dim r As Long
    Dim s As String
    Dim host As String

    Wstartup
    host = String(255, 0)
    r = gethostname(host, 255) ''獲得當前主機的主機名

    If r = 0 Then
    hostname = Left(host, InStr(1, host, vbNullChar) - 1)
    End If

    End Function

    ''連接 IP
    Public Sub Connecting(ByRef ip As String, pic As PictureBox)
    Dim res As Long, buf As Long, bufb As Long
    buf = 1

    Wstartup ''初始化 Winsock

    s = socket(AF_INET, SOCK_RAW, 0) ''創建套接字,s 是socket功能返回的文件描述符
    If s < 1 Then
    Call WCleanup(s)
    Exit Sub ''如果創建失敗則退出
    End If

    sock.sin_family = AF_INET ''socket類型
    sock.sin_addr = inet_addr(ip) ''所用的IP地址
    res = bind(s, sock, Len(sock)) ''綁定端口

    If res <> 0 Then
    Call WCleanup(s)
    Exit Sub ''如果綁定失敗則退出
    End If

    res = WSAIoctl(s, SIO_RCVALL, buf, Len(buf), 0, 0, bufb, ByVal 0, ByVal 0) ''改變Socket IO模式,將其改為混亂模式,即接受與自己無關的數據,則 SIO_RCVALL

    If res <> 0 Then
    Call WCleanup(s)
    Exit Sub
    End If

    res = WSAAsyncSelect(s, pic.hWnd, &H202, ByVal FD_READ) ''設置套接字處于阻塞方式或者非阻塞方式,消息發送的窗口是 pic,即 Form1.Picture1

    If res <> 0 Then
    Call WCleanup(s)
    Exit Sub
    End If

    End Sub

    ''接收信息
    Public Sub Recibir(s As Long, ByVal RecFormat As Long)
    If RecFormat = FD_READ Then
    ReDim buffer(2000) ''重定義緩沖區大小為 2000
    Do
    res = recv(s, buffer(0), 2000, 0&) ''接收信息
    If res > 0 Then

    ReDim Preserve resarray(CountID) ''改變數組大小,并保留以前的數據
    str = buffer()
    resarray(CountID) = res

    CopyMemory Header, buffer(0), Len(Header) ''將 buffer 里面的數據復制到 Header 結構里面

    ''根據IP頭結構的標識來獲得是什么類型的數據包,并將 IP 從頭結構中分離出來
    If Header.proto = 1 Then
    protocol = "ICMP"
    proticmp inversaip(Hex(Header.destIP)), inversaip(Hex(Header.sourceIP))
    End If
    If Header.proto = 6 Then
    protocol = "TCP"
    protcp inversaip(Hex(Header.destIP)), inversaip(Hex(Header.sourceIP))
    End If
    If Header.proto = 17 Then
    protocol = "UDP"
    proudp inversaip(Hex(Header.destIP)), inversaip(Hex(Header.sourceIP))
    End If
    End If
    Loop Until res <> 2000
    End If
    End Sub

    ''將 16 進制轉換為 IP 地址
    Public Function inversaip(ByRef lng As String) As String
    Dim ips As String

    Select Case Len(lng)
    Case 1
    lng = "0000000" & lng
    Case 2
    lng = "000000" & lng
    Case 3
    lng = "00000" & lng
    Case 4
    lng = "0000" & lng
    Case 5
    lng = "000" & lng
    Case 6
    lng = "00" & lng
    Case 7
    lng = "0" & lng
    End Select
    For i = 1 To Len(lng) Step 2
    ips = ips & Val("&h" & Mid(lng, Len(lng) - i, 2)) & "."
    Next i

    inversaip = Mid(ips, 1, Len(ips) - 1)
    End Function


    Public Function proticmp(saa As String, soc As String) As String
    Dim ListTemp As Variant
    Set ListTemp = Form1.ListView1.ListItems.Add(, , soc)
    ListTemp.SubItems(2) = saa
    ListTemp.SubItems(4) = protocol
    ListTemp.SubItems(5) = Time

    CopyMemory icmpHead, buffer(0 + 20), Len(icmpHead)

    End Function

    Public Sub protcp(saa As String, soc As String)
    Dim ListTemp As Variant
    CopyMemory tcpHead, buffer(0 + 20), Len(tcpHead)

    Set ListTemp = Form1.ListView1.ListItems.Add(, , soc)
    ListTemp.SubItems(1) = ntohs(tcpHead.th_sport)
    ListTemp.SubItems(2) = saa
    ListTemp.SubItems(3) = ntohs(tcpHead.th_dport)
    ListTemp.SubItems(4) = protocol
    ListTemp.SubItems(5) = Time
    End Sub

    Public Sub proudp(saa As String, soc As String)
    Dim ListTemp As Variant
    CopyMemory udpHead, buffer(0 + 20), Len(udpHead)


    Set ListTemp = Form1.ListView1.ListItems.Add(, , soc)
    ListTemp.SubItems(1) = ntohs(udpHead.th_sport)
    ListTemp.SubItems(2) = saa
    ListTemp.SubItems(3) = ntohs(udpHead.th_dport)
    ListTemp.SubItems(4) = protocol
    ListTemp.SubItems(5) = Time
    End Sub


    --------------------------------------------------------------------------------------------------------------------------------------------------------
    彩色的太費時間了,所以就直接貼了!呵呵!
    VB 從零開始編外掛(九)
    封包的比對!網絡游戲都是通過數據交換實現游戲競技滴,所以分析封包是制作外掛的一個步驟。

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

    網絡游戲封包分為2種封包:1。明文封包 2。加密封包

    多數網絡游戲都是加密封包,其原因是為了信息不被修改。明文封包的也有,呵呵“CS”呀這些

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

    好了,進入正題。封包這玩意其實很難。但是如果你入門了就不難了!

    明文的好對付,BUT加密的就有點.......但也是有辦法滴

    就是“多抓包,多分析,多解密!”呵呵!

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

    抓包篇:什么抓包呢?抓包當然就是用WPE,或者自己編寫軟件拉,上次(呵呵`也就是昨天)已經做過了!

    0056DF38 4E 3E 54 53 56 55 4A 6C 77 64 63 42 4D 46 6A 6E N>TSVUJlwdcBMFjn
    0056DF48 41 4B 62 3F 71 78 76 79 65 47 7A 66 4C 50 3D 5F AKb?qxvyeGzfLP=_
    0056DF58 45 52 40 5A 5C 61 6D 5D 43 68 67 6F 57 44 3B 51 ER@Z\am]ChgoWD;Q
    0056DF68 75 58 5B 3C 74 6B 70 72 5E 60 69 49 48 4F 59 73 uX[<tkpr^`iIHOYs
    0056DF78 2E 33 1E 01 13 22 10 0B 28 2D 20 0D 19 3C 3B 06 .3" (- .<;
    0056DF88 11 1C 0C 00 3D 1D 2F 21 03 02 05 04 2C 31 3E 23 ..=/!,1>#
    0056DF98 32 24 27 38 1F 39 25 12 0A 09 18 1B 2A 29 3A 0E 2$''89%..*):
    0056DFA8 35 07 26 0F 2B 36 14 37 3F 34 30 16 08 15 17 1A 5&+67?40

    這個就是某個網絡游戲的封包!當然是加了密的。

    00878BE0 55 41 4E 4E 4E 4E 4E 4E 4E 4E 4E 42 4E 4E 70 4E UANNNNNNNNNBNNpN
    00878BF0 41 45 56 4E 3E 41 3E 58 79 4E 4B 65 AEVN>A>XyNKe

    00878BE0 05 10 00 00 00 00 00 00 00 00 00 0B 00 00 36 00 ......... ..6.
    00878BF0 10 20 04 00 01 10 01 31 17 00 11 18  .1.

    0087CC04 15 00 00 00 00 00 00 00 0B 00 0D 80 42 01 00 05 ....... ..?B.
    0087CC14 00 71 5C 04 58 .q\X

    什么意思呢?當然就是要分析拉!

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

    分析篇:分析主要就是分析RAM里面的東西拉。可以到“看雪”去學學簡單的匯編命令

    004F3B9C /$ 53 PUSH EBX
    004F3B9D |. 83C4 F8 ADD ESP,-8
    004F3BA0 |. 8BDA MOV EBX,EDX ; 解密后數據目標地址
    004F3BA2 |. 8BD4 MOV EDX,ESP ; 數據傳遞目標地址
    004F3BA4 |. B9 04000000 MOV ECX,4 ; 傳遞個數為 4
    004F3BA9 |. E8 12EEF8FF CALL CLIENT.004829C0 ; 把侍解密的4數值傳遞過來進行解密
    004F3BAE |. 8A0424 MOV AL,BYTE PTR SS:[ESP] ; 第一位
    004F3BB1 |. C1E0 02 SHL EAX,2
    004F3BB4 |. 33D2 XOR EDX,EDX
    004F3BB6 |. 8A5424 01 MOV DL,BYTE PTR SS:[ESP+1] ; 第二位
    004F3BBA |. C1EA 04 SHR EDX,4
    004F3BBD |. 0AC2 OR AL,DL ; 第一位與每二位 0r
    004F3BBF |. 8803 MOV BYTE PTR DS:[EBX],AL ; 輸出第1位
    004F3BC1 |. 43 INC EBX ; 計數器+1 指向第二位
    004F3BC2 |. 8A4424 01 MOV AL,BYTE PTR SS:[ESP+1] ; 第二位
    004F3BC6 |. C1E0 04 SHL EAX,4
    004F3BC9 |. 33D2 XOR EDX,EDX
    004F3BCB |. 8A5424 02 MOV DL,BYTE PTR SS:[ESP+2] ; 第三位
    004F3BCF |. C1EA 02 SHR EDX,2
    004F3BD2 |. 0AC2 OR AL,DL ; 第二位與第三位 or
    004F3BD4 |. 8803 MOV BYTE PTR DS:[EBX],AL ; 輸出第二位
    004F3BD6 |. 43 INC EBX ; 計數器+1 指向第三位
    004F3BD7 |. 8A4424 02 MOV AL,BYTE PTR SS:[ESP+2] ; 第三位
    004F3BDB |. C1E0 06 SHL EAX,6
    004F3BDE |. 8A5424 03 MOV DL,BYTE PTR SS:[ESP+3] ; 第4個
    004F3BE2 |. 0AC2 OR AL,DL ; 第三個與第四個 or
    004F3BE4 |. 8803 MOV BYTE PTR DS:[EBX],AL ; 輸出第三位
    004F3BE6 |. 59 POP ECX
    004F3BE7 |. 5A POP EDX
    004F3BE8 |. 5B POP EBX
    004F3BE9 \. C3 RETN
    004F3BEA 8BC0 MOV EAX,EAX
    004F3BEC /$ 53 PUSH EBX
    004F3BED |. 56 PUSH ESI
    004F3BEE |. 57 PUSH EDI
    004F3BEF |. 55 PUSH EBP
    004F3BF0 |. 50 PUSH EAX ; 封包
    004F3BF1 |. B8 02000000 MOV EAX,2
    004F3BF6 |> 81C4 04F0FFFF /ADD ESP,-0FFC
    004F3BFC |. 50 |PUSH EAX
    004F3BFD |. 48 |DEC EAX
    004F3BFE |.^75 F6 \JNZ SHORT CLIENT.004F3BF6
    004F3C00 |. 8B8424 0020000>MOV EAX,DWORD PTR SS:[ESP+2000]
    004F3C07 |. 8BD9 MOV EBX,ECX
    004F3C09 |. 8BFA MOV EDI,EDX
    004F3C0B |. 8BD3 MOV EDX,EBX
    004F3C0D |. 81E2 03000080 AND EDX,80000003
    004F3C13 |. 79 05 JNS SHORT CLIENT.004F3C1A
    004F3C15 |. 4A DEC EDX
    004F3C16 |. 83CA FC OR EDX,FFFFFFFC
    004F3C19 |. 42 INC EDX
    004F3C1A |> 85D2 TEST EDX,EDX
    004F3C1C |. 74 05 JE SHORT CLIENT.004F3C23
    004F3C1E |. 83C8 FF OR EAX,FFFFFFFF
    004F3C21 |. EB 7B JMP SHORT CLIENT.004F3C9E
    004F3C23 |> 8BD3 MOV EDX,EBX
    004F3C25 |. 85D2 TEST EDX,EDX
    004F3C27 |. 79 03 JNS SHORT CLIENT.004F3C2C
    004F3C29 |. 83C2 03 ADD EDX,3
    004F3C2C |> C1FA 02 SAR EDX,2
    004F3C2F |. 891424 MOV DWORD PTR SS:[ESP],EDX
    004F3C32 |. 8D5424 04 LEA EDX,DWORD PTR SS:[ESP+4]
    004F3C36 |. 8BCB MOV ECX,EBX
    004F3C38 |. E8 83EDF8FF CALL CLIENT.004829C0 ; 整理出封包傳遞給解密地址進行解密
    004F3C3D |. C6441C 04 00 MOV BYTE PTR SS:[ESP+EBX+4],0
    004F3C42 |. 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
    004F3C45 |. C1E3 02 SHL EBX,2
    004F3C48 |. 4B DEC EBX
    004F3C49 |. 85DB TEST EBX,EBX
    004F3C4B |. 7C 28 JL SHORT CLIENT.004F3C75
    004F3C4D |. 43 INC EBX
    004F3C4E |. 8D4424 04 LEA EAX,DWORD PTR SS:[ESP+4] ; 一個封包
    004F3C52 |> 8A10 /MOV DL,BYTE PTR DS:[EAX] ; 第N位
    004F3C54 |. 80FA 3B |CMP DL,3B
    004F3C57 |. 72 05 |JB SHORT CLIENT.004F3C5E
    004F3C59 |. 80FA 7A |CMP DL,7A
    004F3C5C |. 76 05 |JBE SHORT CLIENT.004F3C63
    004F3C5E |> 83C8 FF |OR EAX,FFFFFFFF ; 出錯處理
    004F3C61 |. EB 3B |JMP SHORT CLIENT.004F3C9E
    004F3C63 |> 81E2 FF000000 |AND EDX,0FF
    004F3C69 |. 8A92 3DEF5A00 |MOV DL,BYTE PTR DS:[EDX+5AEF3D] ; 54ef3d是一串字符串.
    004F3C6F |. 8810 |MOV BYTE PTR DS:[EAX],DL ; 轉換后代碼
    004F3C71 |. 40 |INC EAX ; 下一個封包字符
    004F3C72 |. 4B |DEC EBX ; 計數器減1
    004F3C73 |.^75 DD \JNZ SHORT CLIENT.004F3C52
    004F3C75 |> 8B1C24 MOV EBX,DWORD PTR SS:[ESP]
    004F3C78 |. 4B DEC EBX
    004F3C79 |. 85DB TEST EBX,EBX
    004F3C7B |. 7C 1B JL SHORT CLIENT.004F3C98
    004F3C7D |. 43 INC EBX
    004F3C7E |. 33ED XOR EBP,EBP
    004F3C80 |. 8D7424 04 LEA ESI,DWORD PTR SS:[ESP+4] ; 取上面轉化后的數值
    004F3C84 |> 8D546D 00 /LEA EDX,DWORD PTR SS:[EBP+EBP*2]
    004F3C88 |. 03D7 |ADD EDX,EDI ; 目標地址 每次轉化3
    004F3C8A |. 8BC6 |MOV EAX,ESI ; 源地址 每次取
    004F3C8C |. E8 0BFFFFFF |CALL CLIENT.004F3B9C ; 解密數據 (取4個.轉化3個)
    004F3C91 |. 45 |INC EBP
    004F3C92 |. 83C6 04 |ADD ESI,4
    004F3C95 |. 4B |DEC EBX
    004F3C96 |.^75 EC \JNZ SHORT CLIENT.004F3C84
    004F3C98 |> 8B0424 MOV EAX,DWORD PTR SS:[ESP]
    004F3C9B |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2]
    004F3C9E |> 81C4 04200000 ADD ESP,2004
    004F3CA4 |. 5D POP EBP
    004F3CA5 |. 5F POP EDI
    004F3CA6 |. 5E POP ESI
    004F3CA7 |. 5B POP EBX
    004F3CA8 \. C3 RETN

    什么意思?就是要解密后制作外掛拉!

    --------------------------------------------------------------------------------------------------------------------------------------------------------
    外掛的制作就不介紹了設計到VB匯編指針的問題了,VB指針的應用下一次給大家講!

    VB 從零開始編外掛(十)
    前天晚上我跟封包玩了一晚上,因才開始(第一次跟封包)說一下我一晚上的發現吧
    我是直接用WPE截取的,因為金山游戲本身都有截取封包的保護措施(就像MM所說),直接用WPE截取我是截取不到的,后來用Ollydbg調試的時候才截取的到。
    經過前面的準備,封報的明文準備已經OK,準備進行加密,加密方式是取一個4字節的數字,對封包進行Xor運算,運算完畢后就直接發送出去,我核對過用WPE截取封包的數據,和我看到的運算結果完全一致,這說明只要用那個4字節的數字對封包進行反Xor運算就可以得到明文的封包。
    其實說白了那個4字節的數字就是每次加密的密匙,也就是服務器認可的,這個4字節怎么得出的我就沒跟了,暫時只發現只要不更換場景,4字節密匙不會更變。
    相同道理,服務返回的信息也是經過4字節Xor運算處理了的,客戶端解密時候取服務端4字節密匙對封包進行解密就可以得到明文封包。
    大體說下封神封包加密解密流程
    Send:
    1,制造明文封包
    2,取4字節Send密匙
    3,用4字節密匙對封包進行Xor運算(保留前2位),最后不足4字節進行單字節運算。
    4,發送。
    Revc:
    1,收到封包
    2,取4字節Revc密匙
    3,用4字節密匙對封包進行Xor運算(保留前2位),最后不足4字節進行單字節運算。
    4,對明文封包進行分析


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


    以上的方法比較累人!下面說說本地制作吧(既是用大家熟悉的FPE等軟件)
    制作輔助外掛(自動加血,自動加藍,免負重等等)
    HP的地址是不固定的,我使用金山游俠先找出當前的那個地址,
    然后使用softice對該地址設置斷點,softice應該會立刻斷住,
    你會看見MOV DWORD PTR DS:[EAX+ECX*8+EB4],EDI,
    在客戶端中,位置是0x4B2C74,
    你可以修改游戲的進程,
    把MOV DWORD PTR DS:[EAX+ECX*8+EB4],
    EDI改成一個E9 XX XX XX XX 90 90,
    JMP到進程中.rsrc和.data之間的空余地址,
    把(XX XX XX XX) + 0x4B2C74 + 5處的代碼修改成MOV Y, EDI,
    下一條做原來的MOV DWORD PTR DS:[EAX+ECX*8+EB4],EDI,
    再來個E9 ZZ ZZ ZZ ZZ,
    設置好ZZ ZZ ZZ ZZ使其再跳到原來DWORD PTR DS:[EAX+ECX*8+EB4],
    EDI的下一句,就是0x4B2C7B處,
    這樣HP的地址就固定下來了,只要看Y就知道HP了。

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



    下面說說客服端的破解(小試牛刀!)有興趣的朋友可以制作一個DLL
    來實現加血鎖定血量!
    .text:004E8EF0 sub_4E8EF0 proc near
    .text:004E8EF0
    .text:004E8EF0 arg_0 = dword ptr 4
    .text:004E8EF0 arg_4 = dword ptr 8
    .text:004E8EF0 arg_8 = dword ptr 0Ch
    .text:004E8EF0
    .text:004E8EF0 mov ecx, [esp+arg_0] ; 可能是長度LEN地址
    .text:004E8EF4 push ebx
    .text:004E8EF5 mov eax, [esp+4+arg_4] ; 緩存地址
    .text:004E8EF9 push esi
    .text:004E8EFA mov esi, ecx
    .text:004E8EFC push edi
    .text:004E8EFD mov edi, [esp+0Ch+arg_8] ; 加密KEY地址
    .text:004E8F01 and esi, 3 ;相當于緩存長度除以4的余數
    .text:004E8F04 shr ecx, 2 ;相當于緩存長度除以4的商
    .text:004E8F07 mov edx, [edi] ;把加密KEY值放進edx
    .text:004E8F09 mov ebx, ecx ;
    .text:004E8F0B dec ecx ;
    .text:004E8F0C test ebx, ebx ;
    .text:004E8F0E jbe short loc_4E8F1E ;判斷跳轉
    .text:004E8F10 inc ecx ;
    .text:004E8F11
    .text:004E8F11 loc_4E8F11:
    .text:004E8F11 mov ebx, [eax]
    .text:004E8F13 add eax, 4
    .text:004E8F16 xor ebx, edx ;異或運算,EDX=KEY的值,核心運算
    .text:004E8F18 dec ecx
    .text:004E8F19 mov [eax-4], ebx
    .text:004E8F1C jnz short loc_4E8F11 ;相當于FOR循環運算
    .text:004E8F1E
    .text:004E8F1E loc_4E8F1E:
    .text:004E8F1E mov ecx, esi
    .text:004E8F20 dec esi
    .text:004E8F21 test ecx, ecx
    .text:004E8F23 jbe short loc_4E8F35
    .text:004E8F25 lea ecx, [esi+1]
    .text:004E8F28
    .text:004E8F28 loc_4E8F28:
    .text:004E8F28 mov bl, [eax]
    .text:004E8F2A xor bl, dl ;異或運算
    .text:004E8F2C mov [eax], bl
    .text:004E8F2E inc eax
    .text:004E8F2F shr edx, 8
    .text:004E8F32 dec ecx
    .text:004E8F33 jnz short loc_4E8F28;相當于FOR循環運算
    .text:004E8F35
    .text:004E8F35 loc_4E8F35: KEY付值運算;
    .text:004E8F35 mov eax, [edi]
    .text:004E8F37 mov edx, eax
    .text:004E8F39 shl edx, 5
    .text:004E8F3C sub edx, eax
    .text:004E8F3E mov eax, 1
    .text:004E8F43 add edx, 8088405h
    .text:004E8F49 mov [edi], edx KEY付值
    .text:004E8F4B pop edi
    .text:004E8F4C pop esi
    .text:004E8F4D pop ebx
    .text:004E8F4E retn
    .text:004E8F4E sub_4E8EF0 endp

    --------------------------------------------------------------------------------------------------------------------------------------------------------
    VB 從零開始編外掛(十一)
    傳奇外掛制作的資料

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


    顯血:7A0D3: 75 EB
    超負重:99A40: 76 EB
    offset 原 改
    防石化:
    00466F80: 75 90
    00466F81: 2E 90
    穩如泰山:
    0046959D: 20 44
    004695A9: 14 38
    如影隨行:
    004634E2: 00 01
    戰斗退出:
    004620E6: 74 90
    004620E7: 0D 90
    00462162: 74 90
    00462163: 0A 90
    004914CA: 74 90
    004914CB: 0E 90
    00491576: 74 90
    00491577: 0E 90
    相對不卡: ——|
    00463A8D: 99 00 |
    0049B848: 2C 00 |—— 二選一
    絕對不卡: |
    00466F57: 00 01 ——|

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

    防止雙開:
    EB 1C A1 10 41 4A 00
    修改為:
    74 1C A1 10 41 4A 00
    需要雙開就反過來改。

    看血:
    內存地址:47A0D3
    75 EB

    00000075108B45EC
    修改為:
    000000EB108B45EC

    強退:
    內存地址:004620E6(7)
    74 90
    0D 90

    2000740D8B45
    修改為:
    200090908B45
    內存地址:00462162(3)
    74 90
    0A 90

    2000740A8B45
    修改為:
    200090908B45
    內存地址:4914CA(B)
    內存地址:491576(7)
    74 90
    0E 90

    0080782000740EA1
    修改為:
    00807820009090A1


    免助跑
    內存地址:00461BEB(C-F0)
    0F 90
    8E 90
    79 90
    FD 90
    FF 90
    FF 90

    E8000F8E79FDFFFF
    修改為:
    E800909090909090
    內存地址:461BB9(A-E)
    0F 90
    8C 90
    DA 90
    00 90
    00 90
    00 90

    00010F8CDA000000A1
    修改為:
    0001909090909090A1


    跑步砍
    內存地址:004634E2
    00 01

    4F00008D45F0
    修改為:
    4F00018D45F0


    攻擊速度
    內存地址:467016(7)
    78 E2
    05 04

    EB0BB87805
    修改為:
    EB0BB84805
    說明:速度由二位數指定,二位數前后互換為真實數據,數字大為慢小為快


    穿人
    內存地址:472D17
    34 0C

    00000034018845
    修改為:
    0000000C018845


    免蠟
    內存地址:471BDE
    74 EB

    008038007454
    修改為:
    00803800EB54


    物品閃光
    內存地址:471AA6
    04

    1300007625
    修改為:
    0200007625


    自動放藥

    0048C21F F9 68 FD FF
    004623A2 76 07 00 00
    修改為:
    0048C21F DD 50 B0 01
    004623A2 7A ED B2 01


    超負重??
    Poke 00499A40 EB
    004975A8 EB 5C
    00499A40 EB 93

    攻擊方法修
    原版
    00463425 74 1C
    0046344A 74 10
    00463463 74 15

    半月
    00463425 74 1C
    0046344A 74 10
    00463463 90 90
    攻殺
    00463425 74 1C
    0046344A 90 90
    00463463 74 15
    烈火
    00463425 90 90
    0046344A 74 10
    00463463 74 15

    方法二

    半月
    Poke 00463363 D0
    烈火
    Poke 00463363 D1
    普通
    Poke 00463363 C6

    C745E8 C60B 單手砍
    C745E8 C70B 雙手砍
    C745E8 C80B 跳躍砍
    C745E8 CA0B 攻殺
    C745E8 CB0B 刺殺
    C745E8 D00B 半月
    C745E8 D10B 烈火


    無限刺殺
    內存地址:463363
    C6 CB

    C745E8C60B
    修改為:
    C745E8CB0B
    內存地址:463373
    C7 CB

    C745E8C70B
    修改為:
    C745E8CB0B


    無限攻殺
    內存地址:463363
    C6 CA

    C745E8C60B
    修改為:
    C745E8CA0B
    內存地址:463373
    C7 CA

    C745E8C70B
    修改為:
    C745E8CA0B


    無限半月
    內存地址:463363
    C6 D0

    C745E8C60B
    修改為:
    C745E8D00B
    內存地址:463373
    C7 D0

    C745E8C70B
    修改為:
    C745E8D00B


    無限烈火
    內存地址:463363
    C6 D1

    C745E8C60B
    修改為:
    C745E8D10B
    內存地址:463373
    C7 D1

    C745E8C70B
    修改為:
    C745E8D10B

    自動放藥

    0048C21F F9 68 FD FF
    004623A2 76 07 00 00
    修改為:
    0048C21F DD 50 B0 01
    004623A2 7A ED B2 01

    免蠟
    內存地址:471BDE
    74 EB

    008038007454
    修改為:
    00803800EB54
    --------------------------------------------------------------------------------------------------------------------------------------------------------


    編程工具:
    1.VC 高手的不二選擇
    2.Borland C++Builder 如果當年是Borland做了操作系統而不是bill,也許我們現在的
    編程工具更加智能更加方便更加接近人性化. 如果不喜歡VC那種事事必恭的編程方式,
    就用它好了,除了我們用的操作系統不是由它造的之外,幾乎所有的編程都可以用它完
    成.
    3.Borland Delphi 和Borland C++Builder一樣,由同一家公司出品在RAD方面個人感覺
    VB在它面前只是一個小學生.與VC比嘛,除了語法上不同之外,性能及編程方面都要比VC
    強過很多,不過它不是bill的產品,所以有系統底層方面比VC要差一些,不過用它做個什
    么外掛之類,它還是足以勝任的.
    4.VB 這個就不多說了簡單的內存修改封包修改就它就好了,強烈推薦初學者使用,有了
    經驗之后再用其它的工具,可以事倍功半.
    內存工具:
    FPE2001
    GameMaster
    Game Expert
    GameEnchanter
    游神
    金山游俠
    ↑我最喜歡的幾樣工具(金山游俠除外),誰說網絡游戲不能修改。呵呵

    封包修改工具
    WPE
    winsock
    spyMaster
    ETF20
    (PS:還有很多工具喲,不過不太智能化,不過也一樣有功能很強了.這些以后再介紹了)
    輔助工具
    變速齒輪
    按鍵精靈
    Trainer Maker Kit
    Magic Trainer Creator
    反編譯調試脫殼工具
    UltraEdit
    Softice
    TRW2000
    W32Dasm
    OllyDbg
    SPY++
    脫SafeDisc SafeCast 2 殼工具
    脫Aspack殼工具
    脫ASPro殼工具
    脫UPX殼工具
    脫Armadillo殼工具
    VB 從零開始編外掛(十二)
    VB實現指針訪問!DLL的訪問

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

    CopyMemory函數提供了一個簡單的方法來執行C++中見解訪問運算符(*),這個運算符可以訪問被一個指針變量所指向的變量的值。
    即如有指針變量 P,在C++中可以簡單的用 *P 來訪問,那在 VB 中怎么訪問呢?


    在 VB 中,我們可以使用 CopyMemory函數別名。
    Declare Sub VBGetTarget Lb "kernel32" Alias "RtlMoveMemory"(Target As Any,ByVal lPoint As Long,ByVal cbCopy As Long)


    例子:
    Dim Pointer As Long
    Dim Target As Integer
    Dim i As Integer
    i=123
    Pointer=VarPtr(i) ''獲得指針
    VBGetTarget Target,Pointer,LenB(Target)
    Debug.Print Target

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

    很長時間以來,都認為只能通過絕對路徑引用標準DLL中的函數。其實,你也可以用相對路徑。很簡單的,現在就嘗試一下吧。

      1)絕對路徑方法

      比如你的DLL文件位于c:\testDLL\debug\testDLL.dll

      一般來說,你需要在VB中作如下聲明

    Declare Sub mytest Lib "c:\testDLL\dubug\testDLL.dll" (ByVal x As Long)

      另外的一個變通方法是把testDLL.dll放在windows的系統目錄下,這樣,你就可以直接引用文件名了。不過,需要把一個文件放到windows系統目錄下,很是不爽!

      2)相對路徑方法

      看看我們如何用相對路徑,假設你的DLL文件位于c:\testDLL\debug\testDLL.dll,你的VB程序位于目錄c:\testDLL\vbClient
    你可以在VB程序中作如下聲明:

    Declare Sub mytest Lib "../dubug/testDLL.dll" (ByVal x As Long)

      如果直接運行你的VB程序,系統會提示錯誤:找不到../dubug/testDLL.dll.

      為了使上面的聲明其作用,先暫時關閉你的VB工程。然后用一個文本編輯器(notepad,editplus,etc)打開工程文件(就是那個后綴是vbp的家伙),通常vbp文件由幾個部分組成。

    posted on 2006-06-27 14:43 天外飛仙 閱讀(2523) 評論(0)  編輯  收藏 所屬分類: 其它
    主站蜘蛛池模板: 亚洲视频中文字幕| 亚洲国产AV无码一区二区三区| 91九色老熟女免费资源站| 亚洲另类自拍丝袜第五页 | 国产麻豆剧传媒精品国产免费| 午夜在线亚洲男人午在线| 亚洲女初尝黑人巨高清| 中文字幕乱码免费视频| 特级毛片爽www免费版| 亚洲精品美女在线观看播放| 国产男女猛烈无遮挡免费视频网站| 美女视频黄的免费视频网页| 97se亚洲国产综合自在线| 在线观看亚洲精品国产| 国产福利在线观看免费第一福利| 午夜在线免费视频 | 免费精品国自产拍在线播放 | 亚洲一区二区三区亚瑟| 亚洲精品和日本精品| 99视频全部免费精品全部四虎| 曰韩无码AV片免费播放不卡| 亚洲大片免费观看| 亚洲中文字幕第一页在线| 成人免费毛片视频| 18禁美女裸体免费网站| 国产免费MV大全视频网站| 亚洲欧洲精品成人久久曰| 久久精品国产亚洲AV大全| 亚洲一级Av无码毛片久久精品| 大学生美女毛片免费视频| 久久国产免费观看精品3| 国产伦精品一区二区免费| 亚洲av无码av在线播放| 亚洲成年人免费网站| 国产V亚洲V天堂A无码| 亚洲成年人啊啊aa在线观看| 中文毛片无遮挡高潮免费| 一级毛片**不卡免费播| 99视频在线免费观看| 特级无码毛片免费视频| 亚洲Av永久无码精品黑人|