PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (C#) - kurze Analyse des Codes



noobee
01.10.2017, 13:47
Moinmoin,

ich habe mir mittels IDA Pro folgenden Code aus einer exe decompilieren lassen:


public void Login()
{
try
{
string str2 = "";
if (!this.UsernameTextBox.Enabled & (this.UsernameTextBox.Text == "Ich bins"))
{
str2 = "CHEF";
}
Module1.connfilltbl("SELECT UserName,PassWord FROM loginData WHERE UCASE(UserName)='" + str2 + "'", "loginForm");
}
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
Exception exception = exception1;
MessageBox.Show(exception.Message, "False");
this.Close();
ProjectData.ClearProjectError();
}
if (Module1.DBS.Tables["loginForm"].Rows.Count != 0)
{
if (Operators.ConditionalCompareObjectEqual(Operators .ConcatenateObject("8", Module1.DBS.Tables["loginForm"].Rows[0]["PassWord"]), this.bntz_pw.Text.ToString(), false))
{
Module1.FrmHauptmenu.lblFlag.Text = "1";
this.Close();
}
else if (Operators.ConditionalCompareObjectEqual(Module1.D BS.Tables["loginForm"].Rows[0]["PassWord"], this.bntz_pw.Text.ToString(), false))
{
Module1.FrmHauptmenu.lblFlag.Text = "0";
this.Close();
}
else
{
MessageBox.Show("Eingabe Falsch! Bitte versuchen Sie noch ein mal!", "Warning", MessageBoxButtons.OKCancel);
this.bntz_pw.Text = "";
this.bntz_pw.Focus();
Module1.DBS.Tables["loginForm"].Clear();
}
Module1.FrmHauptmenu.Button4.Visible = false;
Module1.FrmHauptmenu.Button1.Visible = false;
}
else
{
MessageBox.Show("Eingabe Falsch! Bitte versuchen Sie noch ein mal!", "Warning", MessageBoxButtons.OKCancel);
this.bntz_pw.Text = "";
this.bntz_pw.Focus();
Module1.DBS.Tables["loginForm"].Clear();
}
try
{
Module1.NumTast.Close();
}
catch (Exception exception4)
{
ProjectData.SetProjectError(exception4);
Exception exception2 = exception4;
ProjectData.ClearProjectError();
}
try
{
}
catch (Exception exception5)
{
ProjectData.SetProjectError(exception5);
Exception exception3 = exception5;
ProjectData.ClearProjectError();
}
}


Verstehe ich das richtig, dass der Login nur funzt, wenn aus
bntz_pw ein String kommt, welcher konkateniert wird mit "8"? Das PW würde dann also so aussehen: "8meinpasswort" oder "8geheim"?

Nimbus
01.10.2017, 15:39
Hinweis: Habe es nur kurz überflogen. Daher keine Garantie auf Richtigkeit.

Deine Interpretation scheint soweit richtig zu sein. Es wird ein Passwort per SQL ausgelesen. Allerdings gibt es zwei Fälle. Einmal den beschriebenen in dem die "8" zusammen mit dem Passwort etwas auslöst und einmal den Fall in dem das Passwort aus der DB direkt genügt.
Beide Fälle unterscheiden sich dadurch, dass einmal Module1.FrmHauptmenu.lblFlag.Text auf 1 gesetzt wird und einmal auf 0.
Was genau eine 1 oder eine 0 an der Stelle bedeutet lässt sich mit dem vorliegenden Code nicht bestimmen.

noobee
01.10.2017, 17:12
Ok, sehr schön. Die von dir erwähnten Fälle
Einmal den beschriebenen in dem die "8" zusammen mit dem Passwort etwas auslöst und einmal den Fall in dem das Passwort aus der DB direkt genügt. treffen zu 100% zu. Genau das konnte ich bisher aus dem decompilierten/disassambilierten Code rauslesen. Je nach Eingabe des PW wird etwas unterschiedliches gestartet. Genau das versuche ich mittels decompilieren/disassamblieren heraus zu bekommen.

Jetzt hab ich aber erstmal "Gewissheit", dass ich beim Befehl CMP (Assabmler) nicht ganz so falsch lag ;)

Dankö

(bei Interesse und/oder Langeweile kann ich die exe zur Verfügung stellen)

Nimbus
01.10.2017, 17:26
Den Unterschied (im vorliegenden Code) hab ich ja schon beschrieben. Folglich müsstest du schauen was mit "lblFlag" passiert. Wenn du die EXE bereitstellst, dann kann ich dir womöglich mehr dazu erzählen :)

noobee
01.10.2017, 21:00
ok, ich poste die datei. wenn das hier verboten sein sollte, bitte löschen. dann schick ichs per PM

Nimbus
01.10.2017, 21:56
Als Hauptunterschied konnte ich folgendes Entdecken



if (this.lblFlag.Text == "0")
{
abrg.Button1.Visible = false;
abrg.ButtonTest1.Visible = false;
abrg.Solltextbox.Visible = false;
abrg.BtnOK.Text = "Beenden";
abrg.OffeneTageDataGrid.Enabled = true;
abrg.Button5.Visible = false;
abrg.Button4.Visible = false;
}
else if (this.lblFlag.Text == "1")
{
abrg.ElementenPanel.Visible = true;
}


Hier werden je nach Login unterschiedliche Buttons/Elemente sichtbar gemacht.
Außerdem ist kann jemand, der sich mit der 8 einloggt bei VorAbrg (vor Abrechnung?) auf die Funktionalität "DGV_Detail_CellClick" zugreifen, die wohl (so lässt es der Name vermuten) Zugriff auf weitere Details einer Zelle erlaubt.

noobee
01.10.2017, 22:37
Ah ok. Nach dem lblFlag hatte ich vorher nicht gesucht. Aber das, was du da erklärst ist genau das, was die exe so interessant macht ;) Es gibt eben Passwörter, mit denen man mehr, bzw. weniger sehen kann. Jetzt schau ich mir mal genauer an, welche(un)sichtbaren Elemente man mit den PW sehen kann.
Auf jeden Fall mal vielen Dank für die kurze Analyse. Den Rest fummel ich mir selber zusammen. Muss ja n bissi warm werden mit dem Thema "reverse engineering"... Da tut ein bisschen Übung nicht schlecht.

DANKE DANKE

Nimbus
01.10.2017, 23:04
Es gibt eben Passwörter, mit denen man mehr, bzw. weniger sehen kann
Ich bin mir nicht sicher, ob du das richtig verstanden hast. So wie ich das auffasse können alle Passwörter jeweils alles sehen. Das Passwort regulär eingegeben liefert die eine Ansicht bzw. die einen Rechte. Das Passwort mit einer 8 voran eingegeben liefert die andere Ansicht/anderen Rechte.