病毒实验一

title: viruslab1
date: 2015-12-30 20:18:39
categories: virus
tags: virus
---

工具:vs2012 ollydbg

part1

  • 步骤1:编写内嵌汇编程序add.c 计算x+y 并调用printf()函数输出结果
int add(int x,int y)
{
  __asm{
    //返回x+y的值  
  }
}
int main()
{
  //输出add(2,4)的值
}
  • 步骤2:编译链接add.c 生成add.exe
    链接时请关闭动态基址选项 /dynamicbase:no
  • 步骤3:使用ollydbg单步跟踪程序运行 并记录以下程序运行信息
  • 程序被加载到内存的基址
  • main函数的第一条指令所在的地址
  • 栈基址
  • 在调用printf函数之前的栈顶地址

part1报告:

int add(int x,int y)
{
  __asm{  
    mov eax,dword ptr [x]
    add eax,dword ptr [y]
  }
}
int main()
{
  printf("the value add(2,4):%d",add(2,4));
}

part2

  • 步骤1:编写内嵌汇编程序sum.c 计算1+2+...+100 并调用printf()函数输出结果
int sum(int i)
{
  __asm{
    //计算并返回1+2+...+i
  }
}
int main()
{
  //输出sum(100)的值
}
  • 步骤2:编译链接sum.c 生成sum.exe
    链接时请关闭动态基址选项
  • 步骤3:使用ollydbg单步跟踪程序运行 并记录以下程序运行信息
  • 程序被加载到内存的基址
  • main函数的第一条指令所在的地址
  • 栈基址
  • 在调用printf函数之前的栈顶地址

part2报告

int sum(int i)
{
  __asm{
    //计算并返回1+2+...+i
    mov eax,0
    mov ecx,dword ptr[i]
    myLoop:
      add eax,ecx
      loop myLoop
  }
}
int main()
{
  printf("the value sum(100):%d\n",sum(100));
}

part3

  • 步骤1:编写内嵌汇编程序sum.c
int sum(int i)
{
  __asm{
    //返回1+2+...+i的值
  }
}
  • 步骤2:编写程序main.c 编写内嵌汇编语言来调用上面的sum.c函数4
    计算1+2+...i的值 i为程序运行时的命令行输入值
    然后采用汇编语言来调用printf函数输出计算结果
exten int sum();
int main(int argc,char **argv)
{
  int i;
  if(argc<2)
  {
    printf("usage:main number\n");
    return -1;
  }
  i=atoi(argv[1]);
  __asm{
    //计算并输出sum(i)的值
  }
}
  • 步骤3:编译链接sum.c与main.c 生成main.exe 观察以下运行情况 记录相应值
  • main()函数的第一条指令所在的内存地址
  • sum()函数的第一条指令所在的内存地址
  • main()函数中局部变量i所在的内存地址
  • CPU在运行main函数的第一条指令push ebp时的esp寄存器的值
    在退出main函数时的esp寄存器的值

part3报告

int sum(int i)
{
  __asm{
    //计算并返回1+2+...+i
    mov eax,0
    mov ecx,dword ptr[i]
myLoop:
    add eax,ecx
    loop myLoop
  }//loop循环一次 ecx自动减少1
}
extern int sum(int);
int main(int argc,char **argv)
{
int i;
if(argc<2){
  printf("usage:main number\n");
  return -1;
}
i=atoi(argv[1])
__asm{
  mov eax,dword ptr [i]
  push eax
  call sum            //返回sum(i)的值保存在eax寄存器
  add esp,4           //栈平衡
  mov ecx,0x000a6425  //构造字符串%:25h d:64h \n:0ah 
  //低地址存低位
  push ecx            //字符串"%d\n"存储在栈上
  mov ecx,esp         //ecx记录了字符串在栈上的地址
  push eax  //参数2:sum(i)的值
  push ecx  //参数1:"%d\n"字符串地址
  call printf//printf("%d\n",sum(i))
  add esp,12
}
}

转载于:https://www.cnblogs.com/ailx10/p/5251613.html

有关病毒方面课程的实验内容 实验一 PE结构分析及DOS病毒感染与清除 一、实验目的 1.熟悉PE文件结构 2.掌握DOS系统下.EXE文件病毒感染与清除方法 二、实验要求 1.实验之前认真准备,编写好源程序。 2.实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。 3.不断积累程序的调试方法。 三、实验内容 1)手工或编程从user32.dll中获得MessageBoxA的函数地址; 2)查阅资料,结合第2章内容,根据PE结构编写一个小的工具软件,或者用PE Explorer、PEditor、Stud_PE等工具软件查看、分析PE文件格式。针对PE文件格式,请思考:Win32病毒感染PE文件,须对该文件作哪些修改; 3)示例病毒exe_v感染原理及其清除 实验二 Windows病毒分析与防治 一、实验目的 掌握Windows病毒感染与清除方法 二、实验要求 1.实验之前认真准备,编写好源程序。 2.实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。 3.不断积累程序的调试方法。 三、实验内容 1)编程实现Immunity病毒; 2)修复被Immunity感染的host_pe.exe 3)编程实现脚本病毒或宏病毒,参考相关章节爱虫/梅丽莎病毒;修复被上述病毒感染的系统 实验三 蠕虫/木马的分析与防治 一、实验目的 掌握蠕虫/木马感染与清除方法 二、实验要求 1.实验之前认真准备,编写好源程序。 2.实验中认真调试程序,对运行结果进行分析,注意程序的正确性和健壮性的验证。 3.不断积累程序的调试方法。 三、实验内容 1)实现“冲击着清除者”病毒; 2)实现远程线程动态嵌入技术的木马并验证; 3)实现木马远程监视/控制; 4)修复被上述病毒感染的系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值