Jump to content
Rpg²S Forum

Programmazione inversa Parte II


Recommended Posts

La scorsa volta, Abbiamo appreso qualche argomento basilare riguardante il linguaggio Assembly.

 

Ripeto però, che per poter moddare programmi o giochi, c'è bisogno di una conoscenza elevata di diversi linguaggi.
In questa lezione, iniziamo a fare sul serio :)

 

Apprenderemo come eseguire una mod / Patch di un programma.

 

Realizzeremo un Patch in C#.

Essi, proprio in C#.

Per un solo motivo, Per farvi capire che il C# non scherza nemmeno lui :P

 

Ho già preparato l'occorrente per questa lezione, e scritto 2 programmini ad hoc.

 

 

 

Cosa ci occore?

 

1) Strumento di Debugger
Abbiamo bisogno di Ollydbg o IDA., Consiglio Ollydbg per i newbie.

Io uso ADA per risalire anche ai vari namling delle librerie.

 

Download Ollydgb

 

http://www.ollydbg.de/download.htm

 

 

2) Strumento di editor Esadecimale

 

Come secondo tool, ci serve un buon editor esadecimale. ( HEX Editor )

vi consiglio

 

 

http://www.hhdsoftware.com/Downloads/free-hex-editor

 

 

3) Visual C#

 

Scaricabile dal sito di microsoft

 

 

 

4) Materiale per questa lezione

 

http://www.mediafire.com/download/aodd32vm24wrxe2/Lezione_2.rar

 

 

 

Cosa contiene il rar?

 

Contiene un programmino che ho scritto apposta in C++.

Il programmino simula lo status di un gioco. All'avvio è impostato su Schermata del titolo.

poi effettuando delle scelte, possiamo spostarci tipo in battaglia, shop, gioco, ecc. ecc.

 

Il nostro scopo è quello di modificare il programma, facendogli fare ciò che diciamo noi e non quello per la quale

è stato programmato.

 

Cosa dobbiamo fare?

Il programma contiene un modulo segreto. che ci mostrerà un messaggio nel caso riusciamo a chiamare quel metodo.

Invece, normalmente, non è stato programmato per eseguire quel metodo. Noi invece dobbiamo trovare il modo

di fargli attivare quel metodo nascosto.

 

 

All'interno trovate 3 file exe.

 

Hidden Quest (Moddato).exe

Questo è l'exe moddato. Sarà il risultato finale se riusciamo nell'impresa.

 

Hidden Quest.exe

E' l'exe originale senza mod

 

 

Hidden Quest Patcher.exe

E' il mio programma per patchare Hidden Quest.

Una volta che ho scoperto come attivare il modulo segreto, ho ricavato gli indirizzi ed i relativi Offset.

Successivamente, ho modificato il DUMP di memoria del file e gli ho detto di fare questo invece di quello.

 

C'è la possibilità sia di Patchare l'exe che riportarlo allo stato originale :)

 

 

E poi c'è la cartella sorgenti.

Dove c'è anche la mia soluzione.

 

Ma vi consiglio di non vedere la soluzione. Dobbiamo arrivarci noi.
Se invece non ci riuscite, potete guardare io come ho fatto.

 

 

 

LIVELLO PER PROGRAMMATORE ESPERTO: FACILE

LIVELLO PER NEWBIE : MEDIO / FACILE

 

Tempo impiegato per la soluzione: 10 minuti

Tempo totale (modifiche e creazione patcher) : 20 minuti

 

 

 

-----------------------------------------------------------------------------

 

Sorgente del programma principale

#include <iostream>
#include <conio.h>

using namespace std;

int avvio = 1;


void Funzione1()
{

    cout << "-------------------------------------" << endl;
    cout << "Questo e' il metodo pubblico, normalmente chiamato dall'applicazione" << endl;
    cout << "Prova a scroprire il metodo segreto..." << endl;
    cout << "Su avanti, invece di far apparire questo testo cerca di far apparire il testo contenuto nel metodo segreto" << endl;

    getch();

}

void Funzione2()
{
    cout << "-------------------------------------" << endl;
    cout << "Complimenti! hai moddato correttamente il programma" << endl;
    cout << "Questo e' il metodo segreto, il cui si attiva solo patchando il programma" << endl;
    cout << "Congratulazioni :)" << endl;

    getch();


}



int main()
{
    cout << "+----------------------------------" << endl;
    cout << "| Lezione di livello semplicissimo " << endl;
    cout << "+----------------------------------" << endl;
    cout << "\n\n" << endl;

    cout << "Questo programma ha 2 funzioni, una pubblica ed una nascosta." << endl;
    cout << "Normalmente e' stato programmato per avviare la funzione pubblica." << endl;
    cout << "Riesci a moddare questa applicazione e facendo avviare il metodo nascosto invece del pubblico?" << endl;

    cout << "\n\nPremi INVIO per avviare" << endl;

    getch();

    if(avvio == 1)
    {
        Funzione1();
    }

    if(avvio == 2)
    {
        Funzione2();
    }

    return 0;
}

Ricordate gli insegnamenti della prima lezione,

Usate la vostra fantasia, spremete il cervello e cercate di riuscire a moddare questo programma.

 

Il consiglio che vi dò, e di ricordavi dei termini e descrizioni della prima lezione.

Sopratutto, come chiamare i metodi e funzioni in assembly.

 

Se non ci riuscite entro questa sera,

La soluzione e spiegazione dettagliata ve la mando questa sera con calma :)

 

Se invece ci riuscite,

Spiegate come avete fatto passo passo.

 

 

Buona Fortuna.

Edited by Thejuster

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

nemmeno un commento?

 

o nessuno ha provato ad aprire Hidden Quest.exe con Ollydbg?

 

:)

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

@Thejuster, è contro il regolamento fare doppi-post (puoi farlo solo dopo 24 ore dall'ultimo post).

 

Se non c'è nessun commento, è dovuto sicuramente al fatto che hai aperto da pochissimo questo topic. ;)

CLICCA SUL BANNER QUI SOTTO PER ENTRARE ANCHE TU NEL GRUPPO VOCALE DISCORD!

>>> BIM_Banner2.png <<<

 

Le mie guide:

 

 

I miei plugin:

 

 

Roba:

 

 

http://i.imgur.com/dWUeHeL.jpg

 

http://37.media.tumblr.com/c5e5c7ccc70b4e7119ad585c98b4eafc/tumblr_n5munym41a1rlwn4io6_r1_250.gif http://67.media.tumblr.com/87ed7c36599b5438e6da0a0d94d99f80/tumblr_mr5fkbv9gO1qkufl8o1_500.gif

http://i.imgur.com/osqupoP.png

xyknPmC.png

Link to comment
Share on other sites

Difatti un solo giorno per provare potrebbe esser poco, io fino ad ora non ho avuto tempo >

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Ed ecco qui ci siamo.

 

Dunque dovete sapere che lo scopo di questa lezione non era affatto casuale,

Sapevo benissimo che nessuno ci sarebbe riuscito dato del scarse conoscenze.

Lo davo già per scontato :)

 

L'obiettivo principale della lezione era quello di farvi aprire un exe con Ollydbg ed iniziare a spulciare il suo interno.

Per capire almeno come muovervi.

 

Le mie lezioni sono piccole, veloci ma molto complete.

Ed ho un metodo molto ottimale per insegnare le cose, nessuna guida è scritta a casaccio.

 

Nella prima lezione ho spiegato alcuni termini dell'assembly che vi ripeto qui

 

 

Queste sono delle istruzioni più comunemente usate in Assembly.

ADD Addizione
SUB Sottrazione
TEST Confronto logico
CMP Confronto tra due valore tipo if (aaa == bbb) { ok; }
NOP Nessuna Operazione
RET Return
JMP Salto Incondizionato

Se apriamo Hidden Quest.exe con Ollydbg trascinandolo nel programma cosa succede?

 

8e88f6b.png

 

La riga evidenziata di nero, ci indica che quello è il punto di partenza del programma.

 

Scorrendo più in basso notiamo altre chiamate.

 

Proprio quello che Hidden Quest.exe ci dice quando lo apriamo

 

d4ba395.png

 

Come vedete, Abbiamo scovato all'interno dell'exe i due metodi.

Quello segreto e quello pubblico.

 

Ogni funzione, metodo o procedura e racchiusa tra quelle linee doppie nere.

Che ci indica dove inizia una procedura e dove finisce.

Quindi possiamo farci già un idea di come analizzare il codice.

 

Come detto nella prima lezione,

Nel campo [ 1 ]

Abbiamo gli indirizzi, sono quelli che ci dobbiamo ricordare.

 

Se premiamo F2 mettiamo un segnalino o Breackpoint per non dimenticarci dove sta.

Anche perché come notate, un semplicissimo programma in assembly è molto lungo.

 

 

Quindi analizziamo bene la prima parte del codice.

 

Notiamo che ci sono diversi CALL.

come spiegato precedentemente, il CALL chiama una procedura o funzione.

Quindi possiamo analizzare che dopo un tot di righe l'assembly ci chiama una procedura.

Ma fino a li va tutto bene, scendiamo più giu e vediamo cos'altro troviamo.

 

 

d907c00.png

 

Oh, ed eccoci qui.

Abbiamo trovato il punto esatto di quando noi premiamo Enter.

Prima di premerlo ci dice: Premi INVIO per continuare.

E lo troviamo scritto proprio lì.

 

sotto, proprio come nel sorgente originale c'è la chiamata

getch();


return 0;


}

Ora qui, dobbiamo analizzare bene il codice Assembly e capire cosa fà.

CMP EAX,1
JNZ SHORT Hidden_Q.004015D4
CALL Hidden_Q.00401340

Ragioniamo.

 

CMP EAX,1 ( Se il valore nel registro AX è uguale a 1 )

JNZ SHORT Hidden_Q.004015D4 ( Ma se è minore di zero va a questa procedura che potrebbe essere NULL o dare un eccezione )

 

Altrimenti

 

 

CALL Hidden_Q.00401340 ( SE AX è uguale a 1, Chiama l'istruzione all'indirizzo 00401340 )

 

 

Quindi?

 

Noi, sappiamo che il programma è settato fisso su 1 ricordate?

 

int valore = 1;

 

quindi ci chiamerà sempre quell'indirizzo 00401340

 

Ma un momento, ritorniamo sopra e cerchiamo questo indirizzo vediamo dove si trova.

 

 

 

 

30a60d4.png

 

 

Eccolo lì beccato.

00401340   |     %55 PUSH  EBP

Sotto notiamo un'altra istruzione, che sarebbe il metodo nascosto!

004013E1 |   %55 PUSH EBP

Perfetto direi, li abbiamo beccati entrambi! :D

 

Ora non ci resta che modificare, e dirgli che invece di chiamare quell'indirizzo ovvero 00401340 Che è il metodo pubblico,

ci deve chiamare 004013E1 che sarebbe il metodo nascosto.

 

Ma come?

 

Scendiamo di nuovo giù alla funzione CALL sotto al CMP EAX,1 dove eravamo prima.

 

Proprio li.

 

 

675e51e.png

 

 

Clicchiamo con il tasto destro su quella chiamata che ci porta al metodo pubblico ( 00401340 )

e seguiamo dove ci porta nel DUMP di memoria.

 

 

34b5e7f.png

 

Notiamo che ci seleziona degli offset.

A noi serviranno proprio quelli!

 

Quindi segniamoceli da qualche parte, tipo sul blocco notes.

 

E8 6C FD FF FF

 

 

Ora sempre tenendo selezionato la righa, premiamo spazio, ed incolliamo l'indirizzo del metodo nascosto che sarebbe 004013E1

Se non lo ricordate dove lo abbiamo visto guardate 2 screen sopra a questa.

 

Quindi cosa succede ora.

 

c17a478.png

 

 

Modificando il CALL e premendo invio, notiamo che gli offset nel DUMP di memoria sono cambiati!

 

quindi questo nuovo set di indirizzi, saranno la patch al nostro programma

 

quindi copiamoci anche questi e gli commentiamo scrivendo.

 

Patch: E8 0D FE FF FF

 

 

Ora abbiamo gli offset sia originali che Patchati.

 

 

Originali: E8 6C FD FF FF

Patchati: E8 0D FE FF FF

 

77a5747.png

 

 

Già ora, abbiamo correttamente patchato il nostro programma.

Ci basterebbe salvarlo e puff, abbiamo patchato il programma.

 

Ma noi dobbiamo creare un patcher giusto? non farlo manualmente dunque come si fà? come funziona?

 

 

Apriamo il nostro Editor Esadecimale ( HEX Editor )

 

 

Apriamo Sempre Hidden Quest.exe

 

 

Premiamo CTRL + F per iniziare una ricerca,

e cambiamo il metodo di ricerca.

Anzichè cercare una Stringa, cerchiamo gli offset esadecimali.

 

 

 

8e87876.png

 

 

 

 

Scriviamo uno per uno gli offset originali! non quelli patchati perchè non esistono.

 

d56b747.png

 

 

premendo su FIND ci cercherà esattamente dove è situato il SET di Offset che stiamo cercando.

Difatti, notate che ci ha selezionato e8 e a continuare ci sono gli altri.

 

e8 6c fd ff ff

 

Selezioniamoli.

 

33ad60b.png

 

 

 

Ora dobbiamo sapere precisamente a quale indirizzo del di memoria sono situati gli Offset

per poterli patchare.

 

 

 

 

45f3ccb.png

 

Se ora premiamo sul primo offset, notiamo in basso l'indirizzo dell'offset

 

quindi ora sappiamo che:

 

 

All'indirizzo:

0x000009cf abbiamo e8

 

successivamente abbiamo

 

dd696d3.png

 

 

0x000009cf : 6c

 

e continuiamo a segnarceli sul blocco notes

 

fino ad avere un qualcosa del genere

0x000009cf : 0xe8
0x000009d0 : 0x6c
0x000009d1 : 0xfd
0x000009d2 : 0xff
0x000009d3 : 0xff

bene questi sono gli indirizzi relativi di offset.

 

quindi ora vi ricordate cosa dovevamo fare per patcharli?

 

cambiare gli offset.

 

 

Originali: E8 6C FD FF FF

Patchati: E8 0D FE FF FF

 

quindi in

 

0x000009d0 : 0x6c

 

sarà

 

0x000009d0 : 0x0D

 

 

e

 

0x000009d1 : 0xfd

 

sarà

 

0x000009d1 : 0xfe

 

 

.

 

questà ragazzi miei e la patch finale.

Ora siamo in grado di patchare il nostro programma.

 

 

Apriamo visual C#

 

creiamo un form

 

e un pulsante. per fare prima.

 

 

Con questo metodo, permettiamo di aprire un file exe e di passarlo successivamente allo stream

OpenFileDialog op = new OpenFileDialog();

            op.Filter = "File exe (*.exe)|*.exe";

            if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // Continua
            }

Ora Inizializziamo lo stream

OpenFileDialog op = new OpenFileDialog();

op.Filter = "File exe (*.exe)|*.exe";

if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{


            FileStream fs = new FileStream(textBox1.Text, FileMode.Open, FileAccess.ReadWrite);

             //Ci posizioniamo agli indirizzo dell'offset
             //e scriviamo le modifiche :)

            fs.Position = 0x000009cf;
            fs.WriteByte(0xe8);
            fs.Position = 0x000009d0;
            fs.WriteByte(0x0d);
            fs.Position = 0x000009d1;
            fs.WriteByte(0xfe);
            fs.Position = 0x000009d2;
            fs.WriteByte(0xff);
            fs.Position = 0x000009d3;
            fs.WriteByte(0xff);
            fs.Close();

            MessageBox.Show("Programma Patchato :)");

}

Ecco fatto ragazzi.

 

Ora premendo sul pulsante, e scegliendo il file abbiamo patchato il programma.

Avviate e guardate :)

Rpgmaker Asset Converter & UI Tool by Making Italia


______________________________________________________
Produzione Software, Componenti e Controlli
_______________________________________________________

*** Linguaggi di Programmazione Conosciuti e competenze Tecniche ***

C#, Javascript, Java, PHP, SQL, Autoit , JQuery, HTML, HTML5, C++, VB.NET,
Android, DirectX, HLSL, XML, Access, LUA, Delphi, Pascal, Assembly, Fortan, Angular JS

Python, Delphi, OpenGL, Git, Bash, ASP, CMake, WinService


Making Italia

 

Link to comment
Share on other sites

 

Le mie lezioni sono piccole, veloci ma molto complete.

Io pure questa sera esco ed a parte aver finito di leggere da ieri notte a stamattina le soluzioni non ho avuto modo di applicarle e neanche di capire se erano così impossibili >

Comunque buona spiegazione anche condita di immagini passo passo! Il metodo mi piace, sì.

^ ^

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...