Frage

Einleitung

Nachdem dieses Video von LIDNUG beobachten, über .NET-Code-Schutz http://secureteam.net/lidnug_recording /Untitled.swf (insbesondere von 46:30 bis 57:30), würde ich den Anruf an eine MessageBox.Show in einem EXE-I zu finden, erstellt.

Die einzige Logik in meinem "TrialApp.exe" ist:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        MessageBox.Show("This is trial app");
    }
}

Zusammengestellt auf der Release-Konfiguration: http://rapidshare.com/files/392503054 /TrialApp.exe.html

Was ich den Anruf

lokalisieren

Führen Sie die Anwendung in WinDBG und Pause nach dem Meldungsfeld angezeigt wird.

Holen Sie sich den CLR-Stack mit !clrstack:

0040e840 5e21350b [InlinedCallFrame: 0040e840] System.Windows.Forms.SafeNativeMethods.MessageBox(System.Runtime.InteropServices.HandleRef, System.String, System.String, Int32)
0040e894 5e21350b System.Windows.Forms.MessageBox.ShowCore(System.Windows.Forms.IWin32Window, System.String, System.String, System.Windows.Forms.MessageBoxButtons, System.Windows.Forms.MessageBoxIcon, System.Windows.Forms.MessageBoxDefaultButton, System.Windows.Forms.MessageBoxOptions, Boolean)
0040e898 002701f0 [InlinedCallFrame: 0040e898] 
0040e934 002701f0 TrialApp.Form1.Form1_Load(System.Object, System.EventArgs)

Holen Sie sich die MethodDesc Struktur (mit der Adresse von Form1_Load) !ip2md 002701f0

MethodDesc:   001762f8
Method Name:  TrialApp.Form1.Form1_Load(System.Object, System.EventArgs)
Class:        00171678
MethodTable:  00176354
mdToken:      06000005
Module:       00172e9c
IsJitted:     yes
CodeAddr:     002701d0
Transparency: Critical
Source file:  D:\temp\TrialApp\TrialApp\Form1.cs @ 22

Dump die IL dieser Methode (durch MethodDesc) !dumpil 001762f8

IL_0000: ldstr "This is trial app"
IL_0005: call System.Windows.Forms.MessageBox::Show 
IL_000a: pop 
IL_000b: ret 

So, wie das Video erwähnt, der Aufruf zu Show 5 Bytes vom Beginn der Verfahren Umsetzung.

I CFFExplorer Öffnen Sie nun (wie im Video) und die RVA der Methode Form1_Load erhalten. 00002083

Danach gehe ich in Address Converter (wieder in CFF Explorer) und navigate 00002083 zu kompensieren. Dort haben wir:

32 72 01 00 00 70 28 16 00 00 0A 26 2A 7A 03 2C
13 02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04 
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02

In dem Video wird erwähnt, dass die ersten 12 Bytes für die Methode Header sind, damit ich sie überspringen

                                    2A 7A 03 2C
13 02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04 
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02

5 Bytes vom Beginn der Umsetzung sollte der Opcode für Methodenaufruf sein (28). Leider ist nicht da.

   02 7B 02 00 00 04 2C 0B 02 7B 02 00 00 04 6F
17 00 00 0A 02 03 28 18 00 00 0A 2A 00 03 30 04 
00 67 00 00 00 00 00 00 00 02 28 19 00 00 0A 02

Fragen:

  1. Was mache ich falsch?
  2. Warum gibt es keinen Methodenaufruf an dieser Position in der Datei? Oder vielleicht das Video fehlt einige Informationen ...
  3. Warum der Mann in dem Video den Anruf mit 9 Nullen ersetzt?
War es hilfreich?

Lösung

Als ich Ildasm.exe und Blick auf die IL verwenden mit anzeigen Bytes eingeschaltet ich sehen:

.method private hidebysig instance void  Form1_Load(object sender,
                                                    class [mscorlib]System.EventArgs e) cil managed
// SIG: 20 02 01 1C 12 15
{
  // Method begins at RVA 0x20f1
  // Code size       12 (0xc)
  .maxstack  8
  IL_0000:  /* 72   | (70)00000D       */ ldstr      "This is trial app"
  IL_0005:  /* 28   | (0A)00001E       */ call       valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string)
  IL_000a:  /* 26   |                  */ pop
  IL_000b:  /* 2A   |                  */ ret
} // end of method Form1::Form1_Load

Die Tokenwerte in Ihrer Dump sind nicht das gleiche, Sie scheinen ein viel größeres Programm zu haben. Aber die IL in Ihrer Dump beginnt bei 1 versetzt, nicht 12 nicht sicher, warum es ausgeschaltet ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top