首页
社区
课程
招聘
[讨论]这个问题好难解啊@@
发表于: 2007-8-31 23:15 8859

[讨论]这个问题好难解啊@@

2007-8-31 23:15
8859
答题之前, 首先我对这道题的题意的理解, 这是做题的指导, 跟评测一样也应该有一个评题指导思想, 直接影响结题和评题结果.
1. 相同API或者方法的理解.
   情况一:
     OpenProcess, ZwOpenProcess, NtOpenProcess, INT 2E, SYSENTER均属于同一个API.
     理由: 它们一个只是另一个封装; 就像
     MessageBoxA->MessageBoxExA->MessageBoxTimeoutA->MessageBoxTimeoutW->SoftModalMessageBox->...
     MessageBoxW->MessageBoxExW->MessageBoxTimeoutW->MessageBoxTimeoutW->SoftModalMessageBox->...
     CreateProcessA->CreateProcessInternalA->CreateProcessInternalW->ZwCreateProcessEx->...
     外面的封装只是为了提供更友好的接口; 让每个人都去调用INT 2E/SYSENTER的话, 我相信程序员也会封的.
   情况二:
     PATCH无论在R0,R3只要PATCH的目标一致, 均属于同一方法; 无论是在驱动加载还是使用DeviceIoControl实现应属于同一方法.

1. 不同方法的理解.
   情况一:
     SendMessage(hWnd, WM_CLOSE, ...)和SendMessage(hWnd, WM_QUIT, ...)不一样
     理由: 他们的关键参数不一样, 最后处理的也不一样. 我用了前者, 后者是不行的(自己可以测试一下)
   情况二:
     SendMessage(hWnd, ...)和PostMessage(hWnd, ...)不一样.
     理由: 它们的实现机制不一样, 前者直接调用窗口过程, 后者是放入消息队列
     情况三:
     A->B->Z        1
     C->D->Z        2
     A->D->Z        3
     C->B->Z        4
     其中A,C功能可能都等效于OpenProcess, 而B,D功能都可能等效于TerminateProcess.      
     它们也属于不同的方法;
     理由: A->B/C->D不是同一个方法; 同样, A->B/C->B也不是同一个方法; 同样A->D/C->D也不是同一个方法
           同样A->D/A-B也不是同一个方法; C->D/C->B也不是同一个方法; 所以他们属于不同方法.

   情况三:
     PATCH不同地方, 只要PATCH的目标不一样也属于不同的方法; 拿crackme.sys来说, 可以PATCH两个地方就算不同方法;
     1. PATCH与进程本身比较的地方; 目标让驱动认为始终是进程自己打开自己;
     2. PATCH与被保护进程ID比较的地方; 目标让驱动认为被打开的始终不是被保护进程;
     这两者完全不是同一个概念。

还有其他不知道啦。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//让进程自己关闭
//////////////////////////////////////////////////////////////////
//系统普通API
//SendMessage
01:SendMessage(hWnd, WM_CLOSE, 0, 0);
   //SendMessage(hWnd, WM_QUIT, 0, 0);//这个消息是发送不成功的
02:SendMessage(hWnd, WM_COMMAND, IDOK, 0);
03:SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
04:SendMessage(hWnd, WM_KEYDOWN, VK_ESCAPE, 0);

//PostMessage
05:PostMessage(hWnd, WM_CLOSE, 0, 0);
06:PostMessage(hWnd, WM_QUIT, 0, 0);
07:PostMessage(hWnd, WM_COMMAND, IDOK, 0);
08:PostMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
09:PostMessage(hWnd, WM_KEYDOWN, VK_ESCAPE, 0);

//PostThreadMessage
   //PostThreadMessage(dwThread, WM_CLOSE, 0, 0);//这个消息不会成功
10:PostThreadMessage(dwThread, WM_QUIT, 0, 0);
   //PostThreadMessage(dwThread, WM_COMMAND, IDOK, 0);//这个消息不会成功
   //PostThreadMessage(dwThread, WM_SYSCOMMAND, SC_CLOSE, 0);//这个消息不会成功
   //PostThreadMessage(dwThread, WM_KEYDOWN, VK_ESCAPE, 0);//这个消息不会成功

//SendMessageCallback

//SendNotifyMessage
11:SendNotifyMessage(hWnd, WM_CLOSE, 0, 0);
   //SendNotifyMessage(hWnd, WM_QUIT, 0, 0);
12:SendNotifyMessage(hWnd, WM_COMMAND, IDOK, 0);
13:SendNotifyMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
   //SendNotifyMessage(hWnd, WM_KEYDOWN, VK_ESCAPE, 0);

//SendMessageTimeout
14:SendMessageTimeout(hWnd, WM_CLOSE, 0, 0);
   SendMessageTimeout(hWnd, WM_QUIT, 0, 0);
15:SendMessageTimeout(hWnd, WM_COMMAND, IDOK, 0);
16:SendMessageTimeout(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
   SendMessageTimeout(hWnd, WM_KEYDOWN, VK_ESCAPE, 0);

//keybd_event & SendInput
17:keybd_event:Escape
18:keybd_event:Alt+F4
   //mouse_event//实现比较复杂//不写了
   //SendInput:Escape//=17
   //SendInput:Alt+F4//=18
   //SendInput:mouse_event//

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////
//强行关闭
//Process or Thread
19:CreateToolhelp32Snapshot/Thread32First/Thread32Next/OpenThread/TerminateThread

//HOOK获取句柄信息
//SetWindowsHookEx
  //进程内部自行关闭
  20: ExitProcess(0)
  21: TerminateProcess(GetCurrentProcess(), 0);
  22: PostQuitMessage(0);
  
  
  //进程外部
  //需要句柄了
     //DeviceIoControl(...);后得到句柄//进程不再受保护
       23: OpenProcess/TerminateProcess
       24: DebugActiveProcess(dwThreadId);
       25: CreateJobObject/AssignProcessToJobObject/TerminateJobObject
       26: VirtualAllocEx/CreateRemoteThread/ExitProcess
       27: DbgUiConnectToDbg/DbgUiDebugActiveProcess(hProcess);

暂时知道这儿, 下面接着贴。周六没时间,周日看情况,可能会有时间,Native Api和驱动还没开始呢@@
2007-8-31 23:17
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
01-27种方法附件.
我都要疯了。Native 驱动 自己封装API都还没开始呢@~~~
上传的附件:
2007-8-31 23:23
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
4
增加四种不同的方法:
     //DuplicateHandle(...);后得到句柄//进程仍然受保护
     28: TerminateProcess(
       29: CreateJobObject/AssignProcessToJobObject/TerminateJobObject
       30: VirtualAllocEx/CreateRemoteThread/ExitProcess
       31: DbgUiConnectToDbg/DbgUiDebugActiveProcess(hProcess);

(说明:20_31.rar, 其中20_27是修正DLL中的一点bug, 写程序不小心给掉了, 直接解压覆盖掉旧原来的就好了)
上传的附件:
2007-9-1 00:07
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
NtQuerySystemInformation(SystemProcessesAndThreadsInformation
TerminateThread
上传的附件:
2007-9-2 00:23
0
雪    币: 1126
活跃值: (156)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
6
Native还有别的办法;
驱动也有几种办法; 没时间弄了,明天需要送老婆回学校, 可能下午才能回哦~~~
2007-9-2 01:06
0
游客
登录 | 注册 方可回帖
返回
//