鏂囩珷浣滆咃細Bideyore[E.S.T]
淇℃伅鏉ユ簮錛氶偑鎭跺叓榪涘埗 涓浗錛?a target="_blank">www.EvilOctal.com錛?br>
瀵逛簬鐔熸倝Win API緙栫▼鐨勫悓蹇椾滑鏉ヨ錛寃indowsx.h榪欎釜澶存枃浠跺簲璇ヤ笉浼氬お闄岀敓鍚э紝榪欐瑕佽鐨勫唴瀹瑰氨鏉ヨ嚜榪欎釜windowsx.h澶存枃浠躲?br>
緇忓父鑳藉湪msdn涓婃煡鍒拌繖鏍蜂竴浜涘嚱鏁幫紝鏄庢槑鏄釜鍑芥暟錛岃屼笖妯℃牱闀垮緱鍜屼竴鑸殑api鍑芥暟涔熶竴鏍蜂竴鏍風殑錛屽彲鍗村彨鍋歮acro錛屼負浠涔堝憿錛熺暀鎰忎竴涓嬪嚱鏁頒嬌鐢ㄧ殑requirement錛屼綘浼氬彂鐜幫紝瀹冪殑澹版槑姝f槸鍦╳indowsx.h榪欎釜澶存枃浠墮噷銆?br>
Windowsx.h鍖呭惈浜嗚繖鏍蜂竴浜涘唴瀹癸細
瀹廇PI錛岀獥鍙f秷鎭垎嫻佸櫒錛屾帶浠禔PI錛?br style="color: #ff0000;">
鎵
鏈夌殑榪欎簺瀹忓畾涔夛紝鍙互浣夸綘鐨勭▼搴忔洿鍔犲畨鍏紝綆媧侊紝緇撴瀯鏇存竻鏅幫紝澶уぇ鎻愰珮紼嬪簭鐨勫彲璇繪э紱鍏朵腑紿楀彛娑堟伅鍒嗘祦鍣紙message
cracker錛夋槸鎴戜滑浠婂ぉ瑕佽璁虹殑璇濋錛屽畠鍙互浣挎垜浠殑API紼嬪簭鍙樺緱鏇寸畝媧併備笅闈㈠氨榪涘叆鎴戜滑鐨勪富棰橈細錛堟湁鍏硍indowsx.h鐨勬洿澶氬唴瀹癸紝鍙互鍙傝?
MS Knowledge Base Article #83456.錛?br>
娑堟伅鍒嗘祦鍣ㄦ槸Windows鎻愪緵鐨勪竴緇勫畯瀹氫箟錛屽畠鐨勪袱涓渶澶х殑浣滅敤錛岀敤MS鐨勮瘽鏉ヨ錛屽氨鏄細
鈼?瀹夊叏鐨勬暟鎹被鍨嬶紝鍥犱負娑堟伅鍒嗘祦鍣ㄥ畬鎴愪簡澶ч噺鐨勭被鍨嬭漿鎹㈢殑宸ヤ綔錛?br>鈼?浣跨▼搴忓悜32浣峸indows鐨勮漿鍖栨洿綆鍗曪紱
褰撶劧錛屼嬌鐢ㄦ秷鎭垎嫻佸櫒浼氬ぇ澶ф敼鍙樼▼搴忕殑闈㈣矊錛屼綘涔熷彲浠ラ夋嫨涓嶄嬌鐢ㄥ畠銆?br>
涓嬮潰鎴戜滑灝變互涓涓璇濇紿楀彛鐨勬秷鎭鐞嗚繃紼嬩負渚嬶紝鐪嬬湅娑堟伅鍒嗘祦鍣ㄥ埌搴曟槸鎬庝箞榪愪綔鐨勩?br>
1錛庢秷鎭垎嫻佸櫒鐨勫熀鏈嬌鐢?br>鍏堢湅涓涓櫘閫氱殑紿楀彛娑堟伅澶勭悊鍑芥暟錛屽畠鍙兘闇瑕佸鐞嗕竴浜涚獥鍙g殑鍒濆鍖栵紝鏃犳晥瀹㈡埛鍖洪噸緇樼瓑娑堟伅錛?br>
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
// ...
return 0;
case WM_PAINT:
// ...
return 0;
case WM_DESTROY:
//...
return 0;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
鑰岄氳繃浣跨敤娑堟伅鍒嗘祦鍣紝鎴戜滑鍙互鎶婃瘡涓猚ase閮藉啓鍒扮浉搴旂殑娑堟伅澶勭悊鍑芥暟涓紝灝卞儚涓嬮潰榪欐牱錛?br>
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
return HANDLE_WM_CREATE(hwnd, wParam, lParam, Cls_OnCreate);
case WM_PAINT:
return HANDLE_WM_PAINT(hwnd, wParam, lParam, Cls_OnPaint);
case WM_DESTROY:
return HANDLE_WM_DESTROY(hwnd, wParam, lParam, Cls_OnDestroy);
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
榪欓噷鐢ㄥ埌浜嗕笁涓畯瀹氫箟錛欻ANDLE_WM_CREATE, HANDLE_WM_PAINT, HANDLE_WM_DESTROY錛涜繖涓変釜瀹忓畾涔夊氨鏄垜浠殑涓変釜娑堟伅鍒嗘祦鍣紙鍒湅鍙粈涔堝垎嫻佸櫒錛岃絀夸簡涔熶笉鍊煎嚑涓挶錛屽懙鍛碉級錛屽畠浠湪windowsx.h涓殑瀹氫箟濡備笅錛?br>
#define HANDLE_WM_CREATE(hwnd, wParam, lParam, fn)
((fn)((hwnd), (LPCREATESTRUCT)(lParam)) ? 0L : (LRESULT)-1L)
#define HANDLE_WM_PAINT(hwnd, wParam, lParam, fn)
((fn)(hwnd), 0L)
#define HANDLE_WM_DESTROYCLIPBOARD(hwnd, wParam, lParam, fn)
((fn)(hwnd), 0L)
鎶婅繖涓変釜瀹忓畾涔夋浛鎹㈠洖鍘伙紝灝卞彉鎴愶細
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
return Cls_OnCreate(hwnd, (LPCREATESTRUCT)(lParam) ? 0L : (LRESULT)-1L;
// 濡傛灉澶勭悊浜嗘秷鎭紝鍒機ls_OnCreate搴旇繑鍥濼RUE錛屽鑷碬ndProc榪斿洖0錛屽惁鍒機ls_OnCreate榪斿洖FALSE錛屽鑷碬ndProc榪斿洖-1錛?br> case WM_PAINT:
return Cls_OnPaint(hwnd), 0L;
// 閫楀彿琛ㄨ揪寮忥紱Cls_OnPaint鏄痸oid綾誨瀷錛岃繖閲岃繑鍥?錛?
case WM_DESTROY:
return Cls_OnDestroy(hwnd), 0L; // 鍚孋ls_OnPaint
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
涔嬪悗鎴戜滑灝卞彲浠ユ寜鐓ф秷鎭垎嫻佸櫒鐨勫畾涔夌紪鍐欑浉搴旂殑娑堟伅澶勭悊鍑芥暟浜嗭細
BOOL Cls_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct){…};
void Cls_OnPaint(HWND hwnd){…};
void Cls_OnDestroyClipboard(HWND hwnd){…};
windowsx.h榪樻彁渚涗簡涓涓洿鍔犵畝鍖栫殑鏂規硶錛氫嬌鐢℉ANDLE_MSG瀹忥紝榪欎釜瀹忔槸榪欐牱瀹氫箟鐨勶細
#define HANDLE_MSG(hwnd, message, fn)
case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
榪欎釜瀹忚鍋氱殑灝辨槸鏍規嵁涓嶅悓鐨刴essage錛?#鐢ㄦ潵榪炴帴鍓嶅悗鐨勫瓧絎︿覆錛夛紝鎶婅嚜宸?#8220;鍙樻垚”鐩稿簲鐨凥ANDLE_XXXXMESSAGE褰㈠紡鐨勫畯錛屽啀閫氳繃鐩稿簲鐨勫畯鏉ユ墽琛屾秷鎭鐞嗕唬鐮侊紱
姣斿瀹為檯浠g爜涓啓鍏ワ細
HANDLE_MSG(hwnd, WM_CREATE, Cls_OnCreate)
鍒欑粡榪囪漿鎹㈠氨鍙樻垚錛?br>
case (WM_CREATE): return HANDLE_WM_CREATE((hwnd), (wParam), (lParam), (Cls_OnCreate))
榪欐牱錛屾垜浠氨鍙互鐩存帴鎶婄▼搴忓啓涓猴細
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd, WM_CREATE, Cls_OnCreate);
HANDLE_MSG(hwnd, WM_PAINT, Cls_OnPaint);
HANDLE_MSG(hwnd, WM_DESTROY, Cls_OnDestroy);
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
涔?
鍚庣洿鎺ョ紪鍐欑浉搴旂殑娑堟伅澶勭悊榪囩▼灝卞彲浠ヤ簡銆傛槸涓嶆槸綆媧佸浜嗭紵鑰屼笖鎶婃秷鎭鐞嗗皝瑁呭埌鍑芥暟閲岄潰錛屽氨鍙互浣跨敤VS鐩存帴璺寵漿鍒拌繖涓嚱鏁幫紝鍐嶄篃涓嶇敤璐瑰姴鍘繪壘閭d釜
case浜嗐傝娉ㄦ剰鐨勪竴鐐規槸錛岃櫧鐒秝indowsx.h閲屽寘鎷簡鎵鏈夋秷鎭搴旂殑鍒嗘祦鍣紝浣嗗畠浠殑鍙傛暟鏄畯瀹氫箟鏄懼紡璇存槑鐨勶紝鍦ㄧ紪鍐欐秷鎭鐞嗗嚱鏁版椂錛屽繀欏婚伒寰?
瀹忓畾涔変腑鐨勫弬鏁扮被鍨嬶紝鍚﹀垯浼氬鑷撮敊璇紱榪欎箞澶氭秷鎭垎嫻佸櫒錛屾垜浠瘡嬈℃柊鍐欎竴涓秷鎭鐞嗗嚱鏁版椂灝卞緱鐪嬬湅鏄惁鎶婂弬鏁拌緗紜簡錛屾暣涓繃紼嬬箒鐞愬啑闀褲傚ソ鍦ㄥ凡緇忔湁涓
涓伐鍏峰彨Message Cracker Wizard錛屽彲浠ュ府鍔╂垜浠敓鎴愭秷鎭垎嫻佸櫒鍜岀浉鍏崇殑澶勭悊榪囩▼錛屽叿浣撹錛?a target="_blank">http://www.codeproject.com/win32/msgcrackwizard.asp銆?br>
2錛庡湪瀵硅瘽妗嗕腑浣跨敤娑堟伅鍒嗘祦鍣?br>鍦ㄥ璇濇娑堟伅澶勭悊涓紝紿楀彛瀛愮被鍖栨槸鎴戜滑緇忓父浣跨敤鐨勬墜孌碉紝榪欎篃鍙互閫氳繃娑堟伅鍒嗘祦鍣ㄥ疄鐜幫紝浣嗘槸鏈夌偣灝忛棶棰?:>
涓嬮潰鏄竴涓嬌鐢ㄤ簡windowsx.h娑堟伅鍒嗘祦鍣ㄧ殑瀵硅瘽妗嗗強鍏跺鐞嗚繃紼嬶細
……
int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int)
{
DialogBoxParam(
hinstExe, MAKEINTRESOURCE(IDD_PASSTHRU), NULL, (DLGPROC)Dlg_Proc, 0);
return(0);
}
……
LRESULT CALLBACK Dlg_Proc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
HANDLE_MSG(hwnd, WM_INITDIALOG, Cls_OnInitDialog); // 涓嶈兘鐩存帴浣跨敤HANDLE_MSG瀹?br>HANDLE_MSG(hwnd, WM_COMMAND, Cls_OnCommand); // 涓嶈兘鐩存帴浣跨敤HANDLE_MSG瀹?br>}
return false;
}
浠ヤ笂紼嬪簭涓洿鎺ヤ嬌鐢℉ANDLE_MSG鍙兘瀵艱嚧閿欒錛涗負浠涔堝憿錛熼棶棰樺嚭鍦ㄥ瓙綾誨寲鐨勬秷鎭鐞嗚繃紼嬬殑榪斿洖鍊間笂錛宮sdn涓浜庡璇濇娑堟伅澶勭悊榪囩▼鐨勮繑鍥炲兼湁濡備笅璇存槑錛?br>
涓鑸儏鍐典笅錛屽璇濇榪囩▼鍑芥暟搴旇鍦ㄥ鐞嗕簡娑堟伅鐨勬儏鍐典笅榪斿洖TRUE錛屽鏋滄病鏈夊鐞嗭紝鍒欒繑鍥濬ALSE銆傚鏋滃璇濇榪囩▼榪斿洖浜咶ALSE錛岄偅涔堝璇濇綆$悊鍣ㄤ負榪欐潯娑堟伅鍑嗗榛樿鐨勫璇濇搷浣溿?br>
濡?
鏋滃璇濇澶勭悊浜嗕竴涓渶瑕佺壒瀹氳繑鍥炲肩殑娑堟伅錛屽垯瀵硅瘽妗嗙殑榪斿洖鍊煎簲璇ヨ璁劇疆涓鴻皟鐢⊿etWindowLong(The SetWindowLong function changes an attribute of the specified
window. The function also sets a 32-bit (long) value at the specified offset
into the extra window memory of a window. )鍚庣殑榪斿洖鍊鹼紝騫跺湪榪斿洖TRUE涔嬪墠绔嬪嵆榪斿洖榪欎釜
鍊箋傛敞鎰忎綘蹇呴』绔嬪嵆璋冪敤SetWindowLong錛堣繖涓嚱鏁扮敤浜庤皟鐢ㄧ獥鍙e瓙綾誨寲鐨勮繃紼嬶級錛岃繖浼氬鑷碊WL_MSGRESULT鍊艱涓涓祵濂楃殑瀵硅瘽妗嗘秷鎭?
鏀瑰啓銆傝繑鍥炲間負鐗瑰畾鍊肩殑娑堟伅鏈夛細
• WM_CHARTOITEM
• WM_COMPAREITEM
• WM_CTLCOLORBTN
• WM_CTLCOLORDLG
• WM_CTLCOLOREDIT
• WM_CTLCOLORLISTBOX
• WM_CTLCOLORSCROLLBAR
• WM_CTLCOLORSTATIC
• WM_INITDIALOG
• WM_QUERYDRAGICON
• WM_VKEYTOITEM
鐪嬪埌娌℃湁錛?鎴戜滑鐨勬秷鎭疻M_INITDIALOG涔熷湪鍏朵腑錛屽榪欎釜娑堟伅榪涜澶勭悊鐨勮繃紼嬩笉鑳界畝鍗曠殑榪斿洖TRUE琛ㄧず瀵規秷鎭繘琛屼簡澶勭悊錛岃屾槸鍙︽湁鍏舵剰錛涘畠灝嗚漿鍖栦負錛?br>
case (WM_INITDIALOG): return HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, Cls_OnInitDialog);
瀹廐ANDLE_WM_INITDIALOG瀹氫箟濡備笅錛?br>
#define HANDLE_WM_INITDIALOG(hwnd, wParam, lParam, fn)
(LRESULT)(DWORD)(UINT)(BOOL)(fn)((hwnd), (HWND)(wParam), lParam)
瀵筗M_INITDIALOG鐨勫鐞嗭紝濡傛灉榪斿洖TRUE錛屽垯琛ㄧず璁劇疆閿洏鐒︾偣鍒板璇濇鐨勯粯璁ゆ帶浠訛紝鍚﹀垯榪斿洖FALSE錛涜繖鏃跺ソ鍍忚繕鐪嬩笉鍑轟粈涔堥棶棰橈紝鑰屽浜庢垜浠殑鍙﹀涓涓秷鎭疻M_COMMAND錛孒ANDLE_MSG綆鍗曠殑鎶婂畠鍙樻垚錛?br>
case (WM_COMMAND): return HANDLE_WM_COMMAND(hwnd, wParam, lParam, Cls_OnCommand);
瀹廐ANDLE_WM_COMMAND瀹氫箟濡備笅錛?br>
#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn)
((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
闂?
棰樺嚭鏉ヤ簡錛屾垜浠殑Cls_OnCommand鐢變簬鏄釜void鍨嬬殑鍑芥暟錛屾槸娌℃湁榪斿洖鍊肩殑錛屽洜姝indows榛樿榪欑娑堟伅澶勭悊榪囩▼蹇呴』榪斿洖涓涓?鍊鹼紝鑰岃繑
鍥?鍊間笉灝辮〃紺烘垜浠殑娑堟伅榪囩▼涓嶅鐞嗚繖涓秷鎭箞錛熻繖涓煕鐩炬槸HANDLE_MSG鏃犳硶瑙e喅鐨勩傛庝箞鍔炴墠鑳戒嬌娑堟伅榪囩▼鍦ㄥ鐞嗗畬WM_COMMAND娑堟伅涔嬪悗
姝g‘鐨勮繑鍥炰竴涓猅RUE鍛紵 絳旀鏄嬌鐢ㄥ彟涓涓獁indowsx.h涓殑瀹忥細SetDlgMsgResult(hwnd, msg, result)
榪欎釜瀹忓畾涔夊涓嬶細
#define SetDlgMsgResult(hwnd, msg, result) ((
(msg) == WM_CTLCOLORMSGBOX ||
(msg) == WM_CTLCOLOREDIT ||
(msg) == WM_CTLCOLORLISTBOX ||
(msg) == WM_CTLCOLORBTN ||
(msg) == WM_CTLCOLORDLG ||
(msg) == WM_CTLCOLORSCROLLBAR ||
(msg) == WM_CTLCOLORSTATIC ||
(msg) == WM_COMPAREITEM ||
(msg) == WM_VKEYTOITEM ||
(msg) == WM_CHARTOITEM ||
(msg) == WM_QUERYDRAGICON ||
(msg) == WM_INITDIALOG
) ? (BOOL)(result) : (SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE))
錛堟湁娌℃湁娉ㄦ剰鍒幫紝閲岄潰澶氫簡涓涓猈M_CTLCOLORMSGBOX 錛?榪欎釜娑堟伅鏄?6浣峎inAPI涓殑娑堟伅錛屼竴搴﹁杞崲涓篧in32 API鐨勪竴涓秷鎭紱鐜板湪鍦ㄦ渶鏂扮殑32浣岮PI涓凡緇忚鍒犻櫎浜嗭紱淇濈暀瀹冨彲鑳借冭檻鍒板吋瀹規х殑闂錛岃繖閲屼笉鍋氳繘涓姝ヨ璁猴級
鐜?
鍦ㄧ湅鍒頒簡錛屽鏋滃璇濇榪囩▼澶勭悊鐨勬秷鎭伆宸т負榪斿洖鐗瑰畾鍊間腑鐨勪竴涓紝鍒欏瀹炶繑鍥瀝esult錛涗笉瑕佽鍓嶉潰鐨凚OOL钂欒斀錛孊OOL鍦ㄥご鏂囦歡涓殑瀹氫箟瀹為檯涓婃槸涓
涓猧nt鍨嬶紝涓鏃﹂渶瑕佽繑鍥為潪TRUE鎴朏ALSE鐨勫叾浠栧鹼紝鐓ф牱鍙互錛涜繖鏍鳳紝鎴戜滑鐨凜ls_OnInitDialog灝辮兘澶熸紜殑榪斿洖瀹冪殑BOOL鍊間簡錛?
鑰孋ls_OnCommand鍦ㄥ鐞嗕箣鍚庯紝涔熷彲浠ョ敱鍚庨潰鐨勯楀彿琛ㄨ揪寮忔紜殑榪斿洖涓涓猅RUE琛ㄧず娑堟伅宸插鐞嗐?br>
鍦ㄣ奧indows鏍稿績緙栫▼銆嬩竴涔︿腑錛屽ぇ鐗汮effrey鑷繁瀹氫箟浜嗕竴涓畯錛屼嬌SetDlgMsgResult瀹忕殑浣跨敤鏇村姞鏂逛究錛?br>
#define chHANDLE_DLGMSG(hwnd, message, fn)
case (message): return (SetDlgMsgResult(hwnd, uMsg,
HANDLE_##message((hwnd), (wParam), (lParam), (fn))))
鍙榪欎釜瀹忓彧鏄畝鍗曠殑瀵筍etDlgMsgRseult瀹忚繘琛屼簡灝佽銆?br>
榪欐牱錛屾垜浠渶緇堢殑浠g爜鍙互鍐欐垚錛?br>
LRESULT CALLBACK Dlg_Proc (HWND hwnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Cls_OnInitDialog); // 浣跨敤澶х墰鐨刢hHANDLE_DLGMSG瀹?br>chHANDLE_DLGMSG(hwnd, WM_COMMAND, Cls_OnCommand);
}
return false;
}
涓嬮潰鎶婂師鏉ョ▼搴忔暣涓鏋跺垪鍑烘潵錛?br>
LRESULT CALLBACK Dlg_Proc(HWND hwnd, UNIT umsg, WPARAM wparam, LPARAM lparam)
{
switch(msg)
{
case WM_COMMAND: // 姣忎釜case閮借涓涓猰essage cracker浠f浛錛岃繖閲屼嬌鐢ㄥぇ鐗涘悓蹇楃殑
// do something; // chHANDLE_DLGMSG瀹忥紱榪欎釜瀹忚礋璐e娑堟伅絳涢夛紝澶勭悊騫惰繑鍥炵浉搴旂殑鍊?br> return true;
case WM_INITDIALOG:
// do something;
return xxxx;
}
return false; // 濡傛灉娑堟伅涓嶅湪鎴戜滑鐨凞lgProc榪囩▼涓澶勭悊錛屽垯鍛婅瘔璋冪敤榪欎釜DlgProc鐨勬秷鎭紝
} //鍛婅瘔緋葷粺鐨勫璇濇綆$悊鍣紝榪欎釜娑堟伅鎴戜滑涓嶅鐞嗭紝浜ょ粰浣犱簡
瀵規瘮涓涓嬶紝娑堟伅鍒嗘祦鍣ㄧ殑浣滅敤涓嶈█鑷槑銆?br>
浠ヤ笂鍙槸浠嬬粛浜嗘秷鎭垎嫻佸櫒鐨勯儴鍒嗗簲鐢紝鏇村鍒涢犳х殑鐢ㄦ硶榪樼瓑浣犺嚜宸卞湪瀹炶返涓彂鎺樸?br>
涓嬮潰鍒楀嚭涓浜涙湁鐢ㄧ殑鍙傝冭祫鏂欙細
http://support.microsoft.com/default.aspx?scid=kb;en-us;83456 浠嬬粛浜哠TRICT瀹忓畾涔変互鍙妛indowsx.h
http://www.codeproject.com/win32/msgcrackwizard.asp 鎻愪緵message cracker wizard鐨勪笅杞斤紝鑰屼笖闄勬湁婧愪唬鐮?br>銆妛indows鏍稿績緙栫▼銆媤indows緋葷粺緙栫▼錛屽氨璺熷畾澶х墰浜?:> 浠栧湪鑷繁鐨剆ample涓ぇ閲忎嬌鐢ㄤ簡message cracker