delphi4arab منتديات دلفي للعرب
خطأ error i/o 104 عند انشاء ملف exe - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : خطأ error i/o 104 عند انشاء ملف exe (/showthread.php?tid=5067)



خطأ error i/o 104 عند انشاء ملف exe - مبرمج هاوي - 25-03-2013

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته
خطأ error i/o 104 عند انشاء ملف exe
شرح فكرة البرنامج المراد برمجته :
برنامج يقوم بقراءة سورس اي ملف exe وتشفيرها عن طريق خوارزمية RC4 وانتاج ملف مشفر exe جديد
كود :
[align=left] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,rc4, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; procedure Button1Click(Sender: TObject); procedure Edit1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var f,n:TextFile; r,w:string; begin if not SaveDialog1.Execute then exit; while not Eof(f) do begin Read(f,r); AssignFile(f,SaveDialog1.FileName); Rewrite(f); Write(f,rc4code(r,'123')); end; closefile(f); AssignFile(n,'crypted.exe'); Rewrite(n); write(n, RC4Code(r,'123')); closefile(n); ShowMessage(SysErrorMessage(GetLastError)); try if not SaveDialog1.Execute then exit; AssignFile(f,SaveDialog1.FileName); //Append(f); while not eof(f) do begin Rewrite(f); write(f,RC4Code(r,'123')); end; closefile(f); ShowMessage('Crypted !'); finally end; end; procedure TForm1.Edit1Click(Sender: TObject); begin if not OpenDialog1.Execute then exit; edit1.Text:=OpenDialog1.FileName; end; end. [/align]
[COLOR="Red"]
وهذه هي وحدة ال RC4 [/COLOR]

كود :
[align=left] {************************************************************} { RC4 } { Copyright (c) 2004 Hagen Reddmann } {************************************************************} unit RC4; interface uses SysUtils; type TRC4Context = record D: array[Byte] of Byte; I,J: Byte; end; procedure RC4Init(var RC4: TRC4Context; const Key: String); procedure RC4Done(var RC4: TRC4Context); procedure RC4Code(var RC4: TRC4Context; const Source; var Dest; Count: Integer); overload; function RC4Code(var RC4: TRC4Context; const Value: String): String; overload; function RC4Code(const Value, Password: String): String; overload; implementation procedure RC4Init(var RC4: TRC4Context; const Key: String); var R,S,T,K: Byte; U,L: Integer; begin {$R-} {$Q-} L := Length(Key); with RC4 do begin I := 0; J := 0; for S := 0 to 255 do D[S] := S; R := 0; U := 0; for S := 0 to 255 do begin if U < L then K := PByteArray(Key)[U] else K := 0; Inc(U); if U >= L then U := 0; Inc(R, D[S] + K); T := D[S]; D[S] := D[R]; D[R] := T; end; end; end; procedure RC4Done(var RC4: TRC4Context); begin FillChar(RC4, SizeOf(RC4), 0); end; procedure RC4Code(var RC4: TRC4Context; const Source; var Dest; Count: Integer); overload; var S: Integer; T: Byte; begin with RC4 do for S := 0 to Count -1 do begin Inc(I); T := D[I]; Inc(J, T); D[I] := D[J]; D[J] := T; Inc(T, D[I]); TByteArray(Dest)[S] := TByteArray(Source)[S] xor D[T]; end; end; function RC4Code(var RC4: TRC4Context; const Value: String): String; overload; var Count: Integer; begin Count := Length(Value); SetLength(Result, Count); RC4Code(RC4, Value[1], Result[1], Count); end; function RC4Code(const Value, Password: String): String; overload; var RC4: TRC4Context; begin RC4Init(RC4, Password); try Result := RC4Code(RC4, Value); finally RC4Done(RC4); end; end; end. [/align]
على حسب التحليل الذي توصلت اليه من تفكيري <<< تحليلي على قدر ما فهمته من عالم التشفير:p
وهو برمجة برنامج يقوم بقراءة سورس الملف وتمريرة على خوارزمية تشفير حيث انه عند التنفيذ يقوم بفك التشفير والعمل ...


خطأ error i/o 104 عند انشاء ملف exe - مبرمج هاوي - 26-03-2013

بعد كثير من المحاولات ولله الحمد توصلت الى الحل بنسبة 90% تقريبا

وهذا هو الكود للبروجكت اما الكود للوحدة ثابت وهذا كود البرنامج الجديد :-

كود :
[align=left] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, rc4, StdCtrls; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure Edit1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var f:TextFile; t:string; begin try AssignFile(f,Edit1.Text); Rewrite(f); write(f,RC4Code(edit1.Text,'PASSWORD')); closefile(f); ShowMessage('Crypted !'); finally end; end; procedure TForm1.Edit1Click(Sender: TObject); begin if not OpenDialog1.Execute then exit; edit1.Text:=OpenDialog1.FileName; end; end. [/align]

الان لم يتبقى الا كيفية تشغيل الملف بعد تشفيره لكن الامر الذي استغربة هو لماذا التشفير يكون باللغة الصينية !!؟


خطأ error i/o 104 عند انشاء ملف exe - SMP3 - 26-03-2013

إقتباس :الان لم يتبقى الا كيفية تشغيل الملف بعد تشفيره لكن الامر الذي استغربة هو لماذا التشفير يكون باللغة الصينية !!؟
و ما المشكل أن يكون التشفير باللغة الصينية ؟
لتشغيل الملف يجب أن تقوم باعادة فكه ثم تشغيله
+ لماذا استخدمت TextFile !!! .. TextFile خاص بالملفات النصية فقط txt وغيرها ..


خطأ error i/o 104 عند انشاء ملف exe - مبرمج هاوي - 27-03-2013

استخدمتها على اساس تعامل مع جميع الملفات سواء كانت نصية او تنفيذية او فيديو ... الخ
يعني الهدف من البرنامج تشفير او تعمية لكن ما زلت اتسائل كيف يمكن ان اقوم بفك الملف بعد تشفيرة هل لهذا علاقة بـ RunPe ام ان هناك خوارزمية او طريقة اخرى


خطأ error i/o 104 عند انشاء ملف exe - SMP3 - 27-03-2013

كما قلت لك سابقا النوع TextFile خاص بالملفات النصية فقط
إقتباس :Text files provide a simple, convenient way of storing textual data. They do provide mechanisms for reading and writing numerical data stored as text (see Write), but it is safer and wiser to use structured records when storing anything other than plain text strings.
لتقم بعملية الفك يجب أن تستخدم نفس المفتاح .. استخدم نفس الخوارزمية