PDA

View Full Version : امنيت پسورد ديتابيس در فايل اجرايي



دنیای دلفی
جمعه 18 مرداد 1387, 17:04 عصر
در اين كرك مي سعي شده هم در حالت طرحي (Design Time) هم در حالت اجرا(RunTime) از رمز داخل فايل اجرايي محافظت شود .

راهنمايي : در هنگامي كه قرار است رشته رمز به بانك تزريق شود كد هاي مربوطه به بخشي از حافظه منتقل شده و در شرايطي امن (شايد) اين تزريق انجام مي شود . مجدد كدها رمز گذاري مي شوند . و . . .

دوستان لطف كنند رمز بانك اطلاعاتي را پيدا كنند .
كار سختي است ولي شدني .
امتياز بين 1 تا 10 فراموش نشود . در صورت حل توضيحات كامل ارائه مي شود .

نكته پوشه برنامه روي صفحه DeskTop كپي نشود . داخل يكي از درايوها باشد .

دنیای دلفی
جمعه 18 مرداد 1387, 22:27 عصر
برديا جان مي دونم دانلود كردي وضعيت را تا اينجا در چه سطحي مي بيني .

Securebit
شنبه 19 مرداد 1387, 01:51 صبح
امیدوارم از حرفم ناراحت نشید امنیت کرک می های شما تماما مدیون پروتکتوری هست که از آن استفاده میکنید نه برنامه نویسی خودتون تا الان هر چی کرک می گذاشته اید با Themida پروتکت شده بودند و همگی کرک شدند آنالیز VM وقت گیر هست و از حوصله من خارج مگر در مواردی.

دنیای دلفی
شنبه 19 مرداد 1387, 09:00 صبح
ممنون كه وقت گذاشتيد .
مهمترين راه در بالا بردن امنيت استفاده صحيح از پروتكتورهاي خوب است . و مهمترين هدف خسته كردن كركر.

باز هم ممنون

دنیای دلفی
شنبه 19 مرداد 1387, 09:02 صبح
ايني كه الان گذاشتم 90 درصد قدرت Themida بود ولي در قفلهايي كه گذاشتم 50 درصد كد نويسي خودم و 50 درصد هم Themida

دنیای دلفی
شنبه 19 مرداد 1387, 14:02 عصر
سلام
كلاه سفيد من قوانين را مطالعه كردم و در تمامي موارد توضيحات كافي و مكفي نيز دادم و خواهم داد . همانطور كه ديديد گفته بودم اگر حل شد توضيحات را مي نويسم ولي حالا چون مي گوييد مي نويسم .

اين روش براي محافظت از رمز بانك اطلاعاتي DBISAM كه درون فايل اجرايي به صورت رشته به بانك تزريق مي شود شامل دو بخش حفاظتي در فايل اجرايي و يك DLL است .
من با استفاده از يك AESٍEncrypt رمز را كد كردم . براي اين كار از يك كليد استفاده نمودم .
حالا با استفاده از اين كار يك رشته كد شده دارم و يك كليد . كه بايد در كد نويسي با استفاده از AESDecrypt آن را بوسيله كليد تبديل به رشته اصلي كنم و به بانك تزريق كنم .

من با استفاده از يك روش ابداعي هم كليد و هم رشته كد شده را نابود كردم و آنها را در زمان طراحي توليد كردم . كليد را در DLL قرار دادم و رشته كد شده را در EXE .
نحوه نابود كردن رشته كد شده و كليد به اين صورت است .

در فايل اجرايي براي رشته كد شده :


const
dbs: array [0..43] of Byte= (
$B5,$F1,$74,$49,$B1,$AF,$48,$7F,$31,$14,$36,$A7,$3 B,$51,$BB,$40,
$81,$D6,$46,$2C,$9D,$87,$BB,$E8,$ED,$CB,$BC,$B6,$1 A,$A4,$05,$CE,
$2E,$97,$E0,$E5,$4B,$B8,$44,$11,$F0,$A5,$E6,$67
);
function dcf(aBegPos, aLength: Integer): string;
var tmp: string;
i, endPos: Integer;
MyKey: word;
begin
{$I VM_Start_WithLevel.inc}
MyKey:= 63444;
SetLength(Result, aLength);
tmp:= '';
endPos:= aBegPos+ aLength -1;
for i:= aBegPos to endPos do
tmp:= tmp+ Chr(dbs);
for i:= 1 to Length(tmp) do
begin
Result[i]:= Char(Byte(tmp[i]) xor (MyKey shr 8));
MyKey:= (Byte(tmp[i])+ MyKey)* 34523+ 34623;
end;
{$I VM_End.inc}

همانطور كه در بالا مي بينيد از سيستم ماشين مجازي TheMida همراه با Level استفاده كرده ام اين كار باعث مي شود كه يك پيچيدگي بسيار زيادي به كدها اعمال شود و روند تريس را بسيار كند و درهم كند .
من از Level پانزده استفاده كردم اين لول مي تواند تا 255 باشد كه يك پيچيدگي بسيار بالا و بسيار كند است .


در DLL براي كليد :


library Special;


{$R *.res}


function DBPASS:String; stdcall;
function dcf(aBegPos, aLength: Integer): string;
const
dbs: array [0..19] of Byte= (
$51,$72,$F2,$09,$24,$82,$51,$65,$C9,$5E,$CD,$23,$0 1,$B7,$3A,$CE,
$3F,$7C,$23,$43
);
var tmp: string;
i, endPos: Integer;
MyKey: word;
begin
MyKey:= 12345;
SetLength(Result, aLength);
tmp:= '';
endPos:= aBegPos+ aLength -1;
for i:= aBegPos to endPos do
tmp:= tmp+ Chr(dbs[i]);
for i:= 1 to Length(tmp) do
begin
Result[i]:= Char(Byte(tmp[i]) xor (MyKey shr 8));
MyKey:= (Byte(tmp[i])+ MyKey)* 52845+ 22719;
end;
end;

begin
{$I CodeReplace_Start.inc}
Result:=dcf(0 ,20);
{$I CodeReplace_End.inc}
end;




exports
DBPASS;

begin
end.

در dll از روش جايگزيني كد نيز براي ارسال كليد استفاده شده در اين روش كد ها به يك مكان خالي حافظه در هنگام اجرا منتقل شده در حالتي بسيار امن داده پس از توليد ارسال مي شود و دوباره كدها نابود مي شوند . اين روش به اين سبك فقط مخصوص Themida است .

دوستان از آن استفاده كنيد و لذت ببريد

حالا در فايل اجرايي درون كليد اين كدها به اينصورت نوشتم :


{$I CodeReplace_Start.inc}

DBISAMSession1.AddPassword(AESDecrypt(dcf(0 ,44),DBPASS));
Table1.Open;
MessageBox(0,pchar(Table1.fieldbyname('Message').a sstring),'',0);
Application.Terminate;
{$I CodeReplace_End.inc}

در انجا نيز اگر دقت كنيد از كد ريپليس استفاده شده است .

و در كل اين روش تا 80 درصد مي تواند كدهاي و رشته هاي شما از دست قوي ترين كركرها در امان بگذارد . و نهايتا كار هركسي نيست كه بتواند كدها و رمزهاي شما را پيدا كند .

[I]يا به زبان ساده تر نفراتي كه مي توانند برنامه شما را كرك كنند كمتر و كمتر خواهد شد.

امدوارم استفاده لازم را برده باشيد .

آقاي كلاه سفيد وجداناٌ كي مثل من در بخش امنيت نرم افزار هرچه دارد رو ميكند :گیج:. چه طوري دلت آمد لينك كرك مي من را پاك كني:گریه:

در آخر هم با TheMida پكش كردم كه هركسي تواند حتي بازش كند .