2023年解题领红包之二
本帖最后由 nanaqilin 于 2024-2-18 16:38 编辑首先说明一下,本人逆向方面菜的不行,写的不明白的地方,多多包含吧,第一次写也没有啥经验,希望管理多多指点本来想直接用OD来找到结果的,结果发现字符是一个一个进行计算出来再比较的,并且程序自己还没有保存计算好的字符串
* 思路一,改程序,让程序算好的code保存到内存里(这方面不是我太菜,感觉比较费时间,所以本人并没有这么实现
* 思路二,读代码,编写一段代码,将加密的字符串还原(这方面我感觉适合我)
二话不多说,上反编译的图
首先程序第一个关键信息是判长度必需是39,第二个关键信息是取表dword_43F000中的数据,进行右移两位,然后与我们的code进行比较
那我们来跟一下table中的字符,双击dword_43F000,下图即为表中的原始数据
由于是4字节的数据,我们需要整理一下,看着就比较清晰了,dword_43f000右键点array
默认即可,点OK,就是我们要的数据了
我们把表中的数据copy出来,自己写个代码将数据都右移两位,就是我们要的code了
我的代码如下:
```cpp
#include <cstdint>
#include <fstream>
#include <iostream>
#include <string>
int main(int argc, char *argv[]) {
std::ifstream fread;
fread.open("code.txt", std::ios::in);
if (fread.is_open()) {
char rdata;
while (fread.getline(rdata, sizeof(rdata))) {
std::string data(rdata);
int val = std::stoi(data, nullptr, 16);
val >>= 2;
printf("%c", val);
}
std::cout << std::endl << "end decode" << std::endl;
fread.close();
}
return 0;
}
```
```code.txt
198h
1B0h
184h
19Ch
1ECh
0D4h
0C8h
140h
1BCh
128h
1A4h
194h
0C8h
0C0h
0C8h
0CCh
120h
184h
1C0h
1C0h
1E4h
138h
194h
1DCh
164h
194h
184h
1C8h
1F4h
```
以下是我的运行结果,bingo
我们把表中的数据copy出来,自己写个代码将数据都右移两位,就是我们要的code了
选中该变量后按下 Shift+E 有惊喜,可以直接导出为 C 的数组表示形式,不需要写出到文件。 这么难,我放弃还是非常明智的 漁滒 发表于 2024-2-17 11:20
现在就能发了吗?不是元宵之后才可以发吗?
我这是去年的,不是今年的,今年的比这个要简单 zhuminjie 发表于 2024-2-18 08:19
菜鸟太菜,学不会,呜呜
你得静下心来坚持下去,多练习就会有收获 最后多出来一张图片,不知道咋回事,重新编缉也看不到最后的那张图片{:1_907:} 现在就能发了吗?不是元宵之后才可以发吗? sadffg 发表于 2024-2-17 11:19
这么难,我放弃还是非常明智的
今年的初级题还是挺简单的,你可以试一下 nanaqilin 发表于 2024-2-17 11:16
最后多出来一张图片,不知道咋回事,重新编缉也看不到最后的那张图片
图片附件里可以删掉 正己 发表于 2024-2-17 11:38
图片附件里可以删掉
OK啦,谢谢版主 实惠啊,感谢分享!很有用 第一眼看到以为给今年的发出来了{:301_986:}