攻防世界 reverse 进阶 APK-逆向2

本文详细介绍了使用dnSpy对.NET程序进行逆向工程的过程,包括如何读取程序资源文件,解析特定字符串并发送到指定服务器以获取Flag。同时,提供了Python重写算法及运行结果。

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

APK-逆向2 Hack-you-2014

(看名以为是安卓逆向呢0.0,搞错了吧)

程序是.net写的,直接祭出神器dnSpy

 1 using System;
 2 using System.Diagnostics;
 3 using System.IO;
 4 using System.Net.Sockets;
 5 using System.Text;
 6 
 7 namespace Rev_100
 8 {
 9     // Token: 0x02000002 RID: 2
10     internal class Program
11     {
12         // Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
13         private static void Main(string[] args)
14         {
15             string hostname = "127.0.0.1";
16             int port = 31337;
17             TcpClient tcpClient = new TcpClient();
18             try
19             {
20                 Console.WriteLine("Connecting...");
21                 tcpClient.Connect(hostname, port);
22             }
23             catch (Exception)
24             {
25                 Console.WriteLine("Cannot connect!\nFail!");
26                 return;
27             }
28             Socket client = tcpClient.Client;
29             string text = "Super Secret Key";
30             string text2 = Program.read();
31             client.Send(Encoding.ASCII.GetBytes("CTF{"));
32             foreach (char x in text)
33             {
34                 client.Send(Encoding.ASCII.GetBytes(Program.search(x, text2)));
35             }
36             client.Send(Encoding.ASCII.GetBytes("}"));
37             client.Close();
38             tcpClient.Close();
39             Console.WriteLine("Success!");
40         }
41 
42         // Token: 0x06000002 RID: 2 RVA: 0x0000213C File Offset: 0x0000033C
43         private static string read()
44         {
45             string fileName = Process.GetCurrentProcess().MainModule.FileName;
46             string[] array = fileName.Split(new char[]
47             {
48                 '\\'
49             });
50             string path = array[array.Length - 1];
51             string result = "";
52             using (StreamReader streamReader = new StreamReader(path))
53             {
54                 result = streamReader.ReadToEnd();
55             }
56             return result;
57         }
58 
59         // Token: 0x06000003 RID: 3 RVA: 0x000021B0 File Offset: 0x000003B0
60         private static string search(char x, string text)
61         {
62             int length = text.Length;
63             for (int i = 0; i < length; i++)
64             {
65                 if (x == text[i])
66                 {
67                     int value = i * 1337 % 256;
68                     return Convert.ToString(value, 16).PadLeft(2, '0');
69                 }
70             }
71             return "??";
72         }
73     }
74 }

直接相当于源码

最简单的方案就是用python开个服务:

1 import http.server
2 
3 server_address = ('127.0.0.1', 31337)
4 handler_class = http.server.BaseHTTPRequestHandler
5 httpd = http.server.HTTPServer(server_address, handler_class)
6 httpd.serve_forever()

运行程序,直接得到flag

 

用python重写算法:

 1 text='Super Secret Key'
 2 f=open(r'D:\Users\Desktop\攻防世界\re进阶\e669ad3bcd324237b73382a2bdc6e330.exe','r',encoding='unicode-escape')
 3 text2=f.read()
 4 f.close()
 5 def serch(x,text):
 6     length=len(text)
 7     for i in range(length):
 8         if x==text[i]:
 9             v=i*1337%256
10             return '%02x' % (v)
11 y=''
12 for t in text:
13     y+=serch(t,text2)
14 print('CTF{'+y+'}')

CTF{7eb67b0bb4427e0b43b40b6042670b55}

 

转载于:https://www.cnblogs.com/DirWang/p/11451283.html

### 关于 '攻防世界' 的 CTF 活动 #### 背景介绍 “攻防世界”是一个专注于网络安全竞赛的平台,提供多种类型的挑战供参赛者练习和提升技能。这些挑战通常分为多个类别,例如 Web 安全、密码学(Crypto)、逆向工程(Reverse Engineering)、取证分析(Forensics)以及杂项(Miscellaneous)。其中,“Test-flag-please-ignore” 是属于 MISC 类别的一个经典题目。 --- #### 杂项类题目概述 MISC 类型的题目往往涉及一些基础的信息处理技术,比如编码转换、数据解析等。对于 “Test-flag-please-ignore”,其核心在于 **十六进制字符串解码** 和最终 Flag 的提取过程[^1]。 --- #### 题目描述与已知条件 根据参考资料中的描述,该题目的主要操作流程如下: 1. 下载并解压缩 `misc10.zip` 文件后获得了一个 `.txt` 文本文件。 2. 文件内容显示为一段十六进制表示形式的字符串: ```plaintext 666c61677b68656c6c6f5f776f726c647d ``` 3. 初步提交此原始字符串作为 Flag 后验证失败,因此推测需要进一步处理。 4. 经过观察得知上述字符由标准 ASCII 编码范围内的数值构成 (即包含字母 A-F 及数字),可确认这是一个典型的十六进制编码格式[^2]。 --- #### 解决方案详解 为了成功获取目标 Flag,需执行以下具体步骤: 1. 使用工具或者编程手段完成从十六进制到明文字符串的转换工作。以下是 Python 实现方式的一个例子: ```python hex_string = "666c61677b68656c6c6f5f776f726c647d" decoded_flag = bytes.fromhex(hex_string).decode('utf-8') print(decoded_flag) ``` 输出结果应为预期的 Flag 值:`flag{hello_world}`[^3]。 2. 将转化后的正确答案按照指定格式输入至答题界面即可得分。 --- #### 技术要点总结 此类问题的关键点在于识别给定数据的实际含义及其可能存在的隐藏模式。在此案例中,掌握基本的数据编码知识尤为重要,尤其是熟悉如何在不同进制之间相互切换的能力。此外,利用现有的在线资源和服务也可以极大地简化手动计算的过程^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值