12#21

   我努力想,也许是想把你忘记,也许是想把你记起。

   无论怎么不经意,总是会想你。

   无望的蔓延。

   好几次忍不住想给你电话,那个烂熟于心的号码,可是谁知道你还在用么。卑微的心,在这夭折。

   那份最初的美好,都已涣散,我都记不清你的容颜。

   岁月堪扰。

   一切都会很好。

   我只是习惯了对你的想及念。

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
C:\Users\zrc\Desktop>python 99.py 原始字符数: 2721 字符统计: Counter({'哈': 1143, '基': 852, '米': 726}) 尝试映射组合 #1: {'哈': 0, '基': 1, '米': 2} 字节分布直方图: 0: ############################ (47) 1: ######################################## (66) 2: #################### (33) 3: ################################################## (82) 4: ##################### (36) 5: ################## (31) 6: #################### (33) 7: ################### (32) 8: ########## (17) 9: ####################################### (65) 10: ############## (24) 11: ########################## (43) 12: ################## (31) 13: ######## (14) 14: ########### (19) 15: ############## (23) 16: ########################## (43) 17: ############### (25) 18: ############################# (49) 19: ####### (12) 20: ################### (32) 21: ########################## (44) 22: ######### (15) 23: ########### (19) 24: ############ (21) 25: ################### (32) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_1.bin (大小: 907字节) 尝试映射组合 #2: {'哈': 0, '基': 2, '米': 1} 字节分布直方图: 0: ############################ (47) 1: #################### (33) 2: ######################################## (66) 3: #################### (33) 4: ########## (17) 5: ################### (32) 6: ################################################## (82) 7: ################## (31) 8: ##################### (36) 9: ############################# (49) 10: ################### (32) 11: ####### (12) 12: ############ (21) 13: ########### (19) 14: ################### (32) 15: ########################## (44) 16: ########### (19) 17: ######### (15) 18: ####################################### (65) 19: ########################## (43) 20: ############## (24) 21: ############## (23) 22: ############### (25) 23: ########################## (43) 24: ################## (31) 25: ########### (19) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_2.bin (大小: 907字节) 尝试映射组合 #3: {'哈': 1, '基': 0, '米': 2} 字节分布直方图: 0: ######## (14) 1: ################## (31) 2: ########### (19) 3: ############## (24) 4: ####################################### (65) 5: ########################## (43) 6: ########################## (43) 7: ############## (23) 8: ############### (25) 9: ##################### (36) 10: ################################################## (82) 11: ################## (31) 12: ######################################## (66) 13: ############################ (47) 14: #################### (33) 15: ################### (32) 16: #################### (33) 17: ########## (17) 18: ######### (15) 19: ########################## (44) 20: ########### (19) 21: ####### (12) 22: ############################# (49) 23: ################### (32) 24: ################### (32) 25: ############ (21) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_3.bin (大小: 907字节) 尝试映射组合 #4: {'哈': 1, '基': 2, '米': 0} 字节分布直方图: 0: ########### (19) 1: ############ (21) 2: ################### (32) 3: ################### (32) 4: ############################# (49) 5: ####### (12) 6: ########### (19) 7: ########################## (44) 8: ######### (15) 9: ########## (17) 10: #################### (33) 11: ################### (32) 12: #################### (33) 13: ############################ (47) 14: ######################################## (66) 15: ################## (31) 16: ################################################## (82) 17: ##################### (36) 18: ############### (25) 19: ############## (23) 20: ########################## (43) 21: ########################## (43) 22: ####################################### (65) 23: ############## (24) 24: ########### (19) 25: ################## (31) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_4.bin (大小: 907字节) 尝试映射组合 #5: {'哈': 2, '基': 0, '米': 1} 字节分布直方图: 0: ######## (14) 1: ########### (19) 2: ################## (31) 3: ########################## (43) 4: ############### (25) 5: ############## (23) 6: ############## (24) 7: ########################## (43) 8: ####################################### (65) 9: ######### (15) 10: ########### (19) 11: ########################## (44) 12: ################### (32) 13: ########### (19) 14: ############ (21) 15: ####### (12) 16: ################### (32) 17: ############################# (49) 18: ##################### (36) 19: ################## (31) 20: ################################################## (82) 21: ################### (32) 22: ########## (17) 23: #################### (33) 24: ######################################## (66) 25: #################### (33) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_5.bin (大小: 907字节) 尝试映射组合 #6: {'哈': 2, '基': 1, '米': 0} 字节分布直方图: 0: ########### (19) 1: ################### (32) 2: ############ (21) 3: ########### (19) 4: ######### (15) 5: ########################## (44) 6: ################### (32) 7: ####### (12) 8: ############################# (49) 9: ############### (25) 10: ########################## (43) 11: ############## (23) 12: ########### (19) 13: ######## (14) 14: ################## (31) 15: ########################## (43) 16: ############## (24) 17: ####################################### (65) 18: ########## (17) 19: ################### (32) 20: #################### (33) 21: ################## (31) 22: ##################### (36) 23: ################################################## (82) 24: #################### (33) 25: ######################################## (66) 熵值: 4.5880 bits/byte 典型熵值参考: - 英文文本: 约 4.7 bits/byte - 加密数据: 约 7.5-8.0 bits/byte - 压缩数据: 约 6.5-7.5 bits/byte 已保存到 mapping_6.bin (大小: 907字节) ⚠️ 未直接找到flag,建议: 1. 检查字节分布直方图,寻找异常模式 2. 检查所有保存的.bin文件是否有可识别文件头 3. 尝试手动分析偏移解码的结果 4. 使用 CyberChef (在线工具) 分析二进制文件 访问: https://gchq.github.io/CyberChef 下一步呢
10-07
<think>根据之前的运行结果,所有映射组合得到的字节数据熵值都约为4.5880 bits/byte,接近英文文本的熵值(约4.7 bits/byte),说明这些数据很可能就是英文文本,只是没有直接显示出flag。我们需要尝试将字节数据解码为文本。 由于熵值表明是英文文本,我们可以尝试直接将每个字节解释为ASCII字符。但注意到在之前的代码中,我们已经尝试了偏移解码(偏移64和96),但没有成功。因此,我们需要更系统地尝试所有可能的偏移量(即所有可打印ASCII字符的范围)。 另外,由于每个映射组合生成的字节数据长度都是907字节,并且熵值相似,我们需要对每个映射组合的字节数据尝试解码为字符串,并搜索包含"flag"或"ctf"关键词的文本。 改进方案: 1. 尝试所有可打印ASCII偏移(32到126)进行解码,而不仅仅是64和96。 2. 由于可能不是简单的偏移,而是替换表或Base64编码,我们可以检查数据是否为Base64编码(通过熵值和字符集判断)。 3. 或者,数据可能是经过ROT系列(如ROT13)编码的文本,但ROT通常用于字母,而这里是字节数据。 然而,考虑到数据量不大(907字节),我们可以尝试直接打印每个映射组合的字节数据为字符串(使用ASCII解码),但注意非打印字符会导致乱码。 我们可以尝试以下步骤: a) 将字节数据转换为字符串,使用ASCII解码并忽略错误,然后搜索"flag"或"ctf"。 b) 如果发现乱码,则尝试不同的编码(如UTF-8、ISO-8859-1等)。 c) 尝试Base64解码:因为熵值在4.5左右,如果是Base64编码的英文文本,其熵值会略高于原始文本(但Base64编码后的数据熵值通常在5-6之间,而这里4.5880更接近原始文本,所以Base64可能性不大)。 但根据熵值,我们更倾向于数据已经是原始文本(或接近原始文本)。因此,我们可以打印每个映射组合解码后的文本片段(如前100个字符)来观察。 修改代码:在每一个映射组合中,尝试用ASCII解码整个字节数据,并打印前200个字符,同时搜索关键词。 具体修改如下: 在每一个映射组合的循环内,添加: try: text = bytes_data.decode(&#39;ascii&#39;) print("ASCII解码文本片段:", text[:200]) if &#39;flag&#39; in text or &#39;ctf&#39; in text: print("发现包含flag关键词的文本!") # 或者更精确的搜索 if &#39;flag{&#39; in text or &#39;ctf{&#39; in text: print("发现flag结构!") except UnicodeDecodeError: print("无法用ASCII解码,尝试UTF-8...") try: text = bytes_data.decode(&#39;utf-8&#39;) print("UTF-8解码文本片段:", text[:200]) if &#39;flag&#39; in text or &#39;ctf&#39; in text: print("发现包含flag关键词的文本!") except: print("UTF-8解码失败。") 但是,为了避免错过,我们也可以直接搜索字节中的flag模式(如b&#39;flag{&#39;)之前已经做过,但可能因为编码问题而没有出现。现在既然熵值很低,文本特征明显,我们也可以直接输出文本。 然而,之前已经尝试过偏移解码,这次我们尝试直接解码。 由于所有映射组合的熵值都一样,说明映射顺序不影响数据的随机性,但会影响文本的可读性。因此,其中一个映射组合应该会得到可读的文本。 我们修改代码,在每个映射组合中,除了输出直方图和熵值,还要输出文本片段(使用ASCII和UTF-8尝试)。 代码修改如下: 在每一个映射组合的循环内,在计算熵值之后,添加文本解码和搜索: # 尝试ASCII解码 try: decoded_text = bytes_data.decode(&#39;ascii&#39;) print(f"ASCII解码文本(前100个字符): {decoded_text[:100]}") # 搜索flag for keyword in [&#39;flag{&#39;, &#39;FLAG{&#39;, &#39;ctf{&#39;, &#39;CTF{&#39;]: if keyword in decoded_text: start = decoded_text.index(keyword) end = decoded_text.find(&#39;}&#39;, start) + 1 flag = decoded_text[start:end] print(f"🔥 发现flag: {flag}") found_flag = True break except UnicodeDecodeError: print("ASCII解码失败(非ASCII字符),尝试Latin-1...") try: decoded_text = bytes_data.decode(&#39;latin-1&#39;) print(f"Latin-1解码文本(前100个字符): {decoded_text[:100]}") for keyword in [&#39;flag{&#39;, &#39;FLAG{&#39;, &#39;ctf{&#39;, &#39;CTF{&#39;]: if keyword in decoded_text: start = decoded_text.index(keyword) end = decoded_text.find(&#39;}&#39;, start) + 1 flag = decoded_text[start:end] print(f"🔥 发现flag: {flag}") found_flag = True break except Exception as e: print(f"Latin-1解码失败: {e}") 注意:由于之前没有发现flag模式在字节中出现,现在通过文本字符串搜索可能更容易。 另外,考虑到可能有多字节编码,我们也可以尝试UTF-8。 但是,如果上述尝试都不成功,我们还可以尝试将字节数据视为Base64编码,然后解码。但熵值不太支持,不过也可以试一下。 我们可以添加: import base64 try: base64_decoded = base64.b64decode(bytes_data) # 然后对base64_decoded重复上述解码过程 except: pass 由于时间关系,我们先尝试直接文本解码。 完整修改后的代码(只针对文本解码部分)如下: 注意:为了节省时间,我们只对当前映射组合进行文本解码,一旦发现可读文本就停止。 考虑到我们已经有6个二进制文件,也可以单独分析这些文件。但我们修改代码,在程序中直接进行文本解码尝试。 由于原始输出很长,我们只显示前100个字符。 我们重新运行修改后的代码。 但是,如果重新运行整个脚本时间较长,也可以先手动检查一下保存的.bin文件。 例如,在命令行可以使用: type mapping_1.bin # Windows cat mapping_1.bin # Linux 但二进制文件直接输出到终端可能会乱码。可以使用文本编辑器打开这些文件,尝试不同的编码。 不过,我们还是修改代码,在程序中自动尝试解码。 修改后的完整代码: 注意:由于之前已经保存了二进制文件,我们在程序中直接进行解码尝试。 以下是修改后的代码(仅显示修改和增加的部分): </think>根据您的输出结果(所有映射组合的熵值均为 4.5880 bits/byte),这表明数据特征高度一致且符合英文文本特征。以下是下一步的详细分析方案: ### 下一步分析策略 #### 1. **文本解码与分析** 由于熵值表明数据可能是英文文本,但字节值范围在 0-255,需要尝试不同的解码方式: ```python # 在每个映射组合的循环中添加以下代码 # 放在熵值计算之后 # 尝试ASCII解码(过滤非可打印字符) try: ascii_decoded = &#39;&#39;.join(filter(lambda x: 32 <= ord(x) <= 126, (chr(b) for b in bytes_data))) if &#39;flag&#39; in ascii_decoded or &#39;ctf&#39; in ascii_decoded: print(f"ASCII解码发现关键词: {ascii_decoded[:100]}...") except: pass # 尝试LATIN-1解码 try: latin_decoded = bytes_data.decode(&#39;latin-1&#39;) if any(kw in latin_decoded.lower() for kw in [&#39;flag&#39;, &#39;ctf&#39;]): print(f"LATIN-1解码结果: {latin_decoded[:100]}...") except UnicodeDecodeError: pass # 尝试UTF-8解码 try: utf8_decoded = bytes_data.decode(&#39;utf-8&#39;) if any(kw in utf8_decoded.lower() for kw in [&#39;flag&#39;, &#39;ctf&#39;]): print(f"UTF-8解码结果: {utf8_decoded[:100]}...") except UnicodeDecodeError: pass ``` #### 2. **频率分析辅助解码** 基于字节频率分布,尝试映射到英文文本: ```python # 频率映射函数 def frequency_decode(data): """基于英文频率特征解码""" # 英文文本频率排序 (e, t, a, o, i, n...) common_chars = &#39; etaoinshrdlcumwfgypbvkxjqz&#39; # 获取数据中最常见的字节值 sorted_bytes = [b for b, _ in Counter(data).most_common()] # 创建映射表 mapping = {} for i, byte_val in enumerate(sorted_bytes): if i < len(common_chars): mapping[byte_val] = common_chars[i] else: mapping[byte_val] = &#39;?&#39; # 不常见字符标记 # 应用映射 return &#39;&#39;.join(mapping.get(b, &#39;.&#39;) for b in data) # 在每个映射组合的循环中添加 freq_decoded = frequency_decode(bytes_data) if any(kw in freq_decoded for kw in [&#39;flag&#39;, &#39;ctf&#39;]): print(f"频率解码线索: {freq_decoded[:100]}...") ``` #### 3. **文件头分析自动化** 检测常见文件格式的魔数(magic numbers): ```python def detect_file_type(data): """自动检测常见文件格式""" magic_numbers = { b&#39;\x89PNG&#39;: &#39;PNG image&#39;, b&#39;\xFF\xD8\xFF&#39;: &#39;JPEG image&#39;, b&#39;PK\x03\x04&#39;: &#39;ZIP archive&#39;, b&#39;%PDF&#39;: &#39;PDF document&#39;, b&#39;\x1F\x8B\x08&#39;: &#39;GZIP archive&#39;, b&#39;BM&#39;: &#39;BMP image&#39;, b&#39;RIFF&#39;: &#39;WAV audio&#39;, } for magic, file_type in magic_numbers.items(): if data.startswith(magic): return file_type return &#39;Unknown&#39; # 在每个映射组合的循环中添加 file_type = detect_file_type(bytes_data[:8]) print(f"文件类型检测: {file_type}") ``` #### 4. **二进制模式搜索** 如果以上方法无效,可能是二进制格式数据包含隐藏信息: ```python # 搜索特定的二进制模式 def find_binary_patterns(data): """查找可能的flag隐藏模式""" patterns = [ b&#39;\x66\x6C\x61\x67&#39;, # &#39;flag&#39; in hex b&#39;\x46\x4C\x41\x47&#39;, # &#39;FLAG&#39; b&#39;\x63\x74\x66&#39;, # &#39;ctf&#39; b&#39;\x43\x54\x46&#39;, # &#39;CTF&#39; ] for pattern in patterns: index = data.find(pattern) if index != -1: context = data[max(0, index-10):min(len(data), index+20)] hex_str = &#39; &#39;.join(f&#39;{b:02X}&#39; for b in context) print(f"发现模式 {pattern} 在位置 {index}: {hex_str}") return True return False # 在每个映射组合的循环中添加 if find_binary_patterns(bytes_data): print("⚠️ 发现二进制flag模式,需要进一步分析") ``` ### 推荐执行流程 1. 将上述代码片段整合到您的脚本中 2. 重新运行程序:`python 99.py` 3. 重点关注: - 解码后文本中的"flag"或"ctf"关键词 - 频率解码后的可读文本 - 文件类型检测结果 - 二进制模式位置 ### 备选深度分析方案 如果上述方法仍未找到flag,考虑以下高级分析: ```python # 1. XOR密钥分析 for xor_key in range(1, 256): xor_data = bytes(b ^ xor_key for b in bytes_data) if b&#39;flag&#39; in xor_data or b&#39;ctf&#39; in xor_data: print(f"XOR解密密钥 {xor_key}: {xor_data[:50]}...") # 2. Base64编码检测 try: import base64 base64_decoded = base64.b64decode(bytes_data) if len(base64_decoded) > 0: print(f"Base64解码后长度: {len(base64_decoded)}字节") # 可以递归应用之前的分析方法 except: pass # 3. 文件结构分析 if file_type == &#39;ZIP archive&#39;: print("尝试解压ZIP文件内容:") import zipfile with open(&#39;temp.zip&#39;, &#39;wb&#39;) as f: f.write(bytes_data) with zipfile.ZipFile(&#39;temp.zip&#39;) as z: z.extractall(&#39;extracted&#39;) print(f"解压文件: {z.namelist()}") ``` ### 关键分析建议 1. **重点关注字节值分布**: - 在您的输出中,所有映射组合都显示字节值集中在 0-25 范围 - 这暗示数据可能不是原始二进制,而是经过编码的文本 - 尝试将字节值偏移 +65(转换为 A-Z) 2. **手动检查 mapping_1.bin**: ```bash hexdump -C mapping_1.bin | head -n 20 ``` 查找以下常见模式: - `66 6C 61 67` (flag) - `25 50 44 46` (PDF) - `50 4B 03 04` (ZIP) - `89 50 4E 47` (PNG)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值