» »

[.NET] vohunjenje za API klici

[.NET] vohunjenje za API klici

Mr-KONJ ::

Zanima me če obstaja kaka knjižnica, oziroma če jo zna kdo napisat, s katero bi lahko pregledoval informacije o API klicih, ki jih opravlja konkretni proces.
Se pravi na kratko povedano potrebujem API hooking funkcionalnost v .NET okolju.

Hvala za info.
lp
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

yeti ::

Na kratko povedano; HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA

:8) oprosti :8) ampak tole vprašanje je pa bilo v stilu; "kako bi lahko s semaforjem privil vijak na uri?"... hmm... no ja ponesrečen primer, s semaforjem bi celo šlo... :D

Ok... da ne bom samo zatežen, premislil sem; morda bi se dalo narediti, da bi lahko hookal apije v svojem procesu. Glede na to, da je v registru kljuc (pozabil kje; išči sam), ki pove windowsem da naloži dll v vsak pognan process, bi se preko tega celo dalo nalozit dll v .netu v vse procese in od tam premetat iat tabelo. Na karkoli bolj advanced pa brez cja ali asmja pozabi.

Zgodovina sprememb…

  • spremenil: yeti ()

Mr-KONJ ::

No ja hvala za odg., samo vprašanje ni bilo če se to da, zato ker se da, in to ti ni treba nič premišljevat ampak sam mal poguglaš "api spying, api hooks".
Pa tudi nobena znanost ni klicanje knjižnic izven managed okolja (performanse mi kle niso važne), tako da je lahko komot C/C++, če mi razložiš kako uporabljat:). Tista fora z registrom je razmišljanje v pravo smer, vendar deluje samo na NT/2000 platformi.
Sem našel na netu kar nekaj "api hook SDK-jev", za delphi in .NET, samo so vsi za plačat.
Tako da stvar ni čisto za lase privlečena in lahko zgodbice o semaforjih prihraniš za svoje vnučke :)
lp
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

Zgodovina sprememb…

  • spremenil: Mr-KONJ ()

yeti ::

he he, ja, morda bodo moji vnučki bodo lahko pisali address independant kodo v c#, ti je pa ne boš :mrgreen: (a ti mislis da so te knjiznice pisane v c#?? :D) Šariš lahko po spominu in popravljaš pointerje na apije, samo createremotethread ti bo pa ostal nedosegljiv :) Ce mi boš zelo dobro razlozil kaj bos s tem (ne bi rad script frockov zalagal z neumnostmi, da bodo potem štalo zganjal) ti bom morda dal popoldne injector za nalaganje dlljev v drug proces te pa ze takoj opozorim; vsak malo bolj spodoben firewall in antivirus bosta ponorela, rabis administratorske pravice. In tudi moja koda deluje samo na "NT/2000 platformi" in niti pod razno se mi ne da popravljat da bo delala na jajcih od 9x.

Zgodovina sprememb…

  • spremenil: yeti ()

Mr-KONJ ::

cool, we are getting somewhere :)
Zgodbica je taka, da mam en program, katerega avtor seveda nisem jaz :), ta program vsebuje neko rich edit/sysListView32 kontrolo, ki pa to ni. Skratka če pogledaš z winspector spy programom, kaj za en class je to, ti piše "Afx:00...neke cifre". Ok, in v to kontrolo, se vsake tolk časa zapiše vrstica besedila, ki bi jo jaz zelo rad prebral z mojim programom. Problem je da standardni načini ne delujejo, ker je to neka custom kontrola, plus še to, da je v interesu avtorjev programa ravno preprečit to kar bi jaz želel nardit. Se pravi če malo spremljaš WM-je, ko se info dodaja v to kontrolo, vidiš samo sporočilo WM_PAINT. Zdej ideja je takšna, da bi prestregel API klic funkcije, ki povzroči WM_PAINT, pa nekak razbral njene parametre.

Dejansko se ta kontrola obnaša kot listbox, se pravi lahko izbereš določeno vrstico. Element notri pa je izgleda sličica in ne besedilo (na podlagi WM_PAINT-a), samo ko ti izbereš element, imaš opcijo desnega miškinga klika in iz context menija izbrat možnost copy, ki ti v odložišča skopira string vrednost. Se pravi tekstovna informacija je nekako povezana z elementov v kontroli, samo ne vem kako do nje. To je pa pol tud razlog da se stvari še nisem lotil z OCR-om.

tenx za help
lp
ps:aja pa nisem skriptkidi, sam razvajen sm:)
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

Zgodovina sprememb…

  • spremenil: Mr-KONJ ()

Matako ::

Se pravi če malo spremljaš WM-je, ko se info dodaja v to kontrolo, vidiš samo sporočilo WM_PAINT. Zdej ideja je takšna, da bi prestregel API klic funkcije, ki povzroči WM_PAINT, pa nekak razbral njene parametre.


Skratka, rabiš dober debugger pa veliko časa ;)
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

yeti ::

Skratka rad bi besedilo spulil iz ASP slovarjev, ne? :D Sem zadel? :D

Zgodovina sprememb…

  • spremenil: yeti ()

Mr-KONJ ::

hehe, ne, eno online poker aplikacijo bi si rad mal avtomatiziral:D
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

yeti ::

uf... hookanje ti ne bo ama nič pomagalo. bolje bo ce se spravis na zadevo z IDA dissasemblerjem. če je zadeva grafična, se tudi ne bi spravil loviti WM_PAINT, ker je lahko za redraw celega ekrana, boš umrl preden se boš prekopal do česa pametnega... url aplikacije?

Mr-KONJ ::

Mogoč sem te malo zavedu, z online aplikacijo nisem mislil da se igra preko browserja.
Dobiš jo na www.pokerstars.com. Večina elementov je narisanih, omenjena kontrola pa je samostojna (se pravi edit box v spodnjem levem kotu, če se pridružiš katerikoli mizi). To , da je samostojna sklepam po window-handlu, ki ga dobiš ko greš z miško čez.
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

yeti ::

Cakaj, samo nekaj mi povej, si poskusil enumerirat child okna aplikacije in dobiti handle na to kontrolo? Ker potem klices na tem handlu samo GetWindowText in bos dobil ven tekst...

ne vem kaj je v c# (or name your poison) wrapper funkcija, samo rabis samo tole (v user32.dll):

int GetWindowTextA(HWND hWnd, LPTSTR lpString, int nMaxCount);

Mozno sicer, da so sli pisati svoj editbox (ravno zaradi takih primerkov kot si sam :D), samo dvomim... ma bos videl, tistole zgoraj zna delat, samo HWND na edit kontrolo moras
dobiti, to ti ga pa zna izpisat vsak window spy (npr.. spy++ je zraven vc++6), ne vem morda ga tudi zraven 2003/2005 dobiš.

yeti ::

Heh, slabo sem prebral kaj si napisal... handle vrzi v tisti api in precej verjetno bos dobil text na oknu (ce je edit box).

t909 ::

To je za pokerstars, class je pa Afx:400000:20, torej cist zakamufliran. Nekaj sem gledal in v spomin in tista besedila so v ta "listbox" nametana dokaj random. V glavnem ni mi se uspelo najti kljuca a dejstvo je, da se ta besedila nahajajo le na dolocenem obmocju od recimo +/- nekoliko 0x016BD164 pa to spet +/- 0x01d7670b. Ce moja amaterska glava pravilno razmislja bi moral pac slediti kdo in od kod poslje to sporocilo na ta naslov in potem nadalje desifrirat vzorec. Baje da ni tolk tezko. Ce nardis ta hook ti ga odkupim :D, drugace pa bom sam zaposlil enga debuggerja da mi tole zrihta.

t909 ::

Mr-KONJ ::

jap to sem že naštudiru, un model VIP$ al kwa je, je kao pogruntu pa noče povedat svinja :D
sam zgleda da je neka preprosta rešitev, ker je reku da lih ni ne vem kašen programer.
Wininspector mi je pokazu da je gor še ene par skritih combobox pa edit kotrol, pa na comboboxu se ene zanimive stvari dogajajo če greš gledat WM-je.
Tko da tole se bom probu še nekak do vsebine teh kontrol dokopat, lahko da kako skrito kontrolo uporabljajo da gor hranjo text.
Pol bom pa počas že brez idej.
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

Zgodovina sprememb…

  • spremenil: Mr-KONJ ()

t909 ::

No pomoje tolk na izi spet ni, nevem?? A si probal s tisto finto od yetija?

Zgodovina sprememb…

  • spremenil: t909 ()

Mr-KONJ ::

Ma ne yeti je tist mal zabluzu :D
sej je reku da je prehitr prebrau...
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

Zgodovina sprememb…

  • spremenil: Mr-KONJ ()

yeti ::

Konj; ce imas res edit box (kot si napisal, ne vem govoris tudi o list boxu) bi na tvojem mestu tudi probal getwindowtext z handlom na kontrolo (hint; tako delujejo tisti "password revealerji"...

Mr-KONJ ::

U bistvu ni ListBox ampak je custom kontrola, ki deluje podobno.
GetWindowText, ti pa deluje samo na oknih se mi zdi, se prav dobiš nazaj samo caption.
Stvar ni tako enostavna tud pri PasswordRevelerjih zarad virtualnega spomina moraš kopirat neke strukture v proces, ki ima v lasti kontrolo, potem poklicat par API-jev, pa prenest informacije spet nazaj v lokalni buffer. Sej se vse da, tud iz .NET, sm najdu lepe primerčke kode, samo problem je še zmeraj, da ne gre za standardno kontrolo.
Sem pa najdu še en zanimiv link, za katerga upam, da me bo navdihnil z novimi idejami, takoj ko ga naštudiram :)
branje spomina v c#
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

darkolord ::

Kaj če bi vzel kak debugger in pogledu, kako stvar to zapisuje notri?

yeti ::

"GetWindowText, ti pa deluje samo na oknih se mi zdi, se prav dobiš nazaj samo caption. Stvar ni tako enostavna tud pri PasswordRevelerjih zarad virtualnega spomina moraš kopirat neke strukture v proces, ki ima v lasti kontrolo, potem poklicat par API-jev, pa prenest informacije spet nazaj v lokalni buffer. Sej se vse da, tud iz .NET, sm najdu lepe primerčke kode, samo problem je še zmeraj, da ne gre za standardno kontrolo."

Hja ni čisto absolutno tako; res je, da getwindowtext ne deluje vedno ampak samo kadar gre pri setwindowtext (WM_SETTEXT) preko default message handlerja (v tem primeru so podatki po defaultu v sharani memoriji). Je pa bolj verjetno, da bo delovalo, ce oknu direkntno posljes WM_GETTEXT (to me je rahlo zavedlo, ker getwindowtext proži točno to), ki ga windowsi handlajo drugace, enako kot WM_DATACOPY (ali nekaj takega, iz glave govorim) in nima problemov s prehajanjem med procesi. Glede tega da dobiš nazaj caption; ja, odvisno na čem ga izvajaš, če to poženeš na dialogu boš res dobil samo caption, na edit boxu vsebino, na knofu napis na knofu... skratka splača se probat. Vem pa da zadeva deluje, ker sem na tak nacin nekoc skinil tisto windows commanderjev (zdaj totalcmd) nag screen z pritiskanjem gumba 1,2 ali 3. Prebral sem text v staticu in poslal WM_LBUTTONDOWN in WM_LBUTTONUP pravemu knofu.

(se bom danes spravil popravit injector za dllje, da ti bo uporaben, nekam mi napiši svoj mail (whatever) da ti ga posljem)

t909 ::

A je kdo kej naprej prisel s to zadevo?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Program ki upravklja s programom

Oddelek: Programiranje
222231 (1063) MrBrdo
»

EditBox

Oddelek: Programiranje
121590 (1444) [MYTiX]
»

Odpiranje dat.exe v VB

Oddelek: Programiranje
123004 (2797) webblod
»

Win32 API(VC++)

Oddelek: Programiranje
7845 (747) hatch
»

Klikanje slikic (win32 C)

Oddelek: Programiranje
7933 (842) wintermute

Več podobnih tem