이름을 입력하여 이름을 가지고 시리얼을 만드는 간단한 문제이다.
IDA와 ollydbg를 보면 알 수 있듯이 for문 로직에서 나온 시리얼 값인 5B134977135E7D13을 이용해 구해주면 된다.
#include<iostream>
#include <sstream>
#include<string>
#include<vector>
using namespace std;
int main() {
string serial = "5B 13 49 77 13 5E 7D 13";
vector<string> nam;
string nam2;
istringstream iss(serial);
string str;
while (iss >> str) {
nam.push_back(str);
}
int j=1;
for (int i = 0; i < 8; i++) {
if (j >3)
j = 1;
nam2 = nam[i];
char nam = stoi(nam2, NULL, 16) ^ (16*j);
cout << nam ;
j++;
}
}
이름의 한문자씩 추출하여 의 숫자들로 xor을 하게된다.
16 32 48의 값들과 XOR을 순서대로 하나씩 한다.(ESP+ESI+0xC->16 32 48) 부분이다. (ESI가 코드의 j)
XOR암호화는 XOR을 동일하게 한번 더 하면 원본이 나오게 되므로 KEY값을 구하면된다.
K3yg3nm3
'리버싱!' 카테고리의 다른 글
방독면책-어셈블리2 (0) | 2020.01.06 |
---|---|
방독면책-어셈블리 (0) | 2020.01.06 |
google ctf-malvertising (0) | 2019.11.25 |
reversing.kr-Easy Crack (0) | 2019.07.03 |
codegate2019-the matrix (0) | 2019.02.01 |