delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف تربط برنامجك بملف خارجي؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
كيف يمكن ان نربط برنامجي بملف .dll خارجي
بحيث ينفذ روتين معين او عمليات حسابية
ثم نقطف الناتج بحيث استخدمة في حساب عملية ما؟
من مبرمج الملف ؟
إذا كان أنت فالموضوع سهل

حسب إعتقادي الموضوع ضمن عملية هندسة عكسية
لذا يجب عليك تتبع الملف الذي يتعامل مع هذا الملف وفهم آلية التعامل مع الـ Function الخاصة بملف الـ dll
قد يتعامل مع متغير Puplic ضمن البرنامج أو قد يتعامل مع ملف أو أي شئ آخر لذا يمكنك تعديل ملف dll حسبما تحتاج
مشكور على الرد اخي الزري2
ما احتاجة هو امكانية الوصول الى روتين معين وتنفيذه كما لو كان هذا الروتين مستدعى من البرنامج الاصل
انا لا احتاج اعمل باتش او كراك
اكيد انك قد رأيت كيجن يحتوي على ملف او اكثر يتعامل معه بكل سهولة
ولكن اسأل كيف يمكن ذلك بالدلفي؟
cargem كتب :امكانية الوصول الى روتين معين وتنفيذه كما لو كان هذا الروتين مستدعى من البرنامج الاصل

إنتظرت ردك لكي أتأكد أنك تريد فكرة عمل كيجن يرتبط بملفات dll التي يتعامل معها البرنامج

ما أردت قوله هو أنه يوجد درس للأستاذ Mouradpr في منتدى at4re رقم الموضوع هو 3751
بعنوان : "E@sy V!deo to DVD KeyGening"
برمجة الكيجن في الإسمبلي ولكن كل شئ ممكن بالدلفي طبعاً
فقط الدرس يشرح آلية إستعمال الملف
اشكرك اخي الزري2
هل يوضح المسئلة بطريقة برمجية
ام عن طريق الهندسة العكسية
خرجت بهذا الكود
والان نحن في مشكلة التحويل الى دلفي
اعتقد :
1-تحميل الملف
2- تؤشر على العنوان (البوابه)
3- تنفيذ عملية ما
4- خطف الناتج
5- اكمال الكود برمجيا مستفيد من نتائج الروتين


PHP كود :
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include "resource.h"

#define PROC_CAST  void (__stdcall * )(char*, char*)

HINSTANCE hInst;

BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    
HINSTANCE hLib;
    
char BufferName[256];
    
char Serial[256];

    
void (__stdcall *myProc)(char*, char*) = 0; // هنا تضع البروتوتايب تبع الدالة كيفنا كانت

    
switch (uMsg)
    {
    case 
WM_CLOSE:
        
EndDialog(hwndDlg, 0);
        return 
TRUE;

    case 
WM_COMMAND:
        switch (
LOWORD(wParam))
        {
        case 
ID_OK:
        {
            
GetDlgItemText(hwndDlg,ID_NAME,BufferName,32);
            
hLib = LoadLibrary("ether.dll");
            
myProc = (PROC_CAST) GetProcAddress(hLib,"reg_code");
            if (
myProc =t= NULL)
                return 
FALSE;
            
myProc(BufferName, Serial);
            
SetDlgItemText(hwndDlg,ID_SERIAL,Serial);
            
FreeLibrary(hLib);
        }
        return 
TRUE;
        }
    }
    return 
FALSE;
}


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    
hInst = hInstance;
    return 
DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, DialogProc); 
السلام عليكم
شاهد الدرس السابع من دورة دلفي للعرب
السلام عليكم
- لما كل هذا التعقيد , كل ما في الأمر (الطريقة الكلاسيكية) :
1- التأكد من وجود المكتبة
2- تحميل الملف
3- التحصل على عنوان الـMethods
4- تنفيذ الـ Method
5- إرجاع الناتج / تحرير المكتبة
راجع :
[دورة دلفي للعرب] الدرس التاسع: Windows API
كيف ابعث متغير لدالة في ملف dll ثم احصل على النتيجة
بالتوفيق,,
تشكر اخي TF6M
إقتباس :- التحصل على عنوان الـMethods
اعتقد انه صعب ان تحصل على اسم الـMethods
لان GetProcAddress تحتاج اسم الـMethods والمقبض
------------------
هل يمكن القفر الى عنوان داخل الـMethods
و تنفيذ عملية ما ؟
يمكن التحصل على عنوان الـ Methods , عن طريق الإسم / الـ Index / الـ Address
- يمكن إستخراج مثلا أسماء الـ Methods بعدة طرق , أساليب الهندسة العكسية أو برمجيا ...
معرفة function المصدرة من مكتبة DLL
الصفحات : 1 2