|
[B]书山无路劈荆棘,学海茫茫浮木舟!皇天厚赐我才庸,唯有搏命与天挣。不尽人世坎坷路,岂有繁华幸福驻?满怀壮志闯江湖,不立威名不归梓。 ——夜读自励 SmileOnce于2004年元月4日夜
追崇自由精神,弃Windows而转入Linux,正所谓:雄关漫道真如铁,而今迈步从头越! ——一笑写于2004年08月24日,聊表心志
文章版权归 乾坤一笑 所有,欢迎转载,转载请保证所引用文章的完整性并注明作者和出处。[/B] |
|
// KillMe.cpp : haha, If you can kill me.......
//
// Coder Jozu
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <aclapi.h>
int main(int argc, char* argv[])
{
HANDLE hProcess;
BOOL bDone = FALSE;
PACL pACL;
PSECURITY_DESCRIPTOR psd = NULL;
printf("My process id is 0x%X (%d). If you can kill me......\n", GetCurrentProcessId(), GetCurrentProcessId());
printf(" Coder Jozu\n\n\n\n");
__try
{
if(!DuplicateHandle(GetCurrentProcess(),
GetCurrentProcess(),
GetCurrentProcess(),
&hProcess,
PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | READ_CONTROL | WRITE_DAC,
FALSE,
0))
__leave;
if(ERROR_SUCCESS != GetSecurityInfo(hProcess,
SE_KERNEL_OBJECT,
DACL_SECURITY_INFORMATION,
NULL,
NULL,
&pACL,
NULL,
&psd))
__leave;
pACL->AceCount = 0;
pACL->AclSize = sizeof(ACL);
if(ERROR_SUCCESS != SetSecurityInfo(hProcess,
SE_KERNEL_OBJECT,
DACL_SECURITY_INFORMATION,
NULL,
NULL,
pACL,
NULL))
__leave;
LocalFree(psd);
bDone = TRUE;
}
__finally
{
if(!bDone)
{
printf("Error occur, %X\n", GetLastError());
}
}
printf("Try to kill me from task manager.....");
getchar();
return 0;
}
PS: jozu说,
ACL为NULL是全控制,ACL为empty是禁止访问
不过发现一个进程的token如果有SeDebugPrivilege,这些限制全都没有用了,2ksp4版本以上,xp,2003在杀进程的时候,都把自己的debug权限打开,所以进程管理器能够杀死上面的那个版本
|
//
// wrote by **
#include <iostream>
using namespace std;
__declspec(naked) inline int __fastcall multiply10( int n )
{
__asm {
shl ecx, 1
mov eax, ecx
shl eax, 2
add eax, ecx
ret
}
}
void main()
{
int i = multiply10(-123);
cout << i << endl;
}
|
我的源码如下:
[I]/* luoxuan.cpp
* author: smileonce
* my email: smileonce<at>126<dot>com
* date : 2004-9-19
*/[/COLOR][/I]
#include "stdafx.h"
#include <iostream>
[/COLOR]using namespace[/COLOR] std[B];[/COLOR][/B]
#define MAX 8
[/COLOR]typedef[/COLOR] char[/COLOR] BYTE[B];[/COLOR][/B]
void[/COLOR] clearMatrix[B]([/COLOR][/B]BYTE[B]*);[/COLOR][/B]
void[/COLOR] printMatrix[B]([/COLOR][/B]BYTE[B]*);[/COLOR][/B]
void[/COLOR] makeMatrix[B]([/COLOR][/B]BYTE[B]*,[/COLOR][/B] int[/COLOR][B]);[/COLOR][/B]
int[/COLOR] main[/COLOR][B]()
{[/COLOR][/B]
BYTE a[MAX] = {0[/COLOR][B]};[/COLOR][/B]
int[/COLOR] n[B] =[/COLOR][/B] 0[/COLOR][B];[/COLOR][/B]
while[/COLOR][B]([/COLOR][/B] n[B] <[/COLOR][/B] 64[/COLOR][B] )
{[/COLOR][/B]
clearMatrix[B]([/COLOR][/B]a[B]);[/COLOR][/B]
cout[B] <<[/COLOR][/B] "Input N: "[/COLOR][B];[/COLOR][/B]
cin[B] >>[/COLOR][/B] n[B];[/COLOR][/B]
makeMatrix[B]([/COLOR][/B]a[B],[/COLOR][/B] n[B]);[/COLOR][/B]
printMatrix[B]([/COLOR][/B]a[B]);
}[/COLOR][/B]
return[/COLOR] 0[/COLOR][B];
}[/COLOR][/B]
void[/COLOR] makeMatrix[B]([/COLOR][/B]BYTE[B] *[/COLOR][/B] a[B],[/COLOR][/B] int[/COLOR] n[B])
{[/COLOR][/B]
int[/COLOR] i[B],[/COLOR][/B] j[B],[/COLOR][/B] k[B];[/COLOR][/B]
int[/COLOR] o_left[B],[/COLOR][/B] o_right[B],[/COLOR][/B] i_left[B],[/COLOR][/B] i_right[B];[/COLOR][/B][I] // find the area that we want filled.
// o_ is for outside, i_ is for inside
// _left is for leftside, _right is for rightside
[/COLOR][/I] int[/COLOR] i_size[B];[/COLOR][/B][I] // the inside area size
[/COLOR][/I]
for[/COLOR][B]([/COLOR][/B] i[B]=[/COLOR][/B]2[/COLOR][B];[/COLOR][/B] i[B]*[/COLOR][/B]i[B]<=[/COLOR][/B]n[B];[/COLOR][/B] i[B]+=[/COLOR][/B]2[/COLOR][B])
;[/COLOR][/B]
i_size[B] = ([/COLOR][/B]i[B]-[/COLOR][/B]2[/COLOR][B]) * ([/COLOR][/B]i[B]-[/COLOR][/B]2[/COLOR][B]);[/COLOR][/B][I] // remember the size of inside square
[/COLOR][/I]
i_left[B] =[/COLOR][/B] MAX[B]/[/COLOR][/B]2[/COLOR][B] -[/COLOR][/B] i[B]/[/COLOR][/B]2[/COLOR][B] +[/COLOR][/B]1[/COLOR][B];[/COLOR][/B]
i_right[B] =[/COLOR][/B] MAX[B] -[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B]
o_left[B] =[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B]
o_right[B] =[/COLOR][/B] i_right[B] +[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B][I]
//------ fill inside area of the matrix
//-- set the mask
[/COLOR][/I] for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B],[/COLOR][/B] j[B]=[/COLOR][/B]0x01[/COLOR][B];[/COLOR][/B] i[B] <=[/COLOR][/B] i_left[B] -[/COLOR][/B] 1[/COLOR][B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B] <<=[/COLOR][/B] 1[/COLOR][B])
;[/COLOR][/B]
for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]0[/COLOR][B],[/COLOR][/B] k[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] i[B]<[/COLOR][/B]i_right[B]-[/COLOR][/B]i_left[B]+[/COLOR][/B]1[/COLOR][B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B]<<=[/COLOR][/B]1[/COLOR][B] )[/COLOR][/B]
k[B] +=[/COLOR][/B] j[B];[/COLOR][/B][I]
//-- fill by using mask
[/COLOR][/I] for[/COLOR][B] ([/COLOR][/B]i[B]=[/COLOR][/B]i_left[B];[/COLOR][/B] i[B]<=[/COLOR][/B]i_right[B];[/COLOR][/B] i[B]++)
*([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) = *([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |[/COLOR][/B] k[B];[/COLOR][/B][I]
//------ fill outside area of the matrix
[/COLOR][/I] n[B] -=[/COLOR][/B] i_size[B] ;[/COLOR][/B][I] //this is the count of outside print steps
//---- left
[/COLOR][/I] for[/COLOR][B] ([/COLOR][/B]k[B]=[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_left[B],[/COLOR][/B] i[B]=[/COLOR][/B]i_right[B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]>[/COLOR][/B]o_left[B];[/COLOR][/B] i[B]--,[/COLOR][/B] n[B]--)
*([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
//---- top
[/COLOR][/I] if[/COLOR][B] ([/COLOR][/B]n[B]==[/COLOR][/B]0[/COLOR][B])[/COLOR][/B] return[/COLOR][B];[/COLOR][/B]
for[/COLOR][B] ([/COLOR][/B]j[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_left[B],[/COLOR][/B] i[B]=[/COLOR][/B]o_left[B],[/COLOR][/B] k[B]=[/COLOR][/B]0[/COLOR][B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]<[/COLOR][/B]o_right[B];[/COLOR][/B] i[B]++,[/COLOR][/B] j[B]<<=[/COLOR][/B]1[/COLOR][B],[/COLOR][/B] n[B]--)[/COLOR][/B]
k[B]+=[/COLOR][/B]j[B];
*([/COLOR][/B]a[B]+[/COLOR][/B]o_left[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
//---- right
[/COLOR][/I] for[/COLOR][B] ([/COLOR][/B]k[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_right[B],[/COLOR][/B] i[B]=[/COLOR][/B]o_left[B];[/COLOR][/B] n[B] >[/COLOR][/B]0[/COLOR][B] &&[/COLOR][/B] i[B]<[/COLOR][/B]o_right[B];[/COLOR][/B] i[B]++,[/COLOR][/B] n[B]--)
*([/COLOR][/B]a[B]+[/COLOR][/B]i[B]) |=[/COLOR][/B] k[B];[/COLOR][/B][I]
//---- bottom
[/COLOR][/I] if[/COLOR][B] ([/COLOR][/B]n[B]==[/COLOR][/B]0[/COLOR][B])[/COLOR][/B] return[/COLOR][B];[/COLOR][/B]
for[/COLOR][B] ([/COLOR][/B]j[B] =[/COLOR][/B] 0x01[/COLOR][B]<<[/COLOR][/B]o_right[B] | | |