La fissuration application en C# avec OllyDebug
Je voudrais savoir si il existe un moyen de cracker application Windows en C# avec OllyDebug. J'ai simple mon propre CrackMe application écrite avec Visual C# 2010 Express. Quand je l'ouvre avec OllyDebug et modifier ASM code que j'ai besoin, il n'y a pas de "Copier l'exécutable" option dans OllyDebug depuis mon formulaire d'inscription fenêtre est allouée dynamiquement avec l'opérateur "new" (qui est, je crois, VirtualAlloc() appel de fonction dans le débogueur). Si je suis en mesure de modifier le code ASM (qui est tout simplement NOP require JE saute), je ne suis pas en mesure de sauver mon .exe fichier avec fissuré code, ressemble à OllyDbg "voit" le code dans le segment de données qui n'est pas en vigueur au lancement de l'application et seulement est allouée dynamiquement.
Quelqu'un peut m'aider avec le problème? Je pense que la modification *.exe devrait être possible avec au moins 2 approches:
1) Creuser plus profondément dans le code avec OllyDbg et trouver l'endroit où le code est tenue avant répartition (en raison de la nouvelle instance de RegistrationForm ne vient pas par magie de l'espace, n'est ce pas?)
2) Si elle permet la création rapide de la demande en VS Express et ne nécessite pas trop de code compliqué, utiliser les appels statiques chaque fois en cliquant sur "s'Inscrire", indique la même RegistrationForm fenêtre (qui aura lieu dans la section de code de l'application, et donc sera modifyable dans OllyDbg).
Il sera OK pour montrer comment réécrire le code et le garder simple pour allouer de la même instance de RegistrationForm (singleton?). La seule chose que j'ai besoin est de fissure&enregistrer *.exe, de relancer et de remplir toutes les données de "terminer l'inscription".
Voici le code de MyCrackMe classe avec une méthode main ():
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyCrackMe {
class MyCrackMe {
public static void Main() {
MyForm mainWindow = new MyForm();
System.Windows.Forms.Application.Run(mainWindow);
}
}
}
Principal de la classe de fenêtre:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyCrackMe {
public partial class MyForm : Form {
public MyForm() {
InitializeComponent();
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
Application.Exit();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
MessageBox.Show("All rights reserved", "Message");
}
private void registerToolStripMenuItem_Click(object sender, EventArgs e) {
RegistrationForm registrationForm = new RegistrationForm();
registrationForm.Show();
}
}
}
Formulaire d'inscription en classe:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace MyCrackMe {
public partial class RegistrationForm : Form {
//Use DllImport to import the Win32 MessageBox function.
[DllImport("user32.dll", EntryPoint = "MessageBoxA", CharSet = CharSet.Ansi)]
public static extern int MsgBox(int hWnd, String text, String caption, uint type);
public RegistrationForm() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
if (textBox1.Text == "lincoln" && textBox2.Text == "12345") {
MsgBox(0, "Registration completed successfully!", "Registration Message", 0);
} else {
MsgBox(0, "Registration failed", "Message", 0);
}
}
}
}
Ici est OllyDbg capture d'écran et le message qui vient lors de la définition de points d'arrêt
Je crois que la meilleure façon d'apprendre l'anti-fissure est de savoir comment craquer. Ce n'est que mon propre projet à des fins éducatives. J'ai même l'utiliser "user32.dll" l'importation et l'appel MsgBox API pour l'appel explicite dans OllyDbg ce qui le rend plus facile à casser, pensez-vous que quelqu'un allait le faire au lieu de MessageBox.Afficher("Bonjour le monde")? Je ne pense pas que les applications écrites par les développeurs professionnels sont fendillés facilement, comme le mien. Si le sujet est trop grand pour StackOverflow références à un tutoriel ou comment sera appréciée.
OriginalL'auteur t3rmin41 | 2014-06-24
Vous devez vous connecter pour publier un commentaire.
Mise à jour: dnSpy est probablement le plus approprié à cette fin.
.NET est utilisant IL bytecode, qui est compilé en natif instructions lorsque vous exécutez l'application, de sorte qu'il fonctionne dans le .NET VM, similaire à java. Ce que vous pourriez faire maintenant avec olly est déboguer le cadre lui-même, pas votre JIT généré du code natif. (que vous voulez Si je vous comprends bien). Enregistrement en boucle .NET application n'est pas disponible dans olly autant que je sache. Cependant, il existe d'autres solutions pour manipuler et observer le code MSIL.
Aussi PEBrowse pouvez déboguer le JIT généré du code machine natif de trop!
Vous pourriez aussi être intéressé par ces articles:
Inverse code de l'ingénierie de .NET applications par Shukhrat Nekbaev
OWASP .NET de débogage
dotNET
Réécrire MSIL à la Volée sur MSDN
.NET Internes et Natif de la Compilation
Stackexchange réseau dispose d'un site dédié pour l'ingénierie inverse, veuillez vous joindre à nous: Il n'y a peut être un réponse déjà pour ta question là-bas.
Petite note C++ n'est pas traduit à l'IL. C++/CLI a des pièces qui ne mais juste C++ ne prend pas.
OK, une autre question: à quel moment .NET application (disons, écrits avec le C#) est traduit en code natif (par des "indigènes", je veux dire ici ASM code qui est observé dans OllyDbg)? Est-il un code natif .NET application qui peut être démonté et modifiés par le faible niveau de débogueur (pas par IlSpy, ildasm et les autres "de haut niveau" débogueur)? Suis-je en train d'essayer l'impossible - de modifier l'application au code de bas niveau qui est seulement traduit de bas niveau (par Dll Windows) lors du chargement de l'application dans la mémoire et non pas dans .exe lui-même?
Il est traduit en code natif au moment de l'exécution (JIT) par l'EE (moteur d'exécution). Il n'y a pas de code natif dans le binaire compilé. Maintenant que où la qui a généré le code natif est trouvé, je ne sais pas, je'ld suppose qu'il apparaîtra dans la mémoire quelque part, puis disparaître quand il a obtenu hors de portée.
de ce que j'ai essayé et cherché sur google, semble votre déclaration "Il n'y a pas de code natif dans le binaire compilé" est correct. Merci pour tous les renseignements fournis, je vais avoir besoin de temps pour regarder à travers les articles et essayer PEBrowser.
OriginalL'auteur Dominik Antal
Que je me souviens il y a patch option disponibles dans ce logiciel.
vous devez activer le patch de la fonction.
J'espère que ça va marcher maintenant.
Je suis en train de travailler sur la même chose
OriginalL'auteur Rupali Raut