PDA

View Full Version : Editare software già compilato


Papatodero
15-02-2012, 08:36
salve a tutti, utilizzo da svariati anni un programma che ormai non viene più aggiornato, il suo nome è "Filmup - Movie database on your desktop", non posto il link diretto perchè non vorrei andare contro le regole del forum, ad ogni modo questo software serve a catalogare la propria collezione di film ed ha la possibilità di effettuare una ricerca automatica nei più diffusi motori di ricerca del titolo indicato..
Dall'ultimo aggiornamento son passati vari anni e molti link dei siti di ricerca son cambiati..vorrei capire se è possibile modificarlo in modo da immettere gli url corretti..
Ho provato a spulciarlo un pò, ma non son venuto a capo di nulla..riuscite a darmi una mano?
E' un programmino molto semplice, intuitivo e che utilizza un database di Access per catalogare i film..

Spero riuscirete a risolvermi il problema o, andrebbe benissimo anche l'essere indirizzato su cosa modificare per far ciò di cui ho bisogno..

Grazie tante.

pabloski
15-02-2012, 11:49
Se le stringhe che rappresentano i link sono nell'eseguibile, allora la strada da seguire non è per nulla semplice.

Si tratta delle stesse tecniche che usano coloro che creano crack e compagnia, quindi parliamo di gente che mangia pane e informatica.

Non voglio scoraggiarti ma bisogna avere un livello di conoscenze estremamente elevato per fare quello che chiedi.

Papatodero
15-02-2012, 12:05
Pare proprio le stringhe siano nell'eseguibile, eccone un esempio:


* Possible String Reference to: 'http://filmup.leonardo.it'
|
00A43AA2 BA943FA400 mov edx, $00A43F94

* Reference to: System.@LStrAsg(void;void;void;void);
|
00A43AA7 E8D8169CFF call 00405184

* Reference to FRicercaFilm
|
00A43AAC 8B45FC mov eax, [ebp-$04]

* Reference to field TFRicercaFilm.OFFS_0C84
|
00A43AAF 8B90840C0000 mov edx, [eax+$0C84]

* Reference to FRicercaFilm
|
00A43AB5 8B45FC mov eax, [ebp-$04]
00A43AB8 05880C0000 add eax, +$00000C88

* Possible String Reference to: '/cgi-bin/search.cgi?ps=10&fmt=long&
| q=|NS|&ul=%25%2Fsc_%25&m=all&wf=002
| 0&wm=wrd&sy=0&x=24&y=8'
|
00A43ABD B9B83FA400 mov ecx, $00A43FB8

* Reference to: System.@LStrCat3;
|
00A43AC2 E8A1199CFF call 00405468

* Reference to FRicercaFilm
|
00A43AC7 8B45FC mov eax, [ebp-$04]
00A43ACA 058C0C0000 add eax, +$00000C8C

* Possible String Reference to: 'sc_'
|
00A43ACF BA2040A400 mov edx, $00A44020

* Reference to: System.@LStrAsg(void;void;void;void);
|
00A43AD4 E8AB169CFF call 00405184
00A43AD9 E911040000 jmp 00A43EEF
00A43ADE 8D55C8 lea edx, [ebp-$38]

* Reference to FRicercaFilm
|
00A43AE1 8B45FC mov eax, [ebp-$04]

* Reference to control TFRicercaFilm.cxxpMotoriDiRicerca : TcxExtLookupComboBox
|
00A43AE4 8B807C0B0000 mov eax, [eax+$0B7C]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
00A43AEA E87DE0A4FF call 00491B6C
00A43AEF 8B45C8 mov eax, [ebp-$38]


Il programma è stato compilato in delphi, ma con un decompiler mi è venuto fuori tutto linguaggio assembler :\

Quel che a me interessa modificare è:
* Possible String Reference to: '/cgi-bin/search.cgi?ps=10&fmt=long&
| q=|NS|&ul=%25%2Fsc_%25&m=all&wf=002
| 0&wm=wrd&sy=0&x=24&y=8'

Ma dubito che, modificandola con il blocco note, possa poi funzionare...

Qualche soluzione?

Grazie

pabloski
15-02-2012, 13:41
Ovviamente col blocco note faresti un casino. Non è un software in grado di manipolare file binari. Ci vuole un editore esadecimale tipo HxD.

A quel punto puoi modificare la stringa, prestando attenzione al tipo. Non so se delphi usa ancora le stringhe pascal oppure quelle c, per cui devi vedere la stringa com'è fatta.

A seconda del tipo di stringa, la modifica va fatta in maniera diversa. Questo a patto che ci sia spazio a sufficienza per inserire la nuova stringa al posto della vecchia.

Papatodero
15-02-2012, 14:03
Emh..non ho capito granchè..solo che non mi conviene modificare con il blocco note :\

Bisogna partire dal fatto che non ho mai programmato...quindi non ho idea di cosa m'hai detto :D

In parole povere? Scarico un editor esadecimale e...?

pabloski
15-02-2012, 14:41
Emh..non ho capito granchè..solo che non mi conviene modificare con il blocco note :\


se lo fai, il file viene corrotto e sarà inutilizzabile


In parole povere? Scarico un editor esadecimale e...?

semplicemente devi sostituire la stringa che c'è con quella che ti serve

il come dipende dalle opzioni dell'editor

l'unica cosa è capire se sono stringhe C-like o pascal-like, cosa che può fare una grossissima differenza

http://en.wikipedia.org/wiki/Comparison_of_Pascal_and_C#Strings

Papatodero
15-02-2012, 18:46
dovrebbero essere pascal-like, anche se, parlando con un amico programmatore, mi ha detto testualmente:


posso già dirti che quel decompilato è inutilizzabile
se trovi qualche altro tool che te lo fa meglio
hai presente che all'inizio è escritto decentemente ogni file tipo:
bvlLine: TBevel;
lblSingle: TLabel;
lblSeries: TLabel;
btnOK: TcxButton;
btnCancel: TcxButton;
questo è pascal
il resto è assembler
e non ci fai nulla


Come devo comportarmi dunque?

Il decompilatore che ho utilizzato è DeDe...

ESSE-EFFE
15-02-2012, 19:40
dovrebbero essere pascal-like, anche se, parlando con un amico programmatore, mi ha detto testualmente:
posso già dirti che quel decompilato è inutilizzabile

Non è detto. Per sostituire una stringa e provare non ci vuole molto. Poi se non funziona è un altro discorso...

pabloski
15-02-2012, 20:07
dovrebbero essere pascal-like, anche se, parlando con un amico programmatore, mi ha detto testualmente:



Come devo comportarmi dunque?

Il decompilatore che ho utilizzato è DeDe...


ma infatti non devi decompilare niente, devi semplicemente sostituire con un hex editor le stringhe che t'interessano

basta editarle, niente di che

solo che se sono c-like, ci va un bel carattere zero alla fine, se sono pascal-like devi cambiare i primi bytes che indicano la lunghezza della stringa

provare a decompilare e ricompilare un eseguibile è da folli

Papatodero
15-02-2012, 20:14
Non mi è chiarissimo, dunque, scarico un hex editor e gli do in pasto l'eseguibile?!

Considera che le stringhe da cambiare sarebbero almeno 5..quella che ho postato era un esempio...

Ho paura di non riuscire a seguire molto il discorso, si può essere leggermente più user-friendly? Per me è dura seguire ciò che concerne questo mondo a me quasi sconosciuto :)

Grazie

pabloski
15-02-2012, 22:39
E' impossibile essere user-friendly trattando argomenti avanzati. Pensa che quest'operazione è molto simile a quello che si faceva prima dei compilatori, quando si programmava in binario.

Scaricati HxD e comincia a giocare con le sue funzionalità di editing su un file qualsiasi.

Devi prenderci la mano e capire un pò di cose, prima di poter modificare un eseguibile.

Papatodero
16-02-2012, 08:20
Ok, scaricato HxD, ho aperto l'eseguibile e ho trovato le stringhe che vorrei modificare, tipo:

http://filmup.leonardo.it/cgi-bin/search.cgi?ps=10&fmt=long&q=

Con affianco:
68 74 74 70 3A 2F 2F 66 69 6C 6D 75 70 2E 6C 65 6F 6E 61 72 64 6F 2E 69 74 2F 63 67 69 2D 62 69 6E 2F 73 65 61 72 63 68 2E 63 67 69 3F 70 73 3D 31 30 26 66 6D 74 3D 6C 6F 6E 67 26 71 3D


Io dovrei modificarla in:
http://filmup.leonardo.it/cgi-bin/search.cgi?ps=10&fmt=long&q=TITOLO&ul=%25%2Fsc_%25&x=43&y=4&m=all&wf=2221&wm=wrd&sy=0

Capisco che dovrei prenderci la mano anche con altri files, ma questo è quanto mi serve, non mi si potrebbe seguire passo passo nell'editing di questa stringa in modo che possa poi imparare come fare le altre da solo?

Grazie ancora :)

pabloski
16-02-2012, 10:47
Dovresti postare uno screenshot della finestra dell'editor, altrimenti è difficile capire che sta succedendo.

Papatodero
16-02-2012, 10:55
Ecco un paio di screen di alcune delle stringhe che voglio cambiare:
http://i42.tinypic.com/ix6qma.jpg
http://i44.tinypic.com/24qv7sj.jpg

Anche se ho paura che, anche editando queste stringhe, potrebbe non funzionare... :\

pabloski
16-02-2012, 11:13
In primo luogo puoi cambiare le stringhe solo se la stringa che andrai a mettere è più piccola di quella che già c'è.

Poi ho visto che che le stringhe in delphi sono null-terminated, per l'esattezza i due 00 00 dopo la stringa ne indicano il termine.

Ho notato però che prima della stringa c'è un valore a 32 bit che ne indica la dimensione.

3E 00 00 00 per la prima e 44 00 00 00 per la seconda.

Quello che devi fare è:

1. inserire la tua stringa
2. alla fine della stringa aggiungere 00 00
3. calcolare la dimensione della stringa, convertire il numero in esadecimale ( si può fare con la calcolatrice ) e sostituirlo al posto di 3E e 44 rispettivamente.

Papatodero
16-02-2012, 12:21
Non son certo d'aver capito bene, inserisco qualche screenshot:

Questo è il file non modificato
http://i43.tinypic.com/143qmo8.jpg


Questo, invece, è come l'ho modificato
http://i43.tinypic.com/ok623s.jpg

Devo inserire tutti gli 00 per non modificare la dimensione del file, giusto?

Come calcolo la dimensione della stringa?

!fazz
16-02-2012, 12:40
In primo luogo puoi cambiare le stringhe solo se la stringa che andrai a mettere è più piccola di quella che già c'è.

Poi ho visto che che le stringhe in delphi sono null-terminated, per l'esattezza i due 00 00 dopo la stringa ne indicano il termine.

Ho notato però che prima della stringa c'è un valore a 32 bit che ne indica la dimensione.

3E 00 00 00 per la prima e 44 00 00 00 per la seconda.

Quello che devi fare è:

1. inserire la tua stringa
2. alla fine della stringa aggiungere 00 00
3. calcolare la dimensione della stringa, convertire il numero in esadecimale ( si può fare con la calcolatrice ) e sostituirlo al posto di 3E e 44 rispettivamente.

delphi è pascal le stringhe non sono null terminate ma nella posizione 0 dell'array è inserita la dimensione, e le celle inutilizzate contengono valori casuali

pabloski
16-02-2012, 13:46
Non son certo d'aver capito bene, inserisco qualche screenshot:

Devo inserire tutti gli 00 per non modificare la dimensione del file, giusto?

Come calcolo la dimensione della stringa?

la dimensione della stringa è il numero di carattery che contiene

devi metterla al posto del 38

delphi è pascal le stringhe non sono null terminate ma nella posizione 0 dell'array è inserita la dimensione, e le celle inutilizzate contengono valori casuali

infatti anch'io ho pensato la stessa cosa, derivando delphi dal pascal, però ho trovato questo http://www.codexterity.com/delphistrings.htm

a quanto leggo le AnsiStrings sono null-terminated

del resto pure il file che ha analizzato Papatodero mostra due bytes nulli alla fine della stringa, come descritto nel documento che ho postato

Papatodero
16-02-2012, 15:33
Ho fatto la modifica delle stringhe che pensavo potessero risolvere il mio problema, ma nulla è cambiato..continua a non trovarmi nessun film :\

pabloski
16-02-2012, 18:26
Ho fatto la modifica delle stringhe che pensavo potessero risolvere il mio problema, ma nulla è cambiato..continua a non trovarmi nessun film :\

beh almeno la modifica è stata un successo, visto che parte :D

Papatodero
16-02-2012, 18:31
Devo esser stato proprio bravo allora..eheheh

Quindi..non ho speranze? :(

Non è che per caso ti andrebbe di provare a darmi una mano in prima persona?
So di chiedere tanto e d'averti già fatto perdere tanto tempo, ma a me questa modifica sul software sarebbe molto utile..

Magari mandandoti il programma potresti dargli uno sguardo per vedere se c'è speranza di modificarlo in qualche altro modo..o non so..

Con la speranza di una risposta positiva, ringrazio per il tempo già speso sino ad ora :)

pabloski
16-02-2012, 20:21
Direi che più di quello che hai fatto non si può fare.

Non puoi riscrivere un programma compilato in binario, nè modificarne il funzionamento. L'unica cosa abbordabile è quella che hai già fatto.

Probabilmente il programma non sa come usare quel tipo di url e in questo caso c'è ben poco da fare.

ESSE-EFFE
16-02-2012, 20:28
Probabilmente il programma non sa come usare quel tipo di url e in questo caso c'è ben poco da fare.

Anche perchè senza sistemare la lunghezza della stringa (e non mi pare sia stato fatto) la modifica dei byte serve a poco. Bisognerebbe vedere dove sta puntando ora il programma.

Papatodero
16-02-2012, 20:35
:(

Ma..altre alternative? Anche senza modificare il programma?
Un amico mi parlava di creare un redirect in php o qualcosa di simile...non ho ben capito cosa intendesse...
Più chiaro invece è stato quando mi ha parlato del mio file hosts di windows, modificando quello potrei creare dei redirect..cioè, se il programma volesse andare su www.google.it , io potrei mandarlo su www.yahoo.it
Solo che, essendo gli url un pò più complessi, non so bene come risolvere...avete qualche idea? :)

wingman87
16-02-2012, 21:10
Un altro aspetto è che quelli sono gli indirizzi a cui inviare una richiesta, e si possono cambiare, ma non è detto che la struttura della risposta sia rimasta invariata nel tempo, e se è cambiata allora deve cambiare anche la logica del programma.

Papatodero
16-02-2012, 21:23
In effetti... :\

Ma nessuno ha voglia di provare questo programma, anche solo per curiosità? eheh

Magari poi avreste più chiaro ciò che mi serve e se è possibile o meno farlo ^^

Papatodero
17-02-2012, 22:13
Rieccomi..dunque, ho trovato una novità (o meglio, l'avevo già trovata un paio d'anni fa, ma l'avevo scordato):

Nel programma c'è una sezione in cui inserire degli script (è un'opzione messa a disposizione da chi ha creato il programma), è molto probabile che sia possibile aggiungere dei motori di ricerca, ecco ciò che è possibile modificare tramite Script Engine:


(***************************************************

FilmUP - Movie database on your desktop
www.filmupcom.altervista.org

[Infos]
Authors=
Title=Film
Description=
Site=
Language=
Version=
Requires=
Comments=
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
GetInfo=1

[Options]

***************************************************)

program Film;

begin
end.



Sono riuscito a reperire un .ifs per un altro programma simile (ant movie catalog), ovviamente però non funziona sul software che uso io..magari modificandolo un pochino...
Avete idea di come fare?
Questo è quel che ho trovato:


***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=L. Francisco, Pivello, Zandal, Fulvio53s03, ...
Title=FilmUP
Description=Get movie info from LeoFilmUP.it
Site=http://filmup.leonardo.it
Language=IT
Version=1.0.5 - 04.11.2008
Requires=3.5.0
Comments=**Changes**|Fulvio53s03: shows years in picklist|Pivello: query URL changed|Zandal: sistemato puntamento a COMMENTS|Pivello: Film site URL selectable instead of FilmUp page URL|dinolib: adapted to v.3.5.0 and little bugfix | ABNormal restarted...|14.04.2005: Fixed infinite loop if description field missing (Pivello)|16.09.2005: Look for new Main Actors data into page; if present select this instead of Cast data (P)|16.09.2005: Added ActorPlusCast option (P)|03.10.2005 ABNormal: Big Posters and Comments again|14.01.2006 ABNormal: Trailer URL
License=* The source code of the script can be used in |* another program only if full credits to |* script author and a link to Ant Movie Catalog |* website are given in the About box or in |* the documentation of the program |
GetInfo=1

[Options]
AlternateURL=0|0|0=Use the FilmUP web site for FieldURL|1=Try to use ufficial movie web site for FieldURL
MezzoVoto=1|1|0=Integer Ratings|1=Ratings with ,5
ActorsPlusCast=0|0|0=Get Main Actors data (if present) otherwise get Cast field|1=Get Main Actors data (if present) and Cast data
TrailerURL=0|0|0=Normal URL page|1=Trailer URL page (if found)
Poster=0|0|1=Download full-res Poster|0=Download tiny Poster

***************************************************)

program LeonardoFilmUP;
uses
StringUtils1;

var
MovieName: string;
TheMovieAddress: string;
comm: String;

procedure AnalyzePage(Address: string);
var
Page: TStringList;
LineNr: integer;
BeginPos: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
LineNr := FindLine('Ordina risultati per', Page, 0);
if LineNr = -1 then
begin
SetField(fieldURL, Address);
AnalyzeMoviePage(Page);
end
else
begin
PickTreeClear;
AddMoviesTitles(Page);
if TheMovieAddress='' then
begin
if PickTreeExec(Address) then AnalyzePage(Address);
end
else
begin
SetField(fieldURL, TheMovieAddress);
Page.Text := GetPage(TheMovieAddress);
AnalyzeMoviePage(Page);
end;
end;
Page.Free;
end;

procedure AnalyzeMoviePage(Page: TStringList);
var
Line, PreviousLine, NomeHtml, sTemp: string;
LineNr,PrevLineNr, BeginPos, EndPos, Field: Integer;
IsMainActors: boolean;
begin
IsMainActors := false;
sTemp := '';
LineNr := FindLine('<font face="arial, helvetica" size="3"><b>', Page, 0);
if LineNr > -1 then
begin
//Translated Title
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
SetField(fieldTranslatedTitle, Line);

repeat
//Look for next info
repeat
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
until (Line<>'') or (LineNr > Page.Count);

// Test if 'Trama:' missing
if ((PreviousLine = 'Data di uscita:&nbsp;')
or (PreviousLine = 'Uscita prevista:&nbsp;')) and (Line <> 'Trama:') then
if (copy(Line,1,6)<>'Trama:') then
Line := 'Trama:' + Line;
PreviousLine := Line;

//Look for type of line
if Line = 'Titolo originale:&nbsp;' then
Field := fieldOriginalTitle
else if Line = 'Regia:&nbsp;' then
Field := fieldDirector
else if Line = 'Produzione:&nbsp;' then
Field := fieldProducer
else if Line = 'Nazione:&nbsp;' then
Field := fieldCountry
else if Line = 'Genere:&nbsp;' then
Field := fieldCategory
else if Line = 'Anno:&nbsp;' then
Field := fieldYear
else if Line = 'Durata:&nbsp;' then
Field := fieldLength //Special case: get number only
else if Line = 'Sito ufficiale:&nbsp;' then
Field := fieldURL
else if Line = 'Attori protagonisti:&nbsp;' then
begin
Field := fieldActors;
IsMainActors := true;
end
else if Line = 'Cast:&nbsp;' then
Field := fieldActors
else if Line = 'Trama:' then
Field := fieldDescription
else
Field := 0;

// I have to add this test, for sometimes the description
// is on the same line as the tag 'Trama'
if (copy(Line,1,6)='Trama:') and (length(Line)>6) then
begin
Field := fieldDescription;
Delete(Line,1,6);
HTMLDecode(Line);
end
else
begin
//Get values
LineNr := LineNr + 1;
Line := Page.GetString(LineNr);
HTMLRemoveTags(Line);
HTMLDecode(Line);

//Special case: Length
if Field = fieldLength then Line := copy(Line,1,length(Line)-1);
end;

//Alternative URL case
if (field = fieldURL) then
begin
if (Length(Line) = 0) or (GetOption('AlternateURL')=0) then // if WEB url missing or explicitly requested...
Line := GetField(fieldURL) // ...restore FilmUp URL
else
Line := 'http://'+Line;
end;

if Field<>0 then
begin
if Field = fieldActors then
begin
if IsMainActors then // Remember Main Actors (if present)
begin
sTemp := Line;
IsMainActors := false;
end
else
begin
if ((GetOption('ActorsPlusCast')=1) and (sTemp<>'')) then
Line := sTemp + ' Cast: ' + Line
else
if sTemp <> '' then
Line := sTemp;
SetField(Field,Line);
end;
end
else
SetField(Field,Line);
end;

until (Field=fieldDescription) or (LineNr > Page.Count);
end;

PrevLineNr := LineNr;

//Trailer
if GetOption('TrailerURL')=1 then begin
LineNr := FindLine('">Trailer</a>', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
if Pos('size="2"><a', Line) <> 0 then Delete(Line,1,pos('size="2"><a',Line));
//if Pos('DVD', Line) <> 0 then Delete(Line,1,pos('DVD',Line));
Delete(Line,1,pos('href="',Line)+5);
NomeHtml := Copy(Line,1,pos('"',Line)-1);
if (copy(NomeHtml,1,1)<>'/') then
begin
NomeHtml := '/' + NomeHtml;
end;
NomeHtml :='http://filmup.leonardo.it' + NomeHtml;
comm := textbetween(GetPage(NomeHtml),'<EMBED SRC="','"');
//HTMLRemoveTags(comm);
SetField(fieldURL,comm);
PrevLineNr := LineNr;
end;
end;

//Comments
LineNr := FindLine('">Recensione</a>', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
if Pos('Scheda', Line) <> 0 then Delete(Line,1,pos('Scheda',Line));
if Pos('DVD', Line) <> 0 then Delete(Line,1,pos('DVD',Line));
Delete(Line,1,pos('href="',Line)+5);
NomeHtml :=Copy(Line,1,pos('"',Line)-1);
if (copy(NomeHtml,1,1)<>'/') then
begin
NomeHtml := '/' + NomeHtml;
end;
comm := textbetween(GetPage(NomeHtml),'<font face="arial,helvetica" size="2"><b>','<a class="filmup" href="opinioni.htm">');
comm := textafter(comm,'</b><br>'+#13#10);
HTMLRemoveTags(comm);
SetField(fieldComments,comm);
PrevLineNr := LineNr;
end;

//Rating
LineNr := FindLine('">Opinioni</a>', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('Recensione',Line));
Delete(Line,1,pos('href="',Line)+5);
Line := GetLineFromOtherPage(Copy(Line,1,pos('"',Line)-1),'</b> - <img src="');
if Line <> '' then
begin
Line := Copy(Line,1,pos('</b> - <img src="',Line)-1);
if GetOption('MezzoVoto')=0 then
if pos('.',Line)>0 then Line := Copy(Line,1,pos('.',Line)-1);
SetField(fieldRating,Line);
end;
PrevLineNr := LineNr;
end;

//Picture
begin
LineNr := FindLine('<img src="locand', Page, PrevLineNr);
if LineNr > -1 then
begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('<img src="locand', Line)+9);
GetPicture('http://filmup.leonardo.it/'+Copy(Line,1,pos('"',Line)-1));
end;
end

// start fmsgorb Code
if GetOption('Poster')=1 then
begin
LineNr := FindLine('href="posters/locp/', Page, PrevLineNr);
if LineNr > -1 then

begin
Line := Page.GetString(LineNr);
Delete(Line,1,pos('href="posters/locp/',Line)+5);
Line := GetLineFromOtherPage('http://filmup.leonardo.it/'+Copy(Line,1,pos('"',Line)-1),'<img src="../loc/500/');
if Line <> '' then
begin
Delete(Line,1,pos('<img src="../',Line)+12);
GetPicture('http://filmup.leonardo.it/posters/'+Copy(Line,1,pos('"',Line)-1));
end;
end;
end;
// end fmsgorb Code

// DisplayResults;
end;

function GetLineFromOtherPage(address: string; hint: string): string;
var
Page: TStringList;
LineNr: integer;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
LineNr := FindLine(hint, Page, 0);
if LineNr > -1 then result := Page.GetString(LineNr);
Page.Free;
end;

procedure GetComments(address: string);
var
Page: TStringList;
BeginLine: integer;
EndLine: integer;
i: integer;
Line, Comments: string;
begin
Page := TStringList.Create;
Page.Text := GetPage(Address);
BeginLine := FindLine('RECENSIONI', Page, 0);
BeginLine := FindLine('<font face="arial,helvetica" size="2"><b>', Page, BeginLine);
EndLine := FindLine('<a href="opinioni.htm">Scrivi la tua recensione!</a></font><br><br>', Page, BeginLine);
for i:= BeginLine+1 to EndLine-1 do
begin
Line := Page.GetString(i);
Line := StringReplace(Line, '<br>', #13#10);
Line := StringReplace(Line, #13#10#32, #13#10);
HTMLRemoveTags(Line);
HTMLDecode(Line);
Comments := Comments + Line;
end;
SetField(fieldComments, Comments);
Page.Free;
end;

//
procedure AddMoviesTitles(Page: TStringList);
var
LineNr: Integer;
Line: string;
MovieTitle, MovieAddress, MovieAnno: string;
BeginPos, EndPos: Integer;
begin
LineNr := 0;
LineNr := FindLine('FilmUP - Scheda: ',Page,LineNr);
while LineNr > -1 do
begin
MovieAddress := 'http://filmup.leonardo.it/sc_' + TextBetween((Page.GetString(LineNr-1)), '_', '.') + '.htm';
Line := Page.GetString(LineNr);
MovieTitle := TextAfter(Page.GetString(LineNr), 'Scheda: ');
While pos ('<span', MovieTitle) > 0 Do begin
MovieTitle := TextBefore(MovieTitle, '<span', '') + TextAfter(MovieTitle, 'bold;">');
end;
While pos ('</span', MovieTitle) > 0 Do begin
MovieTitle := TextBefore(MovieTitle, '</span', '') + TextAfter(MovieTitle, '/span>');
end;

// Inizio Fulvio53s03
LineNr := FindLine('Anno: ',Page,LineNr);
Line := Page.GetString(LineNr);
// Showmessage ('Line ***' + Line + '***')
MovieAnno := TextAfter(Page.GetString(LineNr), 'Anno: ');
// Showmessage ('MovieAnno ***' + MovieAnno + '***')
If pos ('Anno: ', Line) > 0 then
begin;
MovieAnno := TextBefore(MovieAnno, ' Genere: ', '') + TextAfter(MovieAnno, 'Anno: ');
// showmessage ('Anno***' + MovieAnno + '***');
end
else
MovieAnno := ' ';
// Fine Fulvio53s03

HTMLRemoveTags(MovieTitle);
HTMLDecode(Movietitle);
LineNr := FindLine('FilmUP - Scheda:',Page,LineNr+1);
MovieTitle := MovieTitle + ' [' + MovieAnno + ']';
PickTreeAdd(MovieTitle, MovieAddress);
if TheMovieAddress='*' then
TheMovieAddress := MovieAddress
else
TheMovieAddress := '';
end;
LineNr := FindLine('Successivo',Page,LineNr);
Line := Page.GetString(LineNr);
BeginPos := pos('HREF',Line);
if BeginPos>0 then
begin
Delete(Line,1,BeginPos + 5);
EndPos := pos('"',Line);
MovieAddress := copy(Line,1,EndPos-1);
PickTreeMoreLink(MovieAddress);
end;
if TheMovieAddress='*' then TheMovieAddress := '';
end;
//

// -----------------------------
// Questo è il main dello script
// -----------------------------
begin
if CheckVersion(3,5,0) then
begin
TheMovieAddress := '*';
MovieName := StringReplace(GetField(fieldTranslatedTitle), '.', ' ');
if MovieName = '' then
MovieName := StringReplace(GetField(fieldOriginalTitle), '.', ' ');
While pos ('[', MovieName) > 0 Do begin
MovieName := TextBefore(MovieName, '[', '') + TextAfter(MovieName, ']');
end;
if Input('FilmUP Import', 'Digita il titolo del film:', MovieName) then
begin
AnalyzePage('http://filmup.leonardo.it/cgi-bin/search.cgi?q='+UrlEncode(MovieName)+'&ul=%25%2Fsc_%25');
end;
end
else
ShowMessage('Questo script richiede una versione più nuova di Ant Movie Catalog (almeno la versione 3.5.0)');
end.


Grazie