Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <bitset>
- using namespace std;
- string toBinary(int n)
- {
- string r;
- r = bitset<8>(n).to_string();
- return r;
- }
- int get_y(unsigned char tar) {
- int rez;
- string bin = toBinary(int(tar));
- string binrez = "";
- for (int i = 0; i < 4; i++)
- {
- binrez += bin[i];
- }
- rez = stoi(binrez, nullptr, 2);
- return rez;
- }
- int get_x(unsigned char tar) {
- int rez;
- string bin = toBinary(int(tar));
- string binrez = "";
- for (int i = 4; i < 8; i++)
- {
- binrez += bin[i];
- }
- rez = stoi(binrez, nullptr, 2);
- return rez;
- }
- int main() {
- unsigned char regs[16];
- char mem[256];
- unsigned char inp;
- int flag = 0, flag_pab = 0, hm = 0, poz = 0, len, clen = 0;
- ifstream prog("decryptor.bin", ios::binary|ios::ate);
- ifstream inpf("q1_encr.txt", ios::ate);
- ofstream out("rez.txt");
- len = inpf.tellg();
- hm = prog.tellg();
- prog.seekg(0);
- inpf.seekg(0);
- prog.read((char*)&mem[0], hm);
- cout << len << endl;
- for (int i = 0; i < hm; i+=2)
- {
- switch (mem[i])
- {
- case 0x01: {cout << "0x01" << endl; regs[int(mem[i + 1])]++; }break;
- case 0x02: {cout << "0x02" << endl; regs[int(mem[i + 1])]--; }break;
- case 0x03: {cout << "0x03" << endl; regs[get_x((mem[i + 1]))] = regs[get_y((mem[i + 1]))]; }break;
- case 0x04: {cout << "0x04" << endl; regs[0] = mem[i + 1]; }break;
- case 0x05: {cout << "0x05" << endl; regs[int(mem[i + 1])] = int(regs[int(mem[i + 1])]) << 1; }break;
- case 0x06: {cout << "0x06" << endl; regs[int(mem[i + 1])] = int(regs[int(mem[i + 1])]) >> 1; }break;
- case 0x07: {cout << "0x07" << endl; i = i + int(mem[i + 1])-2; }break;
- case 0x08: {cout << "0x08" << endl; if (flag == 1) i = i + int(mem[i + 1])-2; }break;
- case 0x09: {cout << "0x09" << endl; if (flag == 0) i = i + int(mem[i + 1])-2; }break;
- case 0x0A: {cout << "0x0A" << endl; if (flag_pab == 1) i = i + int(mem[i + 1]-2); }break;
- case 0x0B: {cout << "0x0B" << endl; cout << "Baigtas darbas" << endl; i = hm; }break;
- case 0x0C: {cout << "0x0C" << endl; regs[get_x((mem[i + 1]))] += int(regs[get_y((mem[i + 1]))]); }break;
- case 0x0D: {cout << "0x0D" << endl; regs[get_x((mem[i + 1]))] -= int(regs[get_y((mem[i + 1]))]); }break;
- case 0x0E: {cout << "0x0E" << endl; regs[get_x((mem[i + 1]))] ^= int(regs[get_y((mem[i + 1]))]); }break;
- case 0x0F: {cout << "0x0F" << endl; regs[get_x((mem[i + 1]))] |= int(regs[get_y((mem[i + 1]))]); }break;
- case 0x10: {cout << "0x10" << endl; inpf >> noskipws >> inp; regs[int(mem[i + 1])] = inp; clen++; if (clen == len) flag_pab = 1; }break;
- case 0x11: {cout << "0x11" << endl; out << regs[int(mem[i + 1])]; }break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement