Vad för sorts "paket"?
Är det möjligt att göra ett program som läser av alla paket som skickas från och till ett program och ändra och stoppa vissa?
16 svar · 886 visningar · startad av Alpha II
Är det möjligt att göra ett program som läser av alla paket som skickas från och till ett program och ändra och stoppa vissa?
Vad för sorts "paket"?
tjaaaa...... online spel skickar ju paket fram o tillbaka med information vad man gör, går, trollar, chattar osv. Vill göra ett litet "plugin" till ett spel, det bör gå för jag har sett liknande till andra spel!
Då menar du alltså nätverkspaket? Visst kan man väl ändra, läsa och stoppa nätverkspaket. Det är ju precis vad brandväggar gör.
I ditt fall vet jag inte riktigt. Om du har källkoden till applikationen så kan du ju modifiera den som du vill? Om programmet stöder någon form av standardiserat/dokumenterat plugin-format så kan du kanske utnyttja det?
Annars återstår bara att ge sig ganska djupt ner på driver-nivå alternativt skriva nån sorts "proxy" och då måste du ha ingående kunskaper i exakt hur det överföringsprotokoll programmet använder ser ut. Det blir alltså inget lätt jobb.
Bättre än så kan jag tyvärr inte svara med den information du ger.
Omöjligt är det inte, men inte trivialt heller. Jag förmodar att det är TCP/IP konversation du menar och som niko skrev så bör du ha kännedom om hur lagren i protokollen fungerar.
Är dock ganska säker på att det finns en hel del färdiga lösningar att titta på hos olika spel och programmeringssiter. Kolla på exempelvis http://www.gamedev.net eller http://www.codeproject.com
Går själv just nu en halvsadistisk kurs i protokollskrivande :birp
Off-topic, (I know).
Men för ett tag sen så var jag själv ute efter en app eller kod för att fånga och kasta X % av alla TCP-paket:
http://www.webforum.nu/showthread.php?s=&threadid=51202
Min tanke var att på nåt sätt, vid behov, (steglöst) kunna simulera olika uppkopplingshastiheter.
Så småningom så hittade jag denna kod:
http://www.ntndis.com/utilities/tdi_fw.htm
Så om nån verkligen har behovet (och ca 6 månaders ledig tid att sätta sig in i och modifiera koden) så klarar den nog det mesta vad gäller processrelaterad paketmodifiering/filtrering.
Back to topic.
För det första är det en väldigt plattformsberoende fråga, men jag antar att du spelar i Windows NT/2K/XP.
Man kan göra så kallad "DLL injection" (eller API hooking), och på så sätt bli parasit på en annan process. Det finns några olika sätt att göra detta, sök på MSDN och google. Då kan man byta ut exempelvis send()-funktionen mot sin egen, som först tittar på innehållet och ändrar innan man skickar det med den ursprungliga send(). Nu kanske ditt program inte använder send, utan någon annan funktion för att skicka data, och det måste du ju förstås ta reda på. En bra debugger, exempelvis windbg från debugging tools for windows och symboler för OS:et är ett krav för detta.
Det är nog den enklaste metoden, dock en relativt svår sak att fixa till.
Se: http://www.codeproject.com/system/hooksys.asp
John Robbins har skrivit någon artikel om det på msj.com tror jag, eller eventuellt wintellect.com och i hans bok "debugging applications" tror jag det finns beskrivet.
Funkar det även om spelet är en java applet?
Packet mon var ganska coolt :)
Det konstiga är att spelet verkar skicka ungefär samma data hela tiden även om inget händer :o dåligt programmerat??
Vad är headern på paketen? Cheksum och dest. ip o sånt eller?
En sak jag tyckte var konstigt var att ingen text skickades när man chattade i spelet?!
Och vad är då alla packets som endast innehåller en header utan data?
Det konstiga är att spelet verkar skicka ungefär samma data hela tiden även om inget händer dåligt programmerat??
Skulle säga att det är ganska normalt beteende för nåt som innehåller en chat att med jämna mellanrum fråga servern efter en lista med de x senaste yttrandena och få dessa skickade.
En sak jag tyckte var konstigt var att ingen text skickades när man chattade i spelet?!
Det låter ju iofs lite konstigt om det är en enkel chat. Men det står ju de som gjort applikationen fritt att kryptera/omkoda data precis som de vill. Det finns inget som säger att de måste använda klartext. Men nånting måste ju ha skickats?
Och vad är då alla packets som endast innehåller en header utan data?
Connectionrequests skulle jag tro. Det är ganska vanligt att applets internt använder HTTP när de ansluter tillbaka till servern. Om det är så kan du om det finns en massa ständigt återkommande paket av typen "GET / HTTP/1.1" osv ..
Finns det något sätt att ta reda på vad all data är för något? Det är ju en java applet och den sparas på datorn. Jag har dekompilarat koden elelr vad det kallas, men den är helkonstig. Alla variabler heter bara slumpmässiga nman och funktionerna heter bara en bokstav och koden är spridd i flera filer :O
Att koden ser konstig ut beror på att de har använt sig av en source code obfuscator för att förhindra stöld av kod.
Inget att göra då, eller? eller hur ska jag kunna ta reda på vad datan i paketen egentligen är?
Med en bra nätverkslogger, begåvade gissningar och en massa fritid. :OO
Hmm.... kanske ska skita i det.... känner mit inte tillräckligt l33t för att sitta och hacka online spel ;)