sub_140001000 으로 분기합니다.
for 문으로 0x18 까지 i를 증가시키면서 반복합니다.
byte_140003000[i] 의 값이 a1 + i (2*i) ^ i 를 했을 때 같은 값이 아니라면 return합니다.
byte_140003000가 어떤 값을 갖고있는지 보면, 다음과 같습니다.
0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66,
0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88,
0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D
그럼 이 값을 토대로 똑같이 24번 돌려서 되는 값을 찾으면 됩니다.
#include <stdio.h>
int main() {
unsigned char byte_140003000[] = {
0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66,
0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88,
0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D
};
unsigned char result[24];
for (int i = 0; i < 0x18; i++) {
result[i] = byte_140003000[i] - (i*2) ^ i;
}
printf("data: ");
for (int i = 0; i < 24; i++) {
printf("%c", result[i]);
}
}
DH{I_am_X0_xo_Xor_eXcit1ng}