以前寫過很多遊戲發送封包的文章,在絕大部分人的認識中,發送封包的唯一方法就是注入DLL到遊戲進程,然後在發送!
其實我們可以換一種發送的方法,這樣就可以避免遊戲注入DLL的檢測。
我們先看下send這個API定義:
Private Declare Function Send Lib "ws2_32.dll" Alias "send" (ByVal hSocket As Long, Buf As Any, ByVal BufLen As Long, ByVal Flags As Long) As Long
我們可以看到總共有四個參數:
參數1:hSocket:遊戲發送封包的套接字
參數2:Buf:封包內容
參數3:BufLen:封包大小
參數4:Flags:標識符,通常為0
我們知道了參數,就可以構造彙編然後向遊戲發送注入CALL。
我一個項目中部分的代碼:
WriteAsmByte1 JU1, "00010000", "90 90 90 90 90 90" '寫入要發送的封包內容到內存中
AsmClear '清空彙編
AsmAdd "PUSH 0" '標識符
AsmAdd "PUSH 06" '封包大小
AsmAdd "MOV EAX,00010000"
AsmAdd "PUSH EAX" '封包內容
AsmAdd CStr("PUSH" & " 0" & CStr(Val("&H" & Text1.Text))) 'socketid(套接字)
AsmAdd CStr("MOV EAX," & "0" & CStr(Hex(GetProcAddress(LoadLibrary("ws2_32.dll"), "send")))) '獲取send API的內存地址
AsmAdd "CALL EAX" 'call send
我們測試效果向某遊戲發送封包:A1 B2 C3 D3 E5 F6
是不是很簡單呢?大家有什麼想法或者建議留和我交流哦!
有喜歡編程及電腦技術的可以關注我,也可以點擊我的頭條主頁加群哦!
閱讀更多 技術小成 的文章