首页
社区
课程
招聘
[原创]第二阶段第二题代码(比较弱)(看雪金山2007逆向分析挑战赛)
发表于: 2007-9-2 12:02 6912

[原创]第二阶段第二题代码(比较弱)(看雪金山2007逆向分析挑战赛)

2007-9-2 12:02
6912

第二阶段第二题代码(比较弱)(看雪金山2007逆向分析挑战赛)

by aker
说老实话,第二题要想做的话,是个费时间的题目,不想动手去做很多,都是拷贝的代码,大家

随便看看吧.
使用IDA载入那个sys,发现没有做什么其他的,就是常规的工作,然后hook了NtOpenProcess

,这样你OpenProcess的时候,他判断是不是打开的自己,如果是就返回Deny。也就是说,只

是限制了你不能打开进程,获取句柄。原理这个帖子里面有,大家可以先看看那个;)
http://bbs.pediy.com/showthread.php?t=40832

既然只是HOOK了,那么发送WM_CLOSE等可以关闭,修复ssdt也可以关闭

下面是我的一些代码。

来个最简单的吧

#include <windows.h>

int main(int argc, char *argv[])
{
HWND hwin = FindWindow(NULL,"crackmeapp");
SendMessage(hwin,WM_CLOSE,0,0);
return 0;
} 
// 窗口置前,发送alt f4
#include <windows.h>
#pragma comment(lib,"user32")
int main(int argc, char *argv[])
{
HWND hwin = FindWindow(NULL,"crackmeapp");

SetForegroundWindow(hwin); 
Sleep(20);
keybd_event(18,MapVirtualKey(18,0),0,0); 
keybd_event(115,MapVirtualKey(115,0),0,0); 
keybd_event(115,MapVirtualKey(115,0),KEYEVENTF_KEYUP,0); 
keybd_event(115,MapVirtualKey(115,0),0,0); 
keybd_event(115,MapVirtualKey(115,0),KEYEVENTF_KEYUP,0); 
keybd_event(18,MapVirtualKey(18,0),KEYEVENTF_KEYUP,0); 
return 0;
} 
////////////头文件////////////////////////////////////////////////////////////

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

////////////宏定义////////////////////////////////////////////////////////////

////////////全局变量//////////////////////////////////////////////////////////

////////////函数定义//////////////////////////////////////////////////////////
DWORD WINAPI GetPIDbyName(LPTSTR lpName)
{
HANDLE m_Snap = INVALID_HANDLE_VALUE;
PROCESSENTRY32 pe = {sizeof(pe)};
DWORD ret = NULL;

{
m_Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
if (m_Snap == INVALID_HANDLE_VALUE) goto finally; 
if (!Process32First(m_Snap, &pe)) goto finally;
do if(!lstrcmpi(pe.szExeFile,lpName)) 
{
ret = pe.th32ProcessID;
goto finally;
}
while (Process32Next(m_Snap, &pe)); 
}

finally: {
if (m_Snap != INVALID_HANDLE_VALUE) 
CloseHandle(m_Snap);
}
return ret;
}

bool TerminateAProcess(DWORD dwPid) 
{ 
HANDLE hThreadSnap = NULL; 
THREADENTRY32 te32; 
BOOL bThreadFind = FALSE; 
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,NULL); 
if(hThreadSnap) 
{ 
te32.dwSize = sizeof(THREADENTRY32); 
bThreadFind = Thread32First(hThreadSnap,&te32); 
while(bThreadFind) 
{ 
if(te32.th32OwnerProcessID == dwPid) 
{ 
HANDLE hThread = NULL; 
hThread = OpenThread(THREAD_ALL_ACCESS,FALSE,te32.th32ThreadID); 
if(hThread) 
{ 
TerminateThread(hThread,0); 
CloseHandle(hThread); 
} 
} 
te32.dwSize = sizeof(THREADENTRY32); 
bThreadFind = Thread32Next(hThreadSnap,&te32); 
} 
CloseHandle(hThreadSnap); 
} 
return TRUE; 
}

int main(int argc, char *argv[])
{
TerminateAProcess(GetPIDbyName("crackmeapp.exe"));
return 0;
} 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2
最后两种只能够算一种。个人认为  。
我的虚拟机可能有问题WM_CLOSE发送会Access Denied。
如果可以发WM_CLOSE 其实还有很多消息可以搞定
包括 Wm_DESTROY 或者直接调API函数DestroyWindow
当然EndTask也是可以的。
2007-9-2 12:31
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
DestroyWindow不行的...
2007-9-2 12:33
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
试过,不行!~~~~``
2007-9-2 12:37
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
windows是消息驱动的,所以消息不同自然是应该算不同的方法
2007-9-2 12:40
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
6
我的随便算几种;))就是个思路而已,大家都说说各自的思路啊
2007-9-2 12:40
0
雪    币: 209
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
我的思路跟你差不多
2007-9-2 12:45
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
看了那个驱动代码,两个进程pid比较接近的时候可以ntopenprocess。所以可以hook PsGetCurrentProcessId
2007-9-2 12:50
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
9
帖代码咯,学习 ;))

看了那个驱动代码,两个进程pid比较接近的时候可以ntopenprocess。所以可以hook PsGetCurrentProcessId

哪个驱动
2007-9-2 13:55
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
就是CrackMe.sys

mov     edx, [ebp+arg_C]
mov     esi, [edx]
and     esi, 0FFFFFFFCh
call    PsGetCurrentProcessId
cmp     esi, eax
jnz     short loc_1177D
2007-9-2 14:03
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
WM_NCDESTORY~~~
2007-9-2 14:32
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
12
writeprocessmemory()
2007-9-2 16:12
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
13
hoho,贴一个学你的
    DWORD bKill;
    HWND hwin = FindWindow(NULL,"CrackMeApp");
    SendMessageTimeout(hwin, WM_CLOSE, 0, 0,0, 200, &bKill);
2007-9-2 20:18
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
14
~~~~~~~~~~~~~~~
2007-9-2 20:37
0
游客
登录 | 注册 方可回帖
返回
//