Zpět na seznam článků     Zpět na článek

Komentáře ke článku

 
 
 BBCode
nobody | 193.206.186.*15.10.2008 10:01
neni to ukradeny z uninformed?
cURLy bOi | 88.83.234.*25.9.2008 8:16
clanek pekny

Pr00y4m: rek bych ze je to kvuli tomu ze on je symbol flame tak nak sam o sobe, tak od nej chytaji ostatni:D
NtM | 78.102.112.*18.9.2008 22:44
kde ja sem tohle uz videl =)
Pr00y4m | E-mail | Website18.9.2008 16:44
v kazdym threadu/clanku/cemkoliv se nekdo pokousi zacit flame s "prdelacem" :)
Proc proboha? Vzdyt my stejne vetsinou pravdu :)

----------
Pravá láska je, když si zapamatuješ její IP, abys obešel zpoždění DNS :)
n3tbijatch | 82.117.143.*16.9.2008 9:19
clanek asi dobrej, precetl jsem ho ale byl bych lhal kdybych rikal ze tomu rozumim... :(

dobre by bylo kdybyjste nekdo na soomu zacali psat clanky o ASMbleru pro x86. A nejlip s nejakym prenositelnym kompilatorem, napr. NASM. Ja jsem se driv snazil naucit podle ruznejch referencnich prirucek ale na to je uz potreba trochu vic nez jen zaklady anglictiny... zkuste to zvazit, imho by tady ten serial mel uspech (krome kecu dementu jako treba (_|_) ).. napr. p. gugumaa bych rekl (ne jen podle tohohle prispevku) ze tomu rozumi. Pekny den vsem ;)
gugumaa | 195.113.79.10/10.0.10.*11.9.2008 15:26
Co mi v článku chybí:
1) Co je původně mezi 010022AC a 010022B2 - t.j. v oblasti, kterou jsme vyplnili NOPy?
Pokud tam byl nějaký kód - to nikomu nevadí, že jsme ho smazali?
Tady by se hodilo poučit o délce instrukcí, protože podobné kejkle se potom dělají i ve volání WM_COMMAND a i začátečníkovi by mělo být jasné, proč jsou počty NOPů takové, jaké jsou.

2) Co se stalo s kódem od 010022B2?
V článku se píše "na konci souboru, zbytek vyplníme NOPy", čímž bych rozuměl až do konce - tedy i přes 010022B2. Nebo kde vlastně soubor končí?

Souvisí s bodem 1 - ta formulace "na konci souboru, zbytek vyplníme nulami" je prostě ne-li nepřesná, tak úplně blbá a zavádějící.

3) Nepovažuju za rozumné měnit v rutině na 010022A1 naprostou většinu původního obsahu - provedené změny by měly být co nejmenší. Vzhledem k tomu, že od adresy 01004A80 stejně následuje hned PUSH 1F4:PUSH DWORD PTR DS:[1005B30]:CALL, považoval bych za mnohem menčí změnu změnit jen cíl callu na adrese 22AC (případně ho nahradit jumpem na 01004A80), kde by číhal rovnou CALL.
Tady je potřeba vysvětlit, že "mezicallem" se mění obsah zásobníku (místo očekávaných parametrů funkce
LoadMenuW se tam ocitá návratová adresa na 010022B2, proto asi autor volil řešení "nejdřív odskok, a pak pushe", čímž se návratová adresa ocitne pod parametry (za předpokladu, že na zásobníku nejsou předpřipravené ještě jiné parametry pro tuto funkci - zjevně ale ne). Řešení s jumpem by ale zásobník neměnilo a náhradní kód na adrese 01004A80 by byl o dvě instrukce (celých dlouhých 11 bajtů) kratší!
A není snad ani potřeba NOPovat původní kód.

4) U zpracování WM_COMMAND je znovu vidět chybějící poučení o délce instrukcí - proč zrovna 4 NOPy? Proč se zrovna první dvě instrukce stěhují někam jinam?
Odpověď rovnou předestřu - protože nemáme žádný call, přepsáním jehož cíle bychom mohli odskočit, proto hned první instrukci callem nahradíme a odsuneme za call. Protože ale první instrukce má jen 4 bajty (3 + parametr), 5 bajtů (ten aktuálně použitý 1 + 4 parametr), přepsala by se o jeden bajt i část následující instrukce - ta má 5 bajtů. Je tedy nutno ji taky přesunout a zbývající 4 bajty vynopovat.

Nebo - a to bych asi zvolil já - první instrukci nechat, za ní pak pětibajtovou instrukci nahradit pětibajtovým odskokem, a přestěhovat jen druhou instrukci.
Ušetří se tím 4 bajty místa, které pak nemusíme přesouvat!

Pokud si říkáte, že při 4 GB RAM v počítači jsou nějaké 4 bajty zanedbatelné, pak možná. Pokud se ale v něčem rejpu, pak se snažím, aby to nebylo větší, než původní kód, a pokud ano, tak být setsakra opatrný, kam vlastně svoje data cpu. Navíc omezená velikost segmentu zůstává zachována při libovolných velikostí RAMěti!

5) není vysvětleno, proč si schováváme AD před voláním InvalidateRect, i.e., co vlastně schováváme a co po volání Invalidate Rect toto AD potřebuje.
Když už jsou v kódu dvě instrukce oproti komentáři "navíc", hodí se vědět, proč.

6) Proč není použito LOOP?
Nebylo by kratší, než DEC, CMP, JNZ?

prat3(nelog.) | 194.228.5.*11.9.2008 13:46
zajimavy a hlavne originalni clanek v zaplave jinych, jelikoz s timhle moc zkusenosti nemam a neni to pro me moc salek kavy kteremu bych rozumel, rad jsem si to precetl. dik, slo by udelat i nejake pokracovani? nejak to dale rozvest?
Stoyan | Website11.9.2008 9:28
V zaplave shitu konecne zajimavy clanek, o RE si vzdy rad prectu.
C X | 66.147.238.*10.9.2008 15:24
Harvie: hh, neasi :)
Harvie | E-mail | Website | ICQ 28378297810.9.2008 15:15
Jojo originalni napad me vzdycky potesi...

C X: Zeby to byl ASSembler?

----------
Harvie's blog: [link] g33k-shop: [link] fs: [link]
Registered GNU/LINUX user #468114 [link]

Stránky: 1 2