• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

چگونگي نوشتن قفل با وي بي

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام بر همه
مرسي سودا جان ممنون ميشم مثال رو ببينم
فعالا دارم رو شناسايي ديباگر ها كار ميكنم و همچنين توي لود كردن فايل ها توي مموري و سي ار سي قسمت ديتا سكشن و....
براي ادامه بحث چيزهايي رو تست كردم و جواب دادن رو توي پست بعدي ميگذارم

راستي سودا جان اسمبلي هم تا حدودي بلدم .

در داخل داس بله كدش را قبل نوشته ام و تستش هم كرده ام و جواب داده است
( براي اينكه با اين قسمت قاطي نشه )
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
با سلام
همانطور كه ميدونيد كركر ها از برنامه هاي گوناگوني براي مهندسي معكوس استفاده ميكنند
يكي از خواص خوب يك قفل چه سخت افزاري و چه نرم افزاري اين است كه مشخص كند ايا اين برنامه در حال تريسنگ و يا ديباگينگ و يا پچ اينگ و .... قرار دارد يا نه ؟
خوب معمولا تا انجايي كه ميدونم مهندسين معكوس نرم افزاري از نرم افزاري زيادي استفاده ميكنند يكي از ديباگر هاي معرف در لول يوزر ديباگر برنامه ollydbg است . كد زير اين ديباگر را پيدا و در صورت ران بودن ان را مي بندد

کد:
Function Olly_Like(strTemp As String) As Boolean
    Dim lngTemp As Long
    Olly_Like = False
        lngTemp = FindWindow(strTemp, vbNullString)
        If lngTemp <> 0 Then
            Call GetWindowThreadProcessId(lngTemp, lngTemp)
            Killp lngTemp
            Olly_Like = True
        End If
End Function
Function Killp(HPid As Long)
    Dim lngTemp As Long
    lngTemp = OpenProcess(1, 0, HPid)
    If lngTemp <> 0 Then TerminateProcess lngTemp, ByVal 0&
End Function

كه براي شناسايي اين ديباگر ميتوانيد تابع زير را هر كجا كه خواستيد صدايش بكنيد
کد:
Olly_Like("OLLYDBG")
كه در صورت پيدا كردن اين ديباگر ان را بسته و مقدار صحيح را بر ميگرداند .

اين روش رو بصورت تابع نوشتم تا بتونيم از اين تابع در شناسايي برنامه هاي كركر استفاده كنيم

راستي api مورد نياز و ديگر موارد را بايد به برنامه تان اضافه كنيد

اميدوارم كمك تان كند

راستي استفاده از اين كدها با ذكر نويسنده "saeedsmk" بلا مانع است ( اين براي كدها ديگر هم صدق ميكند )

:lol:
 

redjoker

کاربر تازه وارد
تاریخ عضویت
21 فوریه 2006
نوشته‌ها
91
لایک‌ها
0
محل سکونت
نصف جهان
عرضم به حضورتون تمام نرم افزارهای خفن این کارو انجام میدن ولی خب همشون به راحتی گول میخورن
در هر صورت این هم کد تشخیص سافت ایس هم من مینویسم
چون وی بی بلد نیستم به دلفی مینویسم :)
PHP:
Function IsSoftIce95Loaded: boolean; 
Var hFile: Thandle; 
Begin 
result := false; 
hFile := CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE, 
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL, 0); 
if( hFile <> INVALID_HANDLE_VALUE ) then begin 
CloseHandle(hFile); 
result := TRUE; 
end; 
End; 
 
Function IsSoftIceNTLoaded: boolean; 
Var hFile: Thandle; 
Begin 
result := false; 
hFile := CreateFileA('\\.\NTICE', GENERIC_READ or GENERIC_WRITE, 
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL, 0); 
if( hFile <> INVALID_HANDLE_VALUE ) then begin 
CloseHandle(hFile); 
result := TRUE; 
end; 
End;

البته همه اینها قابل رفع شدن هستن ولی فقط برای یک قفل بیشتر روی برنامه ضرری نداره :)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
خوب اين هم كد شناسايي si براي وي بي :
کد:
Function Si_Like(strTemp As String) As Boolean
    Dim lngTemp As Long
    Si_Like = False
        lngTemp = CreateFile(strTemp, &HC0000000, 3, 0, 3, &H80, 0)
        If lngTemp <> -1 Then
            Call CloseHandle(lngTemp)
            Si_Like = True
        End If
End Function

كه براي شناسايي بايد
كد هاي زير رو صدا بزنيد
کد:
        Detect1 = Si_Like("\\.\SIWVID")

        Detect2 = Si_Like("\\.\SICE")

        Detect3 = Si_Like("\\.\NTICE")

        Detect4 = Si_Like("\\.\ICEDUMP")

        Detect5 = Si_Like("\\.\SIWDEBUG")

        Detect6 = Si_Like("\\.\SIWDEBUG")
( پي نوشت دوست عزيز redjoker ممنون از كدي كه داده بودي اگر كلمات بالا هم اضافه كنيد كدتون تكميل تر ميشه )

در كد هاي بعدي نحوه پيدا كردن بقيه ابزار ها اضافه ميكنم مثل peid و يا regmon و يا filemon و يا trw و يا ....

:lol:
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
خوب اين هم كد شناسايي si براي وي بي :
کد:
Function Si_Like(strTemp As String) As Boolean
    Dim lngTemp As Long
    Si_Like = False
        lngTemp = CreateFile(strTemp, &HC0000000, 3, 0, 3, &H80, 0)
        If lngTemp <> -1 Then
            Call CloseHandle(lngTemp)
            Si_Like = True
        End If
End Function

كه براي شناسايي بايد
كد هاي زير رو صدا بزنيد
کد:
        Detect1 = Si_Like("\\.\SIWVID")

        Detect2 = Si_Like("\\.\SICE")

        Detect3 = Si_Like("\\.\NTICE")

        Detect4 = Si_Like("\\.\ICEDUMP")

        Detect5 = Si_Like("\\.\SIWDEBUG")

        Detect6 = Si_Like("\\.\SIWDEBUG")
( پي نوشت دوست عزيز redjoker ممنون از كدي كه داده بودي اگر كلمات بالا هم اضافه كنيد كدتون تكميل تر ميشه )

در كد هاي بعدي نحوه پيدا كردن بقيه ابزار ها اضافه ميكنم مثل peid و يا regmon و يا filemon و....

:lol:
 

soda

کاربر تازه وارد
تاریخ عضویت
21 آپریل 2005
نوشته‌ها
6
لایک‌ها
1
خوب ممنون
اسمبلي هم كه بلديد
خوب پس بد نيست مراوداتي پشت پرده داشته باشيم ( :cool: )
آيدي ياهوي من soda120 هست
ممنون ميشم اد كنيد
يكسري كار در مورد اسمبلي دارم و يه پيشنهاداتي براي بهتر كردن قفل هاتون
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
برنامه من كوتاه تره كه :D
کد:
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
h = FindWindow(vbNullString, "OLLYDBG")
If h = 0 Then
  end
End If


:D:D:D
خودتون بگين كدوم راحت تره :D
كپي بدون ذكر منبع هم بلا مانع ميباشد :D
 

redjoker

کاربر تازه وارد
تاریخ عضویت
21 فوریه 2006
نوشته‌ها
91
لایک‌ها
0
محل سکونت
نصف جهان
به نقل از mehdvirus :
برنامه من كوتاه تره كه :D
کد:
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
h = FindWindow(vbNullString, "OLLYDBG")
If h = 0 Then
  end
End If
:D:D:D
خودتون بگين كدوم راحت تره :D
كپي بدون ذكر منبع هم بلا مانع ميباشد :D


آخه N+1 ماژول برای مخفی کردن olly کنار خود olly اومده :) که این قضیه را هم پشتیبانی میکنه :)
تقریبا به صورت Default :happy:

فایند ویندو برای regmoniotr و امثال اون هم در همین حد ( تشخیص پنجره با این نام خوب کار میکنه )
ولی ......... تقریبا این دوره زمونه دیگه اینقدر بلا سرکرکرها اومده که به همه این روشها اشنا باشن.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
مهد ویروس جان سلام
خوب هستید
از کد بسیار کوچک و راحتان . کمک کنید این تاپیک رو یک تاپیک با حال میکنیم

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

ذکر منبع هم برای ذکر کد توی فروم های دیگه است اگه بد نوشتم معذرت میخوام منظورم همین بود . چون عین نوشته های خودم رو یکی دیگه تکرار کرده بود و میگفت خودش این مبحث رو پیش برده . همین

-------

جوکر عزیز راست میگی تمام این روش ها قدیمیه . اما کاچی بهتر از هر چی

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

مثل کد زیر
while (1<>2)
Call Shell("explorer.exe", vbNormalFocus)
wend
و یا از این دست کدها

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

---------

در کل منظورم از راه انداختن این تاپیک افزایش انتی کرکینگ بود ( البته بر اساس دانش خودم که خیلی ناچیزه )

امیدوارم کمک کنه
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
چه زود برخورد بهت :(
بابا بيخيال جدي نگير من همينطوري شوخي كردم:(
منم زياد وي بي بلد نيستم
منم دانشجو :D
 

redjoker

کاربر تازه وارد
تاریخ عضویت
21 فوریه 2006
نوشته‌ها
91
لایک‌ها
0
محل سکونت
نصف جهان
اینا که گفتی تقریبا بدترین چیز برای یک کرکره :)
امیدوارم کسی ازاین قفلها نزاره :p چون جدا اعصاب خرد کن میشه . :f34r:

پیوست » یک قفل بیشتر برابر است با حداقل x دقیقه بیشتر علافی کرکر .

در کل منظورم از راه انداختن این تاپیک افزایش انتی کرکینگ بود ( البته بر اساس دانش خودم که خیلی ناچیزه )
سعید جون الان دماغت دراز میشه :whistle:
 

cracki

Registered User
تاریخ عضویت
23 مارس 2004
نوشته‌ها
672
لایک‌ها
23
سن
38
آقا ما هم بازي... ;)
چون نيازم شد و سعيد جان لطف كرده بودن اينجا گذاشته بودن بالاخره اساسي اون بحث رو خوندم(اينو مي گم)
اول بايد بگم سعيد جان دمت گرم ! عالي بود !!!!
به WriteProcessMemory دقت نكرده بودم ! خيلي توپ جواب داد !

حالا چند تا مسئله پيش مياد: ( دوستان قبلا تون مطلب رو بخونن لطفا - وي بي كارا از دستش ندن)
متاسفانه فايلي كه اينطوري مي شه آنتي دامپ نيست !
چي كارا كنيم كه آنتي دامپ بشه

من براي اين مشكل فكر كردم كه مثلا بيايم فايل رو قبلا با يه پروتكتور معروف پروتكت كنيم و بعد اين تغييرات رو بديم
اما مشكلي پيش مياد ! اونم اينه كه فايلي كه پروتكت بشه CrC چك روش مياد و اگه تغييرش بديم ممكنه كار نكنه
تست نكردم ولي حدس مي زنم كه ممكنه كار نكنه
البته روي پروتكتور هاي مختلف فرق مي كنه (بايد تست كرد)

اما چرا بيايم يه فايل رو خراب كنيم و بعد لودش كنيم؟!

بهتر نيست شل كار كنيم؟!
البته همين اول بگم كه در ابتداي كار نفس عمل مهمه
اينكه بشه اين كار رو كرد- آنتي كرك بمونه واسه بعد ...
براي اين كار چه نظري داريد؟
من يه فكرايي كردم ولي مي خوام اول نظر شما رو بدوم

---------------
پ.ن:
بي خيال بچه ها ! بهتره به هم و كدهاي هم و نظرات هم احترام بزاريم (شوخي رو هم از بحث هاي جدي جدا كنيم)
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستید
امیدوارم کسی از دست من ناراحت نشده باشه .
خوب وقتی یک چیز رو ادم توی یک برنامه میبینه و بعد اون چیز هنگام کرکینگ ازرش میده خودش میشه یک ادیه .
یک برنامه بود که یادم نیست چیبود. لعنتی بعد از اینکه لایسنس رو براش میساختی شروع میکرد به کار بعد یهو بعداز یک یا دو دقیقه . انقدر کامند داس باز میکرد که دستگاه به کما میرفت و تنها راهش ریست بود . خ.د این یک ایده با حال بود . البته بعدا درست شد ( منظورم لایسنسش بود )

پ.ن :
این ها رو برای کرکر های عزیز میگم در این جور مواقع اگه از کرنل دیباگر استفاده میکند . به سرعت روی winexec بریک پوینت بگذارید و....

کرکی جان شل چیز جالبیه . اما یک مشکل اصاصی داریم :
اونم اینه توی وی بی دستور ی که کار call eax رو بکنه نداریم
توی سی و اسمبلی ( این دوتا رو چون خودم استفاده کردم میدونم شاید توی دیگر زبانها مثل دلفی هم باشه که فکر کنم باشه ) این کد رو داریم پس به راحتی میتونیم شل رو بر پا کنیم . اما نمیدونم توی وی بی همچین چیزی هست یا نه .
خودم دارم روش کار میکنم
نهایتا اگر مجبور بشیم یک تابع به با کمک بچه به msvb اضافه کنیم که این کار بشه
پ.ن:
مهندسی معکوس یعنی اضافه کردن هر چیز و یا برداشتن هر چیز از توی یک برنامه کامپایل شده

به هر حال
امیدوارم کمک کنه
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
اینم کد های برای شناسایی
regmonitor
کد:
        Detect = Si_Like("\\.\FILEMON")
   
        Detect = Si_Like("\\.\FILEVXD")
    
        Detect = Olly_Like("FilemonClass"

توابع هم که قبلا معرفی شده بودند
پ.ن:
البته بهتره دوستان برای هر قسمت کد جدا گانه بنویسند و چون اگر یک کرکر مثلا تابع olly_like رو پچ کنه دیگه همیشه شناسایی که از این متد استفاده میکنند .پچ شده اند و از کار میافتند .
باید کاری کرد که کار کرکر سخت بشه نه اینکه از روش های برنامه نویسی ساخت یافته استفاده کرد .
یعنی هر خطایی یک مسیج و هر مسیج یعنی محلی برای تریس برای کرکر ( منظورم جاهایی که قفل عمل میکنه
)

امیدوارم کمک کنه
 

soda

کاربر تازه وارد
تاریخ عضویت
21 آپریل 2005
نوشته‌ها
6
لایک‌ها
1
آقا مثل اينكه ميخواي حسابي حالي به كركرها بدي
جمله آخر كاملا تائيد ميشه
اما متاسفانه كركر ها هر چي دارن وقت آزاد
من يه كرك مي ديدم خيلي باحال بود
مي اومد محتواي آدرس حافظه رو خراب ميكرد
مثلا اگه كرك ميشد مي رفت محلي كه مربوط به نمايش ديالوگ برنامه بود رو دست ميزد
سعي ميكنم از اين به بعد نكات جالب ديدم كه به درد اينجا بخوره اينجا معرفي كنم
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستید
این کد regmon رو شناسایی میکنه
البته روی xp ممکنه خوب جواب نده اما رو 98 درسته کدهای دیگر هم بعدا کم کم میگم
کد:
        Detect = Si_Like("\\.\REGVXD")

        Detect = Olly_Like("RegmonClass")
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,601
لایک‌ها
49
محل سکونت
Anywhere
ميشه مثلا يه برنامه بنويسيم كه همه اينكارهارو بكنه ...بعد اينو بصورت ريسورس بزاريم تو برناممون ؟ بعد اجراش كنيم ...اگه بود بزنه ريستارت كنه كامپيوتر رو
 

redjoker

کاربر تازه وارد
تاریخ عضویت
21 فوریه 2006
نوشته‌ها
91
لایک‌ها
0
محل سکونت
نصف جهان
به نقل از mehdvirus :
ميشه مثلا يه برنامه بنويسيم كه همه اينكارهارو بكنه ...بعد اينو بصورت ريسورس بزاريم تو برناممون ؟ بعد اجراش كنيم ...اگه بود بزنه ريستارت كنه كامپيوتر رو

عزیزم یه وقت یه نفر مثلا sice را برای مقاصد مفید روی کامپیوترش نصب داشته باشه :)
ریست ترجیحا نکنه ... پیغام بده اول دیباگر را دیزیبل کنید بعد برنامه را اجرا کنید :)
کد شات دات یه من خشونت بار هست و ممکنه سازمان ملل براش بیانیه صادر کنه :p

پیوست » ترجیحا جزئی از کداصلی باشه بهتره تا ریسورس باشه . تنها حسنش اینه که دیباگرهای سطح کاربر همزمان نمیتونن 2تا پروسه را دیباگ کنن و ممکنه کرکر کمی به اشتباه بیفته ...
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام مهد ويروس جان
بله ميشه اين كد ها رو بصورت dll در اورد و بعد از صدا زدن در صورت تشخصيص وسيله مورد نظر با صدا زدن تابع خروج از ويندوز دستگاه رو ريستارت كرد
و يا اينكه يك برنامه را با سرعت فرمان صدا زد و يا ..... ديگه اين بخش به نظر شما وابسته است.

ولي همانطور كه دوست عزيز جوكر قرمز گفتند بهتر است جز برنامه باشد
 

morteza_k

Registered User
تاریخ عضویت
28 مارس 2006
نوشته‌ها
37
لایک‌ها
0
سلام saeedsmk جان نمی دونی چقدر با اینجا حال کردم خوده خوده جنسه.
ممنونم.
 
بالا