الفريق العربي للهندسة العكسية

نسخة كاملة : تغير قيمة ثابتة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4 5
(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
شكرأ لك صديقي
لكن ليس هذا ماكنت اقصده
بجميع الاحوال البرامج التي تحمل سترنغ ثابت يمكن التعديل عليها وحفظها مباشرة بدون اي مشاكل
لكن انا اردت ان اعرف الطريقة الصحيحة للوصول للاوفست الصحيح الذي يتم التعديل عليها
كما الحال في برنامج PC
يتم الحصول على عنوان الستاك  المحجوزة عندا وضع نقطة توقف
لو قمنا بوضع نقطة توقف على العنوان التالي 0051138B
ستلاحظ انه خرج لنا النص
Stack SS:[0012FED8]=01722DCC, (UNICODE "12345")
لو حاولنا التعديل على نفس العنوان
بدفع الى قيمة ثانية او كتابة mov edx
ستلاحظ انه لن يعمل
لكن لو تم التعديل على العنوان التالي 00511346
يعمل
( ماريد معرفته كيف وصلنا الى العنوان 00511346  وعرفنا انه المكان الصحيح للتعديل )
واعتذر للإطالة وشكرا
للوصول إلى ذلك المكان عليك ببتبع الدالة GetComputerNameA or GetComputerNameW
(13-01-2019, 06:48 AM)M!X0R كتب : [ -> ]للوصول إلى ذلك المكان عليك ببتبع الدالة GetComputerNameA or GetComputerNameW

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

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

ثم دخول الاستدعاء الموجود في العنوان 00511B61 المسؤول عن ارجاع نتيجة الدالة
ثم كتابة MOV EDX, 00517A4F زائد عليها تعليمة RET لتجاهل اكمال النتفيذ
 
[صورة مرفقة: p_1108zx2jh2.png]
كل الطرق تؤدي الى روما Smile
فعلا طريقة ممتازة زادك الله من علمه لو اردنا تنفيذها بشكل برمجي وتكون القيمة متغيره هل يمكن هذا؟
يتم العمل بشكل تسلسلي للمراحل او جميع التغيرات بنفس الحظة.
الصفحات : 1 2 3 4 5