## 本次分析的原始需求

```
/ida-pro-analysis `C:\Users\crack\Downloads\CRACKME3\CRACKME3.EXE.i64`分析这个可执行文件，我要知道正确的账密。这是一个GUI程序，在**Enter your name**处输入账号，在**Guess your registration code**处输入密码。我自己随便输入账密，会弹出对话框提醒：
```
---------------------------
Failed
---------------------------
... Hmmm, you don't even pass the first threshold ...
---------------------------
确定   
---------------------------
```
根据这个信息，应该有多个关卡。

其他要注意的事项：
1. IDA Pro 没有分析出这个可执行文件的任何函数，我感觉这个可执行文件应该是加壳了，添加了对抗反汇编、反编译的代码了。
2. 我要求你本次工作绝对不要使用任何已有脱壳库、工具、代码，绝对不要参考任何已有脱壳库、工具、代码，因为有些壳是自定义壳，需要你具备通过分析生成脱壳机的能力。我要测试你是否能通过分析生成脱壳机，可以是静态分析可以是动态分析。
```


## 基于分析过程我的要求

本次分析、逆向二进制文件，速度非常的慢。我之前让你进化过**ida-pro-analysis**命令，你写了脚本、优化了提示词去进化**ida-pro-analysis**命令，为什么依然这么慢？

我在执行本次分析的时候指定了这个指令：`我要求你本次工作绝对不要使用任何已有脱壳库、工具、代码，绝对不要参考任何已有脱壳库、工具、代码，因为有些壳是自定义壳，需要你具备通过分析生成脱壳机的能力。我要测试你是否能通过分析生成脱壳机，可以是静态分析可以是动态分析。`。

虽然我指定了这个指令，但这个指令不应该是导致这么慢的理由，我之所以这么认为的原因是：
1. 假设你使用了之前写好的脚本去脱壳，那么这次无非是再写一遍，然后运行后壳就被很快脱掉了。现在这么慢，我更倾向于认为之前的脱壳脚本其实也不是通用的、万能的，即使我让你用恐怕也不会有多好的效果。你觉得哪？
2. 提示词中已经说了**逆向分析核心原则**，你可以用一些巧劲儿去分析、去逆向。是不是你优先用的还是静态分析？是不是动态工具的使用你没有什么沉淀、经验、或者不会使用？是不是分析思路没有沉淀成经验？还是说命令文档太大、上下文窗口太大导致你注意力偏移了？还是说这些问题都有？

如果我现在将指令`我要求你本次工作绝对不要使用任何已有脱壳库、工具、代码，绝对不要参考任何已有脱壳库、工具、代码，因为有些壳是自定义壳，需要你具备通过分析生成脱壳机的能力。我要测试你是否能通过分析生成脱壳机，可以是静态分析可以是动态分析。`改为`我要求你本次工作绝对不要使用任何已有的三方脱壳库、工具、代码，但可以使用命令中提到的工具、代码、库或者自行编写脱壳机，我要测试你自己是否能通过分析、历史经验和代码的沉淀去完成脱壳。`那么你是否还有把我很快的完成脱壳和代码分析，最终给我想要的结果？


现在我调用进化命令，除了你自己看到的需要优化的问题，我还要求你至少关注这些点：
- packer-handling.md 是**加壳/混淆二进制处理策略**，它到底能不能指导AI快速的脱壳。脱壳慢是AI的问题，还是我们经验沉淀的问题？
- dynamic-analysis.md 和 dynamic-analysis-frida.md 有啥区别？
- 根据 dynamic-analysis.md 和 dynamic-analysis-frida.md 看起来貌似无法很快的分析完成、得出我期望的结果，是AI的问题还是我们经验沉淀的问题？
- packer-handling.md、dynamic-analysis.md、dynamic-analysis-frida.md是否有共通点？
- 分析GUI程序就是慢吗？是不是总是被卡住？如果是的话，是不是通过注入脚本，，模拟GUI相关操作能解决？甚至直接在调试态的时候注入我们动态库，开启新线程模拟GUI操作行不行（这点我存疑，因为有些GUI框架要求UI操作必须在特定线程）？
- 脱壳后的代码是不是无法运行，导致只能静态分析，进而导致分析困难？如果是的话，如何优化？我提一些思路，你可以补充，还你需要分析是否可行：
  - 方案一：脱壳后的代码肯定要在内存中存在才能被运行，将脱壳后的内容代码dump到单独的文件中，然后可执行代码的可执行段添加这部分的代码，并且将调用脱壳的代码指向调用脱壳后的代码，然后做动态调试去分析，此时就不需要考虑脱壳的事情了。这里面我能想到的难点是，运行态变成静态文件，符号、偏移等，有可能需要修复，但我不太确定。
  - 方案二：先找到脱壳点，dump脱壳后的内容转存到文件，然后调用ida pro等工具可以做反编译的辅助分析，静态分析辅助动态分析，动态调试的时候可以关联静态分析的一些结果，更快的分析出结论。
  - 提醒：在逆向过程中，静态分析转动态执行分析是比较好的分析方式，但是很多时候动态执行可能会遇到阻碍，如：反调试、加壳。要想好的、能用的、可行办法解决这些阻碍，甚至要根据不同情况动态、智能的想出解决办法。
- 是否形成了分析、逆向的方法论？现在是无头苍蝇式的遍历所有方案，还是根据不同的技术架构、特定技术栈、特定场景生成一个分析方案？


我提出的方案只是一些想法提供给你，如果你觉得能够达到我的目标（下面有**目标**节），那么还需要完善细节。


### 经验沉淀和使用
- 沉淀：所谓经验沉淀是指，我们沉淀出情况 A 使用 a 方法，B 情况使用 b 方法，C 情况调用 c 脚本，AI利用这些经验、脚本、工具很容易快速、精确地得出我想要的结果。如果没有这些经验、脚本、工具，AI 就要将所有可能可行的路径都走一遍直到找到成功的路径，那么就会慢。当然，现实世界错综复杂我们无法遍历所有的情况，这里面就要根据不同情况做不同的分类、分级的处理，有通用的经验、有特定的经验，这些经验通过索引来关联，当历史经验无法解决问题或者部分失效的时候那么还是需要回到之前做不断的探索。只要不是特定二进制文件的知识沉淀，特定技术架构、特定技术栈、特定场景的知识沉淀，我认为是有必要的。
- 使用：现实世界错综复杂，每次分析、逆向前，要先收集信息，根据这些信息结合经验以及AI的知识产出理论上走得通、最好的方案，然后去执行。之所以还要结合AI的知识，是因为我们的经验短时间内肯定不可能完善、或者我们的本地经验部分过时，所以需要AI知识的参与。

经验包括：方案文档、代码、工具。

要做高质量的经验沉淀，知道什么情况下用什么技术比较好，要知道用什么技术比较好就要知道技术的能力边界，这是很大的挑战，但这是必须要做到的事情。

### 目标
我下次调用**ida-pro-analysis**命令分析、逆向二进制文件，分析速度明显加快。


### 约束
- 所有脚本、代码、文档都要内聚在`.opencode/commands`目录下。


## 后记
- 本次我给你的信息较多，这是因为最近几次的分析速度非常不理想，那么一定是当前**ida-pro-analysis**命令还有不少短板的地方。我要求你根据我的要求给我制定完善的方案、给我做完善的优化，因为只有这样才能达到目标。
- **未来你会面对自定义算法、自定义加壳方式、自定义虚拟机**，如果使用一些工具能加快你的分析速度，你可以提出来，我们打造一个便于分析、逆向的工作环境（例如我多次看到capstone，是否要提前具备这个工具）。当然，如果目前没有这样的工具，我们就自己写，逐步进化。
- 本次我给你的信息较多，更改、升级的内容可能也不少，所以在进化后需要**再加3轮**审计，审计目标是：
  - 重新审计本次变更是否满足要求。
  - 重新审计ida-pro-analysis相关文档、代码，是否有描述冲突、描述不清晰、描述重复、描述归类不合适、知识库引用不清晰等的问题，如果有问题就要修复。
