共有回帖数 0 个
-
偶然搜到这个,玩了一会一时兴起想用C实现...【纯属娱乐,大神勿喷】

【输出代码来自原网站】
-----------------------------------------------------------------------------------------------------------------
【下载地址】 http://pan.baidu.com/s/1jG4cY2a
-----------------------------------------------------------------------------------------------------------------
【源码】
int main()
{
system("title Hacker Typer");
system("color 0a");
int i,j;
char unex[6132]="struct group_info init_groups = { .usage = ATOMIC_INIT(2) };nnstruct group_info *groups_alloc(int gidsetsize){nstruct group_info *group_info;nint nblocks;nint i;nnnnblocks = (gidsetsize + NGROUPS_PER_BLOCK - 1) / NGROUPS_PER_BLOCK;n/* Make sure we always allocate at least one indirect block pointer */nnblocks = nblocks ? : 1;ngroup_info = kmalloc(sizeof(*group_info) + nblocks*sizeof(gid_t *), GFP_USER);nif (!group_info)nreturn NULL;nngroup_info-ngroups = gidsetsize;ngroup_info-nblocks = nblocks;natomic_set(&group_info-usage, 1);nnif (gidsetsize = NGROUPS_SMALL)ngroup_info-blocks[0] = group_info-small_block;nelse {nfor (i = 0; i nblocks; i++) {ngid_t *b;nb = (void *)__get_free_page(GFP_USER);nif (!b)ngoto out_undo_partial_alloc;ngroup_info-blocks = b;n}n}nreturn group_info;nnnout_undo_partial_alloc:nnwhile (--i = 0) {nnfree_page((unsigned long)group_info-blocks);nn}nnkfree(group_info);nnreturn NULL;nn}nnnnEXPORT_SYMBOL(groups_alloc);nnnnvoid groups_free(struct group_info *group_info)nn{nnif (group_info-blocks[0] != group_info-small_block) {nnint i;nnfor (i = 0; i group_info-nblocks; i++)nnfree_page((unsigned long)group_info-blocks);nn}nnkfree(group_info);nn}nnnnEXPORT_SYMBOL(groups_free);nnnn/* export the group_info to a user-space array */nnstatic int groups_to_user(gid_t __user *grouplist,nn const struct group_info *group_info)nn{nnint i;nnunsigned int count = group_info-ngroups;nnnnfor (i = 0; i group_info-nblocks; i++) {nnunsigned int cp_count = min(NGROUPS_PER_BLOCK, count);nnunsigned int len = cp_count * sizeof(*grouplist);nnnnif (copy_to_user(grouplist, group_info-blocks, len))nnreturn -EFAULT;nnnngrouplist += NGROUPS_PER_BLOCK;nncount -= cp_count;nn}nnreturn 0;nn}nnnn/* fill a group_info from a user-space array - it must be allocated already */nnstatic int groups_from_user(struct group_info *group_info,nn gid_t __user *grouplist)nn{nnint i;nnunsigned int count = group_info-ngroups;nnnnfor (i = 0; i group_info-nblocks; i++) {nnunsigned int cp_count = min(NGROUPS_PER_BLOCK, count);nnunsigned int len = cp_count * sizeof(*grouplist);nnnnif (copy_from_user(group_info-blocks, grouplist, len))nnreturn -EFAULT;nnnngrouplist += NGROUPS_PER_BLOCK;nncount -= cp_count;nn}nnreturn 0;nn}nnnn/* a simple Shell sort */nnstatic void groups_sort(struct group_info *group_info)nn{nnint base, max, stride;nnint gidsetsize = group_info-ngroups;nnnnfor (stride = 1; stride gidsetsize; stride = 3 * stride + 1)nn; /* nothing */nnstride /= 3;nnnnwhile (stride) {nnmax = gidsetsize - stride;nnfor (base = 0; base max; base++) {nnint left = base;nnint right = left + stride;nngid_t tmp = GROUP_AT(group_info, right);nnnnwhile (left = 0 && GROUP_AT(group_info, left) tmp) {nnGROUP_AT(group_info, right) =nn GROUP_AT(group_info, left);nnright = left;nnleft -= stride;nn}nnGROUP_AT(group_info, right) = tmp;nn}nnstride /= 3;nn}nn}nnnn/* a simple bsearch */nnint groups_search(const struct group_info *group_info, gid_t grp)nn{nnunsigned int left, right;nnnnif (!group_info)nnreturn 0;nnnnleft = 0;nnright = group_info-ngroups;nnwhile (left right) {nnunsigned int mid = left + (right - left)/2;nnif (grp GROUP_AT(group_info, mid))nnleft = mid + 1;nnelse if (grp GROUP_AT(group_info, mid))nnright = mid;nnelsennreturn 1;nn}nnreturn 0;nn}nnnn/**nn * set_groups - Change a group subscription in a set of credentialsnn * @new: The newly prepared set of credentials to alternn * @group_info: The group list to installnn *nn * Validate a group subscription and, if valid, insert it into a setnn * of credentials.nn */nnint set_groups(struct cred *new, struct group_info *group_info)nn{nnput_group_info(new-group_info);nngroups_sort(group_info);nnget_group_info(group_info);nnnew-group_info = group_info;nnreturn 0;nn}nnnnEXPORT_SYMBOL(set_groups);nnnn/**nn * set_current_groups - Change current's group subscriptionnn * @group_info: The group list to imposenn *nn * Validate a group subscription and, if valid, impose it upon current's tasknn * security record.nn */nnint set_current_groups(struct group_info *group_info)nn{nnstruct cred *new;nnint ret;nnnnnew = prepare_creds();nnif (!new)nnreturn -ENOMEM;nnnnret = set_groups(new, group_info);nnif (ret 0) {nnabort_creds(new);nnreturn ret;nn}nnnnreturn commit_creds(new);nn}nnnnEXPORT_SYMBOL(set_current_groups);nnnnSYSCALL_DEFINE2(getgroups, int, gidsetsize, gid_t __user *, grouplist)nn{nnconst struct cred *cred = current_cred();nnint i;nnnnif (gidsetsize 0)nnreturn -EINVAL;nnnn/* no need to grab task_lock here; it cannot change */nni = cred-group_info-ngroups;nnif (gidsetsize) {nnif (i gidsetsize) {nni = -EINVAL;nngoto out;nn}nnif (groups_to_user(grouplist, cred-group_info)) {nni = -EFAULT;nngoto out;nn}nn}nnout:nnreturn i;nn}nnnn/*nn *SMP: Our groups are copy-on-write. We can set them safelynn *without another task interfering.nn */nnnnSYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist)nn{nnstruct group_info *group_info;nnint retval;nnnnif (!nsown_capable(CAP_SETGID))nnreturn -EPERM;nnif ((unsigned)gidsetsize NGROUPS_MAX)nnreturn -EINVAL;nnnngroup_info = groups_alloc(gidsetsize);nnif (!group_info)nnreturn -ENOMEM;nnretval = groups_from_user(group_info, grouplist);nnif (retval) {nnput_group_info(group_info);nnreturn retval;nn}nnnnretval = set_current_groups(group_info);nnput_group_info(group_info);nnnnreturn retval;nn}nnnn/*nn * Check whether we're fsgid/egid or in the supplemental group..nn */nnint in_group_p(gid_t grp)nn{nnconst struct cred *cred = current_cred();nnint retval = 1;nnnnif (grp != cred-fsgid)nnretval = groups_search(cred-group_info, grp);nnreturn retval;nn}nnnnEXPORT_SYMBOL(in_group_p);nnnnint in_egroup_p(gid_t grp)nn{nnconst struct cred *cred = current_cred();nnint retval = 1;nnnnif (grp != cred-egid)nnretval = groups_search(cred-group_info, grp);nnreturn retval;nn}";
//呃...核心代码...
for(i=0;i=strlen(unex);i=i+2)
//循环输出代码
{
for(j=1;j=j;j=j)
//死循环判断某些不和谐的字符
{
if(unex==" ")
//如果当前数组成员为空格,直接打印并将i推后一位
{
printf(" ");
i++;
}
else if(unex=="n")
//如果当前数组成员为换行符,直接打印并将i推后一位
{
printf("n");
i++;
}
else
break;
//不然就退出这个循环
}
getch();
//等待敲击键盘
printf("%c%c",unex,unex[i+1]);
//打印unex及其后一位成员
}
printf("n");
//...纯属强迫症
while(1)
//保住窗口
{
getch();
//预防CPU占用率...
}
exit(0);
//...你懂的
}
-----------------------------------------------------------------------------------------------------------------
楼主 2015-10-10 13:26 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知