笔记本电脑从零开始学习计算机基础
建议从三个方面入手:
1、硬件方面,找几个报废的笔记本,先学会拆装,然后逐一识别各种形成笔记本的硬件。
2、学习安装各种系统,硬盘分区,bios设置等操作。
3、学习基本的办公软件,word,excel,ppt,学会安装卸载软件,优化系统等操作
学习这三项,即使电脑开始了。
如何学习计算机的基本操作?
SSDT表中的NtopenProcess释放驱动HOOK,但对参数过滤不严密,只过滤 PROCESS_TERMINATE, PROCESS_WRITE, XXXX(忘了),三种。然后比较PID放在全局变量中,可以发送 DeviceIoControl 改变这个值~
因此,我们仍然可以用其他参数打开这个过程(只要不包括这三个参数)~
然而,似乎每个人都对这个话题不感兴趣,所以代码不会被释放。如果你想直接给我发信息,顺便问一下刀客公开他的方法~~
1.使用 FindWindow 方法,然后想到窗口发送 WM_CLOSE 的消息
2.找到过程的线程, PostThreadMessage 发送 WM_QUIT 消息结束了主线程
3.OpenThread ---> TerminateThread
4.RemoteExitProcess,以 PROCESS_CREATE_THREAD|VM_OPERATION打开过程,然后创建一个远程线程,线程的开始地址是 ExitProcess 参数0 ,程序自行断开.
5.首先确保过程可以打开(8和9介绍),然后创建一个线程 DebugActiveProcess 然后他什么都不做退出线程,程序没人接管,就挂了~
6.以 VM_OPERATION打开过程, 然后调用 NtUnmapViewOfSection 卸载他的ntdll.dll 此时,程序还没有崩溃,然后随意发送消息,其程序一旦调用就会直接异常,但ntdll已经挂断,用户空间无法异常处理,自我切断~(我觉得这个方法应该和往过程空间写垃圾数据的方法一样)
7.发送键盘 ESC 单击消息(此消息不能与发送窗口消息相同).
8.以下是重点介绍。
:-----------------------------
因为crackmeapp打开了驱动文件句柄,所以不能直接卸载驱动。因此,有必要关闭这个句柄.
那么如何获得远程文件句柄呢?首先想到的是 DuplicateHandle ,
BOOL DuplicateHandle(
HANDLE hSourceProcessHandle, // handle to source process
HANDLE hSourceHandle, // handle to duplicate
HANDLE hTargetProcessHandle, // handle to target process
LPHANDLE lpTargetHandle, // duplicate handle
DWORD dwDesiredAccess, // requested access
BOOL bInheritHandle, // handle inheritance option
DWORD dwOptions // optional actions
);
先看最后一个参数:
DUPLICATE_CLOSE_SOURCE
Closes the source handle. This occurs regardless of any error status returned.
DUPLICATE_SAME_ACCESS
Ignores the dwDesiredAccess parameter. The duplicate handle has the same access as the source handle.
也就是说,我们选择DUPLICATE_CLOSE_SOURCE时,远程句柄将自动关闭
第一个参数,我们可以直接OpenProcess(PROCESS_DUP_HANDLE ,XXX)获得,
第二个参数很难找到,那就是在CrackMeApp的过程中打开驱动程序的句柄。为了得到这个,我们必须使用ntdll.dll中的一个 API, ZwQuerySystemInformation 我们可以在整个系统中找到所有的句柄信息,然后判断哪些句柄属于 CrackMeapp进程,并且ObjectTypenumber类型是文件类型。有关此实现的详细信息,请参阅我的实现代码.
typedef struct _SYSTEM_HANDLE_INFORMATION { // Information Class 16
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags; // 0x01 = PROTECT_FROM_CLOSE, 0x02 = INHERIT
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
这样,在CrackMeapp的过程中,通过CreateFile打开的所有句柄都可以找到。一般来说,有三个句柄。我们可以关闭它们,也可以只关闭最后一个句柄(因为最后一个句柄是打开驱动程序,而打开驱动程序是最后一次调用CreateFile).
我得到了第二个参数,下面的参数很简单~
于是一调用这个 DuplicateHandle ,我们不仅关闭了远程句柄,还得到了驱动句柄,为所欲为~~
所以我的第八种方法是将IO请求发送到crackmeapp的驱动程序,并要求它将保护过程的PID修改为0,这样我们就可以用传统的方法结束它(Open+Terminate)
9.如果上述方法的远程句柄关闭,我们自然可以卸载驱动器~所以这就是去 Zwunloaddriver或停止其Servicer.这样再用常规方法结束~~~
10.所有win32子系统的过程中都会有一个句柄.在exe过程中,CrackMeApp.exe自然也在,所以我们可以把它拿走 csrss.exe 给里面的句柄 dup 过来自己用,DUP过来的方法大致和上面一样,但是判断过程应该是csrs,类型应该是5(过程句柄的类型),然后对每个进程句柄做一个ZwQueryInformationProcess() 参数为 BASIC_INFORMATION=0 查询,看看这个句柄是否是CrackMeapp ,如果是直接用的话,TerminateProcess~
---------------以下是使用驱动程序的结束-----------
11.使用驱动patch来保护其PID值,然后在用户空间中使用常规方法~
12.用驱动器恢复SSDT中的ZwopenProcess。在这里,我懒得直接硬编码,调用驱动器自己恢复SSDT的函数,呵呵~~之后用户空间中的常规方法(这和11不一样)
13.直接调用驱动器 NtopenProcess绕过SSDT HOOK就可以了,但是需要注意的是,首先要把它放在首位。 KTHREAD 结构体里的 PreviousMode 将值改为KernelMode,否则可能会失败~
获取句柄后,调用ZwterminateProcess,不需要修改Previousmode,直接使用~
14.不同于13的方法是打开句柄的方法,使用
PsLookupProcessByProcessId+ObopenobjectByPointer的方法,然后调用 ZwTerminateProcess~(这也是不同的,因为规则上说Obxx和Ntxx是不同的API)
15.最后一个,首先获取CrackMeapp线程的TID,然后根据 PsLookupThreadByThreadId 获取 EThread 在APC过程函数中,主要执行指针,然后将APC插入该线程 ZwTerminateProcess( 0xfffffff, 0 );这个东西就是结束自己的意思(呵呵,这个方法是我从Icesword中挑出来的)~~本来想调用Nt//ZwTerminateThread,结果函数没有导出就要自己找,简单点ZwterminateProcess。.
我的方法比较普通,和你差不多
只有四种方法用于驱动
方法11:
NtopenProcess在驱动中获得句柄, 然后TerminateProcess在驱动中
方法12:
PslokuprocessbyProcessid获得Processs,然后切换到进程空间,最后
ZwTerminateProcess(NULL, 0);
方法13:
通过ObopenobjectByPointer获取句柄,然后Terminateter
方法14:
恢复SSDT(ZwOpenProcess),然后在应用层直接OpenProcess,Terminates