Skip to content

Rev Lab 2: CrackMe & Malware

本节 Lab 由以下两部分组成,整体超出 100 分的部分将作为 bonus

Task 1

Part 1 (60 points)

课上我们讲解了如何把 010 Editor 变为 Freeware,并和大家一起分析了校验序列号的核心函数 sub_14036E740 0x9C 这个分支的情况 , 附件 keygen.py下载链接)为对应的 python 注册机代码。请回顾课上讲解的内容,参考给出的注册机代码,尝试编写 0xAC 分支的注册机(不限编程语言),并提交 Writeup,要求包含:

  1. 分析 010 Editor 的流程及 patch 的过程和原理 (10 points)
  2. 如何定位到校验序列号的核心函数以及我们期望这个函数返回什么 (10 points)
  3. 分析校验序列号算法的流程,阐述输入的 Name Password 是如何被校验的 (20 points)
  4. 你最终编写的 0xAC 分支注册机代码以及在 010 Editor 中成功注册的截图 (20 points)

Tips

  1. 编写注册机的思路并不同于解 CTF 题目,答案并不是唯一的,你只需要找到满足条件的一种输入即可
  2. 0x9C 分支的情况注册成功后 010 Editor 运行截图如下:

success

Part 2 (50 points)

题目下载链接

课上我们分析了使用 Go 语言编写的低配版“熊猫烧香”,请回顾课上讲解的内容,回答以下问题:

  1. 在程序启动后,它使用了什么方法来隐藏自己? (10 points)
  2. 该软件是如何实现持久化的(10 points)
  3. 程序对哪些目标文件有恶意行为,分别做了什么操作(15 points)
  4. 如果我的系统不幸被该软件感染,应该如何恢复?请编写一个恢复程序,对编程语言不做要求 (15 points)

Tips:

  1. 为了减少大家在逆向过程中的工作量,这里给出部分程序源码:
func walkDisk(root string) error {
    homeDir, err := os.UserHomeDir()
    checkError(err)
    skipPath := homeDir + `\AppData\Local\Microsoft\Windows`

    // Try to be nice XD
    if root == `C:` {
        root = homeDir
    }
    stack := []string{root}

    for len(stack) > 0 {
        dir := stack[len(stack) - 1]
        stack = stack[:len(stack) - 1]

        entries, err := os.ReadDir(dir)
        if err != nil {
            continue
        }

        for _, entry := range entries {
            if entry.IsDir() {
                subDir := dir + `\` + entry.Name()
                if strings.HasPrefix(subDir, skipPath) {
                    continue
                }
                stack = append(stack, subDir)
            } else {
                path := dir + `\` + entry.Name()
                if err := infectSignleFile(path); err != nil {
                    continue
                }
            }
        }
    }

    return nil
}
  1. 我们在课上讲解了 Go 语言在 1.17 版本后更新了调用约定(Calling Convention),通过编写简单的示例程序并使用编译选项 -gcflags "-N -l" 关闭优化即可在 IDA 中观察函数的参数及返回值是通过哪些寄存器传递的。在分析时,也不要忘记结合动态调试,同时确保调试环境在虚拟机中。

Task 2

题目下载链接

非常友好的一个程序,甚至感觉不到丝毫威胁,完成该题目并提交:

  1. flag 内容及 Writeup (40 points)

Hint

  1. 该题目的年代较为久远,如果无法运行(如提示缺少 dll)也无需担心,静态分析就足以解出这道题目
  2. 你可能需要了解一下什么是壳,这个程序用到了什么壳进行保护,以及是否有对应的脱壳工具
  3. 也许需要一点巧思,了解一下 Windows 可执行程序文件格式(PE 格式)中有没有特殊的部分