تحدي .Net من نوع جديد - [Write A DeObfuscator]

تم تحميل الصفحة في 1,3991706 ثانية
تحدي .Net من نوع جديد - [Write A DeObfuscator]

hakouabs

Active DeveloPer
rankrankrank
إنضم
24 أبريل 2014
المشاركات
891
الإعجابات
1,075
النقاط
93
الإقامة
nothing
كود C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using System.IO;
namespace DeApp
{
    class Program
    {
        static List<int> ints = new List<int>();
        static Dictionary<double, string> MyDictionary = new Dictionary<double, string>();
        static void Main(string[] args)
        {
         
            var DeobMe = @"C:\DeobMe.exe";
            var module = ModuleDefMD.Load(DeobMe);
            var types = module.GetTypes();
           

            foreach(var type in types)
            {
                if (!type.HasFields)
                      continue;
                // Get value field 
                #region
                var ctor =  type.FindDefaultConstructor();
                foreach(var ils_ctor in ctor.Body.Instructions)
                {
                      if (!ils_ctor.IsLdcI4())
                               continue;
                    ints.Add(ils_ctor.GetLdcI4Value());
                }
                #endregion
                foreach (var method in type.Methods)
                {
                    if (!method.HasBody)
                        continue;
                    // Get value for Dictionary  
                    #region
                    if (method.IsPublic && !method.HasReturnType)
                    {
                        if (method.IsSpecialName || method.IsRuntimeSpecialName)
                            continue;            

                        double num = default(double);
                        string str = string.Empty;
                        foreach (var ils in method.Body.Instructions)
                        { 
                            if (ils.OpCode == OpCodes.Ldc_R8)
                                num = (double)ils.Operand;
                            if (ils.OpCode != OpCodes.Ldstr)
                                      continue;
                               str = ils.Operand as string;
                               MyDictionary.Add(num, str);
                        }
                     
                    }
                    #endregion
                   
                }              
                  // String Decrypter 
                foreach (var method in type.Methods) { 
                    var _ils = method.Body.Instructions;

                    for(int i = 0; i < _ils.Count; i++)
                    {
                        if (_ils[i].OpCode == OpCodes.Callvirt && _ils[i + 1].OpCode == OpCodes.Call)
                        {
                            var MD = _ils[i + 1].Operand as MethodDef;
                            if (!MD.IsStatic && !MD.IsPublic)
                                continue;
                            if (!MD.HasParamDefs && !MD.HasReturnType)
                                continue;
                            if (MD.ParamDefs.Count != 1 && MD.ParamDefs[1].ElementType != ElementType.String)
                                continue;
                            int val = (int)_ils[i - 15].GetLdcI4Value();
                            string strop = BTS(MyDictionary[value(val)]);
                            _ils[i + 1].OpCode = OpCodes.Ldstr;
                            _ils[i + 1].Operand = strop;
                            for (int numero = i; numero > i - 18; numero--)
                                _ils[numero].OpCode = OpCodes.Nop;
                        }
                    }
                }
               
            }
            module.Write(@"C:\Users\hakouabs\Desktop\55.exe");

        }

        static double value(int param)
        {
            return (Math.Pow((double)Math.Abs(param), (double)ints[0]) + (double)ints[1]) * (double)ints[2] ;
        }
        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}



source file
DeApp تحميل ● مركز رفع ملفات نقطة التطوير [ Dev-Point ]
 
إنضم
20 ديسمبر 2013
المشاركات
1,876
الإعجابات
4,209
النقاط
113
الإقامة
المغرب
كود C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using System.IO;
namespace DeApp
{
    class Program
    {
        static List<int> ints = new List<int>();
        static Dictionary<double, string> MyDictionary = new Dictionary<double, string>();
        static void Main(string[] args)
        {
        
            var DeobMe = @"C:\DeobMe.exe";
            var module = ModuleDefMD.Load(DeobMe);
            var types = module.GetTypes();
          

            foreach(var type in types)
            {
                if (!type.HasFields)
                      continue;
                // Get value field
                #region
                var ctor =  type.FindDefaultConstructor();
                foreach(var ils_ctor in ctor.Body.Instructions)
                {
                      if (!ils_ctor.IsLdcI4())
                               continue;
                    ints.Add(ils_ctor.GetLdcI4Value());
                }
                #endregion
                foreach (var method in type.Methods)
                {
                    if (!method.HasBody)
                        continue;
                    // Get value for Dictionary 
                    #region
                    if (method.IsPublic && !method.HasReturnType)
                    {
                        if (method.IsSpecialName || method.IsRuntimeSpecialName)
                            continue;           

                        double num = default(double);
                        string str = string.Empty;
                        foreach (var ils in method.Body.Instructions)
                        {
                            if (ils.OpCode == OpCodes.Ldc_R8)
                                num = (double)ils.Operand;
                            if (ils.OpCode != OpCodes.Ldstr)
                                      continue;
                               str = ils.Operand as string;
                               MyDictionary.Add(num, str);
                        }
                    
                    }
                    #endregion
                  
                }             
                  // String Decrypter
                foreach (var method in type.Methods) {
                    var _ils = method.Body.Instructions;

                    for(int i = 0; i < _ils.Count; i++)
                    {
                        if (_ils[i].OpCode == OpCodes.Callvirt && _ils[i + 1].OpCode == OpCodes.Call)
                        {
                            var MD = _ils[i + 1].Operand as MethodDef;
                            if (!MD.IsStatic && !MD.IsPublic)
                                continue;
                            if (!MD.HasParamDefs && !MD.HasReturnType)
                                continue;
                            if (MD.ParamDefs.Count != 1 && MD.ParamDefs[1].ElementType != ElementType.String)
                                continue;
                            int val = (int)_ils[i - 15].GetLdcI4Value();
                            string strop = BTS(MyDictionary[value(val)]);
                            _ils[i + 1].OpCode = OpCodes.Ldstr;
                            _ils[i + 1].Operand = strop;
                            for (int numero = i; numero > i - 18; numero--)
                                _ils[numero].OpCode = OpCodes.Nop;
                        }
                    }
                }
              
            }
            module.Write(@"C:\Users\hakouabs\Desktop\55.exe");

        }

        static double value(int param)
        {
            return (Math.Pow((double)Math.Abs(param), (double)ints[0]) + (double)ints[1]) * (double)ints[2] ;
        }
        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}



source file
DeApp تحميل ● مركز رفع ملفات نقطة التطوير [ Dev-Point ]
عمل ممتاز جدا و شيء رائع فعلا..

تمٌت التجربة بنجاح !

أنت بَرَكتنا إذن :15:

جاري تحليل الكود و الاستفادة منه :210:
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
كود C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using System.IO;
namespace DeApp
{
    class Program
    {
        static List<int> ints = new List<int>();
        static Dictionary<double, string> MyDictionary = new Dictionary<double, string>();
        static void Main(string[] args)
        {
       
            var DeobMe = @"C:\DeobMe.exe";
            var module = ModuleDefMD.Load(DeobMe);
            var types = module.GetTypes();
         

            foreach(var type in types)
            {
                if (!type.HasFields)
                      continue;
                // Get value field
                #region
                var ctor =  type.FindDefaultConstructor();
                foreach(var ils_ctor in ctor.Body.Instructions)
                {
                      if (!ils_ctor.IsLdcI4())
                               continue;
                    ints.Add(ils_ctor.GetLdcI4Value());
                }
                #endregion
                foreach (var method in type.Methods)
                {
                    if (!method.HasBody)
                        continue;
                    // Get value for Dictionary
                    #region
                    if (method.IsPublic && !method.HasReturnType)
                    {
                        if (method.IsSpecialName || method.IsRuntimeSpecialName)
                            continue;          

                        double num = default(double);
                        string str = string.Empty;
                        foreach (var ils in method.Body.Instructions)
                        {
                            if (ils.OpCode == OpCodes.Ldc_R8)
                                num = (double)ils.Operand;
                            if (ils.OpCode != OpCodes.Ldstr)
                                      continue;
                               str = ils.Operand as string;
                               MyDictionary.Add(num, str);
                        }
                   
                    }
                    #endregion
                 
                }            
                  // String Decrypter
                foreach (var method in type.Methods) {
                    var _ils = method.Body.Instructions;

                    for(int i = 0; i < _ils.Count; i++)
                    {
                        if (_ils[i].OpCode == OpCodes.Callvirt && _ils[i + 1].OpCode == OpCodes.Call)
                        {
                            var MD = _ils[i + 1].Operand as MethodDef;
                            if (!MD.IsStatic && !MD.IsPublic)
                                continue;
                            if (!MD.HasParamDefs && !MD.HasReturnType)
                                continue;
                            if (MD.ParamDefs.Count != 1 && MD.ParamDefs[1].ElementType != ElementType.String)
                                continue;
                            int val = (int)_ils[i - 15].GetLdcI4Value();
                            string strop = BTS(MyDictionary[value(val)]);
                            _ils[i + 1].OpCode = OpCodes.Ldstr;
                            _ils[i + 1].Operand = strop;
                            for (int numero = i; numero > i - 18; numero--)
                                _ils[numero].OpCode = OpCodes.Nop;
                        }
                    }
                }
             
            }
            module.Write(@"C:\Users\hakouabs\Desktop\55.exe");

        }

        static double value(int param)
        {
            return (Math.Pow((double)Math.Abs(param), (double)ints[0]) + (double)ints[1]) * (double)ints[2] ;
        }
        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}



source file
DeApp تحميل ● مركز رفع ملفات نقطة التطوير [ Dev-Point ]
رائع جداً :42: .. حلك مذهل جداً :42: .. حقيقة كنت أنتظر تواجدك في التحدي أيضاً :42:

بارك الله فيك .. وإن كان بالإمكان وضع شرح بسيط .. أو تعليقات داخل الكود لتتضح الرؤية للأعضاء

:42:
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
أهلا بالغالي Qassam Sniper و عاش من شافك..

التحدٌي بالنسبة لمعرفتي القليلة بالدوت نت و لأنني لا أتعامل معها إلا نادرا ليس بالسهل..
و ما ذكره أخي
SyRiAn KaSp3r أتفق معه تماما، لأن الموضوع ليس أن هناك ميثود يحتوي على سترينغ مشفر و ينبغي فكٌ تشفيره،
و إنما هناك استدعاءات أيضا ينبغي معالجتها..
ليست لديٌ دراية في هذا الأمر، و هذه فرصة نتعلٌم..

الأخ الغالي
smart24 فعلا خسارة كبيرة، لأنني مؤخرا فقط بدأت أهتمٌ بالدوت نت و لو كان موجودا لأفادني كثيرا كثيرا مع الأسف..
و سيظل أكفأ كراكر قابلته إلى حدٌ الساعة، إمكانياته عجيبة !


أنت بركتنا في الدوت نت الآن أخي Qassam Sniper، و علٌنا نستفيد منك فلا تبخل علينا لأنني أعرف قدرك في هذا جيدا ..

أتمنٌى لك كل التوفيق
حياك الله أخي الغالي أبو اسراء .. التعامل مع تطبيقات الـ .Net يلزمها معرفة جيدة بتعليمات MSIL .. وحالياً لا أزال في بداية الطريقة .. يستلزم دراسة معمقة لهذا الموضوع :15:

:42:
 
إنضم
20 ديسمبر 2013
المشاركات
1,876
الإعجابات
4,209
النقاط
113
الإقامة
المغرب
حياك الله أخي الغالي أبو اسراء .. التعامل مع تطبيقات الـ .Net يلزمها معرفة جيدة بتعليمات MSIL .. وحالياً لا أزال في بداية الطريقة .. يستلزم دراسة معمقة لهذا الموضوع :15:

:42:
أهلا بك يا غالي و سعيد جدا بتواجدك بالقسم بعد غياب طويل :1 (226):

أنا كلما أبدأ في قراءة كتاب حول الموضوع بجدية و أستغرق فيه بعض الصفحات تأتي مناسبة تُشغلني حتى أنسى كل ما قرأته :222:

و الله مشكلتي المشاغل اليومية التي لا تنتهي، مع أني أحب أن أتعلٌم..

و كذلك، أنشغل في تلبية طلبات بعض الإخوة تقريبا بشكل يومي ممٌا يلهيني عن التعلٌم و التعمٌق في بعض الأمور..

يعني ما عندي من إمكانيات هي فقط ما كان عندي قبل سنوات، لا أحرز تقدٌما إلا بشكل بطيء جدا ..

لكن، و الله شيء مفرح عندما أرى قدرات مثل التي لديك و لدى الأخ hakouabs

أريد أن أبلغ ما بلغتماه لو يسمح الوقت بذلك..

أما أنت فماشاء الله عليك عبقري بلا شكٌ و أكثر ما يعجبني فيك إتقانك لكل ما تقوم به لأنٌ لك إحاطة حتى بأصغر التفاصيل..

كل الشكر لكم :32:
 
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
حل قوي من الأخ الله يعطيه العافية ،
بس يا ريت شوية كومنت للكود و خاصة ال li
لجلب قيم الميثود و استبدالها

و شكرا على التحدي تعلمت فيه شغلات جديدة
و ان شاء الله نشوف مثيلاته قريبا
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
هل تم الحل :(
اذا لم يتم سوف ابدا في حلهه :3
نعم أخي تم الحل .. لكن يسعدنا جداً مشاركتنا بحلك لنستفيد منه .. لأني أعلم أن خبرتك رائعة في هذا المجال

:42:
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
وللفائدة هذا حلي للتحدي .. وننتظر مشاركة الأخ @Nojdar Mziri لاثراء الموضوع

هذا المشروع المستخدم

DeobFuscator | تحميل

وهذا الكود لمن يود قرائته


كود C#
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.Collections;

using dnlib;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using dnlib.DotNet.Writer;

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

        Dictionary<double, string> MyDictionary = new Dictionary<double, string>();
        List<int> ConstList = new List<int>();

        private void button1_Click(object sender, EventArgs e)
        {
            // تحميل الملف الذي نريد إجراء التعديل عليه
            ModuleDefMD Target = ModuleDefMD.Load(@"C:\DeobMe.exe");

            // إضافة الثوابت والنصوص المشفرة وتخزينا في المتغيرات
            LoadDictionaryAndConstants(ref MyDictionary, ref ConstList, Target);

            // المرور على جميع الفئات التي تحتوي على
            // Methods
            foreach (TypeDef Type in Target.Types.Where(t => t.HasMethods))
            {
                    // المرور على جميع الـ
                    // Methods
                    //  التي تحتوي على
                    // Instructios
                    foreach (MethodDef Method in Type.Methods.Where(m => m.HasBody))
                    {
                            // متغير من نوع
                            // List
                            // لإضافة التعليمات التي نريد حذفها فيما بعد
                            // أو يمكنك تغيير التعليمات التي لا نريدها إلى تعليمة
                            // Nop
                            List<Instruction> Instr = new List<Instruction>();

                            // المرور على جميع الـ
                            // Instructions
                            // للتحقق من تحقق الشرط وإضافة التعديلات التي نريدها
                            for (int i = 0; i < Method.Body.Instructions.Count - 1; i++)
                            {
                                if (Method.Body.Instructions[i].IsLdarg() == true && Method.Body.Instructions[i + 1].OpCode == OpCodes.Ldfld && Method.Body.Instructions[i + 1].Operand.ToString().Contains("Dictionary"))
                                {
                                    Method.Body.Instructions[i] = OpCodes.Ldstr.ToInstruction(BTS(MyDictionary[((Math.Pow(Math.Abs(Method.Body.Instructions[i + 2].GetLdcI4Value()), ConstList[0])) + ConstList[1]) * ConstList[2]]));                                 
                                    for (int x =1 ; x<=18 ;x++)
                                    {
                                        Instr.Add(Method.Body.Instructions[i + x]);
                                    }
                                }
                            }                         
                          
                            // حذف التعليمات التي لا نريدها
                            foreach (Instruction instr in Instr)
                            {
                                Method.Body.Instructions.Remove(instr);
                            }
                    }
            }         
            Target.Write(@"C:\DeobMe_StringDeob.exe");
        }

        // دالة لجلب محتويات الـ
        //Dictionary
        // وقيم الثوابت
        public void LoadDictionaryAndConstants(ref Dictionary<double, string> Dictionary1, ref List<int> List1, ModuleDefMD Target)
        {
            Dictionary1.Clear();
            List1.Clear();
            foreach (TypeDef Type in Target.Types.Where(t => t.HasMethods))
            {
                    foreach (MethodDef Method in Type.Methods.Where(m => m.HasBody))
                    {
                            for (int i = 0; i < Method.Body.Instructions.Count - 1; i++)
                            {
                                if (Method.Body.Instructions[i].OpCode == OpCodes.Ldc_R8 &&
                                   Method.Body.Instructions[i + 1].OpCode == OpCodes.Ldstr)
                                {
                                    Dictionary1.Add(Convert.ToDouble(Method.Body.Instructions[i].Operand), Convert.ToString(Method.Body.Instructions[i + 1].Operand));
                                }
                                if (Method.Body.Instructions[i].IsLdcI4() == true &&
                                   Method.Body.Instructions[i + 1].OpCode == OpCodes.Stfld && Method.IsConstructor == true)
                                {
                                    List1.Add(Method.Body.Instructions[i].GetLdcI4Value());
                                }
                            } 
                    }
            }
        }

        public static string BTS(string s)
        {
            return System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
  
    }
}
 
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
الكود للاطلاع :
كود C++
public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }

        public void Debf(AssemblyDefinition asmDef)
        {
            // المرور على جميع المودوالز
            foreach (ModuleDefinition moduleDefMD in asmDef.Modules)
            {
                foreach (TypeDefinition typeDef in moduleDefMD.Types)
                {
                    bool hasMethods = typeDef.HasMethods;
                    if (hasMethods)
                    {
                        foreach (MethodDefinition methodDef in typeDef.Methods)
                        {
                            // جلب القيم من ال Dicitonary 
                            for (int x = 0; x < methodDef.Body.Instructions.Count; x++)
                            {
                                richTextBox1.Text = "Getting Values... Please wait \n";
                                if (methodDef.Body.Instructions[x].ToString().Contains("Dictionary"))
                                {
                                    if (methodDef.Body.Instructions[x].Previous.OpCode == OpCodes.Ldstr)
                                    {
                                        // فك القيم في الديكشنري و تخزينها مجدداً مشان يكون الفك كامل ولا يبقى شيء غامض
                                        methodDef.Body.Instructions[x].Previous.Operand = BTS(methodDef.Body.Instructions[x].Previous.Operand.ToString());
                                        values.Add(methodDef.Body.Instructions[x].Previous.Operand.ToString()); // فك القيم و تخزينها في ليست لاستدعئها لاحقاً
                                    }

                                }
                            }
                        }
                        richTextBox1.Text += "Getting Values... Done ! \n";
                        int kasper = 0;
                        foreach (var method in typeDef.Methods)
                        {
                            for (int i = 0; i < method.Body.Instructions.Count; i++)
                            {
                               
                                if (method.Body.Instructions[i].OpCode == OpCodes.Callvirt && method.Body.Instructions[i + 1].OpCode == OpCodes.Call)
                                {
                                    var MD = method.Body.Instructions[i + 1].Operand as MethodDefinition;
                                    if (!MD.IsStatic && !MD.IsPublic)
                                        continue;
                                    // تعويض القيم مكان الميثودز و حذف الميثود
                                    method.Body.Instructions[i + 1].OpCode = OpCodes.Ldstr;
                                    method.Body.Instructions[i + 1].Operand = values[kasper];
                                    kasper++;
                                    for (int y = i; y > i - 18; y--)
                                        method.Body.Instructions[y].OpCode = OpCodes.Nop;                               }
                            }
                            richTextBox1.Text += "Renaming Strings.... \n";
                        }
                        richTextBox1.Text += "Renaming Strings.... Done ! \n";

                    }
                }
            }

            try
            {
                // حفظ الملف الناتج
                asmDef.Write(@"C:\Users\Kaj\Desktop\test2.exe");
                richTextBox1.Text += "File Saved Successfully \n";
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }

        }
 
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
ما شاء الله تهافتت الحلول يعطيكم العافية ,
اختلفت الطرق و النتيجة جميلة ,
نسيت حذف الميثودز الزائدة بعد فك النصوص , بالامكان حذف دالة تحويل القيم من base64
و حذف ال Dictionary كامل ,

فقط تمرير الاسماء من خلال loop لل AssemblyDefinition
AssemblyDefination.MainModule.Types.Remove("",DeclareType);
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
الكود للاطلاع :
كود C++
public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }

        public void Debf(AssemblyDefinition asmDef)
        {
            // المرور على جميع المودوالز
            foreach (ModuleDefinition moduleDefMD in asmDef.Modules)
            {
                foreach (TypeDefinition typeDef in moduleDefMD.Types)
                {
                    bool hasMethods = typeDef.HasMethods;
                    if (hasMethods)
                    {
                        foreach (MethodDefinition methodDef in typeDef.Methods)
                        {
                            // جلب القيم من ال Dicitonary
                            for (int x = 0; x < methodDef.Body.Instructions.Count; x++)
                            {
                                richTextBox1.Text = "Getting Values... Please wait \n";
                                if (methodDef.Body.Instructions[x].ToString().Contains("Dictionary"))
                                {
                                    if (methodDef.Body.Instructions[x].Previous.OpCode == OpCodes.Ldstr)
                                    {
                                        // فك القيم في الديكشنري و تخزينها مجدداً مشان يكون الفك كامل ولا يبقى شيء غامض
                                        methodDef.Body.Instructions[x].Previous.Operand = BTS(methodDef.Body.Instructions[x].Previous.Operand.ToString());
                                        values.Add(methodDef.Body.Instructions[x].Previous.Operand.ToString()); // فك القيم و تخزينها في ليست لاستدعئها لاحقاً
                                    }

                                }
                            }
                        }
                        richTextBox1.Text += "Getting Values... Done ! \n";
                        int kasper = 0;
                        foreach (var method in typeDef.Methods)
                        {
                            for (int i = 0; i < method.Body.Instructions.Count; i++)
                            {
                             
                                if (method.Body.Instructions[i].OpCode == OpCodes.Callvirt && method.Body.Instructions[i + 1].OpCode == OpCodes.Call)
                                {
                                    var MD = method.Body.Instructions[i + 1].Operand as MethodDefinition;
                                    if (!MD.IsStatic && !MD.IsPublic)
                                        continue;
                                    // تعويض القيم مكان الميثودز و حذف الميثود
                                    method.Body.Instructions[i + 1].OpCode = OpCodes.Ldstr;
                                    method.Body.Instructions[i + 1].Operand = values[kasper];
                                    kasper++;
                                    for (int y = i; y > i - 18; y--)
                                        method.Body.Instructions[y].OpCode = OpCodes.Nop;                               }
                            }
                            richTextBox1.Text += "Renaming Strings.... \n";
                        }
                        richTextBox1.Text += "Renaming Strings.... Done ! \n";

                    }
                }
            }

            try
            {
                // حفظ الملف الناتج
                asmDef.Write(@"C:\Users\Kaj\Desktop\test2.exe");
                richTextBox1.Text += "File Saved Successfully \n";
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }

        }

ما شاء الله حلك رائع أخي .. ويقوم بالمطلوب .. الله يعطيك العافية

:42:
 
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
ما شاء الله حلك رائع أخي .. ويقوم بالمطلوب

:42:
شكراً لاطراءك اخي قسام ,
ما انا الا تلميذ عزيزي بارك الله فيك على التحدي الجميل ,
فعلاً تعلمت الكثير منه رغم اني اول مرة استخدم هذه المكتبات , لكن بفضل الله ثم فضلكم اضفت بعض المعلومات الجديدة للقليل الي املكه ,

بارك الله فيك
 
إنضم
3 أبريل 2017
المشاركات
68
الإعجابات
77
النقاط
18
بما انهو الأخ حل التحدي بالمكتبة Dnlib
هذا الحل بلمكتبة Mono :)
كود:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mono.Cecil;
using Mono.Cecil.Cil;

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

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        ModuleDefinition asm;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog o = new OpenFileDialog();
            if (o.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = o.FileName;
                asm = ModuleDefinition.ReadModule(o.FileName);
            }
        }
        List<string> lst = new List<string>();
        private void button2_Click(object sender, EventArgs e)
        {
            DeobfIT(asm);
            asm.Write(textBox1.Text.Replace(".exe", "-Deobfstrings.exe"));
        }
        void DeobfIT(ModuleDefinition md)
        {
            foreach(var ty in md.Types)
            {
                //get list first
                foreach (var meth in ty.Methods)
                {
                    if (meth.Name.ToString() == "StringsDictionary")
                    {
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Ldstr)
                            {
                                lst.Add(meth.Body.Instructions[i].Operand.ToString());
                                MessageBox.Show(meth.Body.Instructions[i].Operand.ToString());
                            }
                        }
                    }
                }
                //dobf string
                foreach (var meth in ty.Methods)
                {

                    if (meth.Name.ToString() == "button1_Click")
                    {
                        int res = 0;
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            MethodReference call = md.Import(typeof(Math).GetMethod("Abs", new Type[] { typeof(Int32) }));
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Call)
                            {
                                if (meth.Body.Instructions[i].Operand.ToString().Contains("Abs"))
                                {
                                    MessageBox.Show("aa");
                                    meth.Body.Instructions[i] = Instruction.Create(OpCodes.Ldstr, BTS(lst[res]));
                                    meth.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 2].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 3].OpCode = OpCodes.Nop;

                                    for (int ia = 1; ia < 15; ia++)
                                    {
                                        meth.Body.Instructions[i + ia].OpCode = OpCodes.Nop;
                                    }
                                    res++;
                                }
                               
                            }
                        }
                    }

                }
               
            }
        }
        double value(int ii)
        {
            return (Math.Pow((double)Math.Abs(ii), (double)2) + (double)1) * (double)5;
        }

        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}
 
إنضم
3 أبريل 2017
المشاركات
68
الإعجابات
77
النقاط
18
بما انهو الأخ حل التحدي بالمكتبة Dnlib
هذا الحل بلمكتبة Mono :)
كود:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mono.Cecil;
using Mono.Cecil.Cil;

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

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        ModuleDefinition asm;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog o = new OpenFileDialog();
            if (o.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = o.FileName;
                asm = ModuleDefinition.ReadModule(o.FileName);
            }
        }
        List<string> lst = new List<string>();
        private void button2_Click(object sender, EventArgs e)
        {
            DeobfIT(asm);
            asm.Write(textBox1.Text.Replace(".exe", "-Deobfstrings.exe"));
        }
        void DeobfIT(ModuleDefinition md)
        {
            foreach(var ty in md.Types)
            {
                //get list first
                foreach (var meth in ty.Methods)
                {
                    if (meth.Name.ToString() == "StringsDictionary")
                    {
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Ldstr)
                            {
                                lst.Add(meth.Body.Instructions[i].Operand.ToString());
                                MessageBox.Show(meth.Body.Instructions[i].Operand.ToString());
                            }
                        }
                    }
                }
                //dobf string
                foreach (var meth in ty.Methods)
                {

                    if (meth.Name.ToString() == "button1_Click")
                    {
                        int res = 0;
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            MethodReference call = md.Import(typeof(Math).GetMethod("Abs", new Type[] { typeof(Int32) }));
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Call)
                            {
                                if (meth.Body.Instructions[i].Operand.ToString().Contains("Abs"))
                                {
                                    MessageBox.Show("aa");
                                    meth.Body.Instructions[i] = Instruction.Create(OpCodes.Ldstr, BTS(lst[res]));
                                    meth.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 2].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 3].OpCode = OpCodes.Nop;

                                    for (int ia = 1; ia < 15; ia++)
                                    {
                                        meth.Body.Instructions[i + ia].OpCode = OpCodes.Nop;
                                    }
                                    res++;
                                }
                              
                            }
                        }
                    }

                }
              
            }
        }
        double value(int ii)
        {
            return (Math.Pow((double)Math.Abs(ii), (double)2) + (double)1) * (double)5;
        }

        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}
الحل مالتي يفيد تعليم المبتدئ :p
 
إنضم
30 يونيو 2014
المشاركات
2,340
الإعجابات
5,313
النقاط
113
الإقامة
فلسطين العزة
بما انهو الأخ حل التحدي بالمكتبة Dnlib
هذا الحل بلمكتبة Mono :)
كود:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Mono.Cecil;
using Mono.Cecil.Cil;

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

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
        ModuleDefinition asm;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog o = new OpenFileDialog();
            if (o.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = o.FileName;
                asm = ModuleDefinition.ReadModule(o.FileName);
            }
        }
        List<string> lst = new List<string>();
        private void button2_Click(object sender, EventArgs e)
        {
            DeobfIT(asm);
            asm.Write(textBox1.Text.Replace(".exe", "-Deobfstrings.exe"));
        }
        void DeobfIT(ModuleDefinition md)
        {
            foreach(var ty in md.Types)
            {
                //get list first
                foreach (var meth in ty.Methods)
                {
                    if (meth.Name.ToString() == "StringsDictionary")
                    {
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Ldstr)
                            {
                                lst.Add(meth.Body.Instructions[i].Operand.ToString());
                                MessageBox.Show(meth.Body.Instructions[i].Operand.ToString());
                            }
                        }
                    }
                }
                //dobf string
                foreach (var meth in ty.Methods)
                {

                    if (meth.Name.ToString() == "button1_Click")
                    {
                        int res = 0;
                        for (int i = 0; i < meth.Body.Instructions.Count; i++)
                        {
                            MethodReference call = md.Import(typeof(Math).GetMethod("Abs", new Type[] { typeof(Int32) }));
                            if (meth.Body.Instructions[i].OpCode == OpCodes.Call)
                            {
                                if (meth.Body.Instructions[i].Operand.ToString().Contains("Abs"))
                                {
                                    MessageBox.Show("aa");
                                    meth.Body.Instructions[i] = Instruction.Create(OpCodes.Ldstr, BTS(lst[res]));
                                    meth.Body.Instructions[i - 1].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 2].OpCode = OpCodes.Nop;
                                    meth.Body.Instructions[i - 3].OpCode = OpCodes.Nop;

                                    for (int ia = 1; ia < 15; ia++)
                                    {
                                        meth.Body.Instructions[i + ia].OpCode = OpCodes.Nop;
                                    }
                                    res++;
                                }
                              
                            }
                        }
                    }

                }
              
            }
        }
        double value(int ii)
        {
            return (Math.Pow((double)Math.Abs(ii), (double)2) + (double)1) * (double)5;
        }

        public static string BTS(string s)
        {
            return Encoding.UTF8.GetString(Convert.FromBase64String(s));
        }
    }
}
حلك رائع جداً ومتقن :42: وإثراء للموضوع باستخدام مكتبة أخرى.. بارك الله فيك :42:
 
إنضم
26 أكتوبر 2012
المشاركات
12,507
الإعجابات
16,446
النقاط
215
الإقامة
In YouR MinD
الحل مالتي يفيد تعليم المبتدئ :p
تم الاعتماد على نفس المكتبة Mono Cecil لانو دوالها next و previous فادتني كثير :)
ما بعرف اذا موجودين بمكتبة Dnlib لكن المكتبة مريحة جداً فعلاً :)
 
إنضم
3 أبريل 2017
المشاركات
68
الإعجابات
77
النقاط
18
تم الاعتماد على نفس المكتبة Mono Cecil لانو دوالها next و previous فادتني كثير :)
ما بعرف اذا موجودين بمكتبة Dnlib لكن المكتبة مريحة جداً فعلاً :)
اقدر اسويلك فنكشن نفس الnext و ال previous
لا احب استخدام mono لان التخطي الها ب اقل من ثانية :3
يعني التخطي مالتها يمنع للmono عمل load لل ملف
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل