南邮CTF——逆向

本文分享了RE(逆向工程)初学者挑战赛的六道题目解答过程,包括Hello RE、ReadAsm2、Py交易、WxyVM及WxyVM2的详细解题思路与技巧,涵盖Python反编译、IDA逆向编程、复杂VM逆向等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题:Hello,RE!

所以:这道题的flag是flag{Welcome_To_RE_World!}

 

 第二题:ReadAsm2

一篇写的很好的博客:https://blog.youkuaiyun.com/xiangshangbashaonian/article/details/78881498

 

第三题:Py交易

使用pyc反编译工具:https://tool.lu/pyc/ 得到py源码。

在notepad++上编写py逆向代码

import base64
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
s=base64.b64decode(correct)                 #Base64解密
print(s)
b=''
for i in range(len(s)):                      
   x=(ord(s[i])-16)^32                      #将代码倒过来写
   b+=chr(x)
print(b)

运行得:nctf{d3c0mpil1n9_PyC}

 只有Python3的好像运行不了。

 

第四题:WxyVM

用IDA打开 ,main()函数,sub_4005B6() 改变了输入的flag

进入sub_4005B6()

(回到Main()函数)之后,改变了的604B80(flag),又与601060处的比较,如果相等则为正确。

所以,入手点就是 601060处的数据 和 6010C0处的数据 。

解题思路:把 sub_4005B6() 逆向编程,代入 601060 和 6010C0 处数据 编译后 输出。。。

分析程序,发现需要14997Byte的数据(只玩过几行程序的我 惊讶。。。),于是博客一波,Get到 IDC编程 (IDA里的内置脚本语言),可以直接访问地址。

IDC编程推荐博客 —— http://www.cnblogs.com/gwind/p/8250842.html

Shift+F2 打开IDC脚本编译框。 

附:ZSky-T  这位的源码 和 flag:nctf{Embr4ce_Vm_j0in_R3}

#include <idc.idc>
static main()
{
	auto v0,result,i,v3;
	auto addr_fuzhu = 0X6010C0;
	for(i = 14997; i >= 0 ; i -= 3)
	{
		v0 = Byte(addr_fuzhu + i);
		v3 = Byte(addr_fuzhu + i + 2);
		result = v0;
		
		if(v0 == 1)
		{
			result = Byte(addr_fuzhu + i +1);
			PatchByte(0X601060 + result*4 ,(Byte(0X601060 + result*4) - v3));
		}
		if(v0 == 2)
		{
			result = Byte(addr_fuzhu + i + 1);
	        PatchByte(0X601060 + result*4 , (Byte(0X601060 + result*4) + v3));
		}
		if(v0 == 3)
		{
			result = Byte(addr_fuzhu + i + 1);
			PatchByte(0X601060 + result*4, (Byte(0X601060 + result*4) ^ v3));
		}
		if(v0 == 4)
		{
			result = Byte(addr_fuzhu + i + 1);
			PatchByte(0X601060 + result*4, (Byte(0X601060 + result*4) / v3));
		}
		if(v0 == 5)
		{
			result = Byte(addr_fuzhu + i + 1);
			PatchByte(0X601060 + result*4, (Byte(0X601060 + result*4) ^ Byte(0X601060 + 4*v3)));
		}
	}
	for(i=0 ; i<24 ; i++)
	{
		Message("%c",Byte(0X601060 + i * 4));
	}
}

另一种解法:https://blog.youkuaiyun.com/tu_siji/article/details/80220307  把数据提取出来存放在文件里,再写代码

 

第五题:maze

 

 

第六题:WxyVM2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值