main함수
sub_140001000이 관건이겠디..

16+8=24글자 반복하는 거 같은데
byte_140003000 글자가 i^(a1+i)+2*i가 되어야 함
a1은 main함수에서 scan 받은 거
| .data:0000000140003000 byte_140003000 db 49h, 60h, 67h, 74h, 63h, 67h, 42h, 66h, 80h, 78h, 2 dup(69h) |
|---|
| .data:0000000140003000 ; DATA XREF: sub_140001000+28↑o |
| .data:000000014000300C db 7Bh, 99h, 6Dh, 88h, 68h, 94h, 9Fh, 8Dh, 4Dh, 0A5h, 9Dh |
| .data:0000000140003017 db 45h, 8 dup(0) |
byte_140003000이렇게 생김
대충 파이썬 코드 제작
-
b=[0x49,0x60,0x67,0x74,0x63,0x67,0x42,0x66,0x80,0x78,0x69,0x69,0x7b,0x99,0x6d,0x88,0x68,0x94,0x9f,0x8d,0x4d,0x0a5,0x9d,0x45] for i in range(24): a=(b[i]-2*i) print(a)
결과
73 94 99 110 91 93 54 88 112 102 85 83 99 127 81 106 72 114 123 103 37 123 113 23
이 값들이 *(unsigned __int8 *)(a1 + i)^i 의미

아니 왜 파이썬 코드가 안 짜져…
ㅎㅎ 라이트업 봤다
#include <stdio.h>
using namespace std;
int main() {
unsigned char chars[] = { 0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78,
0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45, 0x00 };
for (int i = 0; i < 24; i++) {
printf("%c", ((chars[i] - (2 * i)) ^ i));
}
return 0;
}
