RE FORUM

[REVERSE ENGINEERING] => Programming => Topic started by: NeptuN on January 24, 2008, 06:48:04 AM

Title: bitmapa v assm
Post by: NeptuN on January 24, 2008, 06:48:04 AM
nazdar, tak pisu to crackmecko ( rozhodl jsem se ho napsat v cistym assm, bude to lepe komentovatelny a udelam to pekne prehledne ), ale jsem trochu zmateny co se tyce nacitani bitmapy ( pres zdroje ), presneji, co se tyce API funkci a co delaji... nasel jsem jeden priklad ( ktery provadel animaci ( bitmapa se posunuje zleva doprava ), takze to osekavam, problem je, co nechat a co vyhodit, ze :D ). Tedy potrebuju pochopit, co jednotlive fce delaji, popripade jake pouzit, vychazim z API LoadBitmapA, ale co dal...?
Title: Re: bitmapa v assm
Post by: pr0p4g4nd4 on January 24, 2008, 01:27:25 PM
No, takto.. Pre moje cme kt programujem ked mam volny cas mi ERASER spravil velmi pekne GUI code(v MASMe). Cize on by ti s tym vedel urcite pomoct.. Skus mu napisat na icq lebo tu na fore som ho uz dost dlho nevidel..

EDIT: Tu je par ukazok ako sa to da spravit:

Code: [Select]
http://canterwood.online.fr/click.php?url=shared%2Ftools%2FMASM32_keygen_template_v2.5-CW.zip

Code: [Select]
http://canterwood.online.fr/click.php?url=shared%2Ftools%2FCanter_Keygen_5.zip
Title: Re: bitmapa v assm
Post by: NeptuN on January 24, 2008, 04:46:01 PM
Super, dik za tipy :) .Jinak jsem se jeste jednou podival na iczeliona, a tentokrat jsem uz neco nasel  :D
Code: [Select]
http://win32assembly.online.fr/tut25.html
Pekne rozebrani jednotlivych funkci, k cemu to je dobry...
Kdyz jsem tu uz zalozil ten thread, tak to priblizim pro vsechny ( teda predevsim pro newbiky jako ja ;) ) :
1. LoadBitmap - pripravi bitmapu k pouziti v programu
2. GetDC - ziskam dc(=device content) toho myho formulare
3. CreateCompatibleDC - vytvorim "skryty" formular podobny tomu mymu a ziskam jeho dc
4. SelectObject - vykresli bitmapu na ten skryty formular ( sice fakt nechapu, jak prisli na nazev SelectObject...? )
5. BitBlt - prekresli z toho skryteho formulare na ten muj ( tenhle nazev jde taky mimo mne )
Title: Re: bitmapa v assm
Post by: eraser on January 24, 2008, 10:55:22 PM
Quote from: pr0p4g4nd4
No, takto.. Pre moje cme kt programujem ked mam volny cas mi ERASER spravil velmi pekne GUI code(v MASMe).
V podstate ide o obrázky, tzn. potrebný je dialóg a tlačítka, samozrejme tlačítka majú dva stavy pre vykreslenie. Ďalej je tam scrollovací text a učorkovaná animácia. :)  No a klasikou zostáva prehrávanie hudby pomocou mfm. To je v?etko, čo ten GUI doká?e. Čisto len zdrojáky majú cez 40 kB ASM kódu. Ja by som to zverejnil, keď releasne? to tvoje crackme, čo povie??

Quote from: pr0p4g4nd4
tu na fore som ho uz dost dlho nevidel.
Heh, som sa tri tý?dne nedostal domov, kvôli debilkom, ktorí si myslia, ?e vývoj SW je podobné, ako hranie guličiek na pieskovisku.   :mad:  Od 7.1. do dneska, či?e 24.1. som nemal jediný den oddychu.
Title: Re: bitmapa v assm
Post by: NeptuN on January 25, 2008, 01:33:16 AM
Tak jsem zas ( pro zmenu ) v haji - prestoze obrazek jsem si nacetl v pohodicce, vlastne vsechny prvky na formulari sou v pohode, problemem mi zustalo "prazdne" misto na virtualnim formulari ( ten, co pouzivam pro vykreslovani te bitmapy ). Zatimco obrazek se vyresli v poradku, misto, kde obrazek neni, je pruhledne. Ne ze by tento efekt musel nutne byt na skodu, ale do toho vstupniho easy cmecka bych ho radsi nedaval...
Nevite nekdo, v cem je zakopanej pes? Nevim, jestli je nutne vyplnovat celou plochu toho virtualniho formulare, nebo na to existuje nejakej trik ( == 1xAPI ) Pro uplnost prikladam moji obsluhu prekresleni:
Code: [Select]
WMPAINT:

PUSH OFFSET PS
PUSH DESKTOP_HWND
CALL BEGINPAINT@8
MOV MY_DC_HANDLE, EAX

PUSH MY_DC_HANDLE
CALL CREATECOMPATIBLEDC@4
MOV COMPATIBLE_DC_HANDLE, EAX
 
PUSH BMP_HANDLE
PUSH COMPATIBLE_DC_HANDLE
CALL SELECTOBJECT@8

PUSH OFFSET BMP_RECT
PUSH DESKTOP_HWND
CALL GETCLIENTRECT@8

PUSH SRCCOPY
PUSH 0
PUSH 0
PUSH COMPATIBLE_DC_HANDLE
PUSH BMP_RECT.BOTTOM
PUSH BMP_RECT.RIGHT
PUSH 0
PUSH 0
PUSH MY_DC_HANDLE
CALL BITBLT@36

PUSH COMPATIBLE_DC_HANDLE
CALL DELETEDC@4

PUSH OFFSET PS
PUSH DESKTOP_HWND
CALL ENDPAINT@8

MOV EAX, 0
JMP FINISH
Title: Re: bitmapa v assm
Post by: BlackRose on January 25, 2008, 10:02:31 AM
A nebylo by jednodussi nekreslit na formular ale na nejaky kontrol (napr label) ? Pri zprave wm_paint bys kotroloval, jestli je pro ten kontrol a proved pripadne prekopirovani bitmapy...
Title: Re: bitmapa v assm
Post by: HypnotiX on January 25, 2008, 05:25:57 PM
Bud to udelas jak pise BlackRose, tj. ze si das na formular prvek image a jemu priradis bitmapu, nebo pomoci napriklad Shape prvku a obsluhy WM_PAINT tohoto prvku pomoci SetWindowLong viz priloha. Je to delane v RadAsm editoru.
Title: Re: bitmapa v assm
Post by: pr0p4g4nd4 on January 28, 2008, 11:15:14 AM
Quote from: eraser
Ja by som to zverejnil, keď releasne? to tvoje crackme, čo povie??

Samozrejme, nevidim v tom ziadny problem :)


Quote from: eraser
Heh, som sa tri tý?dne nedostal domov, kvôli debilkom, ktorí si myslia, ?e vývoj SW je podobné, ako hranie guličiek na pieskovisku.     Od 7.1. do dneska, či?e 24.1. som nemal jediný den oddychu.

To su svine. Dufam, ze ti aspom dobre platia za dobre vykonanu pracu :) ;)
Title: Re: bitmapa v assm
Post by: NeptuN on January 30, 2008, 02:26:16 PM
tak jsem aplikoval postup navrzeny BlackRose -em, bitmapu vykresluju na button ( ten je disabelnuty, takz pohoda ), jenze se mi problem presunul jinam  :mad:

ollym jsem zjistil, ze zprava WM_PAINT se posila pouze formulari, prvkum nikoliv, ty maj na to jine zpravy, konkretne buttony WM_CTLCOLORBTN o hodnote 135h, takze ten jsem odchytil, overil, jestli v LPARAM [EBP+14h] je handle toho spravnyho buttona a pokud ano, tak vykresluju tu bitmapu.

spustim a nic... olly mi prozradil, ze program opravdu vykona moji obsluhu ve spravnou chvili, jenze ta moje obsluha ( viz. vyse ) proste nic nedela...

tak jsem za fci BeginPaint dopsal GetDC, tedy do MY_DC_HANDLE ziskam hodnotu znovu, ale jinak - vuala! program NAPUL funguje, NAPUL ne... proste po prekryti jinym oknem nedojde v vykresleni. Nevykresli se ani po spusteni. Ale jakmile oknem cmecka vyjedu mimo obrazovku a zpet - vykresli se ( a to jeste ne sprave - vykresleni zacne od mista hranice obrazovky, takze obrazek je posunut ).

Proste nevim, co to ten program vyvadi...  :confused:  :mad:  :eek: