免杀对抗从0开始(三)

admin 2024年10月30日10:27:38评论9 views字数 3195阅读10分39秒阅读模式
🔥师傅您好:为了确保您不错过我们的最新网络安全资讯、技术分享和前沿动态,请将我们设为星标🌟!这样,您就能轻松追踪我们的每一篇精彩内容,与我们一起共筑网络安全防线!感谢您的支持与关注!💪
免责声明:文章所涉及内容,仅供安全研究教学使用,由于传播、利用本文所提供的信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。

一线红队带你从O到无限进步  

本文章所涉及所有内容均是大佬上课说讲的内容,其中做了一下基础的补充,高深的技术后面会慢慢在文章中出现

一线在职红队在线性感分享技术,从c语言开始基础带你慢慢进入终端对抗(免杀但是不止免杀)的大门。

紧接上文

结构体

结构体基本认知

结构是值的集合,这个值称为成员变量。

结构的中每个成员变量都可以是不同类型。

结构体的声明

语法:

struct abc 
{
int a;
int b;
};

例子:

描述一个学生需要一些数据:姓名、年龄、性别、学号

struct student
{
char name[100];
int age;
char gender[100];
char number[100];
};

void main()
{
struct student stu1;//创建结构体变量
}

结构体别名

语法:

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;

例子:

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;
void main()
{
Stu aaa;
struct student abc;//这两种创建方式出来的结果是一样的

}

结构体初始化

语法:

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;
void main()
{
Stu aaa = {0};
  struct student abc = {"xxx",1,"x","xxxx"};

}

例子:

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;
void main()
{
Stu aaa = {0};//设置结构体中的值全为0
  struct student abc = {"泾弦安全",1,"男","1000000000000000"};//按照结构体中的顺序赋值

}

结构体成员的访问

语法:

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;
void main()
{
Stu aaa = {0};
  struct student abc = {"xxx",1,"x","xxxx"};
  printf("%s:namen",abc.name);
  printf("%d:agen",abc.age);
  printf("%s:gendern",abc.gender);
  printf("%s:numbern",abc.number);

}

例子

typedef struct student {
  char name[100];
int age;
char gender[100];
char number[100];
} Stu;
void main()
{
Stu aaa = {0};
  struct student abc = {"泾弦安全",1,"男","1000000000000000"};//按照结构体中的顺序赋值
  printf("%s:namen",abc.name);
  printf("%d:agen",abc.age);
  printf("%s:gendern",abc.gender);
  printf("%s:numbern",abc.number);

  //打印结果;
  泾弦安全
  1
  男
  1000000000000000

}

结构体成员的类型

语法:

struct Student 
{
  char name[20];
  int age;
  char sex[10];
  char id[20];
};
struct School
{
  char school_name[30];
  struct Stu s;
  char* pc;
};
int main()
{
  char arr[] = "xxn";
  struct School abc = { "xxxx", {"xx", 18, "x", "xxxx"}, arr };

  printf("学校 - 名字:%sn", abx.school_name);
  printf("学生 - 姓名:%sn", JLD.s.name);
printf("年龄:%dn", JLD.s.age);
printf("性别:%sn", JLD.s.sex);
printf("学号:%sn", JLD.s.id);
  printf("地址 - %sn", abx.pc);

  return 0;

}

例子:

struct Student 
{
  char name[20];
  int age;
  char sex[10];
  char id[20];
};
struct School
{
  char school_name[30];
  struct Stu s; //可以嵌套其他结构
  char* pc;//定义指针
};
int main()
{
  char arr[] = "泾弦大厦n";
  struct School abc = { "泾弦安全", {"TZ", 18, "男", "0001"}, arr };//其中的大括号就是给嵌套的结构体赋值

  printf("学校 - 名字:%sn", abx.school_name);
  printf("学生 - 姓名:%sn", abc.s.name);
printf("年龄:%dn", abc.s.age);
printf("性别:%sn", abc.s.sex);
printf("学号:%sn", abc.s.id);
  printf("地址 - %sn", abc.pc);

  return 0;

}

使用typedef定义结构类型和结构体指针类型的别名

语法:

typedef struct person
{
  char *name;
  int age;
  char score;
} inform, *Pform;

例子:

typedef struct Student
{
  char *name;
  int age;
  char score;
}inform, *Pform;
void main()
{
Pform abc; // 使用 Pform 作为 inform 结构体的指针类型
  abc = (Pform)malloc(sizeof(inform)); // 分配内存
  if (abc != NULL) {
      abc->name = "John Doe"; // 赋值
      abc->age = 20;
      abc->sex = 'M'; // 假设 'M' 代表男性,'F' 代表女性
  }

  // 打印信息
  printf("姓名: %sn", abc->name);
  printf("年龄: %dn", abc->age);
  printf("性别: %cn", abc->sex);

  free(abc); // 释放内存
}

终端对抗技术讲解

动态调用

为什么需要使用动态调用,是因为我们在代码使用的API函数都会在程序的导出表中记录,为了规避杀毒软件的静态查杀而使用的到的。

这里可以看到第一个函数就是VirtualAlloc,这里我们就需要使用动态调用的方式去隐藏函数

免杀对抗从0开始(三)

这就是使用动态调用的代码(注意这里使用了loadlibrary这类函数,实际我们也需要隐藏,但是会用到其他方法),我们成功打印了我们需要的内容。

免杀对抗从0开始(三)

我们在来查看的时候发现以及没有VirtualAlloc函数了,以此类推这样的方法也可以隐藏其他函数

免杀对抗从0开始(三)

原文始发于微信公众号(泾弦安全):免杀对抗从0开始(三)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月30日10:27:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   免杀对抗从0开始(三)https://cn-sec.com/archives/3330976.html

发表评论

匿名网友 填写信息