逆向心法修炼之道

Minesweeper Championship Registration

提示

解题方法

  1. 下载附件文件。
  2. 密码“infected”解压缩,获得jar文件。
  3. 使用jd-gui进行反编译获得如下代码:
  4. 从反编译后的代码中可以看到需要的Flag(“[email protected]”),输入正确后提示如下:

如果输入不正确会提示如下:

告诉你下一年再来参与吧。

Ultimate Minesweeper

提示

解题方法

  1. 下载附件文件。
  2. 密码“infected”解压缩,获得exe文件。
  3. 试运行程序如下:

从运行结果看这道题是一到排雷题,每行为30个,共30行,共900个占位,其中有897个为雷区,也就是说只有三个地方为非雷区。

  1. 用IDA检测程序为net程序。

  1. 使用dnspy打开程序MainForm类的SquareRevealedCallback方法,

  1. 查看BombRevealed的实现如下:

  1. 显示的雷区数据如下:

  1. 重新运行程序,点击三个8的地方即可弹出显示Flag的对话框如下:

FLEGGO

提示

解题方法

  1. 下载附件文件。
  2. 密码“infected”解压缩,获得一个文件夹其中包含了多个文件,大小相同。
  3. 拿出一个试运行如下:

  1. IDA反编译程序,查看主函数如下:

  1. 进入到checkWithDefaultPassword函数即可看到默认要输入的密码如下:

v1 = wcscmp(this, L”IronManSucks”);     //这里有个密码,输入这个会多出Oh, hello Batman提示,还是密码无效,说明这个密码是不正确的。

  1. 查看password的赋值位置,发现是从BRICK资源中获得的。

 

  1. 解密数据的部分

 

  1. 分析相应的赋值数据结构总结如下:

  1. 编写脚本如下:

  1. 运行脚本获得flag

binstall

提示

解题方法

web2.0

提示

解题方法

 

magic

提示

解题方法

wom

提示

解题思路

 

Doogie Hacker

提示

解题方法

leet editr

提示

解题方法

textin包含在crouching_vbs_hidden_title.asm中,内容为:

golf

提示

解题方法

malware skillz

提示

解题方法

修复IAT代码如下:

DNS通道获取数据如下:

 

Suspicious Floppy Disk

提示

解题方法

1      下载附件文件。

2      解压缩文件。

密码“infected”解压缩,获得软盘镜像文件suspicious_floppy_v1.0.img。

3      基础知识

  1. Bootkit发展历史简介:eEyeBootRoot、vBootkit、Stoned Bootkit、DreamBoot等。
  2. 44Mb软盘格式。

参考:https://blog.csdn.net/guzhou_diaoke/article/details/8436037

公式:floppy_addr = (36 * ch + 18 * dh + cl – 1) * 512

  1. TMP.DAT

cx = 0x2201   dh = 0

TMP_DAT_addr = (36 * 0x22 + 18 * 0 + 0x1 – 1) * 512 = 0x99000

  1. key.dat

cx = 0x2110   dh=0x01

key_dat_addr = (36 * 0x21 + 18 * 0x01 + 0x10 – 1) * 512 = 0x98a00

cx = 0x2111   dh = 0x01

message_dat_addr = (36 * 0x21 + 18 * 0x01 + 0x11 – 1) * 512 = 0x98c00

4       加载mbr启动

  1. 复制mbr代码到0x600空间,执行0x662(sub_7c62)代码。
  2. 加载hook代码,hook int 0x13 中断,加载解密原始的mbr,并执行。
    1. Hook int 0x13中断。
    2. 加载原始mbr(0xa00),解密后执行原始的mbr。

https://github.com/angea/corkami/blob/master/misc/mbr/mswin41.asm

https://thestarman.pcministry.com/DOS/WinXPSD.md5deep.TXT

5      启动系统执行程序

引导启动mswin4.1系统,执行AUTOEXEC.BAT à infohelp.exe。

  1. exe 接受用户输入的数据key。
  2. 将用户输入的key写入到dat,写入长度固定为0x200。

写key.dat的软盘位置:

  1. 读取dat的数据输出到屏幕上;(This is not the message you are looking for.)。

读message.dat的软盘位置:

6      hook代码解读

  1. 写dat的操作(文件位置cx=0x2110)执行hook代码,将输入的数据复制到内核空间。
  2. 读message.dat的操作(文件位置cx=0x2111)执行hook代码,检查密码是否正确。

  1. 密码校验代码的实现(NICK RULES虚拟机),通过重写虚拟机引擎,输出操作日志。
    1. 虚拟机引擎。
    2. 虚拟机核心操作。

7       虚拟机日志分析

输入日志量比较多,分析后,可以发现其内部嵌套了另外一层虚拟机.

这里没有必要再去重新第二层虚拟机,直接在第一层基础之上,给关键操作下断点,解析第二层虚拟机的真实数据操作。

通过对比可以发现日志量经过优化后明显减少。

8       日志分析

分析日志和测试发现:

  1. 检查输入key中是否包含@,否则不进行数据校验。
  2. 对输入的数据每两位进行hash计算(即任何不同输入的计算结果都有唯一性),最终结果与程序中存储的正确值比较。
  3. 输入数据长度为30字节,包含15组正确值。
  4. 输入数据@字符之前的数据和,会影响计算比较的结果。
  5. flag的已知部分@flare-on.com。
  6. 获取sum正确的值(@字符之前数据的和),下面提供两种思路。
    1. 利用@后面的已知字符对(flare-on.com)来爆破sum值(6组),获取正确的sum值为0x55e。
    2. 计算获取正确的sum。

  1. 按照每两位进行爆破,在最终数据比较点下断点,若输入数据运算的hash值与程序中保存的正确hash值都匹配成功(9组),则爆破成功。
  2. 9组hash值完全匹配,既爆破成功。

注意:由于sum参与了运算,爆破过程中要通过给最终比较的两个值,同时减去当前的sum和正确的sum来保证比较结果的有效性)

9       瑕不掩瑜:BUG

由于最终的结果校验机制不完善,导致程序的密码不唯一,在输入非正确flag的情况下,程序输出结果为“Password Matched”。

但是通过分析数据,可以排除其他组答案。

结局

挑战赛共计12道题目,历时40天时间。当所有的挑战通过后会提示如下:

也就是填写领奖信息了。到这里感谢所有参与的人,同时也希望在本次的挑战赛中收获到的不仅仅是前所未知的知识,更重要的是再次对自己的挑战与超越,未来将会越来越好,期待下一年的更上一层楼。

源链接

Hacking more

...