السلام عليكم
هل ممكن ان اشغل برنامج exe مباشره من الذاكره من Memory map
وكيف
السلام عليكم
هل ممكن ان اشغل برنامج exe مباشره من الذاكره من Memory map
وكيف
لماذا تريد تحميله بنفسك في الMemory Map و تشغيله
إستخدم CreateProcess لتحميله مباشرة
و عموما أن أظن أن سؤالك غير واضح فأرجو توضيحه قليلا و توضيح الغرض من هذه الفكرة من البداية حتى يسهل تحديد الحل لها إذا كان موجودا
visual basic كتب:
بما ان البرنامج موجود في الـ memory map فاذن هو يعمل سلفا..
لنقل انك تريد ان تقوم بتشغيل ملف ما من الذاكرة وهو موجود بالاصل مضمنا ضمن برنامج اخر, اذن يجب ان تقوم بحجز ذاكرة كافية.. استخدم memalloc مثلا, عليك ان تقوم بانشاء process عبر CreateProcess ولكن في وضع suspended, استخدم SuspendThread, الان انقل بيانات الملف المضمّن الى ذلك الفراغ بواسطة WriteProcessMemory, اخيرا قم بتشغيل البرنامج عبر ResumeThread..
هناك امثلة كثيرة عن هذا الموضوع, مثلا هذا الكود مثال ماخوذ من مقال لـ Detten, فكرته تختلف قليلا فهو لعمل loader بقراءة ملف موجود سلفا على القرص ومن ثم نقل بياناته الى الذاكرة والتعديل على بعض الاجزاء ومن ثم تنفيذه.. لكن التعديل عليه لا ياخذ الا بضع اسطر, حذف او اضافة.
<-------------Code Snippet----------------->
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
FileName db "C:\somedir\crackme.exe",0
notloaded db "It did not work :-(",0
Letsgo db "The process is started",13,10,
"Let's change smthg and run it now :-)",0
NewText db "Dettens Caption",0
Startup STARTUPINFO <>
processinfo PROCESS_INFORMATION <>
.data?
hInstance HINSTANCE ?
byteswritten dd ?
uExitCode dd ?
.code
start:
invoke GetModuleHandleA, NULL
mov hInstance,eax
; Create a process and load the crackme in it, and
; immediatly suspend the thread (pause it)
invoke CreateProcess, ADDR FileName, NULL, NULL, NULL, NULL, CREATE_SUSPENDED,
NULL, NULL, ADDR Startup, ADDR processinfo
.IF eax == NULL; Creation of new process failed?
invoke MessageBox, NULL, ADDR notloaded, NULL, MB_ICONEXCLAMATION
.ELSE
invoke MessageBox, NULL, ADDR Letsgo, NULL, MB_OK; Display Message
; I will change the text string in the crackme used in
; the captionbar (004050FCh)
invoke WriteProcessMemory, processinfo.hProcess, 004050FCh, ADDR NewText,
13, byteswritten
; Let the process run happily;)
invoke ResumeThread, processinfo.hThread
;Let the process run for 5 sec. and then terminate it
invoke Sleep, 5000
invoke TerminateProcess, processinfo.hProcess, uExitCode
.ENDIF
invoke ExitProcess,eax
end start
<-------------End Code Snippet------------->Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا
ولكن انا اريد ان اشغل البرنامج مباشره من الذاكره
حيث ان الملف موجود في الرسولس ولا اريد ان افكة على القرص
انا اضن اني احتاج الى اعادة بناء ال Import Table
في الـ resource او في غيره.. في النهاية انت تحتاج لتطبيق ما ذكرته اعلاه ولا تحتاج لان تقوم بوضعه على القرص ابدا. كما قلت الكود السابق يحتاج الى تعديل بعض اسطر فقط لا غير.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم
اخواني الكرام يا ريت نلاقي شخص يحل هذه المسألة لانها ةتعتبر هامة جدا في مجال البرمجة
عشان أقدر اساعد أحب ان افهم الموضوع
ما ذا تقصد بالضبط انك تشغل exe من الذاكرة...
خبرنا ايش تبغى تعمل "من إلى"
لأن عندما تشغل الـ exe فانت تشغلها من الذاكرة...
لماذا تكون الليغو اللعبة الأكثر عبقرية في العالم؟
لأنها غير قابلة للتجزئة ، وتختلف فيما بينها بالألوان و الأشكال ، وتمتلك القدرة على تكوين علاقات مع بعض. نستطيع أن نقول أن أجزاء الليغو أبدية. وهي تشبه الذرات في تراكيبها للكون
-----
وائل بن أحمد كابلي
مستشار تطوير برمجيات | مايكروسوفت للخدمات الاستشارية
MCSE | MCTS SharePoint Infrastructure | MCTS SharePoint - Development | MCP | MSF Essentials
اسف على التاخير
اريد ان اكتب في الذاكره البايتات لل exe بعد ان تكون مشفرة
وثم اشغلها المشكلة ان Shell لا تاخذ الا من الملف
وسوف تصبح بلا فائدة اذا كتبتها على الهارد ديسك ثم اشغلها
عدنا الى نفس الموضوع في الاعلى, الكود السابق او الطريقة هو ما تبحث عنه.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
الكود السابق ياخذ FileName وانا لا اريد ان اعطية اسم الملف من الهارد ديسك
لان ال exe في الذاكره في Memory Map
واريد ان اشغلة من هناك
السلام عليكم
سؤال للاخ السائل من اين اتى الملف التنفيذي لا بد ان يكون فى الهارددسك مسبقاً, ثانياً كيف وصل للذاكرة, هناك طريقتين اما انه تم تشغيله, او انه تم تحميلة إلى الذاكرة برانامج اخر..
فى الحالة الثانية يمكنك إستخدام CreateProcess وتضع عنوان الذاكرة التى تم تحميل الملف التنفيذي إليها بدل عنوان الملف..
فى الحقيقة سؤالك غير واضح او بالاحرى الغرض من تشغيل برنامج بعد تحميلة للذاكرة غير واضح ولا اجد سبب منطقي له..
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
يا اخي سالناك الملف موجود ضمن برنامجك قلت نعم.. قلنالك الكود السابق هو ما تبحث عنه كطريقة مع تحويل بضع اسطر.. ابحث, تم التكلم في هذا الموضوع القديم من ايام جدي وجدك مليار مرة.. كلمتين CreateProcess و WriteProcessMemory بيطالعولك بلاوي لوحدهم!
لم اقل لك انسخ والصق الكود السابق واعمل run وخلاص!!! هل قمت بكتابة اي تطبيق اسمبلي بالاصل من قبل؟ هذا المنتدى لن يعطي اي كود فيجوال للمعلومية وكل نقاشه سيكون لمبرمجي الاسمبلي فقط.
راجع موضوع للاخ Delta كان فيه تطبيق محمي ببرنامج ضغط كتبه هو.. الحماية تعتمد نفس الطريقة ان كنت تعلم كيف تقوم بتنقيح البرامج.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم
أخي visual basic
لووضعت مثال بسيط به برنامج بالذاكرى لكان أحسن
ووفرت وقتك ووقت غيرك
:D
قلت EXE في الذاكرة
كيف وصل إليها ؟
هل كال في Resource ؟
في هذه الحاله إستخدم الدالة LoadFromResource
والبقية مكتوبة فوق
ليس باResource ووصل بطريقة ما للذاكرة ؟
مدمج ببرنامجك ؟ و تعرف موضعه بالذاكرة، يمكن إستخدام CopyMemory لتحويلة لمكان أخر إن أردت ثم نفس الشيئ المكتوب فوق
.
أعرف، تريد مثال جاهز!
mPACK مكتوب بنفس الطريقة
Xacker كتب:هل قمت بكتابة اي تطبيق اسمبلي بالاصل من قبل؟ هذا المنتدى لن يعطي اي كود فيجوال للمعلومية وكل نقاشه سيكون لمبرمجي الاسمبلي فقط.
نعم كتبت اسمبلي من قبل
ولا لم اطلب كود فجوال
DeltaAziz كتب:
اخي DeltaAziz هذا تحديدا ما اريده مثل برنامجك اريد ان اعرف الطريقة فقط
وشكرا
HINSTANCE hModel = GetModuleHandleA(NULL);
HRSRC hRes = FindResourceW(hModel,MAKEINTRESOURCE(IDC_EXE1),_T("IDC_EXE"));
if (!hRes) return;
HGLOBAL hGlob = LoadResource(hModel,hRes);
if(!hGlob) return;
void * data = LockResource(hGlob);
if(!hGlob) return;
DWORD size = SizeofResource(hModel,hRes);اخي ال exe موجود في المتغير data
بالملف المرفق دالة تعمل تقريبا نفس عمل CreateProcessEx
لكن ب Parameter واحد فقط هو مؤشر لمكان الملف في الذاكرة
* ملحوظة :
يرجى الإبقاء على حقوق الكاتب الأصلي Aphex ....
شكرا اخي DeltaAziz هذا بالتحديد ما اريده
هل المرفق موجود (وانا احلم باني لا اراه) او انه في رسالة خاصة؟
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
هذا الموضوع مغلق.