接着外掛教程 VB 從零開始編外掛

接着外掛教程 VB 從零開始編外掛

需要VBAPI函數:
FindWindow←尋找窗口列表中第一個符合指定條件的頂級窗口
GetWindowThreadProcessId←獲取與指定窗口關聯在一起的一個進程和線程標識符
--------------------------------------------------------------------------------------------------------------------------------------------------------

相關API聲明:
FindWindow

PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
GetWindowThreadProcessId

PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,lpdwProcessIdAsLong)
AsLong
--------------------------------------------------------------------------------------------------------------------------------------------------------
需要的控件:Label、Timer
--------------------------------------------------------------------------------------------------------------------------------------------------------自定義函數:
DimhwndAsLong
--------------------------------------------------------------------------------------------------------------------------------------------------------源代碼:
PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,lpdwProcessIdAsLong)AsLong
PrivateSubTimer1_Timer()
DimhwndAsLong''儲存FindWindow函數返回的句柄
hwnd=FindWindow(vbNullString,"WindowsMediaPlayer")''取得進程標識符
''只要把WindowsMediaPlayer換成遊戲的名稱就可了!
Ifhwnd=0Then
Label1.Caption="遊戲未運行"
Else
Label1.Caption="遊戲已運行"
EndIf
EndSub
相信大家,在製作遊戲外掛的時候,都會用到FPE、金山遊俠、GE修改器、GameMaster8.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這些發包一樣的原理
躲避了NP的掃描現在就可以模擬了!

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

需要VBAPI函數:
keybd_event←函數模擬了鍵盤行動
--------------------------------------------------------------------------------------------------------------------------------------------------------

相關API聲明:
keybd_event

PrivateDeclareSubkeybd_eventLib"user32"(ByValbVkAsByte,ByValScanAsByte,ByValdwFlagsAsLong,ByValdwExtraInfoAsLong)
--------------------------------------------------------------------------------------------------------------------------------------------------------

需要的控件:Timer(interval不爲空)
--------------------------------------------------------------------------------------------------------------------------------------------------------
代碼:
PrivateDeclareSubkeybd_eventLib"user32"(ByValbVkAsByte,ByValScanAsByte,ByValdwFlagsAsLong,ByValdwExtraInfoAsLong)
PrivateSubTimer1_Timer()
Callkeybd_event(82,0,0,0)''模擬按下"R"鍵
EndSub
--------------------------------------------------------------------------------------------------------------------------------------------------------
其它模擬:
方法一:
AppActivatesTitle
SendKeys"5"
方法二:
AppActivatesTitle
SendKeysvbKey5
方法三:
SendMessageHwnd,WM_KEYDOWN,vbKey5,0&
SendMessageHwnd,WM_KEYUP,vbKey5,0&
方法四:
AppActivatesTitle
keybd_event53,0,0,0
keybd_event53,0,KEYEVENTF_KEYUP,0
方法五:
PostMessagelHwnd,WM_KEYDOWN,vbKey5,0&
PostMessagelHwnd,WM_KEYUP,vbKey5,0&
前邊談了模擬鍵盤,下面說說模擬鼠標。
--------------------------------------------------------------------------------------------------------------------------------------------------------

需要VBAPI函數:
mouse_event←模擬一次鼠標事件
--------------------------------------------------------------------------------------------------------------------------------------------------------
相關API聲明:
mouse_event

PrivateDeclareSubmouse_eventLib"user32"(ByValdwFlagsAsLong,ByValdxAsLong,ByValdyAsLong,ByValcButtonsAsLong,ByValdwExtraInfoAsLong)

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

定義變量:

ConstMOUSEEVENTF_LEFTDOWN=&H2

ConstMOUSEEVENTF_LEFTUP=&H4

ConstMOUSEEVENTF_MIDDLEDOWN=&H20

ConstMOUSEEVENTF_MIDDLEUP=&H40

ConstMOUSEEVENTF_MOVE=&H1

ConstMOUSEEVENTF_ABSOLUTE=&H8000

ConstMOUSEEVENTF_RIGHTDOWN=&H8

ConstMOUSEEVENTF_RIGHTUP=&H10

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

MOUSEEVENTF_LEFTDOWN''鼠標左鍵按下

MOUSEEVENTF_LEFTUP''鼠標鬆開

MOUSEEVENTF_RIGHTDOWN''鼠標右鍵按下

MOUSEEVENTF_RIGHTUP''鼠標右鍵鬆開

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

代碼:

PrivateDeclareSubmouse_eventLib"user32"(ByValdwFlagsAsLong,ByValdxAsLong,ByValdyAsLong,ByValcButtonsAsLong,ByValdwExtraInfoAsLong)

ConstMOUSEEVENTF_LEFTDOWN=&H2

ConstMOUSEEVENTF_LEFTUP=&H4

ConstMOUSEEVENTF_MIDDLEDOWN=&H20

ConstMOUSEEVENTF_MIDDLEUP=&H40

ConstMOUSEEVENTF_MOVE=&H1

ConstMOUSEEVENTF_ABSOLUTE=&H8000

ConstMOUSEEVENTF_RIGHTDOWN=&H8

ConstMOUSEEVENTF_RIGHTUP=&H10

''這裏是鼠標左鍵按下和鬆開兩個事件的組合即一次單擊

mouse_eventMOUSEEVENTF_LEFTDOWNOrMOUSEEVENTF_LEFTUP,0,0,0,0

''模擬鼠標右鍵單擊事件

mouse_eventMOUSEEVENTF_RIGHTDOWNOrMOUSEEVENTF_RIGHTUP,0,0,0,0

''兩次連續的鼠標左鍵單擊事件構成一次鼠標雙擊事件

mouse_eventMOUSEEVENTF_LEFTDOWNOrMOUSEEVENTF_LEFTUP,0,0,0,0

mouse_eventMOUSEEVENTF_LEFTDOWNOrMOUSEEVENTF_LEFTUP,0,0,0,0
應用實戰

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

需要VBAPI函數:

FindWindow

GetWindowThreadProcessId

OpenProcess

ReadProcessMemory

CloseHandle

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

相關API聲明:

FindWindow



PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong


GetWindowThreadProcessId



PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,lpdwProcessIdAsLong)

AsLong


OpenProcess



PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInherITHandleAsLong,ByValdwProcessIdAsLong)AsLong


ReadProcessMemory





PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong


CloseHandle



PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong


GetCurrentProcess



PrivateDeclareFunctionGetCurrentProcessLib"kernel32"()AsLong

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

需要的控件:Label、Timer(interval不爲空)、Text

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

定義函數:

DimSetHpAsInteger''定義設定的體力值

DimSetMpAsInteger''定義設定的魔法值

DimNowHpAsLong''定義目前的體力值

DimNowMpAsLong''定義目前的魔法值

DimMaxHpAsLong''定義角色的最高體力值

DimMaxMpAsLong''定義角色的最高魔法值

DimDiZhiAsLong''定義內存地址函數

DimhwndAsLong''儲存FindWindow函數返回的句柄

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

代碼:

PrivateDeclareFunctionFindWindowLib"user32"Alias"FindWindowA"(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong

PrivateDeclareFunctionGetWindowThreadProcessIdLib"user32"(ByValhwndAsLong,lpdwProcessIdAsLong)

AsLong

PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValbInheritHandleAsLong,ByValdwProcessIdAsLong)AsLong

PrivateDeclareFunctionReadProcessMemoryLib"kernel32"(ByValhProcessAsLong,ByVallpBaseAddressAsAny,ByVallpBufferAsAny,ByValnSizeAsLong,lpNumberOfBytesWrittenAsLong)AsLong

PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong

PrivateDeclareFunctionGetCurrentProcessLib"kernel32"()AsLong

DimSetHpAsInteger''定義設定的體力值

DimSetMpAsInteger''定義設定的魔法值

DimNowHpAsLong''定義目前的體力值

DimNowMpAsLong''定義目前的魔法值

DimMaxHpAsLong''定義角色的最高體力值

DimMaxMpAsLong''定義角色的最高魔法值

DimDiZhiAsLong''定義內存地址函數


PrivateFunctionncnr(lpADDressAsLong)AsInteger

''聲明一些需要的變量

DimhwndAsLong''儲存FindWindow函數返回的句柄

DimpidAsLong''儲存進程標識符(ProcessId)

DimpHandleAsLong''儲存進程句柄

hwnd=FindWindow(vbNullString,"封神榜·網絡版")

''取得進程標識符

GetWindowThreadProcessIdhwnd,pid

''使用進程標識符取得進程句柄

pHandle=OpenProcess(PROCESS_ALL_ACCESS,False,pid)

''在內存地址中讀取數據

ReadProcessMemorypHandle,lpADDress,ByValVarPtr(ncnr),4,0&

''關閉進程句柄

CloseHandlehProcess

EndFunction

ConstSTANDARD_RIGHTS_REQUIRED=&HF0000

ConstSYNCHRONIZE=&H100000

ConstSPECIFIC_RIGHTS_ALL=&HFFFF

ConstSTANDARD_RIGHTS_ALL=&H1F0000

ConstPROCESS_ALL_ACCESS=STANDARD_RIGHTS_REQUIREDOrSYNCHRONIZEOr&HFFF

ConstPROCESS_VM_OPERATION=&H8&

ConstPROCESS_VM_READ=&H10&

ConstPROCESS_VM_WRITE=&H20&




PrivateSubForm_Load()

''體力:07F68F3這裏替換你所搜索到的地址魔法:07F6860同前

DiZhi=&H07F68F3

Timer1.Enabled=True

Timer2.Enabled=False

Timer3.Enabled=False

EndSub


PrivateSubTimer1_Timer()

DimhwndAsLong

hwnd=FindWindow(vbNullString,"封神榜·網絡版")


Ifhwnd=0Then

Label12.Caption="遊戲未加載"

Timer1.Enabled=True

Timer2.Enabled=False

Timer3.Enabled=False

ExitSub

EndIf


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)''顯示角色魔法值狀態


IfCheck1.ValueThen

Timer2.Enabled=True

Else

Timer2.Enabled=False

EndIf

IfCheck2.ValueThen

Timer3.Enabled=True

Else

Timer3.Enabled=False

EndIf

EndSub


PrivateSubTimer2_Timer()

''體力值小於設定值按下數字鍵1

If(NowHp)<SetHpThen

SendKeys"1"

EndIf

EndSub


PrivateSubTimer3_Timer()

''魔法值小於設定值按下數字鍵2

If(NowMp)<SetMpThen

SendKeys"2"

EndIf

EndSub

--------------------------------------------------------------------------------------------------------------------------------------------------------
鉤子:喜歡外掛的人都知道,很多外掛都是在遊戲當中才能呼出。這個就用到了鉤子

N多人說:“哎,VB做鉤子想都別想!去學C語言吧!”只要大家遇到這種人,就別理會他。

可以說他是個垃圾。在實現鉤子方面VB可能沒有VC快,但是也不像那種人說的“想都別想”

C語言,我最近幾天看了看。{};這些太多了。腦袋也大了!可能那些學C語言的人是接觸電腦

編程的時候就學的它吧!但是呢,我接觸電腦學的就是VB。沒辦法我愛它!

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

好了下面介紹簡單的鉤子吧!

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

SetWindowsHookEx定義如下:

DeclareFunctionSetWindowsHookExLib"user32"Alias"SetWindowsHookExA"(ByValidHookAsLong,ByVallpfnAsLong,ByValhmodAsLong,ByValdwThreadIdAsLong)AsLong

idHook是鉤子類型,如WH_KEYBOARD捕捉鍵盤消息,而WH_MOUSE捕捉鼠標消息。

hmod用於全局鉤子,VB要實現鉤子,必須設爲0。

dwThreadId用於線程鉤子VB中可以設置爲App.ThreadID。

lpfn爲鉤子函數,在VB中可以使用AddressOf獲得鉤子函數的地址。

這個函數因爲鉤子類型不同而有所不同。

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

如鍵盤鉤子爲:

PublicFunctionKeyboardProc(ByValnCodeAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong

''如果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

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

其它的就不多說了,開學了。到暑假的時候再寫東西吧!

希望大家努力,相信一點,

什麼工具什麼語言不重要,只要有思路就行!

做外掛的人都知道,目前有兩種辦法制作網絡遊戲外掛。一種是封包式另外一種是內存式!下面就給大家制作一個抓包器,來研究一下,網絡遊戲的數據!

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

PrivateSubForm_Load()

CountID=0

ExitID=False

ListView1.ColumnHeaders.Add1,,"源IP",1500

ListView1.ColumnHeaders.Add2,,"源端口",1500

ListView1.ColumnHeaders.Add3,,"目標IP",1500

ListView1.ColumnHeaders.Add4,,"目標端口",1500

ListView1.ColumnHeaders.Add5,,"協議",1500

ListView1.ColumnHeaders.Add6,,"時間",1500

EndSub


PrivateSubForm_Unload(CancelAsInteger)

CallWCleanup(s)

UnloadMe

EndSub


PrivateSubListView1_Click()

DimcounAsLong

DimsarAsString,sar3AsString

Dimsar1AsString,sar2AsString


RichTextBox1.Text=""''清除RichTextBox1

Dimbuffer()AsByte

buffer=str


IfListView1.SelectedItemIsNothingThen''如果ListView1控件沒有數值則提示錯誤

ExitSub

EndIf



''將buffer的值(即通過Recibir接收的數據包)轉換爲一定格式並在RichTextBox1控件下顯示出來

Fori=0Toresarray(ListView1.SelectedItem.Index)

coun=coun+1

IfLen(Hex(buffer(i)))=1Then

sar="0"&Hex(buffer(i))

Else

sar=Hex(buffer(i))

EndIf


sar3=sar3&sar


IfAsc(Chr("&h"&Hex(buffer(i))))<32Then

sar1="."

Else

sar1=Chr("&h"&Hex(buffer(i)))

EndIf


sar2=sar2&sar1

RichTextBox1.Text=RichTextBox1.Text&sar&""


Ifcoun=15Then

RichTextBox1.Text=RichTextBox1.Text&"|"&sar2&vbCrLf:

coun=0

sar2=""

sar3=""

EndIf

Nexti


Ifcoun<15Then

r=44-(coun*3)+1

es=String(r,Chr(32))

RichTextBox1.Text=RichTextBox1.Text&es&"|"&sar2

EndIf

EndSub


PrivateSubM_Clear_Click()

ListView1.ListItems.Clear

RichTextBox1.Text=""

EndSub


''程序開始捕捉

PrivateSubM_Start_Click()

ListView1.ListItems.Clear

RichTextBox1.Text=""

Connectingip(hostname),MsgHwnd''開始截取封包

EndSub



PrivateSubM_Stop_Click()

ExitID=True''停止截取封包

EndSub


PrivateSubMsgHwnd_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

CountID=CountID+1

Recibirs,1

IfExitID=TrueThen

CallWCleanup(s)

ExitID=False

MsgBox"退出",vbOKOnly,"數據封包截取"

EndIf

EndSub


模塊:


OptionExplicit


''WSAstartup用來判斷Windows所支持的Winsock版本,也就是初始化WinsockDLL,其中第一個參數爲你所想需要的Winsock版本!低字節爲主版本,高字節爲副版本!由於目前Winsock有兩個版本:1.1和2.2,因此該參數可以是0x101或0x202;第二個參數是一個WSADATA結構,用於接收函數的返回信息!WSAStartup函數調用成功會返回0,否則返回非0值!

''WSACleanup用來關閉Winsock,與WSAstartup一起使用,即WSAstartup也可以看爲啓動Winsock

''gethostbyname用來返回一個關於主機信息的結構的指針

PublicDeclareFunctionWSAstartupLib"wsock32.dll"Alias"WSAStartup"(ByValwVersionRequiredAsInteger,ByReflpWSADataAsWS
Adata)AsLong

PublicDeclareFunctionWsACleanupLib"wsock32.dll"Alias"WSACleanup"()AsLong

PublicDeclareSubCopyMemoryLib"kernel32.dll"Alias"RtlMoveMemory"(DestinationAsAny,SourceAsAny,ByVallengthAsLong)

PublicDeclareFunctionlstrlenLib"kernel32.dll"Alias"lstrlenA"(ByVallpStringAsAny)AsLong

PublicDeclareFunctionlstrcpyLib"kernel32.dll"Alias"lstrcpyA"(ByVallpString1AsAny,ByVallpString2AsAny)AsLong

PublicDeclareFunctioninet_ntoaLib"wsock32.dll"(ByValaddrAsLong)AsLong

PublicDeclareFunctiongethostnameLib"wsock32.dll"(ByValnameAsString,ByValnamelenAsLong)AsLong

PublicDeclareFunctiongethostbynameLib"wsock32.dll"(ByValnameAsString)AsLong

PublicDeclareFunctionclosesocketLib"wsock32.dll"(ByValsAsLong)AsLong

PublicDeclareFunctionrecvLib"wsock32.dll"(ByValsAsLong,bufAsAny,ByValbuflenAsLong,ByValflagsAsLong)AsLong

PublicDeclareFunctionsocketLib"wsock32.dll"(ByValafAsLong,ByVals_typeAsLong,ByValprotocolAsLong)AsLong

PublicDeclareFunctionWSAAsyncSelectLib"wsock32.dll"(ByValsAsLong,ByValhWndAsLong,ByValwMsgAsLong,ByVallEventAsLong)AsLong

PublicDeclareFunctionWSAIoctlLib"ws2_32.dll"(ByValsAsLong,ByValdwIoControlCodeAsLong,lpvInBufferAsAny,ByValcbInBufferAsLong,lpvOutBufferAsAny,ByValcbOutBufferAsLong,lpcbBytesReturnedAsLong,lpOverlappedAsLong,lpCompletionRoutineAsLong)AsLong

PublicDeclareFunctioninet_addrLib"wsock32.dll"(ByValcpAsString)AsLong

PublicDeclareFunctionbindLib"wsock32.dll"(ByValsAsInteger,addrAssockaddr,ByValnamelenAsInteger)AsInteger

PublicDeclareFunctionntohsLib"wsock32.dll"(ByValnetshortAsLong)AsInteger



PublicTypeWSAdata

wVersionAsInteger

wHighVersionAsInteger

szDescriptionAsString*255

szSystemStatusAsString*128

iMaxSocketsAsInteger

iMaxUdpDgAsInteger

lpVendorInfoAsLong

EndType



''sock地址結構

PublicTypesockaddr

sin_familyAsInteger

sin_portAsInteger

sin_addrAsLong

sin_zeroAsString*8

EndType


PublicTypeHOSTENT

h_nameAsLong

h_aliasesAsLong

h_addrtypeAsInteger

h_lengthAsInteger

h_addr_listAsLong

EndType





''ip頭結構

PublicTypeipheader

lenverAsByte

tosAsByte

lenAsInteger

identAsInteger

flagsAsInteger

ttlAsByte

protoAsByte

checksumAsInteger

sourceIPAsLong

destIPAsLong

EndType



''TCP頭結構

PublicTypetcp_hdr

th_sportAsInteger

th_dportAsInteger

th_seqAsLong

th_ackAsLong

th_lenresAsByte

th_flagAsByte

th_winAsInteger

th_sumAsInteger

th_urpAsInteger

EndType



''UDP頭結構

PublicTypeudp_hdr

th_sportAsInteger

th_dportAsInteger

th_lenAsInteger

th_sumAsInteger

EndType



''ICMP頭結構

PublicTypeicmp_hdr

th_typeAsByte

th_codeAsByte

th_sumAsInteger

th_idAsInteger

th_seqAsInteger

th_timeAsLong

EndType


''常量

PublicConstPF_INET=2

PublicConstSOCK_RAW=3

PublicConstAF_INET=2

PublicConstFD_READ=&H1

PublicConstSIO_RCVALL=&H98000001

PublicConstEM_REPLACESEL=&HC2


PublichostAsHOSTENT

PublicsAsLong

PublicsockAssockaddr


PublicHeaderAsipheader

PublictcpHeadAstcp_hdr

PublicudpHeadAsudp_hdr

PublicicmpHeadAsicmp_hdr



Publicresarray()AsLong,strAsString

PubliciAsLong,CountIDAsLong''i爲臨時變量,循環語句用,CountID用來計算一共有多少個數據包

PublicprotocolAsString

Publicbuffer()AsByte''存放數據包

PublicresAsLong''返回值,臨時變量

PublicExitIDAsBoolean''退出標識



''開始

PublicSubWstartup()

DimDataAsWSAdata

CallWSAstartup(&H202,Data)''初始化Winsock爲2.2

EndSub


''結束

PublicSubWCleanup(sAsLong)

CallWsACleanup''關閉Winsock

closesockets

EndSub


''獲得當前主機的IP

PublicFunctionip(ByRefaddressAsString)AsString

DimpipAsLong

DimuipAsLong

DimsAsLong

DimssAsString

DimculAsLong


CopyMemoryhost,ByValgethostbyname(address),Len(host)''將gethostbyname獲得的值放到host

CopyMemorypip,ByValhost.h_addr_list,4''將host.h_addr_list的值放到pip

CopyMemoryuip,ByValpip,4''將pip的值放到uip

s=inet_ntoa(uip)''將uip轉換爲標準的IPV4格式

ss=Space(lstrlen(s))''去掉空格

cul=lstrcpy(ss,s)

ip=ss''獲得IPV4格式的地址並將其放如ip

EndFunction


''獲得當前機器的主機名

PublicFunctionhostname()AsString

DimrAsLong

DimsAsString

DimhostAsString


Wstartup

host=String(255,0)

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


Ifr=0Then

hostname=Left(host,InStr(1,host,vbNullChar)-1)

EndIf


EndFunction


''連接IP

PublicSubConnecting(ByRefipAsString,picAsPictureBox)

DimresAsLong,bufAsLong,bufbAsLong

buf=1


Wstartup''初始化Winsock


s=socket(AF_INET,SOCK_RAW,0)''創建套接字,s是socket功能返回的文件描述符

Ifs<1Then

CallWCleanup(s)

ExitSub''如果創建失敗則退出

EndIf


sock.sin_family=AF_INET''socket類型

sock.sin_addr=inet_addr(ip)''所用的IP地址

res=bind(s,sock,Len(sock))''綁定端口


Ifres<>0Then

CallWCleanup(s)

ExitSub''如果綁定失敗則退出

EndIf


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


Ifres<>0Then

CallWCleanup(s)

ExitSub

EndIf


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


Ifres<>0Then

CallWCleanup(s)

ExitSub

EndIf


EndSub


''接收信息

PublicSubRecibir(sAsLong,ByValRecFormatAsLong)

IfRecFormat=FD_READThen

ReDimbuffer(2000)''重定義緩衝區大小爲2000

Do

res=recv(s,buffer(0),2000,0&)''接收信息

Ifres>0Then


ReDimPreserveresarray(CountID)''改變數組大小,並保留以前的數據

str=buffer()

resarray(CountID)=res


CopyMemoryHeader,buffer(0),Len(Header)''將buffer裏面的數據複製到Header結構裏面


''根據IP頭結構的標識來獲得是什麼類型的數據包,並將IP從頭結構中分離出來

IfHeader.proto=1Then

protocol="ICMP"

proticmpinversaip(Hex(Header.destIP)),inversaip(Hex(Header.sourceIP))

EndIf

IfHeader.proto=6Then

protocol="TCP"

protcpinversaip(Hex(Header.destIP)),inversaip(Hex(Header.sourceIP))

EndIf

IfHeader.proto=17Then

protocol="UDP"

proudpinversaip(Hex(Header.destIP)),inversaip(Hex(Header.sourceIP))

EndIf

EndIf

LoopUntilres<>2000

EndIf

EndSub


''將16進制轉換爲IP地址

PublicFunctioninversaip(ByReflngAsString)AsString
DimipsAsString
SelectCaseLen(lng)
Case1
lng="0000000"&lng
Case2
lng="000000"&lng
Case3
lng="00000"&lng
Case4
lng="0000"&lng
Case5
lng="000"&lng
Case6
lng="00"&lng
Case7
lng="0"&lng
EndSelect
Fori=1ToLen(lng)Step2

ips=ips&Val("&h"&Mid(lng,Len(lng)-i,2))&"."
Nexti
inversaip=Mid(ips,1,Len(ips)-1)

EndFunction
PublicFunctionproticmp(saaAsString,socAsString)AsString

DimListTempAsVariant

SetListTemp=Form1.ListView1.ListItems.Add(,,soc)

ListTemp.SubItems(2)=saa

ListTemp.SubItems(4)=protocol

ListTemp.SubItems(5)=Time


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


EndFunction


PublicSubprotcp(saaAsString,socAsString)

DimListTempAsVariant

CopyMemorytcpHead,buffer(0+20),Len(tcpHead)


SetListTemp=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

EndSub


PublicSubproudp(saaAsString,socAsString)

DimListTempAsVariant

CopyMemoryudpHead,buffer(0+20),Len(udpHead)



SetListTemp=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

EndSub


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

彩色的太費時間了,所以就直接貼了!呵呵!
分析篇:分析主要就是分析ram裏面的東西拉。可以到“看雪”去學學簡單的彙編命令
004f3b9c/$53pushebx
004f3b9d|.83c4f8addesp,-8
004f3ba0|.8bdamovebx,edx;解密後數據目標地址
004f3ba2|.8bd4movedx,esp;數據傳遞目標地址
004f3ba4|.b904000000movecx,4;傳遞個數爲4
004f3ba9|.e812eef8ffcallclient.004829c0;把侍解密的4數值傳遞過來進行解密
004f3bae|.8a0424moval,byteptrss:[esp];第一位
004f3bb1|.c1e002shleax,2
004f3bb4|.33d2xoredx,edx
004f3bb6|.8a542401movdl,byteptrss:[esp+1];第二位
004f3bba|.c1ea04shredx,4
004f3bbd|.0ac2oral,dl;第一位與每二位0r
004f3bbf|.8803movbyteptrds:[ebx],al;輸出第1位
004f3bc1|.43incebx;計數器+1指向第二位
004f3bc2|.8a442401moval,byteptrss:[esp+1];第二位
004f3bc6|.c1e004shleax,4
004f3bc9|.33d2xoredx,edx
004f3bcb|.8a542402movdl,byteptrss:[esp+2];第三位
004f3bcf|.c1ea02shredx,2
004f3bd2|.0ac2oral,dl;第二位與第三位or
004f3bd4|.8803movbyteptrds:[ebx],al;輸出第二位
004f3bd6|.43incebx;計數器+1指向第三位
004f3bd7|.8a442402moval,byteptrss:[esp+2];第三位
004f3bdb|.c1e006shleax,6
004f3bde|.8a542403movdl,byteptrss:[esp+3];第4個
004f3be2|.0ac2oral,dl;第三個與第四個or
004f3be4|.8803movbyteptrds:[ebx],al;輸出第三位
004f3be6|.59popecx
004f3be7|.5apopedx
004f3be8|.5bpopebx
004f3be9/.c3retn
004f3bea8bc0moveax,eax
004f3bec/$53pushebx
004f3bed|.56pushesi
004f3bee|.57pushedi
004f3bef|.55pushebp
004f3bf0|.50pusheax;封包
004f3bf1|.b802000000moveax,2
004f3bf6|>81c404f0ffff/addesp,-0ffc
004f3bfc|.50|pusheax
004f3bfd|.48|deceax
004f3bfe|.^75f6/jnzshortclient.004f3bf6
004f3c00|.8b84240020000>moveax,dwordptrss:[esp+2000]
004f3c07|.8bd9movebx,ecx
004f3c09|.8bfamovedi,edx
004f3c0b|.8bd3movedx,ebx
004f3c0d|.81e203000080andedx,80000003
004f3c13|.7905jnsshortclient.004f3c1a
004f3c15|.4adecedx
004f3c16|.83cafcoredx,fffffffc
004f3c19|.42incedx
004f3c1a|>85d2testedx,edx
004f3c1c|.7405jeshortclient.004f3c
23
004f3c1e|.83c8fforeax,ffffffff
004f3c21|.eb7bjmpshortclient.004f3c9e
004f3c23|>8bd3movedx,ebx
004f3c25|.85d2testedx,edx
004f3c27|.7903jnsshortclient.004f3c2c
004f3c29|.83c203addedx,3
004f3c2c|>c1fa02saredx,2
004f3c2f|.891424movdwordptrss:[esp],edx
004f3c32|.8d542404leaedx,dwordptrss:[esp+4]
004f3c36|.8bcbmovecx,ebx
004f3c38|.e883edf8ffcallclient.004829c0;整理出封包傳遞給解密地址進行解密
004f3c3d|.c6441c0400movbyteptrss:[esp+ebx+4],0
004f3c42|.8b1c24movebx,dwordptrss:[esp]
004f3c45|.c1e302shlebx,2
004f3c48|.4bdecebx
004f3c49|.85dbtestebx,ebx
004f3c4b|.7c28jlshortclient.004f3c75
004f3c4d|.43incebx
004f3c4e|.8d442404leaeax,dwordptrss:[esp+4];一個封包
004f3c52|>8a10/movdl,byteptrds:[eax];第n位
004f3c54|.80fa3b|cmpdl,3b
004f3c57|.7205|jbshortclient.004f3c5e
004f3c59|.80fa7a|cmpdl,7a
004f3c5c|.7605|jbeshortclient.004f3c63
004f3c5e|>83c8ff|oreax,ffffffff;出錯處理
004f3c61|.eb3b|jmpshortclient.004f3c9e
004f3c63|>81e2ff000000|andedx,0ff
004f3c69|.8a923def5a00|movdl,byteptrds:[edx+5aef3d];54ef3d是一串字符串.
004f3c6f|.8810|movbyteptrds:[eax],dl;轉換後代碼
004f3c71|.40|inceax;下一個封包字符
004f3c72|.4b|decebx;計數器減1
004f3c73|.^75dd/jnzshortclient.004f3c52
004f3c75|>8b1c24movebx,dwordptrss:[esp]
004f3c78|.4bdecebx
004f3c79|.85dbtestebx,ebx
004f3c7b|.7c1bjlshortclient.004f3c98
004f3c7d|.43incebx
004f3c7e|.33edxorebp,ebp
004f3c80|.8d742404leaesi,dwordptrss:[esp+4];取上面轉化後的數值
004f3c84|>8d546d00/leaedx,dwordptrss:[ebp+ebp*2]
004f3c88|.03d7|addedx,edi;目標地址每次轉化3
004f3c8a|.8bc6|moveax,esi;源地址每次取
004f3c8c|.e80bffffff|callclient.004f3b9c;解密數據(取4個.轉化3個)
004f3c91|.45|incebp
004f3c92|.83c604|addesi,4
004f3c95|.4b|decebx
004f3c96|.^75ec/jnzshortclient.004f3c84
004f3c98|>8b0424moveax,dwordptrss:[esp]
004f3c9b|.8d0440leaeax,dwordptrds:[eax+eax*2]
004f3c9e|>81c404200000addesp,2004
004f3ca4|.5dpopebp
004f3ca5|.5fpopedi
004f3ca6|.5epopesi
004f3ca7|.5bpopebx
004f3ca8/.c3retn
封包的比對!網絡遊戲都是通過數據交換實現遊戲競技滴,所以分析封包是製作外掛的一個步驟。
--------------------------------------------------------------------------------------------------------------------------------------------------------
網絡遊戲封包分爲2種封包:1。明文封包2。加密封包
多數網絡遊戲都是加密封包,其原因是爲了信息不被修改。明文封包的也有,呵呵“cs”呀這些
--------------------------------------------------------------------------------------------------------------------------------------------------------
好了,進入正題。封包這玩意其實很難。但是如果你入門了就不難了!
明文的好對付,but加密的就有點.......但也是有辦法滴
就是“多抓包,多分析,多解密!”呵呵!
--------------------------------------------------------------------------------------------------------------------------------------------------------
抓包篇:什麼抓包呢?抓包當然就是用wpe,或者自己編寫軟件拉,上次(呵呵`也就是昨天)已經做過了!
0056df384e3e545356554a6c776463424d466a6en>tsvujlwdcbmfjn
0056df48414b623f7178767965477a664c503d5fakb?qxvyegzflp=_
[email=0056df584552405a5c616d5d4368676f57443b51er@z am]chgowd;q]0056df584552405a5c616d5d4368676f57443b51er@z/am]chgowd;q[/email]
0056df6875585b3c746b70725e606949484f5973ux[0056df782e331e011322100b282d200d193c3b06.3"(-.<;
0056df88111c0c003d1d2f21030205042c313e23..=/!,1>#
0056df98322427381f3925120a09181b2a293a0e2$''''89%..*):
0056dfa83507260f2b3614373f3430160815171a5&+67?40
這個就是某個網絡遊戲的封包!當然是加了密的。
00878be055414e4e4e4e4e4e4e4e4e424e4e704euannnnnnnnnbnnpn
00878bf04145564e3e413e58794e4b65aevn>a>xynke
00878be005100000000000000000000b00003600...........6.
00878bf0102004000110013117001118.1.
0087cc0415000000000000000b000d8042010005.........?b.
0087cc1400715c0458.q/x
什麼意思呢?當然就是要分析拉!
--------------------------------------------------------------------------------------------------------------------------------------------------------
前天晚上我跟封包玩了一晚上,因纔開始(第一次跟封包)說一下我一晚上的發現吧

我是直接用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應該會立刻斷住,

你會看見MOVDWORDPTRDS:[EAX+ECX*8+EB4],EDI,

在客戶端中,位置是0x4B2C74,

你可以修改遊戲的進程,

把MOVDWORDPTRDS:[EAX+ECX*8+EB4],

EDI改成一個E9XXXXXXXX9090,

JMP到進程中.rsrc和.data之間的空餘地址,

把(XXXXXXXX)+0x4B2C74+5處的代碼修改成MOVY,EDI,

下一條做原來的MOVDWORDPTRDS:[EAX+ECX*8+EB4],EDI,

再來個E9ZZZZZZZZ,

設置好ZZZZZZZZ使其再跳到原來DWORDPTRDS:[EAX+ECX*8+EB4],

EDI的下一句,就是0x4B2C7B處,

這樣HP的地址就固定下來了,只要看Y就知道HP了。

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




下面說說客服端的破解(小試牛刀!)有興趣的朋友可以製作一個DLL

來實現加血鎖定血量!

.text:004E8EF0sub_4E8EF0procnear

.text:004E8EF0

.text:004E8EF0arg_0=dwordptr4

.text:004E8EF0arg_4=dwordptr8

.text:004E8EF0arg_8=dwordptr0Ch

.text:004E8EF0

.text:004E8EF0movecx,[esp+arg_0];可能是長度LEN地址

.text:004E8EF4pushebx

.text:004E8EF5moveax,[esp+4+arg_4];緩存地址

.text:004E8EF9pushesi

.text:004E8EFAmovesi,ecx

.text:004E8EFCpushedi

.text:004E8EFDmovedi,[esp+0Ch+arg_8];加密KEY地址

.text:004E8F01andesi,3;相當於緩存長度除以4的餘數

.text:004E8F04shrecx,2;相當於緩存長度除以4的商

.text:004E8F07movedx,[edi];把加密KEY值放進edx

.text:004E8F09movebx,ecx;

.text:004E8F0Bdececx;

.text:004E8F0Ctestebx,ebx;

.text:004E8F0Ejbeshortloc_4E8F1E;判斷跳轉

.text:004E8F10incecx;

.text:004E8F11

.text:004E8F11loc_4E8F11:

.text:004E8F11movebx,[eax]

.text:004E8F13addeax,4

.text:004E8F16xorebx,edx;異或運算,EDX=KEY的值,核心運算

.text:004E8F18dececx

.text:004E8F19mov[eax-4],ebx

.text:004E8F1Cjnzshortloc_4E8F11;相當於FOR循環運算

.text:004E8F1E

.text:004E8F1Eloc_4E8F1E:

.text:004E8F1Emovecx,esi

.text:004E8F20decesi

.text:004E8F21testecx,ecx

.text:004E8F23jbeshortloc_4E8F35

.text:004E8F25leaecx,[esi+1]

.text:004E8F28

.text:004E8F28loc_4E8F28:

.text:004E8F28movbl,[eax]

.text:004E8F2Axorbl,dl;異或運算

.text:004E8F2Cmov[eax],bl

.text:004E8F2Einceax

.text:004E8F2Fshredx,8

.text:004E8F32dececx

.text:004E8F33jnzshortloc_4E8F28;相當於FOR循環運算

.text:004E8F35

.text:004E8F35loc_4E8F35:KEY付值運算;

.text:004E8F35moveax,[edi]

.text:004E8F37movedx,eax

.text:004E8F39shledx,5

.text:004E8F3Csubedx,eax

.text:004E8F3Emoveax,1

.text:004E8F43addedx,8088405h

.text:004E8F49mov[edi],edxKEY付值

.text:004E8F4Bpopedi

.text:004E8F4Cpopesi

.text:004E8F4Dpopebx

.text:004E8F4Eretn

.text:004E8F4Esub_4E8EF0endp

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


今天就到這裏
傳奇外掛製作的資料

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




顯血:7A0D3:75EB

超負重:99A40:76EB

offset原改

防石化:

00466F80:7590

00466F81:2E90

穩如泰山:

0046959D:2044

004695A9:1438

如影隨行:

004634E2:0001

戰鬥退出:

004620E6:7490

004620E7:0D90

00462162:7490

00462163:0A90

004914CA:7490

004914CB:0E90

00491576:7490

00491577:0E90

相對不卡:——|

00463A8D:9900|

0049B848:2C00|——二選一

絕對不卡:|

00466F57:0001——|


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


防止雙開:

EB1CA110414A00

修改爲:

741CA110414A00

需要雙開就反過來改。


看血:

內存地址:47A0D3

75EB



00000075108B45EC

修改爲:

000000EB108B45EC


強退:

內存地址:004620E6(7)

7490

0D90



2000740D8B45

修改爲:

200090908B45

內存地址:00462162(3)

7490

0A90



2000740A8B45

修改爲:

200090908B45

內存地址:4914CA(B)

內存地址:491576(7)

7490

0E90



0080782000740EA1

修改爲:

00807820009090A1




免助跑

內存地址:00461BEB(C-F0)

0F90

8E90

7990

FD90

FF90

FF90



E8000F8E79FDFFFF

修改爲:

E800909090909090

內存地址:461BB9(A-E)

0F90

8C90

DA90

0090

0090

0090



00010F8CDA000000A1

修改爲:

0001909090909090A1

跑步砍

內存地址:004634E2

0001



4F00008D45F0

修改爲:

4F00018D45F0
攻擊速度
內存地址:46
7016(7)
78E2
0504

EB0BB87805
修改爲:
EB0BB84805
說明:速度由二位數指定,二位數前後互換爲真實數據,數字大爲慢小爲快
穿人
內存地址:472D17
340C

00000034018845
修改爲:
0000000C018845
免蠟
內存地址:471BDE
74EB

008038007454
修改爲:
00803800EB54
物品閃光
內存地址:471AA6
04

1300007625
修改爲:

0200007625
自動放藥

0048C21FF968FDFF
004623A276070000
修改爲:
0048C21FDD50B001
004623A27AEDB201
超負重??
Poke00499A40EB
004975A8EB5C
00499A40EB93
攻擊方法修

原版
00463425741C
0046344A7410
004634637415
半月

00463425741C

0046344A7410

004634639090

攻殺

00463425741C

0046344A9090

004634637415

烈火

004634259090

0046344A7410

004634637415


方法二
半月
Poke00463363D0
烈火
Poke00463363D1
普通
Poke00463363C6
C745E8C60B單手砍

C745E8C70B雙手砍

C745E8C80B跳躍砍

C745E8CA0B攻殺

C745E8CB0B刺殺

C745E8D00B半月

C745E8D10B烈火
無限刺殺

內存地址:463363
C6CB

C745E8C60B
修改爲:
C745E8CB0B
內存地址:463373
C7CB

C745E8C70B
修改爲:
C745E8CB0B
無限攻殺
內存地址:463363
C6CA

C745E8C60B
修改爲:
C745E8CA0B
內存地址:463373
C7CA

C745E8C70B
修改爲:
C745E8CA0B
無限半月
內存地址:463363
C6D0

C745E8C60B
修改爲:
C745E8D00B
內存地址:463373
C7D0

C745E8C70B
修改爲:
C745E8D00B
無限烈火
內存地址:463363
C6D1

C745E8C60B
修改爲:
C745E8D10B
內存地址:463373
C7D1

C745E8C70B
修改爲:
C745E8D10B
自動放藥

0048C21FF968FDFF
004623A276070000
修改爲:
0048C21FDD50B001
004623A27AEDB201
免蠟
內存地址:471BDE
74EB

008038007454
修改爲:
00803800EB54
--------------------------------------------------------------------------------------------------------------------------------------------------------
編程工具:
1.VC高手的不二選擇
2.BorlandC++Builder如果當年是Borland做了操作系統而不是bill,也許我們現在的
編程工具更加智能更加方便更加接近人性化.如果不喜歡VC那種事事必恭的編程方式,
就用它好了,除了我們用的操作系統不是由它造的之外,幾乎所有的編程都可以用它完成.

3.BorlandDelphi和BorlandC++Builder一樣,由同一家公司出品在RAD方面個人感覺
VB在它面前只是一個小學生.與VC比嘛,除了語法上不同之外,性能及編程方面都要比VC
強過很多,不過它不是bill的產品,所以有系統底層方面比VC要差一些,不過用它做個什麼外掛之類,它還是足以勝任的.
4.VB這個就不多說了簡單的內存修改封包修改就它就好了,強烈推薦初學者使用,有了

經驗之後再用其它的工具,可以事倍功半.
內存工具:
FPE2001
GameMaster
GameExpert
GameEnchanter
遊神
金山遊俠
↑我最喜歡的幾樣工具(金山遊俠除外),誰說網絡遊戲不能修改。呵呵
封包修改工具
WPE
winsock
spyMaster
ETF20
(PS:還有很多工具喲,不過不太智能化,不過也一樣有功能很強了.這些以後再介紹了)

輔助工具
變速齒輪
按鍵精靈
TrainerMakerKit
MagicTrainerCreator
反編譯調試脫殼工具
UltraEdit
Softice
TRW2000
W32Dasm
OllyDbg
SPY++
脫SafeDiscSafeCast2殼工具
脫Aspack殼工具
脫ASPro殼工具
脫UPX殼工具
脫Armadillo殼工具
VB實現指針訪問!DLL的訪問--------------------------------------------------------------------------------------------------------------------------------------------------------CopyMemory函數提供了一個簡單的方法來執行C++中見解訪問運算符(*),這個運算符可以訪問被一個指針變量所指向的變量的值。
即如有指針變量P,在C++中可以簡單的用*P來訪問,那在VB中怎麼訪問呢?在VB中,我們可以使用CopyMemory函數別名。
DeclareSubVBGetTargetLb"kernel32"Alias"RtlMoveMemory"(TargetAsAny,ByVallPointAsLong,ByValcbCopyAsLong)
例子:
DimPointerAsLong
DimTargetAsInteger
DimiAsInteger
i=123
Pointer=VarPtr(i)''獲得指針
VBGetTargetTarget,Pointer,LenB(Target)
Debug.PrintTarget
--------------------------------------------------------------------------------------------------------------------------------------------------------

很長時間以來,都認爲只能通過絕對路徑引用標準DLL中的函數。其實,你也可以用相對路徑。很簡單的,現在就嘗試一下吧。1)絕對路徑方法比如你的DLL文件位於c:estDLLdebugestDLL.dll
一般來說,你需要在VB中作如下聲明
DeclareSubmytestLib"c:estDLLdubugestDLL.dll"(ByValxAsLong)
另外的一個變通方法是把testDLL.dll放在windows的系統目錄下,這樣,你就可以直接引用文件名了。不過,需要把一個文件放到windows系統目錄下,很是不爽!
2)相對路徑方法
看看我們如何用相對路徑,假設你的DLL文件位於c:estDLLdebugestDLL.dll,你的VB程序位於目錄c:estDLLvbClient
你可以在VB程序中作如下聲明:
DeclareSubmytestLib"../dubug/testDLL.dll"(ByValxAsLong)
如果直接運行你的VB程序,系統會提示錯誤:找不到../dubug/testDLL.dll.
爲了使上面的聲明其作用,先暫時關閉你的VB工程。然後用一個文本編輯器(notepad,editplus,etc)打開工程文件(就是那個後綴是vbp的傢伙),通常vbp文件由幾個部分組成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章