PDA

View Full Version : درس 5 : SoftICE (Best Debugger)d



Best Programmer
یک شنبه 07 دی 1382, 13:11 عصر
همونطور که احتمالا همه میدونید SoftICE یکی از دیباگرهای بسیار قوی هست که اکثر برنامه های درست و حسابی رو با اون کرک میکنند.

من از نسخه ۵/۴ این برنامه استفاده میکنم که بطور طبیعی در ویندوز ۹۸ استفاده میشه و بطور معمولی نمیشه از اون در ویندوز میلنیوم یا اکس پی استفاده کرد.

خوب ، بعد از نصب برنامه برای اینکه برنامه بدرستی کار کنه باید چند تنظیم جزئی در فایل Winice.dat ایجاد کنید تا چند تا از فایلهای DLL مهم ویندوز تحت کنترل SoftICE قرار بگیرن.

برای اینکار به محل نصب برنامه مراجعه کنید و فایل Winice.dat رو با Notpad یا یه چیزی مثل اون باز کنید و تغییرات زیر رو انجام بدید :

در فایل فوق یک خط بصورت زیر وجود داره :

PHYSMB=32

این خط نشوندهنده مقدار رم سیستم شماست ، پس مقدار اون رو به اندازه رم سیستم خودتون تنظیم کنید.

چند خط مهم دیگه هم بصورت زیر هستن :

; ***** Examples of export symbols that can be included for Windows 95 *****

; Change the path to the appropriate drive and directory

;EXP=c:\windows\system\kernel32.dll

;EXP=c:\windows\system\user32.dll

;EXP=c:\windows\system\gdi32.dll

;EXP=c:\windows\system\comdlg32.dll

;EXP=c:\windows\system\shell32.dll

همونطور که میبینید این خطوط شامل آدرس فایلهای DLL ویندوز شما هستن. اولا این علامتهای ; رو از اولشون بردارید و ثانیا اگه مسیر نصب ویندوز شما چیزی به غیر از اون مسیریه که نشون داده شده ، مسیر ها رو تصحیح کنید.

همین مقدار تنظیمات برای شروع کار کفایت میکنه. پس فایل رو ذخیره کنید و سیستم رو ریست کنید تا تغییرات اعمال بشه.

برای شروع کار با SoftICE و نشون داده شدن پنجره اصلی اون باید کلیدهای Ctrl+Dرو بزنید. توجه کنید که وقتی به SoftICE وارد میشید کل سیستم تحت اختیار این برنامه قرار میگیره یعنی شما هیچ کاری نمیتونین تا وقتی که توی SoftICE هستین با ویندوز انجام بدید و این به این معنی هست که اگه دارین موزیک گوش میکنید قبل از ورود به SoftICE باید تعطیلش کنید و گرنه خود SoftICE این کار به نحو ناجوری انجام میده یعنی موزیکی که دارین گوش میکنین روی یه قسمت گیر میکنه وهی تکرار میشه !

کلا در هنگام کار با SoftICE و کار بر روی یک برنامه برای کرک کردن اون با SoftICE سعی کنید تا حد امکان برنامه های در حال اجرای دیگه رو ببندید تا تداخلی در کار بوجود نیاد.

در پنجره SoftICE بصورت عادی از بالا به ترتیب پنجره ای برای نمایش رجیسترها و فلگها ، پنجره ای برای نمایش DATA ، پنجره ای برای نمایش کد برنامه ای که روی اون کار میشه و در آخر هم یک خط فرمان وجود داره.

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

پس اگه میخواهید که این برنامه رو کامل یاد بگیرین باید به مراجع دیگه ای مراجعه کنید.

بعضی از دستورها هستن که در SoftICE زیاد استفاده میشن که به مرور با اونها بیشتر آشنا میشید ولی الان چندتایی از اونها رو میگم :

BPX

من به شکل کلی این دستور کار ندارم و اونطوری که اکثرا ازش استفاده میشه رو میگم. با این دستور ما میتونیم روی اجرا شدن یک API خاص در برنامه کنترل داشته باشیم یعنی یک BreakPoint قرار بدیم. بعدا در مثالهای بعدی با طرز استفاده از این دستور آشنا میشید.

BC

با استفاده از این دستور میشه BreakPoint ها رو پاک کرد هم بطور کلی و هم بطور تک تک.

BD

با استفاده از این دستور میتونید یک BreakPoint یا همون BP رو غیرفعال کنید.

BE

با این دستور میشه BP غیرفعال شده رو باز فعال کرد.

BL

این دستور لیستی از BP های قرار داده شده به شما نشون میده.

D

با این دستور میتونید یک آدرس از حافظه رو و یا مقدار داخل یکی از رجیسترهای مختلف مثل EAX رو ببینید.

R FL Z

دستور فوق صرفا وضعیت فلگ صفر رو برعکس میکنه یعنی اگر فعال باشه ، غیرفعال و اگر غیر فعال باشه ، فعال میکنه. Z در این دستور نشوندهنده فلگ صفر هست که میشه اونرو به نام هر فلگ دیگه ای تغییر داد تا وضعیت فلگ مورد نظر برعکس بشه.

X

این دستور از SoftICE خارج میشه.

همچنین کلیدهایی که در SoftICE استفاده میشه به ترتیب زیر هست :

F8

از این کلید برای وارد شدن به یک زیربرنامه در هنگام کار بر روی کد برنامه استفاده میشه یعنی مثلا اگر HighLight رو یک دستور Call قرار داشته باشه با زدن این کلید به داخل Call نفوذ میکنید.

F10

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

F11

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

F12

این کلید هم مثل F11 هست با این تفاوت که از هرجای کد که باشین به بک مرحله قبلتر بر میگردین.

Best Programmer
یک شنبه 07 دی 1382, 13:29 عصر
البته اینجا اینرا هم اضافه کنم. بنده حقیر در حال تالیف یک کتاب اسمبل تحت ویندوز هستم. و از تمامی دوستان بزای این کار کمک می خواهم. البته این کتاب اصلا شامل مباحث مقدماتی نمیشود (20 صفحه) و بسرعت مباحث تحت ویندوز رو شروع کرده ام ؛ تا حدی که حتی در کتاب های خارجی هم کم می باشد. در اینجا از تمامی دوستان و علاقه مند به پیشرفت سری دعوت به همکاری میآورم. البته فکر نکید که آقا تازه می خواهد شروع کند کمک می خواد: تا به حال حدود 500 صفحه آن را نوشتع کاغذی کردم و تمومه. مباحث باقیمانده سخت ترین مباحث کامپیوتر میباشد و نیاز به دانش بالایی دارد. مثلا : Software interrupts, Memory Mapped Files Sharing Data Between Instances, ,antidebuggers , Packer ,........
لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
لذا لارم به ذکر است که افراد واقعا علاقه مند شرکت کنند. اینجا آموزشگاه assembly under windows نیست.
و ذکر نیز بکنم که مطالب کتاب برای TASM va MASM32( البته با 1-2 تغییر کوچک) میباشد نه HLAکه برای بچه هاست.
_________________
ahsdhasdhjgsadsad

Mashatan
یک شنبه 07 دی 1382, 15:07 عصر
http://www.persiacrackers.persianblog.com/1382_8_persiacrackers_archive.html#1056610

:lol: :wink:

Inprise
یک شنبه 07 دی 1382, 17:06 عصر
ذکر نیز بکنم که مطالب کتاب برای TASM va MASM32( البته با 1-2 تغییر کوچک) میباشد نه HLAکه برای بچه هاست.

دوست عزیز

تلاش مثبت شما برای انتقال اطلاعاتتون به دوستان قابل تقدیره اما لطف کن در آستانه انتخابات پر شور مجلس (!) لطفا" وجهه مبتذل مطالبت رو کمتر کن :!:

محض اطلاع ات عرض کنم ، HLA چیزی نیست ابزاری برای سازماندهی بهتر و توسعه سریعتر برنامه های اسمبلی . نوع ابراز مطلبت نشون میده تا حالا تجربه اش نکردی .

خوش باشی

Best Programmer
یک شنبه 07 دی 1382, 19:01 عصر
با تشکر. از نظرات .
آقای مشاطان عزیز آیا اون روزی که من یک Tutorial Softice اینجا اضافه کردم ذکر نیز کردم که این کار خودم هم نیست.
آقای اینپریز عزیز از شما که دیگرا نتظار این سخن را نداشتم : ولی خوب به این حرفها دیگر عادت کردهام و اصلا برام مهم نیست که شما یا دیگران راجع به من چی فکر می کنید< HLA چیزی نیست ابزاری برای سازماندهی بهتر و توسعه سریعتر برنامه های اسمبلی > پس ایا این میشود اسمبلی یا چیزی شبیه C . البته هیچکس این را نمی تواند بگوید که کتاب ART OF ASSEMBLY بدرد نخور هست : بلکه بسیار عالی و توضیح سادهایی است. ولی من نطرم HLA بود . :roll:
البته 2 درس دیگر را نیز در نظر دارم از همون جا اضافه کنم
..............................

اگر توضیح واقعی می خوهید برای BMP منتظر کتاب من باشید.
ما که رفتنی ایم ولی یادثون باشه که من بدون ادعا امدم و همون ظور نیز میروم.
اینم یک سورس HLA:

[Code]
program RichEd;

#include( "RichEd.hhf" )

const
version :text := """Version: 0.1.2"" #$d #$a";


procedure QuitApplication( hwnd:dword; wParam:dword; lParam:dword );
@nostackalign;
begin QuitApplication;

w.PostQuitMessage( 0 );
dbg.put(hwnd,"Exit",nl,nl,nl);

end QuitApplication;

procedure SetFormat;

static
chr :w.CHARRANGE;
chr2 :w.CHARRANGE;
cf :w.CHARFORMAT;

begin SetFormat;

dbg.put(hwnd, "SetFormat()");
w.SendMessage(hwnd, w.EM_GETMODIFY,0,0);
push (eax);

w.SendMessage(hwnd, w.EM_EXGETSEL,0, &chr);
w.SendMessage(hwnd, w.EM_HIDESELECTION, true,0);
mov (0, chr2.cpMin);
mov (-1,chr2.cpMax);
w.SendMessage(hwnd, w.EM_EXSETSEL,0,&chr2);
mov (@size(cf), cf.cbSize);
mov (w.CFM_CHARSET | w.CFM_FACE | w.CFM_SIZE | w.CFM_COLOR, cf.dwMask);
mov (logfont.lfCharSet, al);
mov (al,cf.bCharSet);
mov (logfont.lfPitchAndFamily, al);
mov (al, cf.bPitchAndFamily);
w.lstrcpyn(cf.szFaceName,&logfont.lfFaceName,w.LF_ FACESIZE);
mov (logfont.lfHeight, eax);
neg (eax);
mov (15,ecx);
mul (ecx);
mov (eax, cf.yHeight);
mov (rgb, cf.crTextColor);
w.SendMessage(hwnd, w.EM_SETCHARFORMAT, w.SCF_SELECTION,&cf);
w.SendMessage(hREd, w.WM_SETFONT, hFont, true);


pop (eax);
w.SendMessage(hwnd, w.EM_SETMODIFY, eax,0);
w.SendMessage(hwnd, w.EM_EXSETSEL,0,&chr);
w.SendMessage(hwnd,w.EM_HIDESELECTION, false, 0);

end SetFormat;

procedure SetupWindowTitle;
@nostackalign;
begin SetupWindowTitle;

// reset the title string
str.delete(windowtitle, 0, w.MAX_PATH);
// write the appname and filename to the string
str.catz(&AppName,windowtitle);
str.cat(" - [",windowtitle);
str.catz(&FileName,windowtitle);
str.cat("]",windowtitle);
w.SetWindowText(hwnd,windowtitle);
dbg.put(hwnd,windowtitle);

end SetupWindowTitle;


// streams data into richedit control
procedure StreamInProc (var pBytesRead:dword ; NumBytes:dword ; var pBuffer:dword ; hFile:dword);
@nostackalign;
begin StreamInProc;

w.ReadFile(hFile,pBuffer,NumBytes,pBytesRead,NULL) ;
xor (1, eax);

end StreamInProc;

// streams data out of richedit control
procedure StreamOutProc (var pBytesRead:dword ; NumBytes:dword ; var pBuffer:dword ; hFile:dword);
@nostackalign;
begin StreamOutProc;

w.WriteFile(hFile,pBuffer,NumBytes,pBytesRead,NULL );
xor (1, eax);

end StreamOutProc;


procedure SaveFile;

static
hFile :dword; // file handle
editstream :w.EDITSTREAM;

begin SaveFile;

w.CreateFile(&FileName,w.GENERIC_WRITE, w.FILE_SHARE_READ,NULL,w.CREATE_ALWAYS,w.FILE_ATTR IBUTE_NORMAL,0);
if (eax <> w.INVALID_HANDLE_VALUE) then

mov (eax,hFile);
mov (eax,editstream.dwCookie);
mov (&StreamOutProc, editstream.pfnCallback);
w.SendMessage(hREd, w.EM_STREAMOUT, w.SF_TEXT, &editstream);
w.CloseHandle(hFile);
w.SendMessage(hREd, w.EM_SETMODIFY, false, 0);
mov (false, eax);

else

w.MessageBox(hwnd, "File Save failed.", "Save Error",w.MB_OK);
mov (true, eax);
endif;

end SaveFile;

procedure SaveAs;

static
ofn :w.OPENFILENAME;

begin SaveAs;

dbg.put(hwnd,"SaveAs",nl);
w.RtlZeroMemory(&ofn, @size(ofn));
mov (0,FileName);
mov (@size(ofn),ofn.lStructSize);
mov (hwnd,ofn.hWndOwner);
mov (hInstance,ofn.hInstance);
mov (0,ofn.lpstrFilter);
mov (&FileName,ofn.lpstrFile);

fileio.gwd(CurrentDir);
mov (CurrentDir,ofn.lpstrInitialDir);

mov (@elements(FileName),ofn.nMaxFile);
mov (w.OFN_EXPLORER | w.OFN_FILEMUSTEXIST | w.OFN_LONGNAMES | w.OFN_OVERWRITEPROMPT,ofn.Flags);
mov (NULL, ofn.lpstrDefExt);

w.GetSaveFileName(ofn);
if(eax) then

SaveFile();
if(eax) then

//save failed
dbg.put(hwnd,"save failed");
// reset FileName to untitled
str.zcpy(&NewFile,&FileName);

endif;

endif;

end SaveAs;


procedure CheckSave;
@nostackalign;
begin CheckSave;
str.zcmp(&FileName,&NewFile);
if (eax=0) then // zstrings equal
SaveAs();
else

SaveFile();
endif;

end CheckSave;

// checks for modified file, gets confirmation from user
procedure getConfirm;
@nostackalign;
begin getConfirm;
w.SendMessage(hREd, w.EM_GETMODIFY,0,0);
if (eax) then

w.MessageBox(hwnd, &FileName,"Save Changes to", w.MB_YESNOCANCEL | w.MB_ICONQUESTION);
if (eax=w.IDYES) then
SaveFile();
elseif (eax=w.IDNO) then

mov (false,eax);
else

mov (true,eax);
endif;
endif;

end getConfirm;

procedure CloseApplication ( hwnd:dword; wParam:dword; lParam:dword );
@nostackalign;
begin CloseApplication;

getConfirm();
if (!eax) then

w.DestroyWindow(hwnd);

endif;

end CloseApplication;

procedure FileOpen;

static
ofn :w.OPENFILENAME; // file structure
hFile :dword; // file handle
editstream :w.EDITSTREAM; // the data streamer

begin FileOpen;
dbg.put(hwnd,"FileOpen",nl,nl);
w.RtlZeroMemory(&ofn, @size(ofn));
mov (0,FileName);
mov (@size(ofn),ofn.lStructSize);
mov (hwnd,ofn.hWndOwner);
mov (hInstance,ofn.hInstance);
mov (0,ofn.lpstrFilter);
mov (&FileName,ofn.lpstrFile);

fileio.gwd(CurrentDir);
mov (CurrentDir,ofn.lpstrInitialDir);

mov (@elements(FileName),ofn.nMaxFile);
mov (w.OFN_EXPLORER | w.OFN_FILEMUSTEXIST | w.OFN_LONGNAMES,ofn.Flags);


w.GetOpenFileName(ofn);
if (eax) then
w.CreateFile(&FileName, w.GENERIC_READ | w.GENERIC_WRITE, w.FILE_SHARE_READ | w.FILE_SHARE_WRITE
,NULL,w.OPEN_EXISTING,w.FILE_ATTRIBUTE_NORMAL,NULL );
if (eax <> w.INVALID_HANDLE_VALUE) then
mov (eax, hFile);
push (hFile);
pop (editstream.dwCookie);
mov (&StreamInProc, editstream.pfnCallback);
dbg.put(hwnd,"Sending message to hREd: ",hFile);
lea (eax, editstream);
w.SendMessage(hREd,w.EM_STREAMIN,w.SF_TEXT, eax);
w.CloseHandle (hFile);
w.SendMessage(hREd,w.EM_SETMODIFY, false,0);
SetupWindowTitle();
w.SetFocus(hREd);

else

w.MessageBox(hwnd, "File Open Failure","Error", w.MB_OK);

endif;

else

w.SetFocus(hREd);

endif;

end FileOpen;

// find text
procedure Find;
@nostackalign;
begin Find;

search:
w.SendMessage(hREd, w.EM_FINDTEXTEX, frflags, &findtxt);
if (eax <> -1) then
jmp found;
endif;
w.MessageBox(hwnd, "Continue searching from top?", "Find/Replace",
w.MB_YESNO | w.MB_ICONQUESTION | w.MB_TASKMODAL);
if (eax = w.IDNO) then
jmp endfind;
endif;
if (fres = 0) then
w.SendMessage(hREd, w.EM_SETSEL, 0,0);
mov (0, findtxt.chrg.cpMin);
mov (-1, findtxt.chrg.cpMax);
else

w.SendMessage(hREd, w.WM_GETTEXTLENGTH,0,0);
mov (eax, findtxt.chrg.cpMin);
mov (0, findtxt.chrg.cpMax);
endif;
jmp search;

found:
if (eax = findtxt.chrg.cpMin && eax <> findtxt.chrg.cpMax && fres=0) then

inc (findtxt.chrg.cpMin);
jmp search;
endif;

// w.SetFocus(hREd);
w.SendMessage(hREd, w.EM_EXSETSEL,0, &findtxt.chrgText);
w.SendMessage(hREd, w.EM_SCROLLCARET,0,0);
w.SetFocus(hFind);
mov (true, eax);
exit Find;

endfind:
mov (false, eax);
end Find;


// procdeure to handle find dialog
procedure FindDlgProc ( lParam:dword; wParam:dword; uMsg:uns32; hDlg:dword);
static
chrg :w.CHARRANGE;
var
hCtl :dword;

begin FindDlgProc;

if (uMsg = w.WM_INITDIALOG) then
dbg.put(hwnd, "FindDlgProc : INIT");
if (lParam) then // enable replace

dbg.put(hwnd, "lParam = true");
w.GetDlgItem(hDlg, IDC_BTN_REPLACEALL);
w.EnableWindow(eax,true);
w.GetDlgItem(hDlg, IDC_BTN_REPLACE);
w.EnableWindow(eax,true);
w.GetDlgItem(hDlg, IDC_REPLACETEXT);
mov (eax,hCtl);
w.GetWindowLong(hCtl,w.GWL_STYLE);
xor (w.WS_VISIBLE, eax);
w.SetWindowLong(hCtl,w.GWL_STYLE,eax);
w.GetDlgItem(hDlg,IDC_REPLACESTATIC);
mov (eax,hCtl);
w.GetWindowLong(hCtl,w.GWL_STYLE);
xor (w.WS_VISIBLE, eax);
w.SetWindowLong(hCtl,w.GWL_STYLE, eax);
w.SetWindowText(hDlg, "Replace");
w.GetDlgItem(hDlg, IDC_REPLACETEXT);
w.SendMessage(eax, w.EM_LIMITTEXT, w.MAX_PATH,0);
w.SetDlgItemText(hDlg, IDC_REPLACETEXT, &replacebuf);

endif;

mov (hDlg, eax);
mov (eax, hFind);
w.GetDlgItem(hDlg, IDC_FINDTEXT);
mov (eax, hFindEdt);
// get selected text
w.SendMessage(hREd, w.EM_EXGETSEL, 0, &chrg);
mov (chrg.cpMax, eax);
sub (chrg.cpMin, eax);
if (eax && eax <256) then
w.SendMessage(hREd, w.EM_GETSELTEXT,0,&findbuf);
endif;

// w.SendMessage(hREd, w.EM_GETSELTEXT,0,&findbuf);
w.SendMessage( hFindEdt, w.WM_SETTEXT, 0, &findbuf);
w.SetFocus(hFindEdt);
w.SendMessage(hFindEdt, w.EM_LIMITTEXT, w.MAX_PATH,0);
if (findbuf = ' ') then
mov (0, findbuf);
endif;
w.GetDlgItem(hDlg, IDC_RBN_DOWN);
w.SendMessage(eax,w.BM_SETCHECK, w.BST_CHECKED,0);
w.SendMessage(hREd, w.EM_EXGETSEL,0, &findtxt.chrgText);
mov (false, eax);

elseif (uMsg = w.WM_COMMAND) then

if (wParam <> w.IDCANCEL) then

and (0, frflags);
w.SendMessage(hREd, w.EM_EXGETSEL,0,&findtxt.chrgText);
w.GetDlgItemText(hDlg, IDC_FINDTEXT,&findbuf, w.MAX_PATH);
push (findtxt.chrgText.cpMin);
pop (findtxt.chrg.cpMin);
mov (-1, findtxt.chrg.cpMax);
lea (eax, findbuf);
mov (eax, findtxt.lpstrText);

if (wParam <> w.IDOK) then
w.GetDlgItemText(hDlg, IDC_REPLACETEXT, &replacebuf, w.MAX_PATH);
endif;
w.IsDlgButtonChecked(hDlg, IDC_CHK_WHOLEWORD);
if (eax) then
or (w.FR_WHOLEWORD, frflags);
endif;
w.IsDlgButtonChecked(hDlg, IDC_CHK_MATCHCASE);
if (eax) then
or (w.FR_MATCHCASE, frflags);
endif;
w.IsDlgButtonChecked(hDlg, IDC_RBN_UP);
if (eax) then
mov (1, fres);
mov (0, findtxt.chrg.cpMax);
endif;
w.IsDlgButtonChecked(hDlg, IDC_RBN_DOWN);
if (eax) then
mov (0, fres);
or (w.FR_DOWN, frflags);
endif;
if (wParam = w.IDOK) then
Find();
endif;

replace:
if (wParam = IDC_BTN_REPLACE || wParam = IDC_BTN_REPLACEALL) then

if (replacebuf = ' ') then

w.GetDlgItem(hDlg, IDC_REPLACETEXT);
w.SendMessage(eax, w.EM_GETSELTEXT,0,&replacebuf);

endif;
w.SendMessage(hREd, w.EM_REPLACESEL, true,&replacebuf);
mov (findtxt.chrgText.cpMin, eax);
mov (eax, findtxt.chrgText.cpMax);
str.zlen(&replacebuf);
add (eax, findtxt.chrgText.cpMax);
w.SendMessage(hREd, w.EM_EXSETSEL, 0, &findtxt.chrgText);
if (fres) then
sub (1, findtxt.chrg.cpMin);
else
add (1, findtxt.chrg.cpMin);
endif;
Find();
if (eax <> 1) then
jmp exitfind;
endif;
if (wParam = IDC_BTN_REPLACEALL) then
jmp replace;
endif;
endif;
jmp exitfind;
else

w.EndDialog(hDlg, wParam);
mov (true, eax);
and (0, hFind);

endif;
endif;
exitfind:
mov (false, eax);

end FindDlgProc;

// handles Font selection
procedure SelectFont;

static
cf :w.CHOOSEFONT;

begin SelectFont;

w.RtlZeroMemory (&cf, @size(cf));
mov (@size(cf), cf.lStructSize);
mov (hwnd, cf.hWndOwner);
mov (&logfont, cf.lpLogFont);
mov (w.CF_SCREENFONTS | w.CF_EFFECTS | w.CF_INITTOLOGFONTSTRUCT, cf.Flags);
mov (rgb, cf.rgbColors);

w._ChooseFont(cf);
if (eax) then

w.DeleteObject(hFont);
w.CreateFontIndirect(logfont);
mov (eax,hFont);
mov (cf.rgbColors, rgb);
SetFormat();

endif;

end SelectFont;

// handles Select All command
procedure SelectAll;

static
chr :w.CHARRANGE;

begin SelectAll;

mov (0, chr.cpMin);
mov (-1,chr.cpMax);
w.SendMessage(hREd,w.EM_EXSETSEL,0,&chr);

end SelectAll;

// handles w.WM_COMMAND message
procedure ProcessCommand ( hwnd:dword; wParam:dword; lParam:dword );
@nostackalign;
begin ProcessCommand;

mov (wParam,eax);
and ($0ffff,eax);
if (eax=IDM_NEW) then
getConfirm();
if (!eax) then
w.SetWindowText(hREd,0); // clear edit window
str.zcpy(&NewFile,&FileName);
SetupWindowTitle();
w.SetFocus(hREd);
endif;
w.SetFocus(hREd);

elseif (eax = IDM_OPEN) then
getConfirm();
if (!eax) then

FileOpen();

endif;
w.SetFocus(hREd);

elseif (eax = IDM_SAVE) then

CheckSave();
w.SetFocus(hREd);

elseif (eax = IDM_SAVEAS) then

SaveAs();
w.SetFocus(hREd);

elseif (eax = IDM_CUT) then

w.SendMessage(hREd, w.WM_CUT,0,0);

elseif (eax = IDM_COPY) then

w.SendMessage(hREd, w.WM_COPY,0,0);

elseif (eax = IDM_PASTE) then

w.SendMessage(hREd, w.WM_PASTE,0,0);

elseif (eax = IDM_SELECTALL) then

SelectAll();

elseif (eax = IDM_UNDO) then

w.SendMessage(hREd, w.EM_UNDO,0,0);

elseif (eax = IDM_REDO) then

w.SendMessage(hREd, w.EM_REDO,0,0);

elseif (eax = IDM_FIND) then

w.CreateDialogParam(hInstance, ID_FINDDLG,hwnd, &FindDlgProc,false);

elseif (eax = IDM_FINDNEXT) then

and (0, fres);
mov (1, frflags);
mov (-1, findtxt.chrg.cpMax);
if (findbuf = ' ') then
w.SendMessage(hREd, w.EM_GETSELTEXT,0,&findbuf);
test (eax, eax);
jz exitproc;
endif;

w.SendMessage(hREd, w.EM_EXGETSEL,0, &findtxt.chrgText);
push (findtxt.chrgText.cpMin);
pop (findtxt.chrg.cpMin);
lea (eax, findbuf);
mov (eax, findtxt.lpstrText);
Find();


elseif (eax = IDM_REPLACE) then

w.CreateDialogParam(hInstance, ID_FINDDLG, hwnd, &FindDlgProc, true);

elseif (eax = IDM_FONT) then

SelectFont();
w.SetFocus(hREd);

elseif (eax = IDM_ABOUT) then

w.MessageBox(hwnd, version #$D#$A "By Sevag Krikorian" #$D#$A "Kahlinor@yahoo.com", "RichEdit HLA", w.MB_OK);

elseif (eax=IDM_QUIT) then

w.SendMessage(hwnd,w.WM_CLOSE,0,0);

endif;

exitproc:
end ProcessCommand;

// size window
procedure SizeApplication ( hwnd:dword; wParam:dword; lParam:dword);

var
rect :w.RECT;
height :dword;

begin SizeApplication;

w.GetClientRect(hwnd, rect);
mov (rect.bottom,eax);
sub (rect.top,eax);
mov (eax, height);

w.MoveWindow(hREd,0,rect.top,rect.right,height,tru e);

end SizeApplication;

// handles w.INITDIALOG message
procedure SetupRichEdit ( hwnd:dword; wParam:dword; lParam:dword );
@nostackalign;
begin SetupRichEdit;
// setup Richedit control
w.GetDlgItem(hwnd,IDC_RED);
mov (eax,hREd);
w.SendMessage(hREd, w.EM_SETTEXTMODE, 0, w.TM_PLAINTEXT);
w.SendMessage(hREd, w.EM_SETEVENTMASK, 0, w.ENM_SELCHANGE);
w.SendMessage(hREd, w.EM_LIMITTEXT,-1,0);
w.SendMessage(hREd, w.EM_SETMODIFY, false,0);
w.SendMessage(hREd, w.EM_EMPTYUNDOBUFFER,0,0);

str.zcpy(&szfont,logfont.lfFaceName);
mov (-12,logfont.lfHeight);
mov (400,logfont.lfWeight);
w.CreateFontIndirect(&logfont);
mov (eax,hFont);
// w.SendMessage(hREd, w.WM_SETFONT, hFont, true);
SetFormat();

// set up default window title
w.SetWindowText(hREd,0);
w.SetFocus(hREd);

end SetupRichEdit;

procedure WndProc( lParam:dword; wParam:dword; uMsg:uns32; hwnd:dword );
@nostackalign;
begin WndProc;

mov( uMsg, eax );
mov( &Dispatch, edx );
forever

mov( (type MsgProcPtr_t [edx]).MessageHndlr, ecx );
if( ecx = 0 ) then


w.DefWindowProc( hwnd, uMsg, wParam, lParam );
exit WndProc;


elseif( eax = (type MsgProcPtr_t [edx]).MessageValue ) then

push( hwnd ); // (type tMsgProc ecx)(hwnd, wParam, lParam)
push( wParam ); // This calls the associated routine after
push( lParam ); // pushing the necessary parameters.
call( ecx );

sub( eax, eax ); // Return value for function is zero.
break;

endif;
add( @size( MsgProcPtr_t ), edx );

endfor;

end WndProc;

begin RichEd;

w.GetModuleHandle( NULL );
mov ( eax, hInstance );
w.InitCommonControls();
mov (@size(w.INITCOMMONCONTROLSEX),comctl.dwSize);
mov (w.ICC_DATE_CLASSES,comctl.dwICC);
w._InitCommonControlsEx(comctl);
w.LoadLibrary(&RichEditDLL);
mov (eax,hREDDLL);

mov( @size( w.WNDCLASSEX ), wc.cbSize );
mov( w.CS_HREDRAW | w.CS_VREDRAW, wc.style );
mov( &WndProc, wc.lpfnWndProc );
mov( NULL, wc.cbClsExtra );
mov( w.DLGWINDOWEXTRA, wc.cbWndExtra );
mov( NULL, wc.hbrBackground );
mov( IDM_MENU, wc.lpszMenuName );
mov( &ClassName, wc.lpszClassName );
mov( hInstance, wc.hInstance );

// Get the icons and cursor for this application:

w.LoadIcon( NULL, val w.IDI_APPLICATION );
mov( eax, wc.hIcon );
mov( eax, wc.hIconSm );

w.LoadCursor( NULL, val w.IDC_ARROW );
mov( eax, wc.hCursor );

w.RegisterClassEx( wc );
w.CreateDialogParam
(
hInstance,
ID_DLG,
NULL,
&WndProc,
NULL
);
mov( eax, hwnd );

w.ShowWindow( hwnd, w.SW_SHOWNORMAL );

w.LoadAccelerators(hInstance, ID_ACCEL);
mov (eax, hAccel);

str.zcpy(&NewFile, &FileName);
SetupWindowTitle();

forever

w.GetMessage( msg, NULL, 0, 0 );
breakif( !eax );
w.IsDialogMessage(hFind, msg);
if (!eax) then
if (!w.TranslateAccelerator(hwnd,hAccel,msg)) then
w.TranslateMessage( msg );
w.DispatchMessage( msg );
endif;
endif;

endfor;

w.FreeLibrary(hREDDLL);
mov( msg.wParam, eax );
w.ExitProcess( eax );

end RichEd;

[code/]

Mashatan
یک شنبه 07 دی 1382, 22:58 عصر
با تشکر. از نظرات .
آقای مشاطان عزیز آیا اون روزی که من یک Tutorial Softice اینجا اضافه کردم ذکر نیز کردم که این کار خودم هم نیست. آیا اینجا جای حال گیری هست یا ادعاهای واهی. آیا ROBOT ROYA شما نبود که بمانند آبی کرک شد ( sorry ) , دوست عزیز میدونستید کسی که Software شما را کرک کرده تنها 1 ماه کرک کار کرده بود.


بهتر بود پایینش ذکر میکردید منبع رو ، اینجور بهتر نبود ؟ :) بعد اینکه گفتید کتاب دارید مینویسید من فکر کردم قسمتی از کتابتونه ، تازه کسی که قبلا یه همچین چیزی گفته نباید این مطلب من رو حالگیری به حساب بیاره :wink:

خوب بحث RoYa رو کشیدی وسط ، راستش اینجا جایز نیست دربارش بحث کنم ، من خودم روزی که Release کردم به همه کرکرهای که میشناختم ، فرستادم و روی Shell Protection ش کار نکردم و با UPX فشرده کردم قصدم این بود که از 3 لایه ای که درست کردم ببینم تا کجا پیش میرن :) ولی متاسفانه فقط تونستند از لایه اول عبور کنند و با برداشتن Nag Screen و عوض کردن Resource فکر کردن کرک شده :wink: و فقط کافیه برنامه (کرک شده) رو اجرا کنید و وصل بشید و بعد گند کار معلوم میشه که چه سوتی دادن و حتی کنترل Messageها رو بر نداشتن !
Very Sorry

در آخر بگم من اصلا اهل بحث جدل نیستم ولی اگر نکته به ذهنم برسه با شهامت میگم و اگر اشتباه کنم با شهامت هم اعتراف میکنم :)

ارادتمند
مشاطان

Best Programmer
یک شنبه 07 دی 1382, 23:15 عصر
بهتر بود پایینش ذکر میکردید منبع رو ، اینجور بهتر نبود ؟ بعد اینکه گفتید کتاب دارید مینویسید من فکر کردم قسمتی از کتابتونه ، تازه کسی که قبلا یه همچین چیزی گفته نباید این مطلب من رو حالگیری به حساب بیاره

خوب بحث RoYa رو کشیدی وسط ، راستش اینجا جایز نیست دربارش بحث کنم ، من خودم روزی که Release کردم به همه کرکرهای که میشناختم ، فرستادم و روی Shell Protection ش کار نکردم و با UPX فشرده کردم قصدم این بود که از 3 لایه ای که درست کردم ببینم تا کجا پیش میرن ولی متاسفانه فقط تونستند از لایه اول عبور کنند و با برداشتن Nag Screen و عوض کردن Resource فکر کردن کرک شده و فقط کافیه برنامه (کرک شده) رو اجرا کنید و وصل بشید و بعد گند کار معلوم میشه که چه سوتی دادن و حتی کنترل Messageها رو بر نداشتن !
Very Sorry

در آخر بگم من اصلا اهل بحث جدل نیستم ولی اگر نکته به ذهنم برسه با شهامت میگم و اگر اشتباه کنم با شهامت هم اعتراف میکنم
دوست عزیز منم اصلا حوصله بحث و جدل را ندارم و از نظر شما خیلی متشکرم ولی خوشبختانه در کتاب من حتی 1 کلمه مقدماتی از این سری یافت نخواهید کرد. البته تصمیم دارم 1 ضمیمه کوچک برای یادگیری softice بزارمکه فکر هم نمی کنم به 10 صفحه نیز برسد ولی خیلی خوشحال شدم که تمام حرفهای ROYA الکی بود و جدیدا نیز یک Encryptor آمده که هنوز Decrypt نشده ؛ البته خودت میذنی کدوم رو میگم ولی اگر دوست دارید مارو هم برای کرک ROYA بپذیرید ؛ البته الان که گفتی فهمیدم که کرکر های ایران حتی از اونی که فکر میکردم ببببببببوووووووووقققق ترند.
I always LOVE see u soon my best firend!
:twisted:

Mashatan
دوشنبه 08 دی 1382, 14:09 عصر
دوست عزیز منم اصلا حوصله بحث و جدل را ندارم و از نظر شما خیلی متشکرم ولی خوشبختانه در کتاب من حتی 1 کلمه مقدماتی از این سری یافت نخواهید کرد. البته تصمیم دارم 1 ضمیمه کوچک برای یادگیری softice بزارمکه فکر هم نمی کنم به 10 صفحه نیز برسد ولی خیلی خوشحال شدم که تمام حرفهای ROYA الکی بود و جدیدا نیز یک Encryptor آمده که هنوز Decrypt نشده ؛البته خودت میذنی کدوم رو میگم

خوبه امیدوارم در Release کتاب ات موفق باشی :)
کدوم حرفاهای ، RoYa ؟ :wink:
راستش منظور تو از اینکه Encrypt اومده و Decrypt نشده نفهمیدم ،چون اصلا Decrypt نداره ! اینکه میگن Encrypt الگوریتمی برای پنهان سازی Password هست که Yahoo هر چند وقت یک بار عوض میکنه ؛ و اگر منظورت اینکه Yahoo دوباره Encryptش رو عوض کرده ؟! در هر صورت زیاد جای نگرانی نیست چون دفعه پیش کمتر از 5 روز پیدا کردن الگوریتمش رو ! http://www.barnamenevis.org/forum/viewtopic.php?t=3347
و تا حالا مشکلی نداشته و با Client قدیمی کار میکنه !


ولی اگر دوست دارید مارو هم برای کرک ROYA بپذیرید ؛ البته الان که گفتی فهمیدم که کرکر های ایران حتی از اونی که فکر میکردم ببببببببوووووووووقققق ترند.
I always LOVE see u soon my best firend!
:twisted:

پیشنهاد میکنم صبر کنید تا نگارش جدیدش رو Relase کنم ، و اگر عجله داری همین نگارش رو یک نگاهی بهش بنداز :)
توی این جمله ات به خودت توهین کردی چون اول خودت رو یک کرکر معرفی کردی و بعد گفتی بوق هستند کرکرهای ایرانی !!! که با این جمله ات مخالفم دو تا از قوی ترین Protection های دنیا توسط یک ایرانی با اسم مستعار Unforgiven کرک شده قفل Sentinel و همچنین CopyContol توسط اایشون شکستته شده ، که هر برنامه ای با این دو قفل Protect شده باشه به راحتی شکسته میشه مثل برنامه 3 میلیونی ISPUtil و .... البته الان Un4 دیگه فعالیت نمیکنه :wink:
یک موقعی اینجا بود سایتش http://www.ICAGRP.com ولی الان Forwardشده به جای دیگه !!

ارادتمند
مشاطان

Best Programmer
دوشنبه 08 دی 1382, 15:51 عصر
پس جدیدا یه سری به همون سایتی که دادی بزن و آخرین Protector(Encryptor) را ببین.

توی این جمله ات به خودت توهین کردی چون اول خودت رو یک کرکر معرفی کردی و بعد گفتی بوق هستند کرکرهای ایرانی
نه من کرکر نرم افزار های ایرانی نیستم. اصلا آقای Unforgiven یکی از افتخار های کشور ما هستندولی کسی در حد ایشون خیلی کم داریم ( من ندیدم) . البته ایشون نمی دونم چرا ازشون خبری نیست . ولی متاسفانه RainBow Sentinel Shellpro 5.5 , 6.0 کار میکرد که حتی در اون موقع Tutorial های خوبی هم براش بود. خیلی دوست دارم یه بار کنار ایشون RainBow Sentinel LM 7.0.1 را کرک کنم :mrgreen: . البته Tutorial های زیادی خوندم ولی خیلی خفن تر از اونی هست که بشه تو 2-3 روز کرک شود و من هم چون کنکور دارم اصلا وقث اضافی ندارم.

Best Programmer
دوشنبه 08 دی 1382, 16:05 عصر
اون موقع که ما تو win3.1 می رفتیم حال میکردیم. ایشون داشت فرمت LE EXE می خوند و وقتی که win95 اومد 14-15 تا FDD بود ایشون داشت Import Table va SEH میخوند . خوب من ببووقق به ایشون اهانت کنم ؟ ولی خوب الان این احساس رو دارم که میتونم جا پای ایشون بذارم ولی اگر کسی در این راه باشه که چه بهتر. امروزه قفل های حرفه ایی اومدند و واقعا نیاز به مطا لعه زیادی دارند مثلا SEN.. LM , FlexM, DongleX و روش های encrypt فوق العاده حال گیر حتی برخی از همین free ها جدیدا خیلی پیچیده شدند.

jirjirakk
دوشنبه 08 دی 1382, 22:42 عصر
کرکر عزیز : بست پروگرامر جان کرک این رو میخوام http://www.barnamenevis.org/forum/viewtopic.php?t=5316 :oops:

SyntaxCheck
سه شنبه 09 دی 1382, 11:57 صبح
سلام
جناب علی محمد آقای گل. این مطلب رو اینجا مینویسم و بصورت پی ام بهت نمیگم چون فکر میکنم شاید کسان دیگه ای هم این مطلب رو در آینده بخونن و همچنین در اینجا شاید اثر عمومی تری داشته باشه.زمانی که دیدم تشنه یادگیری هستی و مثل خودم و خیلی از بچه های ایران هر کاری برای یاد گیری میخوای بکنی و این سایت رو نمیشناسی و بخش اسمبلی سایت تازه راه اندازی شده بود بهت پیشنهاد کردم که سوالاتت رو اینجا بپرسی تا دوستانی که بلد هستند مثل همیشه بهشون جواب بدن و شاید این محیط باعث بشه روح تشنه یک جوون ایرانی سیرآب بشه. اما در بدو ورودت به این بخش یادمه که سوالهای خیلی زیادی رو در تاپیک های جداگانه ای مطرح کردی و به من هم نشون میدادی که وجهه و ظاهر جالبی نداشت و نشون میداد پشت این سوالات چیز دیگری بجز قصد یادگیری وجود داره. علی جان برادرانه بهت میگم با اینکه راجع به مسائلی مثل نوشتن کتاب قبلا هم باهم صحبت کردیم اما خوب نیست که آدم به روی چیزی که هنوز نداره ستون بزنه و خونه ای رو روش بنا کنه. پس باز هم برادرانه بهت میگم سعی کن بجای اینکه روح خودت رو برای نشون دادن تواناییهات به دیگران بیخود خسته کنی کمی با خودت صاف تر باش و سعی کن چیزی یاد بگیری و اون رو سیراب کنی تا اینکه وقتت رو روی این بزاری که دانش خودت رو برای دیگران آشکار کنی.
اما مطلبی که دیدم و خیلی ازت ناراحت شدم راجع به رویا بود. شبی که متوجه شدم در PCseven داستانی در اینزمینه داره اتفاق میوفته اون مطلب راجع به کرک رویا رو به تو نشون ندادم که امروز اینجا کرک شدنش رو به رخ علی مشاطان بکشی. رویا رو بهت معرفی کردم که علی مشاطان رو بهتر بشناسی چون در اینجا تازه وارد بودی و رفقا رو نمیشناختی.
امیدوارم که از من ناراحت نشی که هر چی نوشتم فقط و فقط و فقط از سر دوستیه.
به هر حال از اینکه مطلبی خارج از مسائل فنی رو در اینجا نوشتم از همه دوستان و مدیر بخش عذر میخوام و امیدوارم که حقیر رو ببخشید.

ilovelinux
دوشنبه 22 دی 1382, 15:07 عصر
انقدر دعوا نکنین
اگه خودتون کاره ای هستین باریکلا دیگه مثلا من که هیچی حالیم نیست خیلی ادعام میشه
و چون کمی اسمبلی (مال داس ) یه زره c و پاسکلا و بیسیک بلدم دهن پر کنه ولی هیچی حالیم نیست
ولی 3 تا از بهترین دوستام روبوکاپ سیمولیشن کار میکنن و از هزار تا MCSE بیشتر حالیشونه و اصلا از کرک سر در نمی ارن وفقط 17 سال سن دارن مثل خودم برین تو گوگل respina تیم روبوکاپ علامه حلی رو سرچ کنید بعد برین فکر نکنین ایران مخ کم داره