Windows aplikácia čerpajúca informácie z bežiaceho programu

Programovacie jazyky, rady, poradňa...
Birky22
Amateur
Amateur
Príspevky: 19
Registrovaný: 26 mar 2011, 13:48

Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa Birky22 »

Nazdar, vie mi niekto poskytnúť nejaké linky, kde by som našiel nejaké články o tom ako vytvoriť aplikáciu, ktorá čerpá údaje z nejakého ľubovoľného bežiaceho programu a následne ich využíva.

V podstate chcem vytvoriť program, ktorý bude spolupracovať už s existujúcim programom, ktorý som nevytvoril ja.

p.s. vygooglil by som si to aj sám, kebyže viem, čo doň napísať :D
johny3212
Star
Star
Používateľov profilový obrázok
Príspevky: 532
Registrovaný: 17 feb 2008, 19:56
Bydlisko: Terchova
Kontaktovať používateľa:

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa johny3212 »

Ako si predstavujes tu komunikaciu?
1. Ma to byt po sieti alebo cez HW komunikujuce aplikacie
2. Softverova komunikacia medzi dvoma oknami vytvorenymi z jednej aplikacie ako nezavisle vlakna?
3. Maju byt totalne rozne aplikacie od seba uplne nezavisle spustene v roznych jazykoch?

Tu 3. vec ti neviem poradit. Tam by som skusil pouzit dake systemove funkcie, ktore drazia spravu nad beziacimi aplikaciami a skusit cez ne vytiahnut pointer na daku celu aplikaciu, neviem ci sa to da. Bol to iba napad :). Myslim, ze take nieco je v rozpore so zabespecenim systemu. 1. a 2. pripad su bezne veci, to sa da.
Birky22
Amateur
Amateur
Príspevky: 19
Registrovaný: 26 mar 2011, 13:48

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa Birky22 »

No v podstate sa chcem naučiť princíp komunikácie dvoch rôznych programov a že jak to celé funguje, tak som sa rozhodol spraviť nejaký poker analyzátor napr. pre pokerstars klienta.

Údaje o hráčoch by som čerpal z log súborov, to by ani tak nebol problém, ale údaje o aktuálnej hande, by som potreboval vycucnúť z chatboxu toho klienta a to neviem ako.

A druhá vec, čo neviem, ako pridať už spracované informácie do toho poker klienta, aby sa mi to nezobrazovalo zvlášť do iného (môjho) okna, ale do toho pokrového okna.

Vedel by si mi s tým pomôcť, naznačiť mi, akým smerom sa uberať?
sorien
Medium Expert
Medium Expert
Príspevky: 88
Registrovaný: 02 jún 2011, 21:55

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa sorien »

Birky22 napísal: p.s. vygooglil by som si to aj sám, kebyže viem, čo doň napísať :D
asi nieco ako "win32 code injection"
pipiak
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 321
Registrovaný: 11 jún 2006, 9:24
Bydlisko: KE
Kontaktovať používateľa:

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa pipiak »

pokial dana aplikacia nema nejake rozhranie (API) pripadne na to neni stavana (CMD prikazy, TCP komunikacia) tak je extremne zlozite a vo vacsine pripadov az nemozne...musis pristupovat k nizssim funkciam (assembler a spol) pripadne ak je to sietova aplikacia tak analyzovat pakety...a ked nevies co mas hladat a co menit tak si myslim ze je to stratene;)
sorien
Medium Expert
Medium Expert
Príspevky: 88
Registrovaný: 02 jún 2011, 21:55

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa sorien »

je niekolko mechanizmov ako ziskat tie udaje

1. pouzit WM na ziskanie obsahu, skus nieco taketo ten control vyzera byt nieco ako listbox ... http://www.cplusplus.com/forum/windows/12200/
2. code hooking/injection ... IDA + Disassambler -> najdes si potrebnu funkciu -> zistis patern funkcie -> podla paternu hooknes kod v pamati -> elegantne riesenie ale problem su exe packery ako themida ...
3. packet sniffing ... odchytenie packetov / dekodovanie ... problemom je ze komunikacia moze byt kryptovana a ziskat/zistit kryptovaci kluc bude problem
4. screen capturing+ocr alebo niaka ina detekcia textu

skus trosku hladat, niake boty uz existuju a cast kodu by sa dala asi pouzit, napr

Kód: Vybrať všetko

http://code.google.com/p/zynga-poker-bot/
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa harrison314 »

Ja by som to riesil posilanim sprav ( prvy sorienov link).
Alebo citanim pamete programu, z Win Api puzijes tieto funkcie

Kód: Vybrať všetko

[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll",SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,byte [] lpBuffer, uint nSize, out in lpNumberOfBytesWritten);
 [DllImport("kernel32.dll", SetLastError=true)]  // zvrie pripojenie 
static extern bool CloseHandle(IntPtr hHandle);
 [DllImport("kernel32.dll", SetLastError = true, PreserveSig = true)]
 [return: MarshalAs(UnmanagedType.Bool)]
  public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesRead);

pomocou programu ArtMoney si najdes adresi hodnot, ktore chces sledovat, a len ich budes v cykle citat.
sorien
Medium Expert
Medium Expert
Príspevky: 88
Registrovaný: 02 jún 2011, 21:55

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa sorien »

harrison314 napísal: Alebo citanim pamete programu, z Win Api puzijes tieto funkcie

Kód: Vybrať všetko

[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(uint dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll",SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress,byte [] lpBuffer, uint nSize, out in lpNumberOfBytesWritten);
 [DllImport("kernel32.dll", SetLastError=true)]  // zvrie pripojenie 
static extern bool CloseHandle(IntPtr hHandle);
 [DllImport("kernel32.dll", SetLastError = true, PreserveSig = true)]
 [return: MarshalAs(UnmanagedType.Bool)]
  public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesRead);

pomocou programu ArtMoney si najdes adresi hodnot, ktore chces sledovat, a len ich budes v cykle citat.
ma to jednu chybicku pokial si pamatam windows pouziva memory randomizer, ktory zaruci ze program nealokuje pre niaku premennu rovnake miesto v priradenej pameti pri kazdom spusteni takze ich budes musiet stale znovu hladat :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8224
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Windows aplikácia čerpajúca informácie z bežiaceho programu

Príspevok od používateľa harrison314 »

toto API pouziva v skutocnosti offset,
ja som si pomocou neho nakodil trainer na malu hru a ide vzdy.

Problem nastava pri dynamicky allokovanej pameti, kde trba najst pointer.
A aspon za vyskusanie to stoji, je to urcite elegantnejsie ako OCR.
Napísať odpoveď