Onko mahdollista pistää ohjelma klikkaamaan ilman mouse_eventiä tai sendmessage/postmessage juttuja?
Yhteen peliin teen taas bottia mutta siihen on tulossa päivitys joka huomaa jos botti käyttää noi apeja...
Onko olemassa esim jokin dll erikseen hiiri juttuja varten?
Luulen että ei ole. Luulisin myös että jos peli käyttää esim. DirectX niin pystyt jotenkin käyttämään DirectX -apeja joita pelikin kutsuu.
Mutta jos kerran windows apeja blokkaa jo niin luulen että nuokin ovat blokattu.
Mikähän peli on kyseessä? Ja saanko kysyä miksi jokaiselle pelille pitää tehdä jonkinlainen huijausohjelma, eikö skillit riitä?
Vai että bottia väsäät. Toivottavasti on tulossa sen verran hyvä päivitys, että ei onnistu. L2P :)
matpit kirjoitti:
...Ja saanko kysyä miksi jokaiselle pelille pitää tehdä jonkinlainen huijausohjelma, eikö skillit riitä?
Koska myyn niitä ja saan rahaa. Tässä pelissä ei ole kyse taidon puutteesta vaan laiskuudesta.
Tule sitten kertomaan kun rikastut koodinpätkällä jota et tule täältä saamaan. Sitä paitsi kenellä kiinnostaa ostaa tuntemattoman koodaajaan häkkejä, missä on ties mitä muita oheis -toimintoja?
matpit kirjoitti:
Tule sitten kertomaan kun rikastut koodinpätkällä jota et tule täältä saamaan. Sitä paitsi kenellä kiinnostaa ostaa tuntemattoman koodaajaan häkkejä, missä on ties mitä muita oheis -toimintoja?
78:aa tyyppiä tällä hetkellä. Myyn halvalla. Sain vähä $$.
Aika julma peli jos hookkailee tuosta vaan ulkopuolisten prosessien apeja. Ainakaan minkään java appletin ei pitäisi kyetä tekemään tommosta, sehän olisi enemmän kuin vakava tietoturvariski :O
Whatever, kokeile käyttää SendInputtia mouse_eventin sijasta, mutta tuskimpa tulee toimimaan. Taasen, jos kunnolla aletaan kikkailemaan niin SendInputin korvaaminen seuraavilla funktioilla luulisi auttavan. Toimii tai ei toimi:
#define _WIN32_WINNT 0x401 // Jos herjaa syntax erroria 'LPINPUT':sta, määritä tämä ennen windows.h:n includeemista __declspec(naked)UINT SendInputXP(UINT nInputs, LPINPUT pInputs, int cbSize) { __asm { MOV EAX,0x11F6 MOV EDX,0x7FFE0300 CALL DWORD PTR DS:[EDX] RETN 0x0C } } __declspec(naked)UINT SendInputVista(UINT nInputs, LPINPUT pInputs, int cbSize) { __asm { MOV EAX,0x120D MOV EDX,0x7FFE0300 CALL DWORD PTR DS:[EDX] RETN 0x0C } }
Vaan jos vieläkin ne detektionit ulvovat niin sillon ne bustaa sut aivan varmasti jostain muusta kuin klikkaus-APIen käytöstä. Voihan tietenkin vielä olla, että siellä pohjalla lymyilee jokin Ring 0 -hookki, mutta en ainakaan haluaisi uskoa siihen.
edit. Oho, väärä kieli =D
Kuitenkin jos VB:ssä sattuisi jonkun ihmeen kautta olemaan mahdollisuus käyttää inline assemblyä, niin kaipa tuon voisi toteuttaa silläkin.
Joo vähä eri näköstä ku VB. :P
Onko muuten hiirenliikutkseen muuta kun setcursorpos tai postmessage api?
Moikka JussiR!
API-purkkaa...
'formiin valikko: Valikko & sen alle alivalikko: Valinta Private Type PISTE x As Long y As Long End Type Private Type LAATIKKO vasen As Long yla As Long oikea As Long ala As Long End Type Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function GetMenuItemRect Lib "user32" (ByVal hwnd As Long, ByVal kahva_valikko As Long, ByVal uItem As Long, lprcItem As LAATIKKO) As Long Private Declare Function GetSubMenu Lib "user32" (ByVal kahva_valikko As Long, ByVal nPos As Long) As Long Private Const HIIRI_ABS_LIIKE = &H8000 Private Const HIIRI_VASEN_ALAS = &H2 Private Const HIIRI_VASEN_YLOS = &H4 Private Const HIIRI_LIIKE = &H1 Private Const HIIRI_OIKEA_ALAS = &H8 Private Const HIIRI_OIKEA_YLOS = &H10 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) Private Declare Function GetMessageExtraInfo Lib "user32" () As Long Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Const NAYTTO_X = 0 Const NAYTTO_Y = 1 Private Sub Form_KeyPress(KeyAscii As Integer) Dim kahva As Long, kahva_valikko As Long, kahva_valinta As Long kahva = Me.hwnd: kahva_valikko = GetMenu(kahva) Klikkaa_Valikko_Valinta kahva, kahva_valikko, 0 kahva_valinta = GetSubMenu(kahva_valikko, 0) Klikkaa_Valikko_Valinta kahva, kahva_valinta, 0 End Sub Private Sub Abs_Koordinaatit(lpPiste As PISTE) lpPiste.x = lpPiste.x * (&HFFFF& / GetSystemMetrics(NAYTTO_X)) lpPiste.y = lpPiste.y * (&HFFFF& / GetSystemMetrics(NAYTTO_Y)) End Sub Private Sub Klikkaa(p As PISTE) mouse_event HIIRI_ABS_LIIKE Or HIIRI_LIIKE, p.x, p.y, 0, GetMessageExtraInfo() mouse_event HIIRI_VASEN_ALAS, 0, 0, 0, GetMessageExtraInfo() mouse_event HIIRI_VASEN_YLOS, 0, 0, 0, GetMessageExtraInfo() End Sub Private Sub Klikkaa_Valikko_Valinta(ByVal kahva As Long, ByVal kahva_valikko As Long, ByVal Pos As Long) Dim palute As Long, l As LAATIKKO, p As PISTE palute = GetMenuItemRect(kahva, kahva_valikko, Pos, l) If palute = 0 Then Exit Sub p.x = (l.vasen + l.oikea) / 2 p.y = (l.yla + l.ala) / 2 Abs_Koordinaatit p Klikkaa p End Sub Private Sub Form_Load() Dim kahva As Long, p As PISTE kahva = Me.hwnd Dim kahva_valikko As Long, kahva_valinta As Long kahva_valikko = GetMenu(kahva) Klikkaa_Valikko_Valinta kahva, kahva_valikko, 0 kahva_valinta = GetSubMenu(kahva_valikko, 0) Klikkaa_Valikko_Valinta kahva, kahva_valinta, 0 p.x = &HFFFF& / 2: p.y = &HFFFF& / 2: Klikkaa p Me.AutoRedraw = True Print vbCrLf & " Painna jotain näppäintä..." End Sub Private Sub Valinta_Click() MsgBox "JEE!" End Sub
Tunnistuksen voisi ehkä kiertää LowLevel-Hookilla. Eli siis asettaisit WH_MOUSE_LL-Hookin. Aina kun hookkia kutsuttaisiin sen lParam:ssa kulkevaan MSLLHOOKSTRUCT-pointterin flags-arvon LLMHF_INJECTED-flagi asetettaisiin nollaksi.
Linkkejä
http://msdn2.microsoft.com/en-us/library/ms644990(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/ms644986(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/ms644970(VS.85).aspx
Riippuu tunnistuksen toteutuksesta. Se voi esimerkiksi olla tunnistus sille, onko hiiri liikkunut liian nopeasti pisteestä A pisteeseen B. Normaalistihan ihminen joutuu liikuttamaan hiirtä, mutta useimmat automaattiklikkaajat vetävät yli-inhimillisellä tahdilla klikkauksia ympäri ruutua, mikä on helppo todeta ilman minkäänmoisia teknisesti vaikeita API-kutsujen tunnistamisia ja estämisiä.
Moikka taas JussiR!
minusta vahvasti tuntuu, että olet hakemassa jotain tällaista...
'tee ekas testiohjelma (ladattava.exe) 'formi & nappi 'Command1_Click(): MsgBox "JEE!" '...ja testaa sit tällä... 'referenssi: Microsoft WMI Scripting V1.2 Library '(C:\WINDOWS\system32\wbem\wbemdisp.TLB) Private Declare Function SetForegroundWindow Lib _ "user32.dll" (ByVal hwnd As Long) As Long Private Declare Function SetActiveWindow Lib _ "user32" (ByVal hwnd As Long) As Long Private prosessit, prosessi Private Sub Form_Load() If App.PrevInstance Then End tsekkaaLadattava SetActiveWindow Me.hwnd End Sub Private Sub Form_Paint() 'VAROITUS! älä kytke: Click, KeyPress tai Key/MouseDown tapahtumiin theJutska End Sub Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) 'Vain testaamisen... 'VAROITUS! älä kytke: Click, KeyPress tai Key/MouseDown tapahtumiin theJutska 'äläkä sorru poistamaan koodia Form_Paint -tapahtumasta 'ja iskemään mainoksiasi StartUp-formille... 'KOSKA OLET SILLOIN VAARASSA SEKAANTUA LAITTOMUUKSIIN!!! End Sub Sub theJutska() Set prosessit = GetObject _ ("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_Process") For Each prosessi In prosessit With prosessi If LCase(.Name) = "ladattava.exe" Then Dim kama As WbemScripting.SWbemProperty SetForegroundWindow Me.hwnd For Each kama In .Properties_ Dim arvo: arvo = kama.Value If Not IsNull(arvo) And IsNumeric(arvo) Then SetActiveWindow CLng(arvo) 'mikäli focus sattuisi olemaan, 'VAIKKAPA Cancel buttonilla... 'edellinen kontrolli: 'SendKeys "^{TAB}",true 'Ctrl + Tab 'seuraava kontrolli: 'SendKeys "{TAB}",true SendKeys "{ENTER}", True End If Next kama End If End With Next Set prosessit = Nothing 'Unload Me End Sub Sub tsekkaaLadattava() Dim rullaa As Boolean, masiina Dim objekti, ohjelma, simpukka Set prosessit = GetObject _ ("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_Process") For Each prosessi In prosessit With prosessi If LCase(.Name) = "ladattava.exe" Then rullaa = True: Exit For End If End With Next If Not rullaa Then masiina = "." ohjelma = App.Path & "\" & "ladattava.exe" 'testipolku... 'ohjelma = Environ("userprofile") & "\Työpöytä\ladattava.exe" Set prosessit = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & _ masiina & "\root\cimv2") Set prosessi = prosessit.Get("Win32_Process") Set objekti = prosessi.Methods_( _ "Create").InParameters.SpawnInstance_ objekti.CommandLine = ohjelma Set simpukka = prosessit.ExecMethod( _ "Win32_Process", "Create", objekti) Set simpukka = Nothing: Set objekti = Nothing Set prosessi = Nothing: Set prosessit = Nothing End If End Sub
Siis miksi ihmeessä te autatte jätkää tekemään rahaa teidän koodeillanne ja tsiittaamaan peleissä, ilman että te hyödytte siitä yhtään mitään?
T.M. kirjoitti:
Siis miksi ihmeessä te autatte jätkää tekemään rahaa teidän koodeillanne ja tsiittaamaan peleissä, ilman että te hyödytte siitä yhtään mitään?
e-penis ++
Newb kirjoitti:
T.M. kirjoitti:
Siis miksi ihmeessä te autatte jätkää tekemään rahaa teidän koodeillanne ja tsiittaamaan peleissä, ilman että te hyödytte siitä yhtään mitään?
e-penis ++
Tai todellisuudessa noissa omituisissa koodinpätkissä piilee joku kiusa. Luottavat katsos siihen että pyytäjä ei testaa tarpeeksi, ennenkuin alkaa levittämään "ohjelmaansa". Niinkin on käynyt O__o
-Grey-
Kiitoksia. mä alan nyt sitten tutkailemaan noita..
tai sitten ihan auttamisen ilosta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.