跟着大佬学RE(五)

后面的题几乎都是一些新东西了,感觉每个题可能都要搞好久。0——0

[GWCTF 2019]babyvm

无壳 64位elf

最后判断位置:

但感觉好像有点坑啊

嗯,应该是一个 Vm 的题,首先试试 angr ,不行再尝试解 VM

import angr
base_addr=0x400000
p=angr.Project('./babyvm',auto_load_libs=False,main_opts={"base_addr":base_addr})
init_state=p.factory.entry_state()
sm=p.factory.simgr(init_state)
sm.explore(find=base_addr+0x01081,avoid=base_addr+0x0FD6)
if sm.found:
    found_state=sm.found[0]
    flag=found_state.posix.dumps(0)
    print(flag)
else:
    raise Exception("no ")

大佬是用 angr 的 hook 来写的:

import angr

base_addr = 0x400000
project = angr.Project("attachment", 
			auto_load_libs = False,
			main_opts={"base_addr":base_addr})

@project.hook(base_addr+0x1081)
def Hook(state):
	print(state.posix.dumps(0))
	project.terminate_execution()

project.execute()

是个假flag,再回去看看

这是 switch 里的,应该是判断1 flag的长度

 wp说关键是这个:

要让 unk_202060 ==0xF4

一直往下翻,超过了16个,找到了 0xF4,下面还有数据

真正的Code 就是在 0x202180,就把 Vm_Run 中的 0x202060 patch 成 0x202180

那么 check_flag() 函数也是假的,翻一下会发现 sub_F00 应该是真正的。

也 patch 一下

烦死,keypatch 一直安装不好,各种方法都用了,还是没有显示。

按大佬说的,patch 完,直接再次运行脚本(不用改),得到真 flag

嗯,感觉这题搞的就是对 VM 的深度理解,知道哪里是关键点,最后 check_flag()真的是靠猜,真正的函数原来没有被引用。

[HDCTF2019]MFC

有个 VM 壳,百度看能不能脱,可以但很复杂

【旧文】VMProtect完美脱壳过程 - 逆向 - UzzzzZ

逆向VMP壳的基本思路-CSDN博客

先运行一下看看

控件,去 RH 看看,发现没有什么

wp是用了 xspy 这个工具 

并且他是一个 MFC程序,也是一种应用程序

帮你快速理解什么是MFC(Windows环境下)_mfc和windos-CSDN博客

MFC逆向初级研究(1)(2)-软件逆向-看雪-安全社区|安全招聘|kanxue.com

一个是窗口、消息查看分析利器:SPY++。
另一个是专门的 MFC 内部分析工具:XSPY。

还要分大小窗口

然后用 xspy

然后就要用到 MFC注入

MFC程序逆向 – 消息篇(上)+(下)_mfc42.-CSDN博客

// 1.cpp : 定义控制台应用程序的入口点。
//注意是MFC运行。

//#include "stdafx.h"
#include<stdio.h>
#include<string.h>
#include "windows.h"

int main()
{
	HWND h = FindWindowA("944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b", NULL);
	//HWND h = FindWindowA(NULL, "Flag就在控件里");
	//HWND h = FindWindowA("944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b", "Flag就在控件里");
	//这里用到两个关键函数,一个是获取窗口句柄函数,第二个就是根据句柄发送消息函数。获取句柄的FindWindowA中第一个可以传入类名,第二个可以传入标题,因为我们两个都有,所以任意一个都可以锁定程序窗口。
	if (h)
	{
		SendMessage(h, 0x464, NULL, NULL);
		//发送函数中第二个是区别其他消息的常量值,这里题目用了自定义常量值,所以我们要对应一致。
	}
	getchar();
	return 0;
}

这个要学学 Windows api,句柄之类的,先了解一下流程吧

攻防世界逆向高手题之mfc逆向-200-CSDN博客

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值