PDA

View Full Version : سوال: ذخیره یک داده در دی ال ال



nsco_nsco
دوشنبه 16 اسفند 1389, 03:42 صبح
سلام دوستان این سوال برام مهمه
میخوام یک عدد رو پس از به دست امدن در دی ال ال در خود دی ال ال ذخیره کنم و نمی خوام از پایگاه داده ای استفاده کنم
ممنون می شم راهنماییم کنید با تشکر :تشویق::قلب:

Felony
دوشنبه 16 اسفند 1389, 08:30 صبح
نمونه هایی در انجمن هست که نحوه ذخیره اطلاعات تو فایل exe رو نشون میده ، میتونید ازشون برای این کار استفاده کنید .

nsco_nsco
چهارشنبه 18 اسفند 1389, 14:21 عصر
سلام ممنون از پاسختون
من خیلی گشتم ممنون می شوم اگر لینک اون تاپینگ ها رو بگذارید درضمن باید این نکته هم ذکر کرد من نمی خوام اطلاعات رو با پسوند تی اک تی و این طور فایلها ذخیره کنم ممنون می شوم سریع پاسخ دهید با تشکر:قلب:

tdkhakpur
چهارشنبه 18 اسفند 1389, 21:51 عصر
میخوام یک عدد رو پس از به دست امدن در دی ال ال در خود دی ال ال ذخیره کنم و نمی خوام از پایگاه داده ای استفاده کنم
ممنون می شم

اینکه بخواهید یک bin فایل مانند dll یا exe که تقریبا ساختار مشابهی دارند مورد هدف قرار داده و داده ها ی متغییرهای اون رو تغییر بدید کار چندان راحتی نیست دلیلش این هست که مثلا اگر یک متغییر به اسم mydate را داشته باشید که حاوی تاریخ باشد نمیتوانید بعد از کامپایل محل چنین متغییری رو پیدا کنید البته داخل کاتالوگ توضیحات pe فایلها میتوانید محل قرار گیری کل داده ها رو پیدا کنید اما یک متغییر تنها قابل شناسای نیست.
اما برا ی این کار میتوانید چنین کاری رو بصورت دور زدن نرم افزار انجام بدید به این شکل که میتوانید یک رشته ثابت رو بصورت متغییر عمومی یا استاتیک تعریف کنید که حاوی یک متن مخصوص مثلا نام شما یا فامیلی شما باشد بعد از کامپایل dll - شما میتوانید توسط برنامه ای دیگه فایل dll رو باز کنید و محل قرار گیری اسم یا فامیلی خودتان رو پیدا کنید این همان چیزی هست که میخواهید به راحتی میتوانید در این محل داده خاص خودتان را قرار بدید.

Felony
پنج شنبه 19 اسفند 1389, 06:05 صبح
سلام ممنون از پاسختون
من خیلی گشتم ممنون می شوم اگر لینک اون تاپینگ ها رو بگذارید درضمن باید این نکته هم ذکر کرد من نمی خوام اطلاعات رو با پسوند تی اک تی و این طور فایلها ذخیره کنم ممنون می شوم سریع پاسخ دهید با تشکر:قلب:
الان سرعت اینترنت خوبی ندارم تا لینک رو پیدا کنم ، نمونه رو تا شب هیمن جا قرار میدم .


اینکه بخواهید یک bin فایل مانند dll یا exe که تقریبا ساختار مشابهی دارند مورد هدف قرار داده و داده ها ی متغییرهای اون رو تغییر بدید کار چندان راحتی نیست دلیلش این هست که مثلا اگر یک متغییر به اسم mydate را داشته باشید که حاوی تاریخ باشد نمیتوانید بعد از کامپایل محل چنین متغییری رو پیدا کنید البته داخل کاتالوگ توضیحات pe فایلها میتوانید محل قرار گیری کل داده ها رو پیدا کنید اما یک متغییر تنها قابل شناسای نیست.
اما برا ی این کار میتوانید چنین کاری رو بصورت دور زدن نرم افزار انجام بدید به این شکل که میتوانید یک رشته ثابت رو بصورت متغییر عمومی یا استاتیک تعریف کنید که حاوی یک متن مخصوص مثلا نام شما یا فامیلی شما باشد بعد از کامپایل dll - شما میتوانید توسط برنامه ای دیگه فایل dll رو باز کنید و محل قرار گیری اسم یا فامیلی خودتان رو پیدا کنید این همان چیزی هست که میخواهید به راحتی میتوانید در این محل داده خاص خودتان را قرار بدید.
چیزی که ایشون میخوان با گفته شما زمین تا آسمون فرق داره ، قرار نیست متغییر یا .... عوض بشه ، ایشون میخوان یکسری اطلاعات تو فایل dll بنویسن و هر وقت لازم داشتن از خودش بخونن ، یعنی مثلا به جای ذخیره تنضیمات در فایل ini اون رو تو فایل dll یا exe برنامه ذخیره کنن .

tdkhakpur
پنج شنبه 19 اسفند 1389, 12:40 عصر
ایشون میخوان یکسری اطلاعات تو فایل dll بنویسن و هر وقت لازم داشتن از خودش بخونن ، یعنی مثلا به جای ذخیره تنضیمات در فایل ini اون رو تو فایل dll یا exe برنامه ذخیره کنن .

اتفاقا کاری که ایشان میخوان انجام بدهند درست برعکس برداشت شماست خواسته ایشون به این سادگی نیست .
برای دستگاری یک فایل باینری وقت فراون لازم داره و به نظرم میخواهید بگید که فایل رو باز کنه و داده ها رو به انتهاش اضافه کنه.

nsco_nsco
جمعه 20 اسفند 1389, 00:41 صبح
سلام دوستان من ممنون از پاسخهاتون
نمی دونستم این همه منظورهای مختلف داشتم:لبخند:
من می خوام یک فایل مثلا اگزه رو بتونم درونش اطلاعات ذخیره کنم در خودش و اگر هم این طور نمیشه ساخت لا اقل بشه یک خروجی بایک پسوندی که خودمون انتخاب می کنیم مثل همونی که مثلا ساخت تروجان اگر دیده باشید یک خروجی میده البته این یک مثال برای ساخت فایل هست اما من به صورت پیشرفته می خوام برای ثبت اطلاعات ممنون میشوم سریع پاسخ بدهید :خجالت::قلب:

Felony
جمعه 20 اسفند 1389, 06:26 صبح
براتون یک نمونه ضمیمه کردم ، برنامه Run Me رو اجرا کنید و داخل Memo متنی رو وارد کنید و دکمه Save رو بزنید حالا برنامه رو ببندید و برنامه Test رو اجرا کنید و دکمه Load رو بزنید .

tdkhakpur
جمعه 20 اسفند 1389, 12:52 عصر
براتون یک نمونه ضمیمه کردم ، برنامه Run Me رو اجرا کنید و داخل Memo متنی رو وارد کنید و دکمه Save رو بزنید حالا برنامه رو ببندید و برنامه Test رو اجرا کنید و دکمه Load رو بزنید .خسته نباشی!
اسم project1 رو runmeگذاشتید بعد با کد
aStream.Seek(-SizeOf(Integer), soFromEnd);
به انتهای فایل رفته و داده های داخل memo رو به انتهای فایل می چسبونی.(پست (http://barnamenevis.org/showthread.php?277614-ذخیره-یک-داده-در-دی-ال-ال&p=1227309&viewfull=1#post1227309) 6)


مثلا ساخت تروجان اگر دیده باشید یک خروجی میده

تروجان وقتی اجرا میشه یک فایل باینری رو از فایلی که اجرا شده خارج میکنه و داخل فایلی با پسوند اجرایی ذخیره میکنه بعد اجرا رو میده دست رجیستری تا بعد بتونه اتومات اجرا بشه.
البته روش اضافه کردن یک تروجان به انتهای فایل روش مناسبی نیست میتونه بوسله اکثر ویندوزها که به یک ویروس یاب نچندان قدرتمند مجهز شده باشه شناسایی بشه البته به شرطی که برنامه قبلا بلوکه شده باشه.
میتوانید از روش ایجاد فضا برای اتصال تروجان و بعد پیدا کردن محل و الصاق کد به اون قسمت استفاده کنید.

Felony
جمعه 20 اسفند 1389, 19:51 عصر
خسته نباشی!
اسم project1 رو runmeگذاشتید بعد با کد1 aStream.Seek(-SizeOf(Integer), soFromEnd);


به انتهای فایل رفته و داده های داخل memo رو به انتهای فایل می چسبونی.(پست 6)
دقیا سوالی که کاربر پرسیده رو بخون اینقدر هم وقت کاربرها رو صرف خوندن پست های فاقد محتوات نکن ، کی بیخیال این کارهات میشی فقط خدا میدونه !

nsco_nsco
جمعه 20 اسفند 1389, 22:27 عصر
سلام ممنون از پاسختون
این فایلی که قرار دادید در فایل تیکست ذخیره میشه که یک فایل اگزه هست گشتم تو فایل سورسش وجود نداره ممنون می شوم قرار بدهید با تشکر :قلب:

nsco_nsco
جمعه 20 اسفند 1389, 23:50 عصر
سلام یک سوال دیگه اگر ممکنه در مورد برنامه و مخصوصا فانکشن یک توضیح بدید با تشکر .


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Save: TButton;
Memo1: TMemo;
Load: TButton;
procedure SaveClick(Sender: TObject);
procedure LoadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;
try
aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
MemoryStream.Seek(0, soFromBeginning);
// seek to end of File
// ans Ende der Datei Seeken
aStream.Seek(0, soFromEnd);
// copy data from MemoryStream
// Daten vom MemoryStream kopieren
aStream.CopyFrom(MemoryStream, 0);
// save Stream-Size
// die Streamgr??e speichern
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
finally
aStream.Free;
end;
Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
aStream: TFileStream;
iSize: Integer;
begin
Result := False;
if not FileExists(AFileName) then
Exit;

try
aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
// seek to position where Stream-Size is saved
// zur Position seeken wo Streamgr??e gespeichert
aStream.Seek(-SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if iSize > aStream.Size then
begin
aStream.Free;
Exit;
end;
// seek to position where data is saved
// zur Position seeken an der die Daten abgelegt sind
aStream.Seek(-iSize, soFromEnd);
MemoryStream.SetSize(iSize - SizeOf(Integer));
MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
MemoryStream.Seek(0, soFromBeginning);
finally
aStream.Free;
end;
Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(aStream);
AttachToFile('Test.exe', aStream);
aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
LoadFromFile('Test.exe', aStream);
Memo1.Lines.LoadFromStream(aStream);
aStream.Free;
end;
end.

nsco_nsco
شنبه 21 اسفند 1389, 00:38 صبح
سلام جواب سوال اولم رو گرفتم که یک فایل اگزه رو سورسش رو بزار فهمیدم یک فایل اگزه فقط باشه اما یک سوال دیگه ایا میشه بگید چطوری چند رکورد دیگه توش سیو کنم ممنون و ایا میشه عکس هم درون فایل ریخت یا نه ممنون:قلب:

nsco_nsco
شنبه 21 اسفند 1389, 03:34 صبح
سلام
به یک نکته در مورد این برنامه پی بردم البته دو نکته یکی اینکه اگر فایل رو با نوت پد باز کنی اخر فایل کل اون اطلاعات که دادیش هست و یکی دیگه اینکه اگر مثلا بنویسید علی و بعد سیو کنید و بعد باز هم مثلا بعدش بنویسید حسن با ز سیو کنید و با فایل رو با نوتپد باز کنید خواهید دید همه اینها هست چه اون علی و چه اون حسن که جدید سیو شده حالا سوال داشتم ایا نمیشه این ها رو قاطی کرد یا لااقل غیر قابل فهم و چه طور باید کاری کنم که اون قبلی که قبلا سیو شده پاک بشود ممنون اگر ممکنه به این چند سوال و البته بالایی ها کمی سریع پاسخ بدید ممنون از همه شما مخصوصا اقای تاجیک :قلب:

Felony
شنبه 21 اسفند 1389, 06:05 صبح
سلام
به یک نکته در مورد این برنامه پی بردم البته دو نکته یکی اینکه اگر فایل رو با نوت پد باز کنی اخر فایل کل اون اطلاعات که دادیش هست و یکی دیگه اینکه اگر مثلا بنویسید علی و بعد سیو کنید و بعد باز هم مثلا بعدش بنویسید حسن با ز سیو کنید و با فایل رو با نوتپد باز کنید خواهید دید همه اینها هست چه اون علی و چه اون حسن که جدید سیو شده حالا سوال داشتم ایا نمیشه این ها رو قاطی کرد یا لااقل غیر قابل فهم و چه طور باید کاری کنم که اون قبلی که قبلا سیو شده پاک بشود ممنون اگر ممکنه به این چند سوال و البته بالایی ها کمی سریع پاسخ بدید ممنون از همه شما مخصوصا اقای تاجیک :قلب:
1- اطلاعات آخر فایل نوشته میشه .
2- برای اینکه اطلاعات رو هرکسی نتونه با یک ویرایشگر بخونه قبل از ذخیره اطلاعاتت رو کد کن و بعد ذخیره کن .
3- هر بار که اطلاعات جدیدی اضافه میکنی در آخر فایل اضافه میشه ، خودت باید برنامه و طوری تنظیم کنی که به جای اینکه هر بار در آخر فایل بنویسه ، نوشتن رو از جایی شروع کنه که بار اول شروع کرده بود .
4- فایل هم میتونید اضافه کنید .

* در آخر سوالات شما بیشتر شبیه درخواست برنامه هست نه سوال ، اصل سوالتون پاسخ داده شد ، باقی مسائل مطرح شده از جانب شما چیزهاییی هستند که کافی هست کمی زمان برای یادگیری و رفع مشکل بزارید .

nsco_nsco
شنبه 20 فروردین 1390, 03:40 صبح
سلام
آقای تاجیک ممنون می شوم بابت اینی که گفتید راهنمایی کنید ما هر کاری بود کردیم نشود و بلد نبودیم:

- هر بار که اطلاعات جدیدی اضافه میکنی در آخر فایل اضافه میشه ، خودت باید برنامه و طوری تنظیم کنی که به جای اینکه هر بار در آخر فایل بنویسه ، نوشتن رو از جایی شروع کنه که بار اول شروع کرده بود .
با تشکر:قلب:

a_mosavian
شنبه 20 فروردین 1390, 18:45 عصر
افزودن یا ویرایش یک resource در فایل اجرایی کار سختی نیست و خود ویندوز توابع API برای اینکار داره که چون دوستان گذاشتن تکرار نمی کنم. ولی از این روش برای ذخیره داده های برنامه تون بهره نگیرید. چون هر ویرایش باعث افزودن شدن به حجم فایل اجرایی میشه. بهترین کار اینه که از Registry بهره بگیری. اگر داده های طولانی تری داری از xml بهره بگیر که parse کردنش هم راحت هست.اگر نیاز به رمزگذاری چیزی داری هم می تونی فایل xml رو encode کنی و هنگام اجرا decode کنی. هرجا ثقیل بود نفهمیدی بگو :لبخند: