[تمرين] كيف احمي برنامجي من الـــ rce ؟
#11
البرنامج لا يعمل عندي.

[صورة: 2pq9pig.gif]
الرد
#12
السلام عليكم

نفس الشيء البرنامج لا يعمل عندي.
الرد
#13
السلام عليكم و رحمة الله
البرنامج لا يعمل كيف اخي الكريم ؟

جرب من جديد مع هذه المكتبة المرفقة...

بالتوفيق ان شاء الله


الملفات المرفقة
.rar   borlndmm.rar (الحجم : 11.63 ك ب / التحميلات : 103)
الرد
#14
السلام عليكم و رحمة الله
هذا تمرين بسيط لمحاولة ايصال فكرة معينة من خلاله، و تعتبر هذه الفكرة من اساسيات الهندسة العكسية...
التمرين يحاول تقليص استعمال ادوات الهندسة العكسية RCE Tools الى حد كبير...


المطلوب :
جعل التمرين مسجل باي طريقة Big Grin P@tch, Cr@ck, Seri@l, Keygener@tor او شراء ترخيص من عند اخي DeltaAziz Big Grin

بالتوفيق ان شاء الله


الملفات المرفقة
.rar   RegisterMe.rar (الحجم : 84.81 ك ب / التحميلات : 232)
الرد
#15
أنا لن أمانع بالشراء هههههه Big Grin، أولا موش خسارة فيك و لا فيه ، ثانيا و هو الأهم :o العين بصيرة و اليد قصيرة بل لا ماكانش هههههه Big Grin
- سأحاول أستاذي . و لن أنس شكرك على هذه الدروس و المشاركات الرائعة ، و جعلها الله في ميزان حسناتك.
بالتوفيق.
الرد
#16
كيف الحال أخي Streli ...

في الحقيقة تعتبر تطبيقات 16 بت من البرمجيات الصعبة التتبع ..

و لكن مع دلفي يكون الأمر سهلاً نوعاً ما , في حال كان الخيار هو الباتشينغ ..

الثغرات التي يمكن الأستفادة منها و تسهل العملية :

1- وضوح السترينغ داخل البرنامج كما Good Boy ( يمكن استخدام التشفير للتمويه ) ..

2- أسماء العناصر تساعد أيضاً و خاصة ان مواقع احداثها واضحة ( تمويه اسماء العناصر يصعب العملية قليلاً ) ..

3- في تمريننا كانت المقارنة واضحة مما سهل كسر الحماية ..

4- أعتقد ان تعددية مواقع الفحص يسهم في زيادة قوة الحماية ..

5- يمكن زيادة قوة الحماية بتشفير قطعة الكود المسؤولة عن الفحص .. و فك تشفيرها في وقت التنفيذ ..

6- طبعاً أضافة CRC تزيد أيضاً من قوة الحماية ..

7- لا يوجد سابعاً .. Big GrinBig Grin

شكراً لجهودك أخي Streli ..

لك مني أرق تحية ..


الملفات المرفقة
.rar   REGME_Patch.rar (الحجم : 84.3 ك ب / التحميلات : 132)
الرد
#17
السلام عليكم و رحمة الله
مممم جيد حل صحيح اخي Rover Smile

بما ان الموضوع وضع للمناقشة و ايصال معلومات عن طرق عمل الهندسة العكسية نبدأ ان شاء الله.

إقتباس :في الحقيقة تعتبر تطبيقات 16 بت من البرمجيات الصعبة التتبع ..
1- محاولة تعطيل الأدوات التي يعتمد عليها المهندس العكسي في تحليل البرنامج.
و هذا يسمى Anti XXX و هذه المضادات تستعمل كثيرا من طرف ادوات الحماية الحالية Protectors.

تم تطوير التمرين على اول اصدار لدلفي Delphi 1 و هو ينتج ملفات تنفيذية 16bit من نوع Ne' New Executable ' و ليست PE' Portable Executable.

يكمن تحليل هذا النوع من الملفات بــ : IDA تحليل static او بـــ SoftICE تحليل Dynamic.

إقتباس :وضوح السترينغ داخل البرنامج كما Good Boy.
2- يجب ان تكون حماية البرامج لا تحتوي على ثغرات مثل رسائل نجاح او عدم نجاح عملية التسجيل.
ايضا تم وضع قيمة ثابتة عمدا تدخل في توليد رقم التسجيل ليتم استغلالها في الوصول الى خوارزمية التحقق

PHP كود :
44656C70686920342041726162 
و هي تعني Delphi 4 Arab بــ Hexadecimal

PHP كود :
function GetValidSerial(Name: string): string;
var 
i, Serial: integer;
begin
  Serial 
:= 0;
  
Result := '';
    if 
Length(Name) >= 5 then
    begin
  
for i := 0 to Length(Name) -1 do
  
begin
    Serial 
:= Serial + Ord(Name[i]);
  
end;
  
Serial := ((Serial mod $256) * $8) + (Length(Name) * $32) + Ord(Name[5]) ;
  
Result := IntToHex(Serial, 16) + '-' + IntToStr(Serial) + '-' + '44656C70686920342041726162' + IntToStr(Length(Name));
end;
end; 

تم وضع بعض المتغيرات التي تؤثر على رقم التسجيل الناتج كطول الاسم المدخل، اخذ محرف من الاسم بترتيب معين...

PHP كود :
procedure TMain.TryBtnClick(Sender: TObject);
begin
if SerialEdt.Text = GetValidSerial(UserEdt.Text) then
MsgLbl
.Visible := True else
MsgLbl.Visible := False;
end; 

PHP كود :
procedure TMain.UserEdtChange(Sender: TObject);
begin
if Length(UserEdt.Text) >= 5 then
TryBtn
.Enabled := TRUE else
TryBtn.Enabled := FALSE;
end; 

الوحدة كاملة للتمرين

PHP كود :
unit Mainfrm;
interface
uses
  SysUtils
, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  
Forms, Dialogs, ExtCtrls, StdCtrls;
type
  TMain 
= class(TForm)
    
LogoImg: TImage;
    
UserEdt: TEdit;
    
SerialEdt: TEdit;
    
TryBtn: TButton;
    
MsgLbl: TLabel;
    
procedure TryBtnClick(Sender: TObject);
    
procedure UserEdtChange(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;
var
  
Main: TMain;
implementation
{$R *.DFM}
 
function 
GetValidSerial(Name: string): string;
var 
i, Serial: integer;
begin
  Serial 
:= 0;
  
Result := '';
    if 
Length(Name) >= 5 then
    begin
  
for i := 0 to Length(Name) -1 do
  
begin
    Serial 
:= Serial + Ord(Name[i]);
  
end;
  
Serial := ((Serial mod $256) * $8) + (Length(Name) * $32) + Ord(Name[5]) ;
  
Result := IntToHex(Serial, 16) + '-' + IntToStr(Serial) + '-' + '44656C70686920342041726162' + IntToStr(Length(Name));
end;
end;
 
procedure TMain.TryBtnClick(Sender: TObject);
begin
if SerialEdt.Text = GetValidSerial(UserEdt.Text) then
MsgLbl
.Visible := True else
MsgLbl.Visible := False;
end;
procedure TMain.UserEdtChange(Sender: TObject);
begin
if Length(UserEdt.Text) >= 5 then
TryBtn
.Enabled := TRUE else
TryBtn.Enabled := FALSE;
end;
end. 

الوحدة كاملة لمولد المفاتيح

PHP كود :
unit Mainfrm;
interface
uses
  SysUtils
, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  
Forms, Dialogs, ExtCtrls, StdCtrls;
type
  TMain 
= class(TForm)
    
LogoImg: TImage;
    
UserEdt: TEdit;
    
SerialEdt: TEdit;
    
procedure UserEdtChange(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;
var
  
Main: TMain;
implementation
{$R *.DFM}
 
function 
GetValidSerial(Name: string): string;
var 
i, Serial: integer;
begin
  Serial 
:= 0;
  
Result := '';
    if 
Length(Name) >= 5 then
    begin
  
for i := 0 to Length(Name) -1 do
  
begin
    Serial 
:= Serial + Ord(Name[i]);
  
end;
  
Serial := ((Serial mod $256) * $8) + (Length(Name) * $32) + Ord(Name[5]) ;
  
Result := IntToHex(Serial, 16) + '-' + IntToStr(Serial) + '-' + '44656C70686920342041726162' + IntToStr(Length(Name));
end;
end;
 
procedure TMain.UserEdtChange(Sender: TObject);
begin
if Length(UserEdt.Text) >= 5 then
SerialEdt
.Text := GetValidSerial(UserEdt.Text);
end;
end. 

المرفق يحتوي على مولد ارقام التسجيل مبرمج بدلفي 1 ايضا.

الصعوبة كانت تكمن فقط في تتبع مثل هذه التمارين...

----
لم ينتهي التمرين بعد
مطلوب جديد : Big Grin
محاولة ايجاد خوارزمية التحقق في IDA...

اخي Rover هل تتكرم و تضيف الطريقة التقنية للوصول الى حلك Big Grin؟ بارك الله فيك Smile

و اخيرا : ماهو الشئ المضاف في الكود فوق لا يدعمه Delphi 1 ؟ نعم انا دائما بمشاكلي Big Grin
بالتوفيق ان شاء الله


الملفات المرفقة
.rar   Keygenerator.rar (الحجم : 83.48 ك ب / التحميلات : 150)
الرد
#18
إقتباس :اخي Rover هل تتكرم و تضيف الطريقة التقنية للوصول الى حلك ؟ بارك الله فيك

تفضل أخي Streli هذا شرح سريع لطريقة الباتشينغ ..

إقتباس :مطلوب جديد :
محاولة ايجاد خوارزمية التحقق في IDA...

لم أفهم ما المطلوب أخي Streli

إقتباس :و اخيرا : ماهو الشئ المضاف في الكود فوق لا يدعمه Delphi 1 ؟ نعم انا دائما بمشاكلي

هذا يجب أن تسأل عنها DeltaAziz Big GrinBig Grin

تحياتي ..


الملفات المرفقة
.rar   REGME_Patching.rar (الحجم : 456.28 ك ب / التحميلات : 237)
الرد
#19
إقتباس :لم أفهم ما المطلوب أخي Streli
ايجاد اوامر خوارزمية توليد رقم التسجيل في الــ Listing الخاص بــ IDA Smile

شرح خفيف و ممتاز اخي Rover Smile
و الله اخواني احب جدا هذا النوع من المشاركات مع وضع شروحات خفيفة لتعم الفائدة.

بارك الله فيك اخي Rover.

في انتظار محاولات اخرى، حلول او تمارين لا يهم...
الرد
#20
في البداية السلام عليكم


أولا عذرا على التأخير أيها الاخوة الكرام
مشاغل كثيرة و كثيرة هي السبب في ذلك و الله أعلم بذلك

كود :
أعجبتني تركيبة الخوارزمية. Name: Fzarada SN: E825DAED22-D9939E7291

بالنسبة للسريال ليس صحيح لم أذكر ذلك سابقا
لكنه قريب جدا أي هناك خطوة أخيرة غابت عنك نتيجة السرعة في الاجابة على ما اضن
Big Grin

أخي العزيز STRELiTZIA
ما العمل الان, هل أضع الملفات المصدرية الان أو نترك مجال للمحاولة مرة أخرى
أو تقديم بعض التلميحات و Hints

بالنسبة للتطبيق به تعليقات خفيفة قمت بوضعها من الأول
ان شاء الله تسهل فهم عمل البرنامج من جميع النواحي
بالنسبة ل Optimization يمكن يستحق القليل

أسف مرة أخرى, مشروع التخرج أخذ مني الكثير
Big Grin

و السلام.

الرد


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


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