简单审查程序结构十分简单,替换 get_number_from_string 为实际的数字之后喂给 GPT 求解:
中途提供了 QNX 系统中 /etc/rc.d 存在的信息,之后就全交给 LLM 做了
(最近发现如果要求LLM分析自己的输出,比如包含复杂度之类的信息,LLM往往可以给出质量更高的代码,本次对话也如是)
671K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0K9r3q4@1k6%4m8@1i4K6u0W2j5$3!0E0i4K6u0r3M7$3S2S2M7X3g2Q4x3V1j5$3z5r3q4X3z5r3b7^5x3g2)9J5k6r3t1J5y4U0S2Q4x3X3b7^5x3o6p5I4i4K6u0V1z5r3u0X3k6W2)9J5k6o6R3&6x3U0l9#2j5U0u0S2x3X3f1@1j5R3`.`.
直接跑 LLM 写出的程序就可以得到全部 470 组解:
#include <stdio.h>
static const char *hexd = "0123456789abcdef";
static void try_bit(int bit) {
int d1_candidates[2], d10_candidates[2], np = 0;
for (int d1 = 0; d1 < 16; ++d1) {
int d10 = 8*d1 - (58 - bit);
if (0 <= d10 && d10 < 16) {
d1_candidates[np] = d1;
d10_candidates[np] = d10;
if (++np == 2) break;
}
}
if (np == 0) {
printf("[bit=%d] 无解(8*d1 - d10 = %d 在 0..15 范围内不可达)。\n", bit, 58 - bit);
return;
}
long found = 0;
for (int p = 0; p < np; ++p) {
int d1 = d1_candidates[p];
int d10 = d10_candidates[p];
for (int d3 = 0; d3 < 16; ++d3) {
int d4 = 34 - d1 - d3;
if ((unsigned)d4 > 15u) continue;
for (int d6 = 0; d6 < 16; ++d6) {
for (int d7 = 0; d7 < 16; ++d7) {
int d8 = 34 - d6 - d7;
if ((unsigned)d8 > 15u) continue;
int d5 = 34 - d8 - d10;
if ((unsigned)d5 > 15u) continue;
int d2 = 34 - d4 - d7;
if ((unsigned)d2 > 15u) continue;
int d9 = 34 - d3 - d5;
if ((unsigned)d9 > 15u) continue;
char key[32];
key[0]=hexd[d1]; key[1]=hexd[d2]; key[2]=hexd[d3]; key[3]=hexd[d4]; key[4]=hexd[d5];
key[5]=hexd[d6]; key[6]=hexd[d7]; key[7]=hexd[d8]; key[8]=hexd[d9]; key[9]=hexd[d10];
key[10]='a'; key[11]='s'; key[12]='a'; key[13]='s'; key[14]=0;
printf("[bit=%d] %s\n", bit, key);
++found;
}
}
}
}
if (!found) {
printf("[bit=%d] 遍历完候选也没解。\n", bit);
} else {
printf("[bit=%d] 共找到 %ld 把 key。\n", bit, found);
}
}
int main(void){
try_bit(0);
try_bit(0x80);
return 0;
}
#include <stdio.h>
static const char *hexd = "0123456789abcdef";
static void try_bit(int bit) {
int d1_candidates[2], d10_candidates[2], np = 0;
for (int d1 = 0; d1 < 16; ++d1) {
int d10 = 8*d1 - (58 - bit);
if (0 <= d10 && d10 < 16) {
d1_candidates[np] = d1;
d10_candidates[np] = d10;
if (++np == 2) break;
}
}
if (np == 0) {
printf("[bit=%d] 无解(8*d1 - d10 = %d 在 0..15 范围内不可达)。\n", bit, 58 - bit);
return;
}
long found = 0;
for (int p = 0; p < np; ++p) {
int d1 = d1_candidates[p];
int d10 = d10_candidates[p];
for (int d3 = 0; d3 < 16; ++d3) {
int d4 = 34 - d1 - d3;
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!