锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 銆銆鏈榪戯紝鎴戜簡瑙e埌涓涓彨鍋歋anctuary鐨勭浉褰撴湁瓚g殑瀹夊叏浜у搧銆傚畠鑳藉闃繪浠諱綍紼嬪簭鐨勮繍琛?榪欎簺紼嬪簭娌℃湁鏄劇ず鍦ㄨ蔣浠跺垪琛ㄤ腑-璇ヨ〃涓殑紼嬪簭琚厑璁稿湪涓涓壒瀹氱殑鏈哄櫒涓婅繍琛屻傜粨鏋滐紝PC鐢ㄦ埛寰楀埌淇濇姢鑰屽厤浜庡悇縐嶆彃浠墮棿璋嶈蔣浠躲佽爼铏拰鐗規礇浼婃湪椹殑渚佃-灝辯畻鑳藉榪涘叆浠?濂圭殑璁$畻鏈猴紝瀹冧滑涔熸病鏈夋満浼氭墽琛岋紝騫跺洜姝ゆ病鏈夋満浼氬璇ユ満鍣ㄩ犳垚浠諱綍鎹熷銆傚綋鐒訛紝鎴戣寰楄繖涓壒寰佺浉褰撴湁瓚o紱騫朵笖錛屽湪紼嶄綔鎬濊冧互鍚庯紝鎴戝氨鏈変簡涓涓嚜宸辯殑瀹炵幇銆傚洜姝わ紝鏈枃灝嗘弿榪板浣曢氳繃閽╀綇鏈満API鐨勬柟寮忔潵瀹炵幇鐩戞帶涓涓繘紼嬬殑鍒涘緩騫跺湪緋葷粺綰т笂瀵逛箣榪涜鎺у埗銆?/p>
銆銆鏈枃澶ц儐鍋囪錛岀洰鏍囪繘紼嬫槸浠ヤ竴縐嶇敤鎴鋒ā寮?澶栧3鍑芥暟錛孋reateProcess()錛岀敤涓緋誨垪鐨勬湰鏈篈PI璋冪敤鐨勬墜宸ョ殑榪涚▼鍒涘緩錛岀瓑絳?鍒涘緩鐨勩傚敖綆′粠鐞嗚涓婏紝涓涓繘紼嬭兘澶熶互鍐呮牳鏂瑰紡鍚姩錛涗笉榪囦粠瀹為檯鏉ョ湅錛屽姝ょ殑鍙兘鎬ф槸鍙互蹇界暐涓嶈鐨勶紝鍥犳鎴戜滑涓嶅繀涓烘鎷呭績銆備負浠涔堬紵璇烽昏緫鍦版濊冧竴涓?涓轟簡浠ュ唴鏍告柟寮忓惎鍔ㄤ竴涓繘紼嬶紝鐢ㄦ埛蹇呴』瑁呰澆涓涓┍鍔ㄧ▼搴忥紝璇ラ┍鍔ㄧ▼搴忓弽榪囨潵棣栧厛瑕佹殫紺烘煇縐嶇敤鎴鋒ā寮忎唬鐮佺殑鎵ц銆傚洜姝わ紝涓轟簡闃叉鏈鎺堟潈紼嬪簭鐨勬墽琛岋紝鎴戜滑鍙互瀹夊叏鍦板湪緋葷粺綰т笂浠ョ敤鎴鋒ā寮忛檺鍒舵垜浠嚜宸辨帶鍒剁殑榪涚▼鐨勫垱寤恒?/p>
銆銆浜屻?瀹氫箟絳栫暐 銆銆棣栧厛璁╂垜浠槑紜紝涔嬫墍浠ヨ繖鏍峰仛鐨勭洰鐨勬槸涓轟簡鍦ㄧ郴緇熺駭涓婄洃瑙嗗拰鎺у埗榪涚▼鍒涘緩銆?/p>
銆銆榪涚▼鍒涘緩鏄竴浠剁浉褰撳鏉傜殑浜嬫儏-瀹冨寘鍚浉褰撳鐨勫伐浣?濡傛灉浣犱笉鐩鎬俊鎴戯紝鍙互鍙嶆眹緙朇reateProcess()錛岃繖鏍蜂綘灝變細浜茬溂鐪嬪埌榪欑偣)銆備負浜嗗惎鍔ㄤ竴涓繘紼嬶紝鍙互浣跨敤涓嬪垪姝ラ錛?/p>
銆銆1.鍙墽琛屾枃浠跺繀欏昏浠ILE_EXECUTE瀛樺彇鏂瑰紡鎵撳紑銆?/p>
銆銆2.鍙墽琛屾槧鍍忓繀欏昏瑁呰澆榪汻AM銆?/p>
銆銆3.蹇呴』寤虹珛榪涚▼鎵ц瀵硅薄(EPROCESS錛孠PROCESS鍜孭EB緇撴瀯)銆?/p>
銆銆4.蹇呴』涓烘柊寤鴻繘紼嬪垎閰嶅湴鍧絀洪棿銆?/p>
銆銆5.蹇呴』寤虹珛榪涚▼鐨勪富綰跨▼鐨勭嚎紼嬫墽琛屽璞?ETHREAD錛孠THREAD鍜孴EBstructures)銆?/p>
銆銆6.蹇呴』涓轟富綰跨▼鍒嗛厤鍫嗘爤銆?/p>
銆銆7.蹇呴』寤虹珛榪涚▼鐨勪富綰跨▼鐨勬墽琛屼笂涓嬫枃銆?/p>
銆銆8.蹇呴』閫氱煡Win32瀛愮郴緇熸湁鍏寵鏂拌繘紼嬬殑鍒涘緩鎯呭喌銆?/p>
銆銆涓虹‘淇濊繖浜涙楠や腑鐨勪換浣曚竴姝ョ殑鎴愬姛錛屾墍鏈夊叾鍓嶉潰鐨勬楠ゅ繀欏繪槸鎴愬姛鎵ц鐨?浣犱笉鑳藉鍦ㄦ病鏈変竴涓彲鎵ц鍖哄彞鏌勭殑鎯呭喌涓嬪緩绔嬩竴涓彲鎵ц榪涚▼瀵硅薄錛涙病鏈夋枃浠跺彞鏌勭殑鎯呭喌涓嬩綘鏃犳硶鏄犲皠涓涓彲鎵ц鍖猴紝絳夌瓑)銆傚洜姝わ紝濡傛灉鎴戜滑鍐沖畾閫鍑轟換浣曡繖浜涙楠わ紝鎵鏈夊悗闈㈢殑姝ラ涔熶細澶辮觸錛屼互鑷充簬鏁翠釜榪涚▼鍒涘緩浼氬け璐ャ備笂闈㈡墍鏈夌殑姝ラ閮藉彲浠ラ氳繃璋冪敤鏌愪簺鏈満API鍑芥暟鐨勬柟寮忔潵瀹炵幇錛岃繖鏄彲浠ョ悊瑙g殑銆傚洜姝わ紝涓轟簡鐩戣鍜屾帶鍒惰繘紼嬪垱寤猴紝鎴戜滑鎵鏈夎鍋氱殑灝辨槸閽╀綇榪欎簺API鍑芥暟-瀹冧滑鏃犳硶鏃佽礬鎺夎鍒涘緩涓鏂拌繘紼嬫墍瑕佹墽琛岀殑浠g爜銆?/p>
銆銆鎴戜滑搴旇閽╀綇鍝簺鏈満API鍑芥暟鍛?灝界NtCreateProcess()浼間箮鏄棶棰樼殑鏈鏄劇劧鐨勭瓟妗堬紝浣嗘槸錛岃繖涓瓟妗堟槸閿欒鐨?鏈夊彲鑳戒笉闇瑕佽皟鐢ㄨ繖涓嚱鏁頒篃鍙互鍒涘緩涓涓柊鐨勮繘紼嬨備緥濡傦紝CreateProcess()鍙互鍦ㄤ笉璋冪敤NtCreateProcess()鐨勬儏鍐典笅鍒涘緩涓庤繘紼嬬浉鍏崇殑鍐呮牳妯″紡緇撴瀯.鍥犳錛岃繖鏍蜂互鏉ラ挬浣廚tCreateProcess()瀵規垜浠鏃犲府鍔┿?/p>
銆銆涓轟簡鐩戣榪涚▼鐨勫垱寤猴紝鎴戜滑蹇呴』閽╀綇NtCreateFile()鍜孨tOpenFile()錛屾垨鑰匩tCreateSection()涔嬩腑鐨勪竴涓?-涓嶇粡璋冪敤榪欎簺API鏄粷瀵規棤娉曡繍琛屼換浣曞彲鎵ц鏂囦歡鐨勩傚鏋滄垜浠喅瀹氱洃瑙嗗NtCreateFile()鍜孨tOpenFile()鐨勮皟鐢紝閭d箞鎴戜滑蹇呴』鍖哄埆寮榪涚▼鍒涘緩鍜屽父瑙勭殑鏂囦歡IO鎿嶄綔銆傝繖欏逛換鍔″茍涓嶆繪槸閭d箞瀹規槗銆備緥濡傦紝濡傛灉涓浜涘彲鎵ц鏂囦歡姝e湪琚互FILE_ALL_ACCESS瀛樺彇鏂瑰紡鎵撳紑錛屾垜浠鎬庝箞鍔烇紵榪欎粎鏄竴涓狪O鎿嶄綔榪樻槸涓涓繘紼嬪垱寤虹殑涓閮ㄥ垎錛熷湪榪欑偣涓婏紝鏄緢闅懼垽鏂殑-鎴戜滑闇瑕佷簡瑙h皟鐢ㄧ嚎紼嬩笅涓姝ヨ騫蹭粈涔堛傚洜姝わ紝閽╀綇NtCreateFile()鍜孨tOpenFile()鍙兘涓嶆槸鏈濂界殑閫夋嫨銆?/p>
銆銆閽╀綇NtCreateSection()鏄洿涓哄悎鐞嗙殑-濡傛灉鎴戜滑鍦ㄥ彂鐢熸妸鍙墽琛屾枃浠舵槧灝勪負鏄犲儚(SEC_IMAGE 灞炴?鐨勮姹傚彂鐢熸椂鎷︽埅瀵筃tCreateSection()鐨勮皟鐢?緇撳悎鍏佽鎵ц欏甸潰淇濇姢鐨勮姹傦紱閭d箞錛屾垜浠彲浠ョ‘淇¤榪涚▼灝嗚琚惎鍔ㄣ傚湪榪欎竴鐐逛笂錛屾垜浠槸鑳藉浣滃嚭鍐沖畾錛屽鏋滄垜浠笉鎯寵榪涚▼琚垱寤猴紝鍙互璁㎞tCreateSection()榪斿洖STATUS_ACCESS_DENIED銆傚洜姝わ紝涓轟簡瀹屽叏鎺у埗鐩爣鏈哄櫒涓婄殑榪涚▼鍒涘緩錛屾墍鏈夋垜浠鍋氱殑鏄湪緋葷粺綰т笂閽╀綇NtCreateSection()銆?/p>
銆銆璞℃潵鑷簬ntdll.dll涓殑浠諱綍鍏跺畠浠g悊涓鏍鳳紝NtCreateSection()鐢ㄦ湇鍔$儲寮曞姞杞紼AX錛屼嬌EDX鎸囧悜鍑芥暟鍙傛暟錛屽茍涓旀妸鎵ц鏉冧紶閫掑埌KiDispatchService()鍐呮牳妯″紡渚嬬▼(榪欐槸閫氳繃Windows NT/2000涓殑INT 0x2E鎸囦護鎴栬匴indows XP涓嬬殑SYSENTER鎸囦護瀹炵幇鐨?銆傚湪鏍¢獙瀹屽嚱鏁板弬鏁頒箣鍚庯紝KiDispatchService()鎶婃墽琛屾潈浼犻掑埌鏈嶅姟鐨勫疄闄呭疄鐜伴儴鍒?瀹冪殑鍦板潃鍙敤浜庢湇鍔℃弿榪拌〃(鎸囧悜榪欎釜琛ㄧ殑鎸囬拡鐢眓toskrnl.exe浣滀負KeServiceDescriptorTable鍙橀噺鎵杈撳嚭錛屾墍浠ュ畠瀵逛簬鍐呮牳妯″紡椹卞姩紼嬪簭鏄彲鐢ㄧ殑)涓傛湇鍔℃弿榪拌〃閫氳繃涓嬪垪緇撴瀯鎵鎻忚堪錛?br> 銆銆struct SYS_SERVICE_TABLE { 銆銆void **ServiceTable; 銆銆unsigned long CounterTable; 銆銆unsigned long ServiceLimit; 銆銆void **ArgumentsTable; 銆銆}; 銆銆榪欎釜緇撴瀯涓殑ServiceTable瀛楁鎸囧悜涓涓暟緇?瀹冩嫢鏈夋墍鏈夊疄鐜扮郴緇熸湇鍔$殑鍑芥暟鐨勫湴鍧銆傚洜姝わ紝涓轟簡鍦ㄧ郴緇熺駭涓婇挬浣忎換浣曟湰鏈篈PI鍑芥暟錛屾墍鏈夋垜浠繀欏誨仛鐨勬槸鎶婃垜浠殑浠g悊鍑芥暟鐨勫湴鍧鍐欏叆琚獽eServiceDescriptorTable鐨凷erviceTable瀛楁鎵鎸囧悜鐨勬暟緇勭殑絎琲涓叆鍙?i鏄湇鍔$儲寮?銆?/p>
銆銆鑷蟲錛岀湅璧鋒潵鎴戜滑宸蹭簡瑙d簡鍦ㄧ郴緇熺駭涓婄洃瑙嗗拰鎺у埗榪涚▼鍒涘緩鐨勪竴鍒囥傜幇鍦ㄨ鎴戜滑寮濮嬪疄闄呯殑宸ヤ綔銆?/p>
涓夈?鎺у埗榪涚▼鍒涘緩
]]>
鍘熻嫳鏂囧湴鍧:
http://www.codeproject.com/KB/system/soviet_protector.aspx
Download source files - 10.8 Kb
Download demo project - 12.1 Kb
涓銆?綆浠?
銆銆鎴戜滑鐨勮В鍐蟲柟妗堢敱涓涓唴鏍告ā寮忛┍鍔ㄧ▼搴忓拰涓涓敤鎴鋒ā寮忓簲鐢ㄧ▼搴忕粍鎴愩備負浜嗗紑濮嬬洃瑙嗚繘紼嬪垱寤猴紝鎴戜滑鐨勫簲鐢ㄧ▼搴忚鎶婃湇鍔$儲寮曪紙鐩稿簲浜嶯tCreateSection()錛変互鍙婁氦鎹㈢紦鍐插尯鐨勫湴鍧浼犻掑埌鎴戜滑鐨勯┍鍔ㄧ▼搴忋傝繖鏄敱涓嬪垪浠g爜鎵瀹屾垚鐨勶細
//鎵撳紑璁懼
device=CreateFile("\\.\PROTECTOR",GENERIC_READ|GENERIC_WRITE,
0,0,OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM,0);
//寰楀埌NtCreateSection鐨勭儲寮曞茍鎶婂畠榪炲悓杈撳嚭緙撳啿鍖虹殑鍦板潃浼犻掔粰璁懼
DWORD * addr=(DWORD *)
(1+(DWORD)GetProcAddress(GetModuleHandle("ntdll.dll"),"NtCreateSection"));
ZeroMemory(outputbuff,256);
controlbuff[0]=addr[0];
controlbuff[1]=(DWORD)&outputbuff[0];
DeviceIoControl(device,1000,controlbuff,256,controlbuff,256,&dw,0);
銆銆姝や唬鐮佹槸鏄劇劧鐨?鍞竴闇瑕佹敞鎰忕殑鏄垜浠緱鍒版湇鍔$儲寮曠殑鏂瑰紡銆傛墍鏈夋潵鑷簬ntdll.dll鐨勪唬鐞嗛兘浠庝竴琛屼唬鐮丮OV EAX,ServiceIndex寮濮?瀹冨彲浠ラ傜敤浜庝換浣曠増鏈拰椋庡懗鐨刉indows NT銆傝繖鏄竴鏉?瀛楄妭闀跨殑鎸囦護錛屼互MOV EAX鎿嶄綔鐮佷綔絎竴瀛楄妭錛屾湇鍔$儲寮曚綔涓虹暀涓嬬殑4瀛楄妭銆傚洜姝わ紝涓轟簡寰楀埌鐩稿簲浜庝竴浜涚壒鍒殑鏈満API鍑芥暟鐨勬湇鍔$儲寮曪紝鎵鏈変綘瑕佸仛鐨勬槸浠庤鍦板潃璇誨彇4涓瓧鑺傦紝-浣嶄簬浠庤繖涓唬鐞嗗紑濮?瀛楄妭璺濈鐨勫湴鏂廣?br>
銆銆鐜板湪璁╂垜浠湅涓涓嬫垜浠殑椹卞姩紼嬪簭鍋氫粈涔堬紝褰撳畠鏀跺埌鏉ヨ嚜鎴戜滑鐨勫簲鐢ㄧ▼搴忕殑IOCTL鏃訛細
NTSTATUS DrvDispatch(IN PDEVICE_OBJECT device,IN PIRP Irp)
{
銆UCHAR*buff=0; ULONG a,base;
銆PIO_STACK_LOCATION loc=IoGetCurrentIrpStackLocation(Irp);
銆if(loc->Parameters.DeviceIoControl.IoControlCode==1000)
銆{
銆銆buff=(UCHAR*)Irp->AssociatedIrp.SystemBuffer;
銆銆//閽╀綇鏈嶅姟璋冨害琛?br>銆銆memmove(&Index,buff,4);
銆銆a=4*Index+(ULONG)KeServiceDescriptorTable->ServiceTable;
銆銆base=(ULONG)MmMapIoSpace(MmGetPhysicalAddress((void*)a),4,0);
銆銆a=(ULONG)&Proxy;
銆銆_asm
銆銆{
銆銆銆mov eax,base
銆銆銆mov ebx,dword ptr[eax]
銆銆銆mov RealCallee,ebx
銆銆銆mov ebx,a
銆銆銆mov dword ptr[eax],ebx
銆銆}
銆銆MmUnmapIoSpace(base,4);
銆銆memmove(&a,&buff[4],4);
銆銆output=(char*)MmMapIoSpace(MmGetPhysicalAddress((void*)a),256,0);
銆}
銆Irp->IoStatus.Status=0;
銆IoCompleteRequest(Irp,IO_NO_INCREMENT);
銆return 0;
}
銆銆姝e浣犳墍瑙侊紝榪欓噷娌℃湁浠涔堢壒鍒殑-鎴戜滑鍙槸閫氳繃MmMapIoSpace()鏉ユ妸浜ゆ崲緙撳啿鍖烘槧灝勫埌鍐呮牳涓紝鍙﹀鎶婃垜浠殑浠g悊鍑芥暟鐨勫湴鍧鍐欏埌鏈嶅姟琛?褰撶劧錛屾垜浠繖鏄湪鎶婂疄闄呯殑鏈嶅姟鎵ц鐨勫湴鍧淇濆瓨鍒板叏灞鍙橀噺RealCallee浠ュ悗榪欐牱鍋氱殑)銆備負浜嗘敼鍐欐湇鍔¤〃鐨勯傚綋鍏ュ彛錛屾垜浠氳繃MmMapIoSpace()鏉ユ槧灝勭洰鏍囧湴鍧銆備負浠涔堟垜浠榪欐牱鍋氾紵涓嶇鎬庝箞璇達紝鎴戜滑宸茬粡鍙互瀛樺彇鏈嶅姟琛ㄤ簡錛屼笉鏄悧錛熼棶棰樻槸錛屾湇鍔¤〃鍙兘椹葷暀鍦ㄤ竴孌靛彧璇誨唴瀛樹腑銆傚洜姝わ紝鎴戜滑蹇呴』媯鏌ヤ竴涓嬫槸鍚︽垜浠湁瀵圭洰鏍囩┖闂村啓鐨勬潈闄愶紝鑰屽鏋滄垜浠病鏈夎繖涓潈闄愶紝閭d箞鍦ㄦ敼鍐欐湇鍔¤〃涔嬪墠錛屾垜浠繀欏繪敼鍙橀〉闈繚鎶ゃ備綘涓嶈涓鴻繖鏍蜂互鏉ュ伐浣滃お澶氫簡鍚楋紵鍥犳錛屾垜浠粎鐢∕mMapIoSpace()鏉ユ槧灝勬垜浠殑鐩爣鍦板潃錛岃繖鏍蜂互鏉ワ紝鎴戜滑灝變笉蹇呮媴蹇冧換浣曠殑欏甸潰淇濇姢闂浜?浠庣幇鍦ㄥ紑濮嬶紝鎴戜滑鍋囧畾宸叉湁鍒扮洰鏍囬〉闈㈠啓鐨勬潈闄愪簡銆傜幇鍦ㄨ鎴戜滑鐪嬩竴涓嬫垜浠殑浠g悊鍑芥暟:
//榪欎釜鍑芥暟鐢ㄦ潵紜畾鏄惁鎴戜滑搴旇鍏佽NtCreateSection()璋冪敤鎴愬姛
ULONG __stdcall check(PULONG arg)
{
銆HANDLE hand=0;PFILE_OBJECT file=0;
銆POBJECT_HANDLE_INFORMATION info;ULONG a;char*buff;
銆ANSI_STRING str; LARGE_INTEGER li;li.QuadPart=-10000;
銆//媯鏌ユ爣蹇椼傚鏋滄墍瑕佹眰鐨勫瓨鍙栨柟寮忎笉鏄疨AGE_EXECUTE,
銆//榪欏茍涓嶈绱?br>銆if((arg[4]&0xf0)==0)return 1;
銆if((arg[5]&0x01000000)==0)return 1;
銆//緇忕敱鏂囦歡鍙ユ焺寰楀埌鏂囦歡鍚?br>銆hand=(HANDLE)arg[6];
銆ObReferenceObjectByHandle(hand,0,0,KernelMode,&file,&info);
銆if(!file)return 1;
銆銆RtlUnicodeStringToAnsiString(&str,&file->FileName,1);
銆銆a=str.Length;buff=str.Buffer;
銆銆while(1)
銆銆{
銆銆銆if(buff[a]=='.'){a++;break;}
銆銆銆a--;
銆銆}
銆銆ObDereferenceObject(file);
銆銆//濡傛灉瀹冩槸涓嶅彲鎵ц鐨?榪欎篃涓嶈绱?br>銆銆//榪斿洖1
銆銆if(_stricmp(&buff[a],"exe")){RtlFreeAnsiString(&str);return 1;}
銆銆銆//鐜板湪錛屾垜浠璇㈤棶鐢ㄦ埛鐨勯夋嫨銆?br>銆銆銆//鎶婃枃浠跺悕鍐欏叆緙撳啿鍖猴紝騫剁瓑寰呯洿鍒扮敤鎴鋒樉紺哄搷搴?br>銆銆銆//(絎竴涓狣WORD涓?鎰忓懗鐫鎴戜滑鍙互緇х畫)
銆銆銆//鍚屾瀛樺彇璇ョ紦鍐插尯
銆銆銆KeWaitForSingleObject(&event,Executive,KernelMode,0,0);
銆銆銆//鎶婄紦鍐插尯鐨勫墠涓や釜DWORD緗負0錛?br>銆銆銆//鎶婂瓧絎︿覆澶嶅埗鍒拌緙撳啿鍖轟腑錛屽茍寰幆涓嬪幓錛岀洿鍒扮敤鎴鋒妸姣忎竴涓?br>銆銆銆//DWORD緗負1.
銆銆銆//絎簩涓狣WORD鐨勫兼寚鏄庣敤鎴風殑鍝嶅簲
銆銆strcpy(&output[8],buff);
銆銆RtlFreeAnsiString(&str);
銆銆a=1;
銆銆memmove(&output[0],&a,4);
銆銆while(1)
銆銆{
銆銆銆KeDelayExecutionThread(KernelMode,0,&li);
銆銆銆memmove(&a,&output[0],4);
銆銆銆if(!a)break;
銆銆}
銆銆memmove(&a,&output[4],4);
銆銆KeSetEvent(&event,0,0);
銆銆return a;
銆}
銆//浠呬繚瀛樻墽琛屼笂涓嬫枃騫惰皟鐢╟heck()
銆_declspec(naked) Proxy()
銆{
銆銆_asm{
銆銆銆//淇濆瓨鎵ц涓婁笅鏂囧茍璋冪敤check()
銆銆銆//-鍚庨潰鐨勪緷璧栦簬check()鎵榪斿洖鐨勫?br>銆銆銆// 濡傛灉榪斿洖鍊兼槸1錛岀戶緇疄闄呯殑璋冪敤銆?br>銆銆銆//鍚﹀垯錛岃繑鍥濻TATUS_ACCESS_DENIED
銆銆銆pushfd
銆銆銆pushad
銆銆銆mov ebx,esp
銆銆銆add ebx,40
銆銆銆push ebx
銆銆銆call check
銆銆銆cmp eax,1
銆銆銆jne block
銆銆銆//緇х畫瀹為檯鐨勮皟鐢?br>銆銆銆popad
銆銆銆popfd
銆銆銆jmp RealCallee
銆銆銆//榪斿洖STATUS_ACCESS_DENIED
銆銆銆block:popad
銆銆銆mov ebx, dword ptr[esp+8]
銆銆銆mov dword ptr[ebx],0
銆銆銆mov eax,0xC0000022L
銆銆銆popfd
銆銆銆ret 32
銆銆}
銆}
銆銆Proxy()淇濆瓨瀵勫瓨鍣ㄥ拰鏍囧織錛屾妸涓涓寚鍚戞湇鍔″弬鏁扮殑鎸囬拡鍘嬪叆鏍堜腑騫惰皟鐢╟heck()銆傚叾瀹冪殑渚濊禆浜巆heck()鎵榪斿洖鐨勫箋傚鏋渃heck()榪斿洖TRUE(涔熷氨鏄紝鎴戜滑鎯寵緇х畫璇鋒眰)錛岄偅涔堬紝Proxy()灝嗘仮澶嶅瘎瀛樺櫒鍜屾爣蹇楋紝騫朵笖鎶婃帶鍒舵潈浜ょ粰鏈嶅姟瀹炵幇閮ㄥ垎銆傚惁鍒欙紝Proxy()灝嗘妸STATUS_ACCESS_DENIED鍐欏叆EAX錛屾仮澶岴SP騫惰繑鍥?浠庤皟鐢ㄨ呯殑瑙傜偣鏉ョ湅錛岃繖灝辮薄瀵筃tCreateSection()鐨勮皟鐢ㄥけ璐ヤ竴鏍?浠ラ敊璇姸鎬丼TATUS_ACCESS_DENIED榪斿洖銆?br> check()鍑芥暟鏄庢牱鍋氬嚭鍐沖畾鐨勶紵涓鏃﹀畠鏀跺埌涓涓寚鍚戞湇鍔″弬鏁扮殑鎸囬拡鍙傛暟錛屽畠灝卞彲浠ユ鏌ヨ繖浜涘弬鏁般傞鍏堬紝瀹冩鏌ユ爣蹇楀拰灞炴?濡傛灉鏈変竴閮ㄥ垎娌℃湁琚姹備綔涓轟竴涓彲鎵ц鏄犲儚鏄犲皠錛屾垨濡傛灉瑕佹眰鐨勯〉闈繚鎶や笉鍏佽鎵ц錛岄偅涔堟垜浠彲浠ョ‘瀹歂tCreateSection()璋冪敤涓庤繘紼嬪垱寤烘鏃犲叧緋匯傚湪榪欑鎯呭喌涓嬶紝check()鐩存帴榪斿洖TRUE銆傚惁鍒欙紝瀹冨皢媯鏌ヨ娼滃湪鏂囦歡鐨勬墿灞?姣曠珶錛孲EC_IMAGE灞炴у拰鍏佽鎵ц鐨勯〉闈繚鎶ゅ彲鑳借瑕佹眰鏉ユ槧灝勬煇涓狣LL鏂囦歡銆傚鏋滆娼滃湪鏂囦歡涓嶆槸涓涓?exe鏂囦歡錛岄偅涔堬紝check()灝嗚繑鍥濼RUE銆傚惁鍒欙紝瀹冪粰鐢ㄦ埛妯″紡浠g爜涓涓綔鍑哄喅瀹氱殑鏈轟細銆傚洜姝わ紝瀹冧粎鎶婃枃浠跺悕鍜岃礬寰勫啓鍒頒氦鎹㈢紦鍐插尯錛屽茍涓斿瀹冨驚鐜煡璇紝鐩村埌瀹冨緱鍒板搷搴斾負姝€?br>
銆銆鍦ㄦ墦寮鎴戜滑鐨勯┍鍔ㄧ▼搴忓墠錛屾垜浠殑搴旂敤紼嬪簭鍒涘緩涓涓繍琛屼笅闈㈠嚱鏁扮殑綰跨▼錛?br>
void thread()
{
銆DWORD a,x; char msgbuff[512];
銆while(1)
銆{
銆銆memmove(&a,&outputbuff[0],4);
銆銆//濡傛灉浠涔堜篃娌℃湁錛孲leep() 10姣騫跺啀媯鏌?br>銆銆if(!a){Sleep(10);continue;}
銆銆//鐪嬭搗鏉ヨ薄鎴戜滑鐨勬潈闄愯璇㈤棶銆?
銆銆//濡傛灉琚鐤戠殑鏂囦歡宸茬粡瀛樺湪浜庣┖鐧藉垪琛ㄤ腑錛?br>銆銆// 鍒欑粰鍑轟竴涓Н鏋佺殑鍝嶅簲銆?br>銆銆char*name=(char*)&outputbuff[8];
銆銆for(x=0;x<stringcount;x++)
銆銆{
銆銆銆if(!stricmp(name,strings[x])){a=1;goto skip;}
銆銆}
銆銆//瑕佹眰鐢ㄦ埛鍏佽榪愯璇ョ▼搴?br>銆銆strcpy(msgbuff, "Do you want to run ");
銆銆strcat(msgbuff,&outputbuff[8]);
銆銆//濡傛灉鐢ㄦ埛鐨勭瓟澶嶆槸縐瀬鐨勶紝閭d箞鎶婅繖涓▼搴忔坊鍔犲埌絀虹櫧鍒楄〃涓?
銆銆if(IDYES==MessageBox(0, msgbuff,"WARNING",MB_YESNO|MB_ICONQUESTION|0x00200000L))
銆銆銆{a=1; strings[stringcount]=_strdup(name);stringcount++;}
銆銆else a=0;
銆銆// 鎶婂搷搴斿啓鍏ョ紦鍐插尯涓紝鑰岀敱椹卞姩紼嬪簭涔嬪悗鍙栧洖瀹?br>銆銆skip:memmove(&outputbuff[4],&a,4);
銆銆//鍛婅瘔椹卞姩紼嬪簭緇х畫
銆銆a=0;
銆銆memmove(&outputbuff[0],&a,4);
銆}
}
銆銆榪欐浠g爜鏄樉鐒剁殑-鎴戜滑鐨勭嚎紼嬫瘡10姣鏌ヨ浜ゆ崲緙撳啿鍖恒傚鏋滃畠鍙戠幇鎴戜滑鐨勯┍鍔ㄧ▼搴忓凡緇忔妸瀹冪殑璇鋒眰瀵勫埌浜嗚緙撳啿鍖轟腑錛屽畠灝辨鏌ヨ鍏佽鍦ㄦ湰鏈轟笂榪愯鐨勭▼搴忓垪琛ㄤ腑鐨勬枃浠剁殑鏂囦歡鍚嶅拰璺緞銆傚鏋滃彂鐜板尮閰嶏紝瀹冪洿鎺ョ粰鍑轟竴涓狾K鍝嶅簲銆傚惁鍒欙紝瀹冩樉紺轟竴涓秷鎭獥鍙o紝璇㈤棶鐢ㄦ埛鏄惁鍏佽鏈夐棶棰樼殑紼嬪簭鎵ц銆傚鏋滃搷搴旀槸縐瀬鐨勶紝鎴戜滑灝辨妸鏈夐棶棰樼殑紼嬪簭娣誨姞鍒板厑璁稿湪鏈満涓婅繍琛岀殑杞歡鍒楄〃涓傛渶鍚庯紝鎴戜滑鎶婄敤鎴峰搷搴斿啓鍏ョ紦鍐插尯錛屼篃灝辨槸璇達紝鎶婂畠浼犻掑埌鎴戜滑鐨勯┍鍔ㄧ▼搴忋傚洜姝わ紝璇ョ敤鎴峰氨鑳藉畬鍏ㄦ帶鍒跺畠鐨凱C涓婄殑榪涚▼鐨勫垱寤?鍙鎴戜滑鐨勭▼搴忚繍琛岋紝鍦ㄦ病鏈夌敤鎴鋒墍緇欎簣鏉冮檺鐨勬儏鍐典笅錛岀粷瀵規病鏈夊姙娉曟潵鍚姩璇C涓婄殑浠諱綍榪涚▼銆?br>
銆銆姝e浣犳墍瑙侊紝鎴戜滑璁╁唴鏍告柟寮忎唬鐮佺瓑寰呯敤鎴峰弽搴斻傝繖鏄惁鏄竴縐嶈仾鏄庣殑涓炬帾鍛紵涓轟簡鍥炵瓟榪欎釜闂錛屼綘蹇呴』闂綘鑷繁浣犳槸鍚︽鍦ㄥ牭浣忎換浣曞叧閿殑緋葷粺璧勬簮-涓鍒囬兘渚濊禆浜庡叿浣撶殑鎯呭喌銆傚湪鎴戜滑鐨勬儏鍐典笅錛屼竴鍒囧彂鐢熷湪IRQLPASSIVE_LEVEL綰т笂錛屽茍娌℃湁鍖呭惈瀵笽RPs鐨勫鐞嗭紝騫朵笖蹇呴』絳夊緟鐢ㄦ埛鍝嶅簲鐨勭嚎紼嬪茍涓嶅崄鍒嗛噸瑕併傚洜姝わ紝鍦ㄦ垜浠殑鎯呭喌涓嬶紝涓鍒囧伐浣滄甯搞傜劧鑰岋紝鏈緥浠呬負婕旂ず涔嬬洰鐨勮岀紪鍐欍備負浜嗗疄闄呭湴浣跨敤瀹冿紝浠ヤ竴涓嚜鍔ㄥ惎鍔ㄧ殑鏈嶅姟鐨勬柟寮忔潵閲嶅啓鎴戜滑鐨勫簲鐢ㄧ▼搴忔槸寰堥噸瑕佺殑銆傚湪榪欑鎯呭喌涓嬶紝鎴戝緩璁垜浠В闄ocalSystem甯愭埛錛屽茍涓旓紝鍦∟tCreateSection()琚敤LocalSystem甯愭埛鐗規潈鍦ㄤ竴涓嚎紼嬬殑涓婁笅鏂囦腑璋冪敤鐨勬儏鍐典笅錛屽彲浠ョ戶緇疄闄呯殑鏈嶅姟瀹炵幇鑰屼笉鏂借浠諱綍媯鏌?涓嶇鎬庝箞璇達紝LocalSystem甯愭埛浠呰繍琛岄偅浜涘湪娉ㄥ唽琛ㄤ腑鎸囧畾鐨勫彲鎵ц紼嬪簭銆傚洜姝わ紝榪欐牱鐨勪竴縐嶈В闄や笉浼氭槸涓庢垜浠殑瀹夊叏鐩稿Ε鍗忕殑銆?br>
銆銆鍥涖?緇撹
銆銆鏈鍚庯紝鎴戝繀欏繪寚鍑猴紝閽╀綇鏈満API寰堟槑鏄炬槸鐜板凡瀛樺湪鐨勬渶寮烘湁鍔涚殑緙栫▼鎶鏈箣涓銆傛湰鏂囬氳繃涓涓緥瀛愬悜浣犲睍紺洪氳繃閽╀綇鏈満API鍙互瀹炵幇鐨勮兘鍔?姝e浣犳墍瑙侊紝鎴戜滑宸茶娉曢槻姝㈡湭琚巿鏉冪殑紼嬪簭鐨勬墽琛?榪欏彲浠ラ氳繃閽╀綇鍗曚竴鐨勬湰鏈篈PI鍑芥暟鏉ュ疄鐜般備綘鍙互榪涗竴姝ユ墿灞曡繖涓柟娉曪紝騫朵笖鑾峰緱瀵圭‖浠惰澶囥佹枃浠禝O鎿嶄綔銆佺綉緇滄祦閲忕瓑絳夌殑瀹屽叏鎺у埗銆傜劧鑰岋紝鎴戜滑鐜板湪鐨勮В鍐蟲柟妗堝茍涓嶆槸鍑嗗涓哄唴鏍告ā寮廇PI璋冪敤鑰呮墍鐢?涓鏃﹀唴鏍告ā寮忎唬鐮佽鍏佽鐩存帴璋冪敤ntoskrnl.exe鐨勮緭鍑猴紝鍒欒繖浜涜皟鐢ㄥ氨涓嶉渶瑕佺粡鐢辯郴緇熸湇鍔″彂閫佽呰繘琛屼簡銆?br>
銆銆鏈枃婧愮爜鍦ㄨ繍琛學indows XP SP2鐨勮嫢騫叉満鍣ㄤ笂鎴愬姛鍦版祴璇曡繃銆傚敖綆℃垜榪樻病鍦ㄤ換浣曞彟澶栫殑鐜涓嬮潰嫻嬭瘯瀹冿紝鎴戠浉淇″畠搴旇鍒板宸ヤ綔姝e父-涓嶇鎬庝箞璇達紝瀹冧粠鏈嬌鐢ㄤ換浣曠郴緇熺壒瀹氱殑緇撴瀯銆備負浜嗚繍琛岃繖涓ず渚嬶紝鎵鏈変綘瑕佸仛鐨勬槸鏀劇疆protector.exe鍜宲rotector.sys鍒扮浉鍚岀殑鐩綍涓嬶紝騫朵笖榪愯protector.exe銆傜洿鍒皃rotector.exe鐨勫簲鐢ㄧ▼搴忕獥鍙h鍏抽棴涓烘錛涘惁鍒欙紝姣忔浣犻兘浼氳鎻愮ず浣犺瘯鍥捐繍琛屼換浣曞彲鎵ц紼嬪簭銆?
]]>
鎵璋撴枃浠舵槸鎸囩敤涓涓叡鍚岀殑絎﹀彿鍚嶇О浣滀負浠h〃錛岃嫢騫蹭釜閫昏緫璁板綍鏋勬垚鐨勪俊鎭泦鍚堟垨鐩殑錛屽艦寮忓拰鍐呭鐨勮〃紺轟笂褰兼鐩鎬技鐨勪竴浜涗俊鎭」鐨勯泦鍚堛傜畝鍗曠殑璇達紝灝辨槸鍏鋒湁涓瀹氬悕縐扮殑涓緇勭浉鍏蟲暟鎹殑闆嗗悎銆?/span>
鎵璋?span>INF鏂囦歡錛屽氨鏄互INF涓烘墿灞曞悕鐨勬枃鏈枃浠訛紝浠栨帶鍒朵笌椹卞姩瀹夎紼嬪簭鏈夊叧鐨勫ぇ澶氭暟媧誨姩銆?/span>
鍥犱負榪欎釜INF鏂囦歡鎶借薄浜嗚澶囩殑涓婂眰寤虹瓚錛屽惈鏈夊畨瑁呴┍鍔ㄦ墍鏈夌殑蹇呴渶鐨勪俊鎭紝鎵浠ュ畠瑕佺敱椹卞姩寮鍙戜漢鍛橀殢椹卞姩涓璧鋒彁渚涳紝鏉ュ憡璇夋搷浣滅郴緇熼偅浜涙枃浠墮渶瑕佸鍒跺埌鐢ㄦ埛鐨勭‖鐩樹笂錛屽簲娣誨姞鎴栦慨鏀瑰摢涓敞鍐岃〃絳夈傜畝鍗曠殑璇達紝INF鏂囦歡灝辨槸鏈哄櫒鐨勫弬鑰冩枃浠訛紙Information File錛夈?/span>
INF鏂囨湰鏂囦歡涓?span>Windows 3銆?span>X鐨?span>INI鏂囦歡寰堢被浼鹼紝INF鏂囦歡鍒嗕負鍑犺妭錛屾瘡鑺傚寘鎷竴欏規垨鍑犻」銆傛瘡鑺備笌瀹夎榪囩▼涓殑鏌愪竴姝ョ浉鍏籌細姣斿璇達紝鏌愪竴鑺傛槸鍏充簬鏂囦歡鎷瘋礉鐨勩傛煇涓鑺傛槸鍏充簬濡備綍娣誨姞娉ㄥ唽琛ㄩ」絳夌瓑銆備綔涓轟竴涓紑鍙戣咃紝浣犲彲浠ラ氳繃浠諱綍鏂囨湰緙栬緫鍣ㄥ垱寤虹敓鎴?span>INF鏂囦歡銆?span>Microsoft榪樺湪DDK涓彁渚涗簡INFEDIT宸ュ叿錛屼嬌鎷ユ姢鍙互寰堟柟渚跨殑緙栬緫INF 鏂囦歡錛堝鏋滃疄渚嬬敤INFEDIT錛岃鍙傞槄DDK錛夈?/span>
INF鏂囦歡鍙互鏀寔寰堝鏉傜殑瀹夎鑴氭湰錛屼絾鏄ぇ澶氭暟鐨勫紑鍙戣呭彧鎰挎剰浣跨敤澶勭悊涓浜涙渶鍩烘湰鐨勮剼鏈備竴涓熀鏈殑瀹夎鑴氭湰搴旇鍖呮嫭錛?/span>
1閴村畾紜歡璁懼
2鎶婇┍鍔ㄧ▼搴忎粠瀹夎鐩樹笂鎷瘋礉鍒扮郴緇熺洏涓婂幓
3閴村畾紜歡璁懼璧勬簮鐨勯渶姹?/span>
4褰撶‖浠惰澶囪浠跨湡鏄紝灝卞湪娉ㄥ唽琛ㄤ腑鍔犱笂DevLoader涓欏?/span>
INF鏂囦歡閫氬父涓庣鐩樻垨鍏夌洏涓婄殑紜歡椹卞姩紼嬪簭涓璧鋒彁渚涖?span>INF鏂囦歡鐨勭粨鏋勫拰鍐呭鐢遍┍鍔ㄧ▼搴忓垱浣滆呭喅瀹?/span>
1. 涓句緥璇存槑
涓嬮潰涓句緥璇存槑鏈夊叧INF鐨勫熀鏈壒寰佸拰鍐呭錛屼互渚挎洿濂界殑鐞嗚В銆?/span>
[Version]
Singnature=$windowsNT$ //閫夋嫨鐗堟湰
Class=Unknown //緋葷粺瀹氫箟鐢ㄦ埛鎸囧畾鐨勭被鍚?/span>
Provider=%ABCD% //鎻愪緵鍟?/span>
DirverVer=11/15/2001 //
CatelogFile[.Ntetc] //鍖呭惈WHQL鏁板瓧絳懼悕鐨勭洰褰曡鏄庢枃浠躲?/span>
[Strings]
ABCD=”me, the writer” //瀹氫箟瀹?/span>
[SourceDisksNames] //婧愪唬鐮佺洏鎴栧彂琛岀洏鐨勬弿榪幫紝鐩綍鍜屾墦鍖呮枃浠?strong>
L=”Ggdriver directory”…obj\i386\
[SourceDisksFiles] //鍜屾墦鍖呮枃浠?strong>
Ggdriver.sys=l,obj\i386\some\
[DestinationDirs] //澶嶅埗緙虹渷鏂囦歡鍜?span>Filelist鑺備腑鐨勬枃浠訛紝
//鎸囧畾鐩綍鍜屽瓙鐩綍鐨?span>ID 騫舵寚瀹氭枃浠剁殑鏍囧噯浣嶇疆銆?/span>
Ggdiver.Files.Driver=10,System32\Drivers
Ggdiver.Files.Driver=10, System32\Drivers
[Manufacturer] //鎸囧畾鐢熶駭鍘傚晢鍜?span>models鑺備腑鐩稿簲鐨勫悕縐?strong>
%ABCD%=Ggdriver
[models] //鏈鏂扮殑紜歡ID鍙峰厛鍑虹幇
%USBDevice_V2%=V2Install,USB\VID_ABCD%PID_EFOL&REV_DO02
%USBDevice_V1%=V2Install,USB\VID_ABCD%PID_EFOL
[install] //鎸囧悜娣誨姞鐨勮澶囨帴鍙e垪琛?strong>
Copyfiles=Ggdriver.Files.Driver
AddReg=Ggdriver.AddReg
LogConfig=logconfig
DirverVer=19/10/2001
ProfileItems=AB\cd
[filelist]
[addreg]
[logconfig]
[install.AddService]
ServiceTypy=l
StartType=start-code
ErrorControl=error-control-level
ServiceBinary=path-tc-driver
INF鏂囦歡鏄竴涓枃鏈枃浠訛紝鐢變笉鍚岀殑鑺傜粍鎴愶紝姣忎竴涓妭浠庢嫭鍦ㄦ柟鎷彿涓殑鑺傚悕縐板紑濮嬶紝鍚庨潰鏄妭鐨勫唴瀹廣傝繖浜涜妭涔熸槸鍒嗗眰鐨勶紝鍏跺厛鍚庨『搴忎笌鏈牱渚嬪熀鏈繚鎸佷竴鑷淬?/span>
鍦ㄤ笂闈㈢殑鏍蜂緥涓細
鍦?strong>[Verson ]鑺備腑錛?strong>Signature欏瑰彧鑳藉湪$WindowsNT$,$Winfows95$浠ュ強$WindowsNT$涓変竴錛?/span>
Provider欏規槸INF鏂囦歡鐨勫垱閫犺咃紝閫氬父鏄澶囩殑鐢熶駭鍟嗭紱
Class欏規槸緋葷粺瀹氫箟鐢ㄦ埛鎸囧畾鐨勭被鍚嶏紱
CatalogFile[.NTetc]鍒欐槸蹇呴』鍖呭惈鐨勯┍鍔ㄧ▼搴忓寘鐨?span>WHQL鏁板瓧絳懼悕鐨勭洰褰曡鏄庢枃浠躲?/span>
鍦?strong>[Strings ]鑺備腑瀹氫箟浠f浛瀛楃涓茬殑瀹忥細
濡備緥涓細ABCD=“me,the writer”鍗蟲槸璇?span>%ABCD%鐨勬剰鎬濇槸me,the writer銆傝屽湪浣跨敤鏃訛紝涔熺敤“me錛?span>the writer”浠f浛ABCD銆備負浜嗛傚簲涓嶅悓鐨勮璦涓婁笅鏂囷紝鍙互鍦?span>String 鐨勫悗闈㈤檮鍔狅紙鍦?span>Winnt銆?span>H`涓畾涔夌殑錛?span>LangID鍜?span>SubLangID錛屽艦鎴愭柊鐨?span>Strings鑺傘?span>LangID鍜?span>SubLangID閮芥槸涓や綅鏁幫紝瀹冧滑鍚堜綔鎸囧畾鏌愯璦涓婁笅鏂囥?/span>
濡傚畾涔変竴涓嫳鍥借嫳璇紙0902錛夌殑flour:
[Strings]
ABC=”Flor”
[Strings.0902]
ABC=”Flour”
[SourceDisksName]涓?strong>[SourceDisksFiles]鑺傚垎鍒槸鎸囨簮浠g爜鐩樻垨鍙戣鐩樼殑鎻忚堪錛岀洰褰曞拰鎵撳寘鏂囦歡銆傚鏋滄墍鏈夋枃浠墮兘鍦ㄦ牴鐩綍涓紝[SourceDisksFiles]鑺傚彲浠ユ槸鍦ㄧ┖鐨?/span>
鍦?strong>[DestinationDirs]鑺備腑錛屽鍒剁己鐪佹枃浠跺拰Filelist鑺備腑鐨勬枃浠訛紝鎸囧畾鐩綍鍜屽瓙鐩綍鐨?span>ID 騫舵寚瀹氭枃浠剁殑鏍囧噯浣嶇疆銆?/span>
[Manufacture]鑺傛寚瀹氱敓浜у巶鍟嗗拰models鑺備腑鐩稿簲鐨勫悕縐幫紱
[install]鑺傚垯鎸囧悜娣誨姞鐨勮澶囨帴鍙e垪琛紝鎺ュ彛閿殑娉ㄥ唽琛紝鍏朵腑錛?/span>
Copyfiles=filename|filelist欏癸紝鎸囧畾瑕佸鍒剁殑鏂囦歡鎴栧悗闈㈠垪鍑烘枃浠剁殑鍒楄〃鑺傜殑鍚嶇О銆?/span>
AddReg=addreg欏癸紝鎸囧畾鍚庨潰閬楃暀璁懼鑺傜殑鍚嶇О銆?/span>
LogConfig=logconfig欏癸紝鎸囧畾鍚庨潰閬楃暀璁懼鑺傜殑鍚嶇О銆?/span>
ProfileItems欏癸紝鎸囧畾娣誨姞鍒拌綆楁満鐣岄潰“寮濮?#8221;鑿滃崟涓殑鏂囦歡鍚嶇О欏廣?/span>
[filelist]鎸囧畾瑕佸畨瑁呯殑鏂囦歡鍒楄〃銆?/span>
[addreg]鑺傦紝鎸囧畾鏂扮殑閿拰鍊箋?/span>
[logconfig]鑺傦紝鎸囧畾閬楃暀璁懼鐨?span>I/O鍦板潃錛?span>IRQ絳夐厤緗殑璇︾粏淇℃伅銆?/span>
[install銆?span>AddService]鑺傦紝鍙拡瀵?span>Windows2000鐨勯┍鍔ㄧ▼搴忥紝鎸囧畾椹卞姩紼嬪簭鐨勮緇嗕俊鎭?/span>
涓嬮潰鎴戜滑鍏蜂綋浠嬬粛涓涓?span>INF鏂囦歡緇撴瀯銆?/span>
涓涓?span>INF鏂囦歡鏄竴涓鍒掑垎涓鴻妭錛?span>Section錛夌殑綆鍗曠殑鏂囨湰鏂囦歡錛屾瘡鑺傜敱鏂規嫭鍙鳳紙[]錛夊唴鐨勬爣紺虹琛ㄧず銆傛煇浜涜妭鍚嶅瓧鏄繀欏葷殑錛岃屽彟涓浜涙槸椹卞姩紼嬪簭涓撶敤鐨勩傛瘡鑺備笅闈㈢殑鍚勯」鎺у埗鏌愪簺瀹夎鎿嶄綔錛屾垨鑰呰繛鎺ユ垨鍒椾婦鍏跺畠鑺傘?/span>
鏂囦歡涓悇鑺傚嚭欏圭殑欏哄簭騫朵笉閲嶈錛屽洜涓烘瘡鑺傞兘琚懡鍚嶅拰閾炬帴浜嗐備竴鑺傚唴瀹瑰湪閬囧埌鍙︿竴鑺傛垨鑰呴亣鍒版枃浠剁粨灝句箣鍓嶇戶緇墽琛屻傝瀹氳妭鐨勫敮涓鐨勫悕瀛楁槸鍖哄垎澶у皬鍐欑殑錛屽茍涓斿湪闀垮害涓婂繀欏婚檺鍒跺湪28涓瓧絎︿互鍐咃紝浠ヤ繚鎸佷笌Windows 98 鐨勫吋瀹規с傝妭鐨勫悕瀛楀彲浠ュ寘鎷┖鏍鹼紝浣嗘槸鍙湁鍦ㄦ暣涓悕瀛楀簲鐢ㄦ椂銆傚厑璁鎬笅鍒掔嚎鍜岀偣瀛楃銆?/span>
鑺備腑鍚勯」鐨勫熀鏈牸寮忓涓嬶細
entry=value[錛?span>value….]
榪欓噷鐨?span>entry鏄竴涓寚浠わ紝鍏抽敭瀛楁垨鑰呮枃浠跺悕錛岃?span>value鏄簲鐢ㄤ簬entry鐨勫睘鎬с?/span>
涓嬪浘琛ㄧず浜嗚妭鍚嶅瓧閾炬帴銆?/span>
Entry鎴?span>value鍚嶅瓧鍙互瑙勫畾涓轟竴涓瓧絎︿覆璁板彿錛?span>string token錛夛紝瀹冩槸涓涓敱鐧懼垎鍙?span>%鍖呭洿鐨勬浛鎹㈠瓧鑺備覆錛屼竴涓嫭绔嬬殑INF鑺?span>鈥斺擺Strings]錛岀粰鎸囧畾鐨勮璦ID鎻愪緵浜嗗瓧絎︿覆璁板彿鍊箋?/span>
涓嬮潰鎴戜滑鐪嬩竴涓?span>INF鏂囦歡鐨勫悇涓皬鑺傚強灝忚妭鐨勫熀鏈唴瀹癸細錛堣〃1錛岃〃2錛?/span>
涓嬮潰鎴戜滑璇︾粏姣忎竴鑺傜殑鍐呭錛?/span>
涓涓湁鏁堢殑INF鏂囦歡浠ヤ竴涓?span>[Version]鑺傚紑濮嬶紝瀹冩媴褰撴暣涓?span>INF鏂囦歡鐨勫ご閮ㄥ拰絳懼悕銆?span>[Version]鑺備腑鍏佽鐨勫拰瑕佹眰鐨勯」閮藉垪鍦ㄤ簡涓嬭〃-3
鍙︿竴涓繀欏葷殑鑺傛槸[Manufacturers]欏廣傝鑺備腑鐨勬瘡涓」鍒楀嚭INF鏂囦歡瀹夎鐨勮澶囧拰浠栦滑鐨勯┍鍔ㄧ▼搴忋傛瘡涓」鐨勬牸寮忓涓嬶細
manufacturer=model
榪欓噷鐨?span>manufacturer鍒楀嚭瑕佽瀹夎鐨勪竴涓垨澶氫釜紜歡鍨嬪彿鐨勫埗閫犲晢鍦?span>INF鏂囦歡涓殑鍞竴鍚嶅瓧銆?span>Model鍊兼寚鍚戝彟涓涓?span>INF鑺傚悕瀛楋紝榪涗竴姝ュ垪鍑虹‖浠跺瀷鍙烽┍鍔ㄧ▼搴忓畨瑁呯殑鏂瑰悜銆?/span>
瀵逛簬鍒楀湪[Manfacturers]鑺備腑鐨勬瘡涓瀷鍙鳳紝蹇呴』鏈変竴涓浉搴旂殑鑺備綔涓虹敱model鎸囧畾鐨勮妭鍑虹幇銆傛瘡涓?span>model欏圭殑褰㈠紡涓猴細
device-description=install-section-name錛?span>hw-id[錛?span>compatible-id…]
榪欓噷鐨?span>device-description琛ㄧず浜哄彲浠ョ悊瑙g殑璁懼鍨嬪彿鍒楄〃鍜屼竴涓畝鍗曠殑鎻忚堪銆傚湪涓浜涘畨瑁呰繃紼嬩腑姝ゅ瓧絎︿覆鍦ㄤ竴涓璇濇涓彁浜ょ粰鐢ㄦ埛錛屽洜姝ゆ湁蹇呰鎻愪緵澶氱璇█浣滀負瀛楃涓茶鍙楓?/span>
install-section-name鍊煎紩鐢?strong>[DDInstall]鑺傦紝琛ㄧず鍊艱繘涓姝ュ畨瑁呯殑鍙︿竴涓?span>INF鑺傦紝hw-id鍊兼槸紜歡璁懼鍦?span>PNP鍏煎鐨勬葷嚎涓婂0鏄庢椂榪斿洖鐨?span>PnP鏍囩ず絎︺備緥濡傘?span>USB \ VID_045E&PID_OOB 鏍囩ずUSB涓婄殑Microsoft HID錛?span>Human Input Device錛夐敭鐩樿澶囥傝兘澶熷鍔犱換鎰忔暟閲忕殑compatlible-id鍊鹼紝琛ㄧず鐩稿悓鐨勫畨瑁呰剼鏈彲浠ョ敤浜庡垪琛ㄤ腑鍖呭惈鐨勪換浣曡澶囥?/span>
鍦?span>INF鑺傚悕瀛楅摼琛ㄧ殑浣庨儴闄勮繎錛堜絾騫墮潪鏈浣庨儴錛夋槸[DDInstall]鑺傦紝瀹冧粠[Models]鑺備腑涓烘瘡涓埗閫犲晢鐨勬瘡涓瀷鍙瘋瀹氫竴涓敮涓鐨勫悕瀛椼?strong>[DDInstall]鑺備腑鍏佽鐨勫拰瑕佹眰鐨勯」鐩涓嬮潰琛?.
铏界劧鍦ㄨ娉曚笂鍙湁AddReg欏規槸蹇呴渶鐨勶紝浣嗘槸CopyFiles欏規槸[DDInstall]鑺傜殑涓涓熀鏈寚浠ゃ傚畠閲囧彇濡備笅褰㈠紡錛?/span>
CopyFiles = file – list – section [錛?span>file – list – section….]鎴栬?/span>
CopyFile = @filename
鍓嶄竴縐嶅艦寮忔洿鍔犲父鐢紝鍥犱負瀹冨厑璁鎬竴涓棿鎺ユ寚閽堟寚鍚戝寘鍚瀹夎鐨勬枃浠跺垪琛ㄧ殑鍏朵粬鑺傘傜劧鑰岋紝瀵逛簬綆鍗曠殑椹卞姩寮鍙戠▼搴忓畨瑁咃紝閲囧彇鐩存帴鏂囦歡鍚嶆柟娉曞氨琛屼簡銆傚湪涓嬮潰涓や釜灝忚妭涓皢瀵?span>AddReg鍜?span>CopyFiles鎸囦護鍋氳繘涓姝ヨВ閲娿?/span>
INF鏂囦歡鐨?strong>[CopyFiles]鑺傛湁涓涓敮涓鐨勫悕瀛楋紝騫朵粠[DDInstall]鑺傜殑CopyFiles鎸囦護寮曠敤瀹冦傝鑺備腑鐨勬瘡涓」閲囩敤濡備笅褰㈠紡錛?/span>
destination – filename[錛?span>source- filename錛?span>temp-filename錛?span>flag]
榪欓噷鐨?strong>destiantion-filename鏄渶閲嶈澶嶅埗鐨勭洰鏍囨枃浠跺悕銆傚鏋滄簮鏂囦歡鍚嶄笉鐩稿悓錛屽繀欏昏瀹?strong>source – filename銆?span>Temp-filename鍊間笉鍐嶉傜敤錛堣櫧鐒?span> Windows 98浠嶇劧瑕佹眰錛夛紝瀹冨湪緋葷粺鍐嶆寮曞涔嬪墠瑙勫畾鏂版枃浠剁殑涓存椂鏂囦歡鍚嶃傚浜?span>Windows 2000錛屽拷鐣ユ鍊箋?/span>
Falg 鍊艱瀹氬鏂扮洰鏍囨枃浠剁殑澶勭悊錛屽叾鎻忚堪瑙佽〃5銆傚彲浠ュfalg鍊間腑鐨勫悇涓負榪涜“鎴?#8221;榪愮畻錛屼互浣垮涓搷浣滆搗浣滅敤銆傚嚑縐嶆搷浣滄槸浜掓枼鐨勶紙渚嬪錛?span>WARN_IF_SKIP鍜?span>NOSKIP錛?span>,鏈夌枒闂椂搴斿綋鏌ラ槄鏈夊叧鏂囨。銆?/span>
鍥犱負[CopyFiles]鑺傜殑欏圭殑璇硶娌℃湁鍖呭惈涓涓彲閫夐」鏉ヨ瀹氭簮鏂囦歡鐨勭鐩樻垨璺緞錛屽繀欏諱嬌鐢ㄥ叾浠?span>INF鑺傗斺?strong>[SourceDisksNames]鍜?strong>[SourceDisksFiles]銆傜劧鑰?strong>[CopyFiles]鑺備腑鍚勯」澶嶅埗鐨勬枃浠剁敱鍙︿竴涓?span>INF鑺傗斺?strong>[DestiantionDirs]鑺傛寚瀹氥?/span>
涓涓?span>INF鏂囦歡鐨?strong>[AddReg]鑺傝鍞竴鍛藉悕錛屽茍浠?strong>[DDInstall]鑺備腑鐨?strong>AddReg鎸囦護寮曠敤瀹冦傛鑺傜殑鐩殑鏄彁渚涘鍔犳垨鑰呬慨鏀圭洰鏍囩郴緇熸敞鍐岃〃涓殑欏圭洰銆傛湰鑺備腑姣忎釜欏圭洰閲囧彇濡備笅褰㈠紡錛?/span>
reg-root[錛?span>subkey錛?span>value- name錛?span>flags 錛?span>value]
榪欓噷鐨?span>reg- root鏄敞鍐岃〃搴擄紙hive錛変箣涓鐨勭緝鍐欙紝瑙佽〃6鎵鍒椼傚艱〃紺鴻琚慨鏀圭殑娉ㄥ唽琛ㄥ簱銆?strong>Subbkey鍊艱〃紺哄簱搴曚笅鐨勯敭鍚嶏紝鍦ㄥ眰嬈$粨鏋勪腑瀛愰敭鐢ㄥ弽鏂滅嚎錛?span>\錛夊瓧絎﹂殧寮銆備緥濡傦紝software\W2KdriverBook\Driver\Seting 鏄?span>HKCU鎴栬?span>HKLM搴撶殑涓涓湁鏁堝瓙閿?/span>
Value-name鎸囧畾瑕佸鍔犳垨淇敼鐨勬敞鍐岃〃鍊箋傛瘡涓敞鍐岃〃閿寘鍚竴涓垨澶氫釜鍊鹼紝淇濆瓨涓嶅悓綾誨瀷鐨勬暟鎹傛敞鍐岃〃緙栬緫鍣紙Registy Editor錛夊湪鍙寵竟闈㈡澘涓垪鍑哄瓙閿殑鍊箋傚煎悕鍜屽兼暟鎹悓鏃跺湪璇ラ潰鏉夸腑鍑虹幇錛屽乏杈歸潰鏉垮彧鍒楀嚭瀛愰敭銆傚浘3璇存槑浜嗘敞鍐岃〃鏈涔嬮棿鐨勫叧緋匯?/span>
Flags鎸囧畾鏁版嵁淇濆瓨鐨勭被鍨嬶紝flages鍙兘鐨勪綅緗琛?span>7鎵鍒?
濡傛灉INF鏂囦歡鎺у埗鐨勯┍鍔ㄧ▼搴忔枃浠剁殑鍒嗗竷璺ㄨ秺澶氫釜紓佺洏錛堣蔣鐩樻垨鍏夌洏錛夛紝鍒?span>INF鏂囦歡蹇呴』鍖呭惈涓涓?strong>[SourceDisksNames]鑺傘傛湰鑺傚湪鍒嗗竷闆嗕腑涓烘瘡涓鐩樺寘鍚竴欏癸紝欏圭洰閲囧彇濡備笅褰㈠紡錛?/span>
Diskid=disk – descript[錛?span>tagfile錛?span>unused錛?span>path]
榪欓噷鐨?span>diskid`鏄垎甯冮泦鍐呯殑涓涓竴涓敮涓鐨勭紪鐮併傞氬父錛岀鐩樹粠1寮濮嬬紪鐮併?span>Disk – description 鏍囩鏄竴涓緵浜洪槄璇葷殑鏂囨湰涓詫紝鍙互淇濊瘉瀹夎榪囩▼涓嫢鎶ゆ彁渚涙紜殑紓佺洏錛屽湪瀹夎榪囩▼緇х畫涔嬪墠鏍稿tagfile鍊兼槸鍚﹀湪鎻掑叆鐨勭叅浣撲笂銆傚鏋?span>tagfile鏂囦歡涓嶅瓨鍦紝鍒欐彁紺虹敤鎴鋒彃鍏ユ紜殑紓佺洏銆傚鏋?span>tagfile鍊煎寘鍚?span>-CAB鎵╁睍錛屽垯璇ユ枃浠惰璁や負鏄鐩樹笂椹卞姩紼嬪簭婧愭枃浠剁殑鍘嬬緝鏂囦歡闆嗐?/span>
Path鍊兼槸紓佺洏涓婇┍鍔ㄧ▼搴忔簮鏂囦歡鐨勭浉瀵逛簬鏍圭洰褰曠殑紓佺洏璺緞銆備笌tagfile鍊間竴鏍鳳紝path鏄彲閫夌殑銆傚鏋滃拷鐣ュ畠錛屽垯璁や負鏍圭洰褰曟槸鏂囦歡鐨勬簮銆?/span>
椹卞姩紼嬪簭INF鏂囦歡榪樺繀欏誨寘鍚竴涓О涓?strong>[SourceDisksFiles]鐨勮妭銆傛鑺傚垪鍑洪┍鍔ㄧ▼搴忓畨瑁呮湡闂翠嬌鐢ㄧ殑鏂囦歡鍚嶃傛瘡涓枃浠跺搴斾簬鏈妭涓殑涓涓」錛屽茍閲囧彇濡備笅褰㈠紡錛?/span>
Filename = diskid[錛?span>sbdir錛?span>size]
寰堣嚜鐒訛紝diskid鍊煎湪[SourceDisksNames]鑺備腑鎸囧畾浜嗘壘鍒?span>filename鐨勪竴涓鐩橈紝subdir鍊煎彲閫夛紝瀹冩寚瀹氭枃浠跺湪紓佺洏涓婄殑涓涓礬寰勩?span>Size鍊煎彲閫夛紝鎸囧畾鏂囦歡浠ュ瓧鑺備負鍗曚綅鐨勬湭鍘嬬緝澶у皬銆傚湪寮濮嬫枃浠跺鍒跺墠錛屽畨瑁呰繘紼嬪彲浠ヤ嬌鐢ㄦ澶у皬紜畾婧愭枃浠舵槸鍚﹀悎閫傜洰鏍囩郴緇熴?/span>
榪欐槸INF鏂囦歡涓繀闇鐨勮妭錛屾寚瀹氭簮鏂囦歡鐨勭洰鏍囩洰褰曘傛病鏈夎繖閮ㄥ垎鍐呭錛屽畨瑁呯▼搴忔垨榪涚▼灝嗘病鏈夌敤鏉ユ嫹璐濇枃浠剁殑鐩爣鐩綍銆?span>[DestinatonDirs]鑺備腑鐨勯」閲囧彇濡備笅褰㈠紡錛?/span>
File – list – section = dirid[錛?span>subdir]鎴栬?/span>
DefaultDestDir = dirid[錛?span>subdir]
榪欓噷file – list – section瑙勫畾浜嗗湪[CopyFiles]鎸囦護涓皟鍑烘潵鐨勯儴鍒嗐傚畠瑙勫畾涓涓寚浠ゆ嫹璐濈殑鎵鏈夋枃浠跺畨瑁呭埌鎸囧畾鐨勭洰褰曘傚浜庨」鐩?span>DefaultDestDir錛屼笂榪拌鑼冮傜敤浜庢墍鏈?span>[CopyFiles]鎸囦護錛屽惁鍒欎笉浼氫笌[DestionationDirs]鑺備腑鐨?span>file- list – section欏瑰叧鑱斻?/span>
Dirid鍊兼牴鎹〃8瑙勫畾浜嗙洰鏍囩殑涓涓垪涓懼箋傚鏋滄彁渚涗簡鍊?span>subdir錛屽畠鎸囧畾diid璋冨鐨勭洰褰曚笅闈㈢殑涓涓浉瀵硅礬寰勩?/span>
涓轟簡鐪熸鐨勪嬌澶嶅埗鐨勬枃浠舵垚涓虹洰鏍囩郴緇熶笂鐨勯┍鍔ㄧ▼搴忥紝蹇呴』閫氱煡鏈嶅姟鍣ㄧ鐞嗙▼搴忥紙SCM錛夈傚畨瑁呭湪Windows 2000涓嬬殑姣忎釜椹卞姩紼嬪簭鍦?span>HKLM\System\Current-ControlSet\Services涓嬬殑娉ㄥ唽琛ㄤ腑鏈変竴欏廣?span>ServiceType鍊間負1琛ㄧず涓涓唴鏍告ā寮忚澶囬┍鍔ㄧ▼搴忋?span>StartType鎸囧畾鍦ㄥ紩瀵艱繃紼嬩腑鐨勪粈涔堢偣涓婇┍鍔ㄧ▼搴忚鍏ワ紙3琛ㄧず鎸夐渶鎴栨墜鍔ㄥ惎鍔級銆傚湪椹卞姩紼嬪簭瑁呭叆榪囩▼涓亣鍒伴敊璇椂錛?span>ErrorControl鍊肩‘瀹氬彂鐢熶簡浠涔堟儏鍐點?span>ServiceBinary鍊兼寚鍚戦┍鍔ㄧ▼搴忔枃浠訛紙銆?span>SYS鏂囦歡錛夌殑浣嶇疆錛屼絾鏄紝濡傛灉浜岃繘鍒跺間綅浜?span>%windir%\system32\drivers鐩綍錛屽茍涓斾笌HKLM\…\Services涓嬬殑瀛愰敭鏈夌浉鍚岀殑鍚嶅瓧錛屽垯鍙互蹇界暐ServiceBinary鍊箋?/span>
DDInstall.Services鑺傞」鐩腑鍖呮嫭涓涓艦寮忓涓嬬殑欏圭洰錛?/span>
AddService = ServiceName錛?span>[flags]錛?span>service – install – section[錛?span>eventlog – install – section]
榪欓噷鐨?span>ServiceName琛ㄧず璁懼鐨勫悕瀛楋紝閫氬父鏄┍鍔ㄧ▼搴忕殑鍚嶅瓧錛屾病鏈夈?span>SYS鎵╁睍鍚嶃?span>Flags鍊肩殑鎻忚堪瑙佽〃9
Service – install – section鍜屽彲閫夌殑eventlog- install – section鍊艱皟鍑烘帶鍒舵湇鍔″奸」鐩紙璇稿ServiceType鍜?span>StartType錛夌殑鏂板鐨?span>INF鑺傚悕瀛椼?/span>
[ServiceInstall]鑺傚悕瀛楀疄闄呬笂鐢?span>DDInstall.Services鑺備腑姣忎釜AddService欏瑰敮涓瑙勫畾錛屽畠鎺у埗鎶婇┍鍔ㄧ▼搴忓畨瑁呭埌鏈嶅姟鎺у埗綆$悊紼嬪簭銆?span>[ServiceInstall]鑺傚厑璁哥殑欏硅琛?span>10鎵鍒椼?/span>
DDK鍖呭惈涓涓熀鏈殑宸ュ叿CHKINF錛屽湪DDK鐨?span>Tools鐩綍涓傚畠渚濊禆浜?span>Perl鑴氭湰寮曟搸錛岃寮曟搸鍙互浠?span>www.perl.com涓婁笅杞姐傝櫧鐒跺伐鍏鋒病鏈変粈涔堜紭鐐癸紝浣嗗畠鍦ㄦ鏌ユ爣鍑?span>Microsoft INF鏂囦歡鏃惰兘鎶ュ憡璁稿閿欒銆傚伐鍏蜂互HTML鏂囦歡褰㈠紡杈撳嚭銆?/span>
DDK Tools鐩綍榪樺寘鎷竴涓敤璇畝鍖?span>INF鏂囦歡鏋勯犵殑瀹炵敤紼嬪簭CENINF銆?span>EXE 銆?蹇呴』鎶婅宸ュ叿鍖哄垎涓哄熀鏈伐鍏鳳紝瀹冨鍏ラ棬鑰呮槸鏈夌敤鐨勩?/span>
鏈鍚庯紝DDK鎻愪緵浜?span>STAMPINF銆?span>EXE榪欎竴綆鍗曞伐鍏鳳紝瀹冩彁渚涗簡蹇熷鍔犳垨淇敼INF涓増鏈俊鎭殑鏈哄埗銆?/span>
;**************************************************************************************************
;Author:dge/D鍝?br>;Date :2006.7.20
;**************************************************************************************************
;f:\masm32\bin\ml /nologo /c /coff HookAPI.asm
;C:\>f:\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:HookAPI.sys /subsystem:native HookAPI.obj
.386 . model flat , stdcall
option casemap : none ;************************************************************************************************** include f:\masm32\include\w2k\ntstatus.inc include f:\masm32\include\w2k\ntddk.inc include f:\masm32\include\w2k\ntoskrnl.inc includelib f:\masm32\lib\w2k\ntoskrnl.lib include f:\masm32\Macros\Strings.mac ;************************************************************************************************** .data ;淇濆瓨鍦板潃 dwOldNtLoadDriver dd ? dwAddr dd ? dwDriverName ANSI_STRING <?>
.const CCOUNTED_UNICODE_STRING "\\Device\\devHookApi", g_usDeviceName, 4 CCOUNTED_UNICODE_STRING "\\??\\slHookApi", g_usSymbolicLinkName, 4 CCOUNTED_UNICODE_STRING "ZwLoadDriver", g_usRoutineAddr, 4 ;************************************************************************************************** .code ;璁╄繖涓嚱鏁板湪NtLoadDriver鐨勮皟鐢ㄦ椂琚墽琛屼互瀹炵幇鐩戣 NewNtLoadDriver proc lpDriverName:PUNICODE_STRING pushad ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into NEW\n") invoke RtlUnicodeStringToAnsiString, addr dwDriverName, lpDriverName,TRUE invoke DbgPrint, $CTA0("\nDriverName: %s.sys\n"), dwDriverName.Buffer popad ;璋冪敤鍘熷嚱鏁? push lpDriverName call dwOldNtLoadDriver ret NewNtLoadDriver endp ;************************************************************************************************** HookFunction proc
pushad ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into hoookfunction\n") ;涓嬮潰鏄敤KeServiceDescriptorTabled瀵煎嚭絎﹀彿鑾峰緱鏁扮粍鐨勫熀鍦板潃錛岃繖涓暟緇勪腑鍖呭惈鏈塏tXXXX鍑芥暟鐨勫叆鍙e湴鍧銆? mov eax, KeServiceDescriptorTable mov esi, [eax] mov esi, [esi] ;鐢∕mGetSystemRoutineAddress鏉ヨ幏寰楀嚱鏁癦wLoadDriver鐨勫湴鍧銆傚茍浠庤繖涓嚱鏁板湴鍧鍚庨潰鐨勭2涓瓧鑺備腑鍙栧緱鏈嶅姟鍙楓備粠鑰? ;鑾峰緱浠ユ湇鍔″彿涓轟笅鏍囩殑鏁扮粍鍏冪礌銆? invoke MmGetSystemRoutineAddress,addr g_usRoutineAddr inc eax movzx ecx,byte ptr[eax] sal ecx,2
add esi,ecx mov dwAddr,esi
mov edi,dword ptr[esi] ;淇濆瓨鏃х殑鍑芥暟鍦板潃銆? mov dwOldNtLoadDriver,edi mov edi,offset NewNtLoadDriver ;淇敼鍏ュ彛鍦板潃 cli
mov dword ptr[esi],edi sti popad mov eax, STATUS_SUCCESS ret HookFunction endp ;************************************************************************************************** DispatchCreateClose proc pDeviceObject:PDEVICE_OBJECT, pIrp:PIRP mov eax, pIrp assume eax:ptr _IRP mov [eax].IoStatus.Status, STATUS_SUCCESS and [eax].IoStatus.Information, 0 assume eax:nothing
invoke IoCompleteRequest, pIrp, IO_NO_INCREMENT mov eax, STATUS_SUCCESS ret DispatchCreateClose endp ;************************************************************************************************** DriverUnload proc pDriverObject:PDRIVER_OBJECT ;蹇呴』淇濆瓨鐜錛屽惁鍒欏悗鏋滃緢涓ラ噸銆傚湪榪欎釜鍑芥暟涓仮澶嶈淇敼鐨勫湴鍧銆?
pushad ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into DriverUnload \n") mov esi,dwAddr mov eax,dwOldNtLoadDriver cli mov dword ptr[esi],eax sti invoke IoDeleteSymbolicLink, addr g_usSymbolicLinkName mov eax,pDriverObject invoke IoDeleteDevice, (DRIVER_OBJECT PTR [eax]).DeviceObject
popad
ret DriverUnload endp ;************************************************************************************************** DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING local status:NTSTATUS local pDeviceObject:PDEVICE_OBJECT ; int 3 ; invoke DbgPrint, $CTA0("\nEntry into DriverEntry\n") mov status, STATUS_DEVICE_CONFIGURATION_ERROR invoke IoCreateDevice, pDriverObject, 0, addr g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, addr pDeviceObject .if eax == STATUS_SUCCESS invoke IoCreateSymbolicLink, addr g_usSymbolicLinkName, addr g_usDeviceName .if eax == STATUS_SUCCESS mov eax, pDriverObject assume eax:ptr DRIVER_OBJECT mov [eax].DriverUnload, offset DriverUnload mov [eax].MajorFunction[IRP_MJ_CREATE*(sizeof PVOID)], offset DispatchCreateClose mov [eax].MajorFunction[IRP_MJ_CLOSE*(sizeof PVOID)], offset DispatchCreateClose assume eax:nothing
invoke HookFunction mov status, STATUS_SUCCESS .else invoke IoDeleteDevice, pDeviceObject .endif .endif
mov eax, status ret DriverEntry endp
end DriverEntry ;**************************************************************************************************