تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كتابة برنامج لقراءة قيم الرجستر في البرنامج
#1
السلام عليكم ورحمة الله وبركاته

عندي سؤال واحتاج مساعدة منكم الله ينوركم

اريد عمل برنامج صغير هدفه يقرأ قيم الرجستر مثل EAX , EBX , ECX , EDX... في البرنامج
البارامترات : العنوان مثل : 00434262 و اسم البرنامج او مساره
لو حبد اعمله في ال C# او Delphi

وشكرا لم في انتظار ردكم الحار
أعضاء أعجبوا بهذه المشاركة :
#2
https://www.at4re.net/f/thread-231.html
أعضاء أعجبوا بهذه المشاركة :
#3
شكرا اخي [b]GamingMaster[/b]  لكن الموضوع فيه اقتناص السريال وامور كثيرة
باختصار مارايده هو قراءة قيم المسجلات لا اكثر , في الموضوع وضعو التعديل على ال Flag ZF
لكن لم يقرأ قيمة احد المسجلات
أعضاء أعجبوا بهذه المشاركة :
#4
الفكرة اذا فهمتها بشكل عام يمكنك توظيفها حسب رغبتك.
المسجلات موجودة في الـ context structure يمكنك قراءتها او الكتابة عليها :
 
if (context->Eip == 0x00403ff4)
{
    // grab the good serial ;)
    ReadProcessMemory(pinfo.hProcess, (PVOID)context->Edx, lpSerial, size, 0);
};
أعضاء أعجبوا بهذه المشاركة :
#5
وعليكم السلام
في ويندوز الدوال GetThreadContext / SetThreadContext يمكنهما الاطلاع على قيم المسجلات للـ process
إقتباس :A process with appropriate access to a thread can examine the thread's registers by using the GetThreadContext function and set the contents of the thread's registers by using the SetThreadContext function
https://docs.microsoft.com/en-us/windows...-debugging

بالنسبة لـ
إقتباس :لو حبد اعمله في ال C# او Delphi

انا مبتدأ بالبرمجة Shy ولكني بحثت لك عن اكواد ربما تفيدك
بالنسبة للدلفي فالكود الخاص بالمنقح cheat-engine يعتبر كنز عظيم وفية ما لذ وطاب
https://github.com/cheat-engine/cheat-engine/search?q=GetThreadContext+SetThreadContext&unscoped_q=GetThreadContext+SetThreadContext
سبحان الله وبحمده، سبحان الله العظيم
أعضاء أعجبوا بهذه المشاركة :
#6
و عليكم السلام و رحمة الله
تقريبا نفس المثال بدلفي:
https://www.at4re.net/f/thread-268.html
أعضاء أعجبوا بهذه المشاركة :
#7
شكرا لكم احبتي , سأحاول عمل البرنامج بالدلفي لقراءة قيم الرجسترات , المشكل ان في كلا الاقتراحين امور كثيرة ولست مبرمج دلفي بقدر انا متخصص في ال C# واخواتها Cpp و C . وان شاء الله يكون على C# لقراءة كافة الرجسترات
الان قمت بفكرة افضل وهي عمل اخر مشابه ب C++ يقرأ قيمة العنوان وبه وصلت لما اريد بمقارنة عنوانين ولكن تحتاج لعمل خدعة على ملف exe ليصل الى المكان المطلوب فقط , وهي عمل INT أمام العنوان الموالي ليتوقف البرنامج لاني لم اقم بعمل نقاط توقف بالبرنامج في السورس
السورس
#include <iostream>
#include <windows.h>
#include <string>
#include<cstdlib>
#include<ctime>
using namespace std;

int main() {
    
    int value;
    DWORD address = 0x0000C400;
    HWND hWnd = FindWindowA(0,"TargetName");
    DWORD pId;
    srand(time(0));
   
    if (hWnd == 0) {
        printf("connot find Api pleaser contact ");
        Sleep(1000);
        
    }else {
    
        GetWindowThreadProcessId(hWnd, &pId);
        HANDLE hProcess = OpenProcess(PROCESS_VM_READ,FALSE, pId);
        
        if (!hProcess) {
            printf("Connot OI Process");
            Sleep(1000);
        } else {
            
            ReadProcessMemory(hProcess, (LPVOID)address, &value, sizeof(value), 0);
            CloseHandle(hProcess);
        cout << value <<  endl;       
        system("Pause");
        }
        
        
    }
    
}
أعضاء أعجبوا بهذه المشاركة :
#8
بنفس المثال نقوم بعمل hardware breakpoint على عنوان وعندما يتوقف سير البرنامج عند نقطة التوقف نقوم بقراءة الcontext
أعضاء أعجبوا بهذه المشاركة :
#9
من فضلك اخي [b]GamingMaster[/b]  هل يمكنك تعديل السورس بحيث يقرأ  أحد المسجلات EDX او  EBX مع وضع نقطة التوقف على العنوان الدي يليه او نفس العنوان
جزاك الله خيرا اخي
أعضاء أعجبوا بهذه المشاركة :
#10
بعد البحث وعمل research عن الموضوع وجدت ان الفكرة ليست جديدة فـ Mario Vilas برمج سكربت بايثون لمنقحة winappdbg يقوم بنفس الامر
إقتباس :dumping code, stack and registers
 
https://winappdbg.readthedocs.io/en/latest/_downloads/04_dump.py
 
وكذلك Justin Seitz برمج منقح بايثون صغير وقام ببرمجة سكربت يقوم بنفس الامر في كتابة Gray Hat Python في الشابتر الثالث وشرح الامر كذلك بالتفصيل.
https://nostarch.com/download/ghpython_src.zip
ولكن كلا السكربتان لا يعملان مع ويندوز x64 فهما خاصان بـ 32 بت فقط لذلك قررت تعديل السكربت الثاني (بما انه لا يحتاج تنصيب مكتبات ويعتمد على نفسة)،  اكملت جزء من التعديل ولكن واجهتني مشكلة وعند شروعي بالبحث لحلها وجدت ان شخص قد سبقني وقام بتعديل السكربت.
https://crattack.tistory.com/entry/python-thread-context-%EB%B3%B4%EA%B8%B0win7-64bit
لقد قمت بنسخ السكربت المعدل وتعديل التنسيق في المحرر وتجربته وهذه كانت النتيجة على windows 10 pro x64
E:\pytest>python loader.py

Enter The PID of the process to attach to : 6256
[*] Select PID 6256
[*] OpenProcess Handle : 512
[*] self.h_process : 512
[*] Enumerate Thread inside
[*] Dumping registers for Thread ID: 0x00002608
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x000000000362d560
[*] RDX : 0x000000000362d3e8
[*] End DUMP
[*] Dumping registers for Thread ID: 0x0000230c
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x00000a78
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x00001a58
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x00000c1c
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x000023e4
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x00000994
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] Dumping registers for Thread ID: 0x00001688
[*] RIP : 0x0000000000000001
[*] RSP : 0x00000000013ef4f0
[*] RBP : 0x00000000013ef280
[*] RAX : 0x000000005e340000
[*] RBX : 0x00000000013ef3b0
[*] RCX : 0x00000000013ef2f0
[*] RDX : 0x00009f1917c72eb1
[*] End DUMP
[*] finished debugging. Exiting...

E:\pytest>

السكربت سيطلب منك فقط الـ PID للـ process الذي تريده

كلمة السر
www.at4re.net

.zip   dump_thread_context.zip (الحجم : 5.77 KB / التحميلات : 21)

كذلك لغة بايثون تسهل لك الامر بخصوص اضافة اشياء جديدة للسكربت Cool
ولكن سيكون من الجميل لو تم برمجة كود  بـ c او ++c في حال تطلب الامر سرعة او تطوير اداة خاصة
سبحان الله وبحمده، سبحان الله العظيم
أعضاء أعجبوا بهذه المشاركة : GamingMaster


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


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