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

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

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

    飛艷小屋

    程序--人生--哲學(xué)___________________歡迎艷兒的加入

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
    VB 從零開始編外掛(一)
    需要VB API函數(shù):
    FindWindow ←尋找窗口列表中第一個符合指定條件的頂級窗口
    GetWindowThreadProcessId ←獲取與指定窗口關(guān)聯(lián)在一起的一個進(jìn)程和線程標(biāo)識符
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關(guān)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
    -------------------------------------------------------------------------------------------------------------------------------------------------------- 自定義函數(shù):
    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 函數(shù)返回的句柄
    hwnd = FindWindow(vbNullString, "Windows Media Player")'' 取得進(jìn)程標(biāo)識符
    ''只要把Windows Media Player換成游戲的名稱就可了!
    If hwnd = 0 Then
    Label1.Caption = "游戲未運行"
    Else
    Label1.Caption = "游戲已運行"
    End If
    End Sub

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



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


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


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

    VB 從零開始編外掛(三)
    躲避了NP的掃描現(xiàn)在就可以模擬了!
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數(shù):
    keybd_event ←函數(shù)模擬了鍵盤行動
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關(guān)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函數(shù):
    GetAsyncKeyState ←判斷函數(shù)調(diào)用時指定虛擬鍵的狀態(tài)
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關(guān)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
    ''然后在循環(huán)中或Timer的Timer事件中檢測:
    Private Sub Timer1_Timer()
    If MyHotKey(vbKeyA) And vbKeyControl Then ''ctrl+A
    End ''關(guān)閉
    End If
    ''其中vbkeyA是鍵盤″A″的常數(shù),其他鍵可按F1查得。
    End Sub
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    其它方法:
    比如按下"ctrl+A"就退出!
    ''可以設(shè)置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 從零開始編外掛(五)
    前邊談了模擬鍵盤,下面說說模擬鼠標(biāo)。
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數(shù):
    mouse_event ←模擬一次鼠標(biāo)事件
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關(guān)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''鼠標(biāo)左鍵按下
    MOUSEEVENTF_LEFTUP''鼠標(biāo)松開
    MOUSEEVENTF_RIGHTDOWN ''鼠標(biāo)右鍵按下
    MOUSEEVENTF_RIGHTUP''鼠標(biāo)右鍵松開
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    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
    ''這里是 鼠標(biāo)左鍵按下 和松開兩個事件的組合即一次單擊
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    ''模擬鼠標(biāo)右鍵單擊事件
    mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
    ''兩次連續(xù)的鼠標(biāo)左鍵單擊事件 構(gòu)成一次鼠標(biāo)雙擊事件
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

    VB 從零開始編外掛(六)

    文章類別:VB專區(qū)????發(fā)表日期:2005-08-21

    --------------------------------------------------------------------------------------------------------------------------------------------------------
    應(yīng)用實戰(zhàn)
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    需要VB API函數(shù):
    FindWindow
    GetWindowThreadProcessId
    OpenProcess
    ReadProcessMemory
    CloseHandle
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    相關(guān)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
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    定義函數(shù):
    Dim SetHp As Integer ' 定義設(shè)定的體力值
    Dim SetMp As Integer ' 定義設(shè)定的魔法值
    Dim NowHp As Long ' 定義目前的體力值
    Dim NowMp As Long ' 定義目前的魔法值
    Dim MaxHp As Long ' 定義角色的最高體力值
    Dim MaxMp As Long ' 定義角色的最高魔法值
    Dim DiZhi As Long '定義內(nèi)存地址函數(shù)
    Dim hwnd As Long ' 儲存 FindWindow 函數(shù)返回的句柄
    --------------------------------------------------------------------------------------------------------------------------------------------------------
    代碼:
    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 ' 定義設(shè)定的體力值
    Dim SetMp As Integer ' 定義設(shè)定的魔法值
    Dim NowHp As Long ' 定義目前的體力值
    Dim NowMp As Long ' 定義目前的魔法值
    Dim MaxHp As Long ' 定義角色的最高體力值
    Dim MaxMp As Long ' 定義角色的最高魔法值
    Dim DiZhi As Long '定義內(nèi)存地址函數(shù)

    Private Function ncnr(lpADDress As Long ) As Integer
    ' 聲明一些需要的變量
    Dim hwnd As Long ' 儲存 FindWindow 函數(shù)返回的句柄
    Dim pid As Long ' 儲存進(jìn)程標(biāo)識符( Process Id )
    Dim pHandle As Long ' 儲存進(jìn)程句柄
    hwnd = FindWindow(vbNullString, "封神榜·網(wǎng)絡(luò)版")
    ' 取得進(jìn)程標(biāo)識符
    GetWindowThreadProcessId hwnd, pid
    ' 使用進(jìn)程標(biāo)識符取得進(jìn)程句柄
    pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
    ' 在內(nèi)存地址中讀取數(shù)據(jù)
    ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&
    ' 關(guān)閉進(jìn)程句柄
    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, "封神榜·網(wǎng)絡(luò)版")

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

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

    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()
    ' 體力值小于設(shè)定值按下數(shù)字鍵1
    If (NowHp) < SetHp Then
    SendKeys "1"
    End If
    End Sub

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

    VB 從零開始編外掛(七)

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

    VB 從零開始編外掛(八)
    Private Sub Form_Load()
    CountID = 0
    ExitID = False
    ListView1.ColumnHeaders.Add 1, , "源 IP", 1500
    ListView1.ColumnHeaders.Add 2, , "源端口", 1500
    ListView1.ColumnHeaders.Add 3, , "目標(biāo) IP", 1500
    ListView1.ColumnHeaders.Add 4, , "目標(biāo)端口", 1500
    ListView1.ColumnHeaders.Add 5, , "協(xié)議", 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 控件沒有數(shù)值則提示錯誤
    Exit Sub
    End If


    ''將 buffer 的值(即通過 Recibir 接收的數(shù)據(jù)包)轉(zhuǎn)換為一定格式并在 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, "數(shù)據(jù)封包截取"
    End If
    End Sub

    模塊:

    Option Explicit

    ''WSAstartup 用來判斷 Windows 所支持的 Winsock 版本,也就是初始化 Winsock DLL,其中第一個參數(shù)為你所想需要的Winsock版本!低字節(jié)為主版本,高字節(jié)為副版本!由于目前Winsock有兩個版本:1.1和2.2,因此該參數(shù)可以是0x101或0x202;第二個參數(shù)是一個WSADATA結(jié)構(gòu),用于接收函數(shù)的返回信息!WSAStartup函數(shù)調(diào)用成功會返回0,否則返回非0值!
    ''WSACleanup 用來關(guān)閉 Winsock,與 WSAstartup 一起使用,即 WSAstartup 也可以看為啟動 Winsock
    ''gethostbyname 用來返回一個關(guān)于主機(jī)信息的結(jié)構(gòu)的指針
    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 地址結(jié)構(gòu)
    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 頭結(jié)構(gòu)
    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 頭結(jié)構(gòu)
    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 頭結(jié)構(gòu)
    Public Type udp_hdr
    th_sport As Integer
    th_dport As Integer
    th_len As Integer
    th_sum As Integer
    End Type


    ''ICMP 頭結(jié)構(gòu)
    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 為臨時變量,循環(huán)語句用,CountID 用來計算一共有多少個數(shù)據(jù)包
    Public protocol As String
    Public buffer() As Byte ''存放數(shù)據(jù)包
    Public res As Long ''返回值,臨時變量
    Public ExitID As Boolean ''退出標(biāo)識


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

    ''結(jié)束
    Public Sub WCleanup(s As Long)
    Call WsACleanup ''關(guān)閉 Winsock
    closesocket s
    End Sub

    ''獲得當(dāng)前主機(jī)的 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 轉(zhuǎn)換為標(biāo)準(zhǔn)的 IPV4 格式
    ss = Space(lstrlen(s)) ''去掉空格
    cul = lstrcpy(ss, s)
    ip = ss ''獲得 IPV4 格式的地址并將其放如 ip
    End Function

    ''獲得當(dāng)前機(jī)器的主機(jī)名
    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) ''獲得當(dāng)前主機(jī)的主機(jī)名

    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) ''創(chuàng)建套接字,s 是socket功能返回的文件描述符
    If s < 1 Then
    Call WCleanup(s)
    Exit Sub ''如果創(chuàng)建失敗則退出
    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模式,將其改為混亂模式,即接受與自己無關(guān)的數(shù)據(jù),則 SIO_RCVALL

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

    res = WSAAsyncSelect(s, pic.hWnd, &H202, ByVal FD_READ) ''設(shè)置套接字處于阻塞方式或者非阻塞方式,消息發(fā)送的窗口是 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) ''重定義緩沖區(qū)大小為 2000
    Do
    res = recv(s, buffer(0), 2000, 0&) ''接收信息
    If res > 0 Then

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

    CopyMemory Header, buffer(0), Len(Header) ''將 buffer 里面的數(shù)據(jù)復(fù)制到 Header 結(jié)構(gòu)里面

    ''根據(jù)IP頭結(jié)構(gòu)的標(biāo)識來獲得是什么類型的數(shù)據(jù)包,并將 IP 從頭結(jié)構(gòu)中分離出來
    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 進(jìn)制轉(zhuǎn)換為 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 從零開始編外掛(九)
    封包的比對!網(wǎng)絡(luò)游戲都是通過數(shù)據(jù)交換實現(xiàn)游戲競技滴,所以分析封包是制作外掛的一個步驟。

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

    網(wǎng)絡(luò)游戲封包分為2種封包:1。明文封包 2。加密封包

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

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

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

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

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

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

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

    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

    這個就是某個網(wǎng)絡(luò)游戲的封包!當(dāng)然是加了密的。

    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

    什么意思呢?當(dāng)然就是要分析拉!

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

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

    004F3B9C /$ 53 PUSH EBX
    004F3B9D |. 83C4 F8 ADD ESP,-8
    004F3BA0 |. 8BDA MOV EBX,EDX ; 解密后數(shù)據(jù)目標(biāo)地址
    004F3BA2 |. 8BD4 MOV EDX,ESP ; 數(shù)據(jù)傳遞目標(biāo)地址
    004F3BA4 |. B9 04000000 MOV ECX,4 ; 傳遞個數(shù)為 4
    004F3BA9 |. E8 12EEF8FF CALL CLIENT.004829C0 ; 把侍解密的4數(shù)值傳遞過來進(jìn)行解密
    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 ; 計數(shù)器+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 ; 計數(shù)器+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 ; 整理出封包傳遞給解密地址進(jìn)行解密
    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 ; 轉(zhuǎn)換后代碼
    004F3C71 |. 40 |INC EAX ; 下一個封包字符
    004F3C72 |. 4B |DEC EBX ; 計數(shù)器減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] ; 取上面轉(zhuǎn)化后的數(shù)值
    004F3C84 |> 8D546D 00 /LEA EDX,DWORD PTR SS:[EBP+EBP*2]
    004F3C88 |. 03D7 |ADD EDX,EDI ; 目標(biāo)地址 每次轉(zhuǎn)化3
    004F3C8A |. 8BC6 |MOV EAX,ESI ; 源地址 每次取
    004F3C8C |. E8 0BFFFFFF |CALL CLIENT.004F3B9C ; 解密數(shù)據(jù) (取4個.轉(zhuǎn)化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

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

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

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


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


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

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



    下面說說客服端的破解(小試牛刀!)有興趣的朋友可以制作一個DLL
    來實現(xiàn)加血鎖定血量!
    .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 ;相當(dāng)于緩存長度除以4的余數(shù)
    .text:004E8F04 shr ecx, 2 ;相當(dāng)于緩存長度除以4的商
    .text:004E8F07 mov edx, [edi] ;把加密KEY值放進(jìn)edx
    .text:004E8F09 mov ebx, ecx ;
    .text:004E8F0B dec ecx ;
    .text:004E8F0C test ebx, ebx ;
    .text:004E8F0E jbe short loc_4E8F1E ;判斷跳轉(zhuǎn)
    .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 ;相當(dāng)于FOR循環(huán)運算
    .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;相當(dāng)于FOR循環(huán)運算
    .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
    超負(fù)重:99A40: 76 EB
    offset 原 改
    防石化:
    00466F80: 75 90
    00466F81: 2E 90
    穩(wěn)如泰山:
    0046959D: 20 44
    004695A9: 14 38
    如影隨行:
    004634E2: 00 01
    戰(zhàn)斗退出:
    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
    需要雙開就反過來改。

    看血:
    內(nèi)存地址:47A0D3
    75 EB

    00000075108B45EC
    修改為:
    000000EB108B45EC

    強(qiáng)退:
    內(nèi)存地址:004620E6(7)
    74 90
    0D 90

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

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

    0080782000740EA1
    修改為:
    00807820009090A1


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

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

    00010F8CDA000000A1
    修改為:
    0001909090909090A1


    跑步砍
    內(nèi)存地址:004634E2
    00 01

    4F00008D45F0
    修改為:
    4F00018D45F0


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

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


    穿人
    內(nèi)存地址:472D17
    34 0C

    00000034018845
    修改為:
    0000000C018845


    免蠟
    內(nèi)存地址:471BDE
    74 EB

    008038007454
    修改為:
    00803800EB54


    物品閃光
    內(nèi)存地址:471AA6
    04

    1300007625
    修改為:
    0200007625


    自動放藥

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


    超負(fù)重??
    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 烈火


    無限刺殺
    內(nèi)存地址:463363
    C6 CB

    C745E8C60B
    修改為:
    C745E8CB0B
    內(nèi)存地址:463373
    C7 CB

    C745E8C70B
    修改為:
    C745E8CB0B


    無限攻殺
    內(nèi)存地址:463363
    C6 CA

    C745E8C60B
    修改為:
    C745E8CA0B
    內(nèi)存地址:463373
    C7 CA

    C745E8C70B
    修改為:
    C745E8CA0B


    無限半月
    內(nèi)存地址:463363
    C6 D0

    C745E8C60B
    修改為:
    C745E8D00B
    內(nèi)存地址:463373
    C7 D0

    C745E8C70B
    修改為:
    C745E8D00B


    無限烈火
    內(nèi)存地址:463363
    C6 D1

    C745E8C60B
    修改為:
    C745E8D10B
    內(nèi)存地址: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

    免蠟
    內(nèi)存地址:471BDE
    74 EB

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


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

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

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

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


    在 VB 中,我們可以使用 CopyMemory函數(shù)別名。
    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

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

    很長時間以來,都認(rèn)為只能通過絕對路徑引用標(biāo)準(zhǔn)DLL中的函數(shù)。其實,你也可以用相對路徑。很簡單的,現(xiàn)在就嘗試一下吧。

      1)絕對路徑方法

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

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

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

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

      2)相對路徑方法

      看看我們?nèi)绾斡孟鄬β窂剑僭O(shè)你的DLL文件位于c:\testDLL\debug\testDLL.dll,你的VB程序位于目錄c:\testDLL\vbClient
    你可以在VB程序中作如下聲明:

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

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

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

    posted on 2006-06-27 14:43 天外飛仙 閱讀(2523) 評論(0)  編輯  收藏 所屬分類: 其它
    主站蜘蛛池模板: 99蜜桃在线观看免费视频网站| 99免费视频观看| 看亚洲a级一级毛片| 亚洲熟妇无码一区二区三区导航| 亚洲va在线va天堂va手机| 亚洲成人黄色网址| 亚洲午夜精品在线| 亚洲人成网站看在线播放| 国产成人精品日本亚洲11| 亚洲婷婷天堂在线综合| 亚洲成a人片7777| 亚洲国产精品成人精品小说| 亚洲午夜电影在线观看高清| 2020天堂在线亚洲精品专区| 亚洲国产成人手机在线观看| 国产精品观看在线亚洲人成网| 国产亚洲日韩在线a不卡| 免费中文字幕视频| 精品无码一级毛片免费视频观看| a级毛片高清免费视频| 久久久久免费看黄a级试看| 日本免费污片中国特一级| 97国产在线公开免费观看| 国产免费女女脚奴视频网| 成年性午夜免费视频网站不卡| 免费观看a级毛片| 内射无码专区久久亚洲| 中文亚洲AV片在线观看不卡| 亚洲成AV人片在线观看无| www国产亚洲精品久久久日本| 亚洲毛片不卡av在线播放一区| 亚洲中文久久精品无码ww16| 亚洲三级电影网址| 亚洲精品一品区二品区三品区| 免费在线观看污网站| 在线亚洲午夜理论AV大片| 亚洲伊人tv综合网色| 亚洲综合成人网在线观看| 亚洲youjizz| 午夜成人无码福利免费视频| 久久精品免费电影|