View Full Version : افزايش امنيت برنامه با استفاده از TLS CallBACK
دنیای دلفی
پنج شنبه 02 خرداد 1387, 17:13 عصر
استفاده از اين تكنيك بسيار مفيد است و كمك زيادي در حفاظت از برنامه مي كند .
با استفاده از اين تكنيك مي توانيد بخشي از كدهاي بررسي قفل را قبل از رسيدن به EntryPoint چك و ترتيب ديباگر و كركر را دارد من موفق شدم به نوعي با استفاده از DLL اون را پياده سازي كنم .
از دوستان تقاظا مي شود كه روش صحيح استفاده از اين تكنيك را آموزش دهند .
من يافته هاي خودم را قرار مي دهم :
مرحله اول ايجاد DLL :
library DLL_EntryPoint;
uses
SysUtils,
Windows,
Forms,
Classes,
Dialogs;
{$R *.res}
procedure book; stdcall;
begin
//Dummy
end;
procedure DLLEntryPoint(dwReason: DWORD); stdcall; //register; //stdcall;
begin
case dwReason of
DLL_THREAD_DETACH : ShowMessage('Thread Detach'); //0
DLL_PROCESS_ATTACH: //1
begin
// بررسي قفل
end;
DLL_THREAD_ATTACH : ShowMessage('Thread Attach'); //2
DLL_PROCESS_DETACH: //3
begin
// بررسي قفل
end;
end;
end;
exports
DLLEntryPoint,book;
begin
//DLLEntryPoint is specifically a Win32 and C++ implementation
//DLLProc is a pointer variable from the SYSTEM Unit (automatically included)
//The SYSTEM Unit is responsible for executing code assinged to DLLEntryPoint
DLLProc := @DLLEntryPoint; //Assign the address of DLLEntryPoint to DLLProc
DLLEntryPoint(DLL_PROCESS_ATTACH); //Indicate that the DLL is attaching to the process
end.
استفاده در برنامه اصلي :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure book ;
stdcall; external 'Dll_EntryPoint.DLL';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
book;
end;
end.
منتظر كد هاي شما هستم :تشویق::لبخند:
دنیای دلفی
جمعه 03 خرداد 1387, 21:37 عصر
يك سري اطلاعات ديگر پيدا كردم دوستان لطفا كمك كنند :
- Uncategorized anti-debug
(1) TLS-callback
This anti-debug was not so well-known a few years ago. It consists to instruct the
PE loader that the first entry point of the program is referenced in a Thread Local
Storage entry (10th directory entry number in the PE optional header). By doing so, the program entry-point won’t be executed first.
The TLS entry can then perform anti-debug checks in a stealthy way.
Note that in practice, this technique is not widely used.
Though older debuggers (including OllyDbg) are not TLS-aware, counter-measures are quite easy to
take, by the means of plugins of custom patcher tools.
(2) CC scanning
A common protection feature used by packers is the CC-scanning loop, aimed at detecting software breakpoints set by a debugger. If you want to avoid that kind of troubles, you
may want to use either hardware breakpoints or a custom type of software breakpoint. CLI (0xFA) is a good candidate to replace the classic INT3 opcode. This instruction does have the
requirements for the job: it raises a privileged instruction exception if executed by a ring3 program, and occupies only 1 byte of space.
(3) EntryPoint RVA set to 0
Some packed files have their entry point RVA set to 0, which means they will start executing ‘MZ…’ which corresponds to ‘dec ebx / pop edx …’.
This is not an anti-debug trick in itself, but can be annoying if you want to break on the entry-point by using
a software breakpoint.
If you create a suspended process, then set an INT3 at RVA 0, you will erase part of the magic
MZ value (’M'). The magic was checked when the process was created, but it will get
checked again by ntdll when the process is resumed (in the hope of reaching the entry-point).
In that case, an INVALID_IMAGE_FORMAT exception will be raised.
If you create your own tracing or debugging tool, you will want to use hardware breakpoint to
avoid this problem.
B-Vedadian
شنبه 04 خرداد 1387, 09:43 صبح
در باره چی کمک کنند؟
در مورد نحوه استفاده صحیح از TLS CallBack هم روش اینه:
1-تو برنامه خودت یکی با بیشتر رویه مشابه DLLEntryPoint که تو بالا نوشتی مینویسی.
2-آدرس رویه های مذکور رو به جدول TlsTable هدر فایل اجرایی اضافه میکنی.(یکی از راهاش استفاده از LordPEیه، راه بهتری رو من بلد نیستم)
با این کار بدون DLL هم همون اتفاق میافته (قبل رسیدن به Entry Point توابع مورد نظر شما اجرا میشند)
دنیای دلفی
شنبه 04 خرداد 1387, 10:47 صبح
2-آدرس رویه های مذکور رو به جدول TlsTable هدر فایل اجرایی اضافه میکنی.(یکی از راهاش استفاده از LordPEیه، راه بهتری رو من بلد نیستم)
در اين مورد بيشتر توضيح دهيد يا يك مثال بگذاريد .
ممنون مي شوم
دنیای دلفی
شنبه 04 خرداد 1387, 14:35 عصر
من LoardPe را دانلود كرده ام ولي چگونه بايد آدرس را به جدول TlsTable اضافه كنم
ali ahwaz top
شنبه 04 خرداد 1387, 18:47 عصر
باباجون پیچش ندید اینم یه سورس کد روشن و ساده برای TLS-CallBack
B-Vedadian
شنبه 04 خرداد 1387, 19:43 عصر
باباجون پیچش ندید اینم یه سورس کد روشن و ساده برای TLS-CallBack
اگه سورسشو بخوني ميبيني همين چيزايي که نوشتم رو گفته. بعد از اينکه کامپايلش کردي بايد با LordPE آدرس جدول TLS رو به اونجايي که نوشته تغيير بدي.
من LoardPe را دانلود كرده ام ولي چگونه بايد آدرس را به جدول TlsTable اضافه كنم
چون خود دلفي يک Callback براي ترد اصلي داره، بهترين راه اينه که آدرس فعلي Callback رو يه جايي يادداشت کني. بعد تو پروسه DLLEntry جديدي که نوشتي بعد کارهاي اوليه، رويه قديمي(آدرسي که يادداشت کردي) رو هم صدا بزني. در نهايت تو جدول Tls بجاي آدرس قديمي، آدرس رويه خودت رو بنويس.
Sir.V65j
دوشنبه 06 خرداد 1387, 11:04 صبح
حالا فکر کنین این آدرسی که تغییر دادین رو بیایم به حالت اصلی برگردونیم چی می شه؟! دیگه اون توابع اجرا نمی شن! ÷س می شه نتیجه گرفت نباید تنها به این روش اعتماد کرد .
دنیای دلفی
دوشنبه 06 خرداد 1387, 13:40 عصر
مجموعه كل روشهاي آنتي ديباگ را همه كركرها نمي دانند شما با هر روش گروه خاصي از كركرها را حذف مي كنيد . و و و و . . .
B-Vedadian
دوشنبه 06 خرداد 1387, 14:08 عصر
حالا فکر کنین این آدرسی که تغییر دادین رو بیایم به حالت اصلی برگردونیم چی می شه؟! دیگه اون توابع اجرا نمی شن!
برگردوندن آدرس اولیه، یک پروسه است که باید جلوشو گرفت، اولین راهش هم اینه که آدرس رویه دلفی رو بدون کد کردن و از این بحثها، تو رویه خودت استفاده نکنی. این درسته که نباید به این روش اکتفا کرد، ولی از بین بردن محافظتی که این طوری انجام شده، لزوما کار آسونی نیست.
در ضمن، خوبه بعضی از عملیات مقدار دهی آغازی یا هر چیزی که ادامه برنامتون بهش وابسته باشه رو بعد از در نظر گرفتن و اعمال روشهایی که کار Disassembly رو سخت میکنه، تو همین Callback بذارید.
دنیای دلفی
دوشنبه 06 خرداد 1387, 21:59 عصر
اگر ممكن است در خصوص استفاده از LordPe يك توضيح گام به گام بگذاريد . سر فرصت
ICEMAN
سه شنبه 07 خرداد 1387, 10:53 صبح
سلام ..
http://www.nynaeve.net/?p=180
اينجا توضيحاتي داده كه دونستنش خالي از لطف نيست
مهران موسوی
جمعه 08 آذر 1387, 17:51 عصر
با سلام خدمت دوستان عزيز .
من وقتي داشتم دنبال مطالبي در مورد TLS CALLBACK بدون وابستگي به dll ميگشتم يك فايل داخل ارشيو فايلهام پيدا كردم كه متاسفانه سورسي همراش نبود .
هر چقدر با LordPE زيرو روش كردم هيچ تغييري توش نديدم .
ولي به درستي TLS CALLBACK در اون پياده سازي شده !!!! :متفکر:
روش كارش فكر ميكنيد چي باشه ؟
راستي دنياي دلفي عزيز شما نتونستي TLS CALLBACK بدون وابستگي به dll رو بفهمي چه جوري بايد پياده سازي كرد ؟
اگه چيز جديدي فهميدي لطفا راهنمايي كن در اين زمينه .
Securebit
جمعه 08 آذر 1387, 19:35 عصر
از قسمت PE Editor فايلتون رو انتخاب بر روي دکمه Directories کليک بعد بر روي دکمه روبروي TlsTable کليک کرده مقدار SizeOfZeroFill رو به 00000000 تغيير دهيد بعد هم Save و تمام ديگر Tls در کار نيست به همين راحتي.
مهران موسوی
جمعه 08 آذر 1387, 20:46 عصر
ممنون برديا جان . اينجوري كه خيلي ساده ميشه TLS CallBack رو منسوخ كرد !
راهي هست كه نشه به اين راحتي ها از كار بيكارش كرد ؟
Nima NT
جمعه 08 آذر 1387, 22:41 عصر
ممنون آقا بردیا.
یه سوال داشتم , پس چطوری هست که تکنیک مورد استفاده در پروتکتور ExeCryptor رو که اگر اشتباه نکنم همین TLS Callback هست رو با این تکنیک نمیتونن دور بزنن ؟
هر جا دیدم واسه آنپک کردن اومدن تنظیمات Olly رو عوض کردن , آیا اینکه نمیتونن همین کاری که شما گفتید رو انجام بدن بر میگرده به CRC Check فوق العاده همین پروتکتور ؟
Securebit
جمعه 08 آذر 1387, 23:41 عصر
البته این روش در مورد ExeCryptor هم مصداق دارد ولی با این تفاوت که بعد از آنپک فایل صورت میگیرد.
دنیای دلفی
شنبه 09 آذر 1387, 19:41 عصر
ديگه زياد TLS فايده نداره روشهاي بهتري هم هست كه بهشون دسترسي پيدا كردم دارم به HotLock با دقت اضافشون مي كنم به خاطر همينه عرضه نسخه بتا به تعويق افتاده .
منتظر خبرهاي جديد باشد . خبري در راه است
مهران موسوی
یک شنبه 10 آذر 1387, 00:19 صبح
مثلا چه روشهايي ؟
Nima NT
یک شنبه 10 آذر 1387, 01:01 صبح
بابا ای ول ....
منتظر هستیم.
Syamah
پنج شنبه 24 بهمن 1387, 11:27 صبح
باباجون پیچش ندید اینم یه سورس کد روشن و ساده برای TLS-CallBack
Error: Debuger Not Found
Nima NT
پنج شنبه 24 بهمن 1387, 19:59 عصر
Error: Debuger Not Found
میشه منظورتون رو کمی توضیح بدین ؟!؟!؟! :متفکر:
Babak.Hassanpour
پنج شنبه 20 فروردین 1388, 09:15 صبح
در این زمینه سورسی برای وی بی ( ترجیحا 6 ) دارید؟
دنیای دلفی
پنج شنبه 20 فروردین 1388, 19:59 عصر
درخصوص نوع زبان مهم نيست همون فايل dll را كه توي دلفي نوشته شده به VB بازنويسي كنيد مي شه مال VB
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.