软件安全复习押题

Table of Contents

  1. 填空题
    1. 大概率必考
      1. SDl开发模式
      2. 计算硬盘容量
      3. 主引导扇区的组成
    2. 其他
      1. 什么是软件安全
      2. 系统监控工具
      3. 流氓软件
  2. 简答题
    1. 大概率必考
      1. 画出堆栈示意图
      2. 三年来和软件缺陷、漏洞相关的重大安全事件
      3. 可信计算思路
      4. 计算机的启动过程
      5. 当前操作系统的移动引导形式及其区别
      6. 用户模式、内核模式
      7. 检测调试器是否存在
    2. 其他
      1. 主引导分区、扩展分区、逻辑分区的区别
      2. Win32病毒是怎样被运行的
      3. 缓冲区溢出漏洞原理
      4. 什么是SQL注入
      5. 病毒检测技术
      6. 隐藏技术,隐藏XX的思路
  3. 综合题
    1. 虚实地址转换
      1. Info
      2. Target
      3. Process
      4. Reference
    2. 远程线程插入
      1. Info
      2. Target
      3. Process
      4. Reference

填空题

大概率必考

SDl开发模式

计算硬盘容量

主引导扇区的组成

其他

什么是软件安全

系统监控工具

流氓软件

简答题

大概率必考

画出堆栈示意图

三年来和软件缺陷、漏洞相关的重大安全事件

可信计算思路

计算机的启动过程

当前操作系统的移动引导形式及其区别

用户模式、内核模式

检测调试器是否存在

其他

主引导分区、扩展分区、逻辑分区的区别

Win32病毒是怎样被运行的

缓冲区溢出漏洞原理

什么是SQL注入

病毒检测技术

隐藏技术,隐藏XX的思路

综合题

虚实地址转换

Info

  • 实际的虚拟地址,实际的寄存器CR3

Target

  • 手工将虚拟地址转为实际的物理地址

Process

  1. 理论依据

    软件安全复习押题

    软件安全复习押题

  2. 整体思路

    • 首先分解题目中已给的虚拟地址,按照10、10、12的位数进行分解组合,得到各处索引,再根据已知的cr3,即页目录表基址进行加法运行,得到页表项地址,再得到页面物理地址,最后根据页内偏移得到实际的物理地址。
  3. 配置环境

    • WIndbg双机调试环境配置
    • 调试模式下禁用PAE

    软件安全复习押题

  4. 输入标志信息

    • 打开notepad,输入信息

    软件安全复习押题

  5. 查看进程信息

    软件安全复习押题

    • 得到:DirBase: 3c3ae000
  6. 切换到当前进程

    软件安全复习押题

    软件安全复习押题

    • cr3=3c3ae000
  7. 确定要转换的虚拟地址

    软件安全复习押题

    • 要转换的虚拟地址:0017ddd0
  8. 分解

    kd> .formats 0x17ddd0
    Evaluate expression:
     Hex:     0017ddd0
     Decimal: 1564112
     Octal:   00005756720
     Binary:  00000000 00010111 11011101 11010000
     Chars:   ....
     Time:    Mon Jan 19 10:28:32 1970
     Float:   low 2.19179e-039 high 0
     Double:  7.72774e-318
    
    • PDE:0000 0000 00 =0x0

    • PTE:0101 1111 01 =0x17d

    • 页内:1101 11010000 =0xdd0

  9. 转换

    软件安全复习押题

    • 得到:3ba00867,舍去后三位,得到3ba00000,查看3ba00000+0x17d*4

    软件安全复习押题

    • 得到:00ee5867,舍去后三位,得到00ee5867,查看00ee5000+0xdd0

    软件安全复习押题

    • 地址的后三位为权限等属性,需要置为0.
  10. 验证

    软件安全复习押题

Reference

远程线程插入

Info

  • 给出一些关键的信息,pid,dll路径,关键部分代码等

Target

  • 完善代码或编写代码

Process

  1. 配置环境 Win7 X86 + 关闭PAE

  2. 新建Win32 DLL项目

    软件安全复习押题

    软件安全复习押题

    #include <windows.h>
    #include <tchar.h>
    
    BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, PVOID fImpLoad) {
    
       if (fdwReason == DLL_PROCESS_ATTACH) {
         MessageBox(NULL,"HACK_HENU",TEXT("hack by jovy-rtt"),MB_OK);
       }
       return(TRUE);
    }
    
  3. 新建WIn32 控制台应用程序

    软件安全复习押题

    软件安全复习押题

    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <string.h>
    #include <malloc.h>
    
    int main()
    {
      HANDLE hProcess = NULL, hThread = NULL;
      //此处为notepad的PID,先运行notepad,再手工填入
      DWORD dwProcessId = 2444;
      PSTR pszLibFileRemote = NULL;
      //此处需要修改路径信息
      char szLibFile[]="C:\\Users\\Administrator\\Desktop\\Sample1\\MyInjlib\\Debug\\TipInject.dll";
    
      // Get a handle for the target process.
      hProcess = OpenProcess(
             PROCESS_QUERY_INFORMATION |   // Required by Alpha
             PROCESS_CREATE_THREAD     |   // For CreateRemoteThread
             PROCESS_VM_OPERATION      |   // For VirtualAllocEx/VirtualFreeEx
             PROCESS_VM_WRITE,             // For WriteProcessMemory
             FALSE, dwProcessId);
    
      int cch = 1 + strlen(szLibFile);
      int cb  = cch * sizeof(char);
    
        // Allocate space in the remote process for the pathname
      pszLibFileRemote = (PSTR)
        VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
    
      // Copy the DLL's pathname to the remote process' address space
      WriteProcessMemory(hProcess, pszLibFileRemote, szLibFile, cb, NULL);
    
      // Get the real address of LoadLibraryA in Kernel32.dll
        PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
             GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryA");
    
      // Create a remote thread that calls LoadLibraryA(DLLPathname)
        hThread = CreateRemoteThread(hProcess, NULL, 0,
             pfnThreadRtn, pszLibFileRemote, 0, NULL);
    
      // Wait for the remote thread to terminate
        WaitForSingleObject(hThread, INFINITE);
    
    
      return 0;
    }
    
  4. 打开notepad,并获取PID,手工修改PID

    软件安全复习押题

    软件安全复习押题

  5. 开始编译、组建、逐步调试

    软件安全复习押题

  6. 调试到最后,显示插入成功界面

    软件安全复习押题

Reference

软件安全-实验三

《软件调试》-第22章

上一篇:多线程编程(9) - 认识等待函数 WaitForSingleObject


下一篇:delphi xe10.4 破解