تقييم الموضوع :
  • 5 أصوات - بمعدل 2.8
  • 1
  • 2
  • 3
  • 4
  • 5
تغير قيمة ثابتة
#31
(12-01-2019, 04:49 PM)هـآوي كتب : وجدت المكان التي تظهر به القيمة وبعد كتابة mov edx واقوم بالتشغيل يحدث خطا

لنأخذ التحدي من هنا للتجربة عليه:
https://www.at4re.net/f/thread-19.html

1- المكان الفارغ في نافذة Hex Dump :
 
[صورة مرفقة: p_1107lh64v1.png]

2- الكتابة في المكان الفارغ:
العنوان الجديد 0x004068BC
 
[صورة مرفقة: p_1107j3q762.png]

3- العنوان المستهدف للتعديل عليه:
في العنوان 0x00403F4A نقوم باستبدال القيمة القديمة الى يتم دفعها للذاكرة بالقيمة الجديدة و هي عنوان الكلمة Hello
PUSH 004068BC

 
[صورة مرفقة: p_11072gv0b3.png]

 4- نتم تشغيل التحدي و نضغط على زر "تحقق من التسجيل"
 
[صورة مرفقة: p_1107o9ak04.png]



نفس العملية برمجبا بالسي شارب:
 
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;

public class Program {
    public static void Main() {
        STARTUPINFO si = new STARTUPINFO();
        PROCESS_INFORMATION pi = new PROCESS_INFORMATION();

        CreateProcess("AT4RE01.exe",
                      null,
                      IntPtr.Zero,
                      IntPtr.Zero,
                      false,
                      CreateSuspended,
                      IntPtr.Zero,
                      null,
                      ref si,
                      out pi);

        byte lpBuffer = Encoding.ASCII.GetBytes("Hello!");

        IntPtr lpNumberOfBytesWritten = IntPtr.Zero;

        WriteProcessMemory(pi.hProcess,
                           (IntPtr)0x004068BC,
                           lpBuffer,
                           lpBuffer.Length,
                           ref lpNumberOfBytesWritten);

        byte lpBuffer2 = {
            0x68,
            0xBC,
            0x68,
            0x40,
            0x00
        };

        lpNumberOfBytesWritten = IntPtr.Zero;

        WriteProcessMemory(pi.hProcess,
                           (IntPtr)0x00403F4A,
                           lpBuffer2,
                           lpBuffer2.Length,
                           ref lpNumberOfBytesWritten);

        ResumeThread(pi.hThread);
    }

    [DllImport("kernel32.dll")]
    static extern bool CreateProcess(string lpApplicationName,
                                     string lpCommandLine,
                                     IntPtr lpProcessAttributes,
                                     IntPtr lpThreadAttributes,
                                     bool bInheritHandles,
                                     uint dwCreationFlags,
                                     IntPtr lpEnvironment,
                                     string lpCurrentDirectory,
                                     ref STARTUPINFO lpStartupInfo,
                                     out PROCESS_INFORMATION lpProcessInformation);

    [DllImport("kernel32.dll")]
    static extern bool WriteProcessMemory(IntPtr hProcess,
                                          IntPtr lpBaseAddress,
                                          byte lpBuffer,
                                          int dwSize,
                                          ref IntPtr lpNumberOfBytesWritten);

    [DllImport("kernel32.dll")]
    private static extern uint ResumeThread(IntPtr hThread);

    public const uint CreateSuspended = 0x00000004;
}

public struct PROCESS_INFORMATION {
    public IntPtr hProcess;
    public IntPtr hThread;
    public uint dwProcessId;
    public uint dwThreadId;
}

public struct STARTUPINFO {
    public uint cb;
    public string lpReserved;
    public string lpDesktop;
    public string lpTitle;
    public uint dwX;
    public uint dwY;
    public uint dwXSize;
    public uint dwYSize;
    public uint dwXCountChars;
    public uint dwYCountChars;
    public uint dwFillAttribute;
    public uint dwFlags;
    public short wShowWindow;
    public short cbReserved2;
    public IntPtr lpReserved2;
    public IntPtr hStdInput;
    public IntPtr hStdOutput;
    public IntPtr hStdError;
}

رابط الملف التنفيذي للتجربة:
https://up.top4top.net/downloadf-1107520n95-rar.html
gone
أعضاء أعجبوا بهذه المشاركة : x-member , هـآوي , rce3033
#32
شكرأ لك صديقي
لكن ليس هذا ماكنت اقصده
بجميع الاحوال البرامج التي تحمل سترنغ ثابت يمكن التعديل عليها وحفظها مباشرة بدون اي مشاكل
لكن انا اردت ان اعرف الطريقة الصحيحة للوصول للاوفست الصحيح الذي يتم التعديل عليها
كما الحال في برنامج PC
يتم الحصول على عنوان الستاك  المحجوزة عندا وضع نقطة توقف
لو قمنا بوضع نقطة توقف على العنوان التالي 0051138B
ستلاحظ انه خرج لنا النص
Stack SS:[0012FED8]=01722DCC, (UNICODE "12345")
لو حاولنا التعديل على نفس العنوان
بدفع الى قيمة ثانية او كتابة mov edx
ستلاحظ انه لن يعمل
لكن لو تم التعديل على العنوان التالي 00511346
يعمل
( ماريد معرفته كيف وصلنا الى العنوان 00511346  وعرفنا انه المكان الصحيح للتعديل )
واعتذر للإطالة وشكرا
أعضاء أعجبوا بهذه المشاركة :
#33
للوصول إلى ذلك المكان عليك ببتبع الدالة GetComputerNameA or GetComputerNameW
لَّا إِلَٰهَ إِلَّا أَنتَ سُبْحَانَكَ إِنِّي كُنتُ مِنَ الظَّالِمِينْ.

عن أبي هريرة -رضي الله عنه- أن رسول الله -صلى الله عليه وسلم- كانَ يقولُ في سجودِهِ: «اللَّهُمَّ اغْفِرْ لي ذَنْبِي كُلَّهُ: دِقَّهُ وَجِلَّهُ، وَأَوَّلَهُ وَآخِرَهُ، وَعَلاَنِيَتَهُ وَسِرَّهُ».
(صحيح - رواه مسلم).
أعضاء أعجبوا بهذه المشاركة : هـآوي
#34
(13-01-2019, 06:48 AM)M!X0R كتب : للوصول إلى ذلك المكان عليك ببتبع الدالة GetComputerNameA or GetComputerNameW

طريقة التتبع تنجح فقط مع البرنامج الذي يستخدم هذه الدالة
هل توجد طريقة سهلة للتبع ومعرفة الدالة المستخدمة؟؟(لو كان يستخدم البرنامج اكثر من دالة)
قمت بعمل برنامج لعمل تجربة عليه ويمكن الوصل للمكان الذي يتم به حجز النص ويمكن التعديل عليه بشكل يدوي
لكن لم اتمكن من معرفة المكان الصحيح للتعديل وعمل dump !!!!
أعضاء أعجبوا بهذه المشاركة :
#35
(13-01-2019, 07:29 AM)هـآوي كتب : قمت بعمل برنامج لعمل تجربة عليه ويمكن الوصل للمكان الذي يتم به حجز النص ويمكن التعديل عليه بشكل يدوي

هل تستطيع ارفاق البرنامج الثاني ؟
gone
أعضاء أعجبوا بهذه المشاركة : هـآوي
#36
(13-01-2019, 07:37 AM)offset كتب : هل تستطيع ارفاق البرنامج الثاني ؟ 
نعم
https://up.top4top.net/downloadf-10981bx3i1-rar.html
أعضاء أعجبوا بهذه المشاركة : offset
#37
كمرحلة اولى  لكي نكون على نفس الخط
هل وصلت اخي الى هنا:
العنوان: 00511B66
اذا كان كذلك ما هي الطريقة التي عدلت بها
 
[صورة مرفقة: p_1108izbti1.png]
gone
أعضاء أعجبوا بهذه المشاركة : هـآوي
#38
نعم اخي الكريم هذا صحيح 
هذا المكان الذي توصلت له 00511B66
قمت بالذهاب الى مكان فارغ في نافذة Hex Dump
00517A4F
وكتابة سترنغ UNICODE
وقمت بعدها بالتعديل بالاوفست 00511B66 وكتابة
MOV EDX,00517A4F
أعضاء أعجبوا بهذه المشاركة : offset
#39
جرب اخي بطريقة مختلفة:
عمل نوب NOP للاوامر الحقيقية في العنوان 00511B66
[صورة مرفقة: p_11083iuo71.png]

ثم دخول الاستدعاء الموجود في العنوان 00511B61 المسؤول عن ارجاع نتيجة الدالة
ثم كتابة MOV EDX, 00517A4F زائد عليها تعليمة RET لتجاهل اكمال النتفيذ
 
[صورة مرفقة: p_1108zx2jh2.png]
كل الطرق تؤدي الى روما Smile
gone
أعضاء أعجبوا بهذه المشاركة : هـآوي , [email protected] , rce3033
#40
فعلا طريقة ممتازة زادك الله من علمه لو اردنا تنفيذها بشكل برمجي وتكون القيمة متغيره هل يمكن هذا؟
يتم العمل بشكل تسلسلي للمراحل او جميع التغيرات بنفس الحظة.
أعضاء أعجبوا بهذه المشاركة :


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


يقوم بقرائة الموضوع: بالاضافة الى ( 21 ) ضيف كريم