سلام. خدمت همه دوستات گرامی
من برنامه ایی دارم که نیاز به پچ شدن یه فایل DLL داره برای کرک کردنش. متاسفانه فایل DLL با روش ASLR یا Address Space Layout Randomization محافظت میشه و هر سری یه آدرس جدید میده
من خودم مناسفانه تا به حال برای DLL ها Loader نساختم و نمی دونم نحوه ساخت به چه شکل هستش.
اگر فایل پچ بشه متاسفانه نرم افزار ارور میده و اجرا نمیشه و احتمالا یه پروتکتور هم در این موضوع داره. به همین جهت علاقه دارم با Loader اجرا کنم.
دوستان تجربه ایی دارن من رو در این زمینه کمک کنن؟
ASLR رو فيكس كن !!!
راهاي زيادي داره،ساده ترين براش ما استفاده از ابزار CFF EXPLORER هست
1-DLL رو درون برنامه درگ كنيد
2- به قسمت Optional Header
3- به فيلد DllCharacteristics بريد ودبل كليك كنيد
4- گزينه DLL can move رو غير فعال كنيد
5-ذخيره كنيد(قبلش ي بك آپ از فايلتون بگيريد)
روش دوم: همون روش اول با اسكريپ پايتون
کد php:
import argparse
import os
import pefile
class DllCharacteristics():
def __init__(self):
self.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = False
self.IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = False
self.IMAGE_DLLCHARACTERISTICS_NO_BIND = False
self.IMAGE_DLLCHARACTERISTICS_NO_SEH = False
self.IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = False
self.IMAGE_DLLCHARACTERISTICS_NX_COMPAT = False
self.IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = False
self.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = False
def get_dll_characteristics(path):
foo = DllCharacteristics()
pe = pefile.PE(path, fast_load=True)
dll_characteristics = pe.OPTIONAL_HEADER.DllCharacteristics
if dll_characteristics > 0:
if dll_characteristics >= 32768:
foo.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = True
dll_characteristics -= 32768
if dll_characteristics >= 8192:
foo.IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = True
dll_characteristics -= 8192
if dll_characteristics == 2048 or dll_characteristics > 2080:
foo.IMAGE_DLLCHARACTERISTICS_NO_BIND = True
dll_characteristics -= 2048
if dll_characteristics == 1024 or dll_characteristics > 1056:
foo.IMAGE_DLLCHARACTERISTICS_NO_SEH = True
dll_characteristics -= 1024
if dll_characteristics == 512 or dll_characteristics > 544:
foo.IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = True
dll_characteristics -= 512
if dll_characteristics == 256 or dll_characteristics > 288:
foo.IMAGE_DLLCHARACTERISTICS_NX_COMPAT = True
dll_characteristics -= 256
if dll_characteristics >= 128:
foo.IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = True
dll_characteristics -= 128
if dll_characteristics == 64:
foo.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = True
dll_characteristics -= 64
return foo
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('dir', help='Directory to scan')
args = parser.parse_args()
dep_enabled = []
dep_disabled = []
aslr_enabled = []
aslr_disabled = []
for root, dirs, files in os.walk(args.dir):
for f in files:
bar = get_dll_characteristics(os.path.join(root, f))
if bar.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE:
aslr_enabled.append(f)
else:
aslr_disabled.append(f)
if bar.IMAGE_DLLCHARACTERISTICS_NX_COMPAT:
dep_enabled.append(f)
else:
dep_disabled.append(f)
print "ASLR Enabled: "
print "=============="
for i in aslr_enabled:
print i
print ""
print "ASLR Disabled: "
print "==============="
for i in aslr_disabled:
print i
print ""
print "DEP Enabled: "
print "============="
for i in dep_enabled:
print i
print ""
print "DEP Disabled: "
print "=============="
for i in dep_disabled:
print i
print "
روش سوم :ديباگ كردن (حوصله و وقت مثالش رو نداشتم)
روش چهارم لودر
روش پنجم دستكاري سيستم عامل ك روي ي ادرس مشخص RELOCATE كنه (توصيه نميشه)
با تشکر از استاد عزیز
من چند راه رو تست کرده بودم ولی متاسفانه نامرد یه پروتکشن دیگه داره که بعد از ویرایش فایل میگه فایل مشکل داره و اجرا نمیشه
ولی بیشتر خودم علاقه دارم در مورد ساخت لودر برای فایل های DLL اطلاعاتی داشته باشم :():
(۱۰-مهر-۱۳۹۹, ۱۲:۳۳:۱۵)Tiny Russell نوشته است: [ -> ]با تشکر از استاد عزیز
من چند راه رو تست کرده بودم ولی متاسفانه نامرد یه پروتکشن دیگه داره که بعد از ویرایش فایل میگه فایل مشکل داره و اجرا نمیشه
ولی بیشتر خودم علاقه دارم در مورد ساخت لودر برای فایل های DLL اطلاعاتی داشته باشم :():
شما اول سوالتون رو مشخص كنيد
در مورد سوال دومتون شايد CRC chk داره
می خوام برای یک نرم افزار که قفلش در یک DLL هستش و با ASLR محافظت میشه لودر درست کنم. آیا شدنی هستش؟ :(): چطوری میتونم CRC رو چک کنم؟
(البته میدونم سوالم خیلی کلی هستش)
(۱۳-مهر-۱۳۹۹, ۱۹:۵۶:۴۶)Tiny Russell نوشته است: [ -> ]می خوام برای یک نرم افزار که قفلش در یک DLL هستش و با ASLR محافظت میشه لودر درست کنم. آیا شدنی هستش؟ :(): چطوری میتونم CRC رو چک کنم؟ (البته میدونم سوالم خیلی کلی هستش)
احتياج به لودر نيست ولي اگه هدفت تمرين هست بله اونم ميشه منتهي اگه ASLR رو نخوايي فيكس كني بايد از تكنيك S&R استفاده كني به اينصورت كه توالي يكتا از بايت هايي رو پيدا كني كه بايت يا بايت هاي پچ شما هم درونش باشن
اگر متوجه نشدي Dll رو همينجا آپلود كن
منظوزتون Search and replace هستش؟ متاسفانه تو DUP2 و یه برنامه دیگه تست کردم ارور میده که نمیتونه لودر رو درست کنه
خودتون لودر بنویسید، روش pattern scan رو برای بدست آوردن آدرس پچ تست کنید ببینید جواب میده یا نه