本帖最后由 nanaqilin 于 2024-2-18 16:38 编辑
首先说明一下,本人逆向方面菜的不行,写的不明白的地方,多多包含吧,第一次写也没有啥经验,希望管理多多指点本来想直接用OD来找到结果的,结果发现字符是一个一个进行计算出来再比较的,并且程序自己还没有保存计算好的字符串
* 思路一,改程序,让程序算好的code保存到内存里(这方面不是我太菜,感觉比较费时间,所以本人并没有这么实现
* 思路二,读代码,编写一段代码,将加密的字符串还原(这方面我感觉适合我)
二话不多说,上反编译的图
首先程序第一个关键信息是判长度必需是39,第二个关键信息是取表dword_43F000中的数据,进行右移两位,然后与我们的code进行比较
那我们来跟一下table中的字符,双击dword_43F000,下图即为表中的原始数据
由于是4字节的数据,我们需要整理一下,看着就比较清晰了,dword_43f000右键点array
默认即可,点OK,就是我们要的数据了
我们把表中的数据copy出来,自己写个代码将数据都右移两位,就是我们要的code了
我的代码如下:
#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[512];
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
|