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 SubTunnistuksen 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 SubSiis 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.