[C#]Trainer erstellen? - Memory Editing

04/28/2013 11:59 ElDiabolus#1
Hey,
habe mich mittlerweile etwas mit C# zusammengesetzt und wollte mal einen Trainer schreiben für ein Offline Spiel (Napoleon Total War). Nun habe ich 2 Fragen:
1) Muss man da irgendwas besonderes machen, dass es nicht VAC detected wird (CheatEngine wird nicht entdeckt)?
2) Könnte mir jemand vielleicht einen Codeschnipsel posten, oder mir erklären, wie man das macht, denn ich hab etwas im Inet geschaut, bin aber nicht wirklich fündig geworden, wie das nun genau funktioniert. Die Offsets, oder wie das heißt würde ich schon raus bekommen, also ich bräuchte nur das, was in C# rein muss. Am besten:
Code:
new wert; //Die Variable, die geschrieben werden soll.
Vielen Dank im Vorraus. :)
04/28/2013 20:59 xXKonaXx#2
Blackmagic -> [Only registered and activated users can see links. Click Here To Register...]
04/28/2013 22:05 dready#3
Blackmagic ist für sowas kleines ein wenig überdimensioniert :P

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]


Damit solltest so ziemlich alles machen können.
04/29/2013 17:07 ElDiabolus#4
Das ist ja ganz nett, aber ich hab leider keine Ahnung, wie man damit umgeht. Wie gesagt, nen Codeschnipsel würde mich am weitesten bringen.
04/30/2013 14:29 SwarN#5
Du willst Codeschnipsel?
Hier hast du Codeschnipsel und jetzt bin ich gespannt ob du was damit anfangen kannst :=)

Auslesen :
Quote:
private void timerUPdater_Tick(object sender, EventArgs e)
{
try
{
BlackMagic black = new BlackMagic();
int PID = Convert.ToInt32(dgvProzesse.SelectedRows[0].Cells["ID"].Value);
black.Open(PID);
uint BaseAdress = black.ReadUInt(m_StatsBasePointer);
uint CordBaseAdress = black.ReadUInt(m_CoordBasePointer);

//Labels füllen
txt_X.Text = black.ReadFloat(CordBaseAdress + m_X).ToString();
txt_Y.Text = black.ReadFloat(CordBaseAdress + m_Y).ToString();

lbl_LifeMAX.Text = black.ReadDouble(BaseAdress + m_LiveMAX).ToString();
lbl_LifeAKT.Text = black.ReadDouble(BaseAdress + m_LiveAKT).ToString();
lbl_AusdauerAKT.Text = black.ReadDouble(BaseAdress + m_AusdauerAKT).ToString();
lbl_AusdauerMAX.Text = black.ReadDouble(BaseAdress + m_AusdauerMAX).ToString();
lbl_ManaMAX.Text = black.ReadDouble(BaseAdress + m_ManaMAX).ToString();
lbl_ManaAKT.Text = black.ReadDouble(BaseAdress + m_ManaAKT).ToString();
lbl_EleAKT.Text = black.ReadDouble(BaseAdress + m_EleAKT).ToString();
lbl_EleMAX.Text = black.ReadDouble(BaseAdress + m_EleMAX).ToString();

//lbl_AepfelAnzahl.Text = black.ReadFloat(m_PetBasePointer + m_AepfelPetAKT).ToString();


lbl_LifeProzent.Text = (Convert.ToDouble(lbl_LifeAKT.Text) / Convert.ToDouble(lbl_LifeMAX.Text) * 100).ToString("N0");
lbl_AusdProzent.Text = (Convert.ToDouble(lbl_AusdauerAKT.Text) / Convert.ToDouble(lbl_AusdauerMAX.Text) * 100).ToString("N0");
lbl_ManaProzent.Text = (Convert.ToDouble(lbl_ManaAKT.Text) / Convert.ToDouble(lbl_ManaMAX.Text) * 100).ToString("N0");
lbl_EleProzent.Text = (Convert.ToDouble(lbl_EleAKT.Text) / Convert.ToDouble(lbl_EleMAX.Text) * 100).ToString("N0");

//lbl_LvlAktuell.Text = black.ReadSByte(BaseAdress + m_AktuellesLevel).ToString();

//lbl_SlotLife.Text = black.ReadSByte(BaseAdress + GetOffsetFromTaste(txt_AutoPotLifeTASTE.Value)).To String();
//lbl_SlotAusdauer.Text = black.ReadSByte(BaseAdress + GetOffsetFromTaste(txt_AutoPotAusdTASTE.Value)).To String();
//lbl_SlotEle.Text = black.ReadSByte(BaseAdress + GetOffsetFromTaste(txt_AutoPotEleTASTE.Value)).ToS tring();
//lbl_SlotMana.Text = black.ReadSByte(BaseAdress + GetOffsetFromTaste(txt_AutoPotManaTASTE.Value)).To String();

uint AidBlockerPointer = black.ReadUInt(BaseAdress + m_AidBlockerPointer);
uint AidBlockerPointer2 = black.ReadUInt(BaseAdress + m_AidBlockerPointer2);
lbl_AidBlocker.Text = black.ReadShort(AidBlockerPointer + m_AidBlocker).ToString();
lbl_AidBlocker2.Text = black.ReadShort(AidBlockerPointer2 + m_AidBlocker).ToString();
}
catch
{
}
}
Schreiben:

Quote:
private void dgv_Cords_DoubleClick(object sender, EventArgs e)
{
try
{
BlackMagic black = new BlackMagic();
int PID = Convert.ToInt32(dgvProzesse.SelectedRows[0].Cells["ID"].Value);
black.Open(PID);
uint CordBaseAdress = black.ReadUInt(m_CoordBasePointer);

black.WriteFloat(CordBaseAdress + m_X, Convert.ToSingle(dgv_Cords.SelectedRows[0].Cells[2].Value));
black.WriteFloat(CordBaseAdress + m_Y, Convert.ToSingle(dgv_Cords.SelectedRows[0].Cells[3].Value));
black.Close();
}
catch
{

}
}
05/03/2013 07:59 MoepMeep#6
Dein Code-Beispiel sieht ziemlich scheiße aus.

@SoNiice Enjoy your infra :>
05/03/2013 08:58 SwarN#7
ich weiß dass ist aus einem uralt Programm rauskopiert :),
aber ER wollte einfach "Codeschnipsel" :), da hat er sie und sie funktionieren :).
05/03/2013 16:36 ElDiabolus#8
Damit kann ich in der Tat nichts anfangen.
Wenn du "wert" genutzt hättest, könnte ich es vielleicht verstehen :S
05/14/2013 18:01 Prehistoric#9
Ich glaube er meinte das so, dass es für sein spiel (Napoleon Total War)
ist und nich für WoW..

z.B wie man dort Leben, Geld ect. machen kann
( Keine Ahnung was das fürn Spiel ist.. )
05/15/2013 11:23 SwarN#10
Da kommts doch nicht auf's Spiel drauf an, wenn er sagt er kann sich die Offset's mit CheatEngine holen, dann ist das doch ABSOLUT EGAL welches Spiel das ist.

Das Prinzip bleibt ab dann immer das gleiche....
aber was erwarte ich eigentlich von einem Bübchen der ein junges Mädl als Avatar hat --.-
05/19/2013 01:47 ElDiabolus#11
Wenn es doch nicht aufs Spiel ankommt, könnt ihr mir doch einfach nen Schnipsel geben, wo ich nur die Daten einfügen muss :D
05/19/2013 02:30 #SoNiice#12
Da lernst du aber nichts von, wir sind hier nicht bei Wünsch-Dir-Was, sondern lediglich hier, um dir zu helfen. Probier es doch einfach mal selbst und sag uns dann, wobei du Hilfe brauchst.
05/19/2013 17:16 ElDiabolus#13
Ich verstehe rein garnichts vom Memory Editing. Deshalb bruahc ich eine komplette Erklärung, weil ich die auf iwelchen Seiten nicht verstehe.
05/19/2013 18:37 #SoNiice#14
Es gibt sogar hier im Forum genug Tutorials dazu, du willst nämlich keine Erklärung, sondern einen kompletten Sourcecode mit dem du einfach nur die Pointer ersetzen musst - Wir sind hier aber nun mal nicht bei Wünsch-Dir-Was.

Lies dich in die Grundsätze von Memory Editing ein, mehr kann ich dir an dieser Stelle nicht empfehlen.
05/19/2013 21:59 ElDiabolus#15
Nur dass diese dann für VB, oder sonst irgend einen Käse sind, bzw. die hälfte fehlt, oder die Downloads defekt sind etc. etc.