XOOX. Cilvēks. ([info]xoox) rakstīja [info]koderi kopienā,
@ 2006-05-29 12:09:00

Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Kādam no cienītajiem kolēģiem ir idejas, kā nomainīt string jeb virkni jau nokompilētā EXE failā? Virkne ir garāka nekā jau esošā. EXE failā virkni atrast var, mēģināju nomainīt uz garāko, bet programma pēc tam vairs nedarbojas. Jāmeklē checksumma? Bet kur?
Nu jā, un virkne nav kā daļa no resursiem (resource string), tā parādās tikai kā pliks teksts EXE, līdz ar to API funkcijas UpdateResource u.c. neder.
Googles tante ātru risinājumu nepiedāvā, bet mēģināt iebraukt PE formāta jaukumos par maz laika.


(Lasīt komentārus) - (Ierakstīt jaunu komentāru)


[info]ergaster
2006-05-29 12:44 (saite)
Esmu "tikpat gudrs" kā Tu šajā jautājumā, tāpēc arī atbildu no šādas pozīcijas:

1. Pamēģini nomainīt ar tikpat garu, nevis garāku. Tā Tu uzzināsi, vai tiek lietotas čeksummas. Tālākais strādās tikai tad, ja ne...

2. Man ir aizdomas, ka drīzāk vaina būs koda adresācijas nobīdē. Visu kodu kopumā vajadzētu bez problēmām bīdīt pa adresu telpu, bet ne tā atsevišķas daļas vienu attiecībā pret otru. Risinājums - teksta rindiņu ierakstīt "overwrite", nevis "insert" modē - tādējādi pārrakstot pa virsu daļai koda. Cietušo koda (ja tas patiešām viss ir kods) daļu pārvieto kaut kur citur (varbūt faila, vai koda segmenta, ja tur tāds ir, beigās) uz kurieni jāpāradresē visi tā izsaukumi (sorry, cerams, ka to nav daudz, ideāli, ja viens). Beigās, savukārt, ieliek "jmp" atpakaļ uz atlikušo daļu, ja tāda, protams, ir. Bez PE izpētes diez vai iztiksi...
Ar vārdu sakot, neapskaužu Tevi (un tik gudrs jau Tu pats arī biji, man tikai gribējās izteikties ;)) )

Otrs, drusku jēdzīgāks (bet ne vieglāks) variants - vispirms atrast atsauces uz šo tekstu kodā (ja to nav daudz) - neprasi kā (debugger is your friend) un uz beigām pārcelt teksta rindiņu, nevis kodu...

Abos gadījumos "the tricky part" ir atrast (pie tam visas) atsauces uz pārvietojamo fragmentu.
Neesmu pārliecināts, ka pastāv kāds trešais un vieglākais ceļš... :/

Pēc manām domām (tā kā Tu saki, ka maz laika), vienīgais praktiskais risinājums Tavā situācijā ir - atkratīties no šī darbiņa...

(Atbildēt uz šo) (Diskusija)


[info]ergaster
2006-05-29 12:47 (saite)
...tas ir - ja nekādi nav iespējams saīsināt jauno tekstu (varbūt tomēr var, ko?).

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]xoox
2006-05-29 12:58 (saite)
Paldies par atbildi. Lieta tāda, ka mani hosteri nomainījuši FTP servera login vārdu, kas aplikācijā ielikts kā konstante, līdz ar to nojaucot update procesu kādām 40 aplikācijām visā LV. Mainīt atsakās. Pamēģināju pahakot ar HEX editoru, bet nu izskatās, ka nesanāks, līdz ko baits par daudz, tā EXE vairs netiek atpazīta, nojūk visas VersionInfo utml.

Vēl viens quick and dirty variants bija updeitot HOSTS failu uz klienta datora ar norādi uz citu FTP serveri, kuram login parametri ir vecie, bet izrādās ka arī šis variants neder, ja ir proxy serveris, firewall bla bla bla.

Vēl jau ir iespēja laist kādu papildprocesu, kas palaižas kopā ar pamatprogrammu un atmiņā maina to nelaimīgo konstanti. Vai tas ir iespējams, nezinu. Kaut ko miglaini atceros, ka Win2K un WinXP katrs process palaidās savā adresu telpā.

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]ergaster
2006-05-29 13:12 (saite)
Tad atliek rakstīt pakešu filtru, kurš zvejo attiecīgās FTP paketes un tās pāradresē... Nekad neko tādu neesmu darījis, brrrr... :/

(Atbildēt uz šo) (Iepriekšējais)


[info]ergaster
2006-05-29 12:56 (saite)
...un vēl viena piebilde - labojot ir vērts zināt, kādas teksta virknes tiek lietotas - "C" vai "Pascal" style. Vienas beigas norāda "\0" simbols, otrai ir skaitītājs sākumā...

(Atbildēt uz šo) (Iepriekšējais) (Diskusija)


[info]xoox
2006-05-29 12:59 (saite)
VB-style. Ar skaitītāju sākumā!

(Atbildēt uz šo) (Iepriekšējais)


(Lasīt komentārus) -

Neesi iežurnalējies. Iežurnalēties?