Code:
int global6 = -1;
__size32 global32 = 0x44bf19b1;// 4 bytes
int global8 = 0;
int global21 = 0;
int global1 = 0xbb40e64e;
void proc2(__size32 param1, __size32 param2, __size32 param3, __size32 param4, __size32 param5);
void *proc3(int param1, __size32 param2, __size32 param3, __size32 param4);
__size32 proc4(__size32 param1);
__size32 proc5(HMODULE param1, __size32 param2, __size32 param3, __size32 param4);
void _start(int param1, int param2, __size32 param3, __size32 param4, __size32 param5, __size32 param6, __size32 param7, __size32 param8);
void proc6();
void proc7(__size32 *param1);
// address: 0x10002491
__size32 roc1(int param1, int param2, __size32 param3, __size32 param4) {
__size32 eax; // r24
int eax_1; // r24{47}
int ecx; // r25
int ecx_1; // r25{63}
int ecx_2; // r25{68}
__size32 edi; // r31
__size32 esi; // r30
int esp; // r28
union { __size32 * x173; int x174; } esp_1; // r28
__size32 *esp_3; // r28{56}
int local4; // ecx_2{99}
union { __size32 * x173; int x174; } local5; // esp{107}
esp_1 = (esp - 32);
local5 = esp;
if (global1 == 0xbb40e64e || (global1 & 0xffff0000) == 0) {
GetSystemTimeAsFileTime();
GetCurrentThreadId();
GetTickCount64();
QueryPerformanceCounter();
local5 = esp_3;
ecx = param2 ^ param1;
ecx = ecx ^ 0 ^ eax ^ eax_1;
ecx_1 = ecx ^ (esp - 8);
local4 = ecx_1;
if ((ecx ^ esp - 8) != 0xbb40e64e) {
tmp1 = (ecx ^ esp - 8) & 0xffff0000;
if (tmp1 == 0) {
eax = ecx ^ esp - 8 | 0x4711;
ecx_2 = ecx ^ esp - 8 | eax * 0x10000;
local4 = ecx_2;
}
} else {
ecx_2 = 0xbb40e64f;
local4 = ecx_2;
}
ecx_2 = local4;
global1 = ecx_2;
param3 = !ecx_2;
global32 = !ecx_2;
} else {
global32 = !global1;
}
esp = local5;
edi = *esp;
esi = *(esp + 4);
return esi; /* WARNING: Also returning: ecx := param3, edx := param4, edi := edi */
}
// address: 0x1001f6c
void proc2(__size32 param1, __size32 param2, __size32 param3, __size32 param4, __size32 param5) {
__size32 eax; // r24
__size32 *ebp_1; // r29{231}
__size32 *ebp_2; // r29{215}
__size32 *ebp_3; // r29{203}
__size32 *ebp_4; // r29{191}
int ebp_5; // r29{159}
__size32 ebx; // r27
__size32 ebx_1; // r27{213}
int ebx_2; // r27{159}
__size32 ecx; // r25
__size32 edi; // r31
__size32 edx; // r26
__size32 esi; // r30
void *esp; // r28
void *esp_1; // r28{214}
void *esp_2; // r28{202}
void *esp_3; // r28{190}
int esp_4; // r28{159}
void *esp_5; // r28{135}
int local0; // m[esp - 4]
unsigned int local1; // m[esp - 12]
__size32 *local10; // ebp_3{203}
__size32 local11; // ebx_1{213}
__size32 *local12; // ebp_2{215}
__size32 local13; // ebx_1{229}
void *local14; // esp_1{230}
__size32 *local15; // ebp_1{231}
void *local16; // esp_1{242}
__size32 *local17; // ebp_2{243}
int local2; // m[esp - 8]
__size32 local3; // m[esp - 4]{253}
__size32 local4; // m[esp - 8]{254}
unsigned int local5; // m[esp - 12]{255}
void *local6; // esp_3{190}
__size32 *local7; // ebp_4{191}
__size32 local8; // ebx_1{201}
void *local9; // esp_2{202}
esp_2 = proc3(16, param3, param4, param5); /* Warning: also results in ebp_1 */
local6 = esp_2;
local7 = ebp_1;
local9 = esp_2;
local10 = ebp_1;
local14 = esp_2;
local15 = ebp_1;
esi = 1;
*(__size32*)(ebp_1 - 28) = 1;
ebx = 0;
*(__size32*)(ebp_1 - 4) = 0;
edi = *(ebp_1 + 12);
global6 = edi;
*(__size32*)(ebp_1 - 4) = 1;
local8 = ebx;
local13 = ebx;
if (edi == 0 && *0x100040e0 == edi) {
esi = 0;
L3:
ebx_1 = local13;
esp_1 = local14;
ebp_1 = local15;
*(int*)(ebp_1 - 28) = esi;
local16 = esp_1;
local17 = ebp_1;
} else {
if (edi != 1 && edi != 2) {
L15:
ebx_1 = local8;
esp_2 = local9;
ebp_3 = local10;
*(__size32*)(esp_2 - 4) = *(ebp_3 + 16);
*(int*)(esp_2 - 8) = edi;
*(__size32*)(esp_2 - 12) = *(ebp_3 + 8);
eax = proc5(*(esp_2 - 12), *(esp_2 - 8), param1, param2); /* Warning: also results in ecx, edx, esp */
local11 = ebx_1;
local11 = ebx_1;
local12 = ebp_3;
local12 = ebp_3;
esi = eax;
*(int*)(ebp_3 - 28) = eax;
if ( !(edi != 1 || eax != 0)) {
*(__size32*)(esp_2 - 4) = *(ebp_3 + 16);
*(__size32*)(esp_2 - 8) = ebx_1;
*(__size32*)(esp_2 - 12) = *(ebp_3 + 8);
ecx = proc5(*(esp_2 - 12), *(esp_2 - 8), ecx, edx); /* Warning: also results in edx */
*(__size32*)(esp_2 - 4) = *(ebp_3 + 16);
*(__size32*)(esp_2 - 8) = ebx_1;
*(__size32*)(esp_2 - 12) = *(ebp_3 + 8);
esp = proc4(*(esp_2 - 8));
if (global21 != 0) {
*(__size32*)(esp_2 - 4) = *(ebp_3 + 16);
*(__size32*)(esp_2 - 8) = ebx_1;
*(__size32*)(esp_2 - 12) = *(ebp_3 + 8);
(*global21)(local5, local4, local3, global21, ecx, edx, ebx_1, ebp_3, eax, edi, LOGICALFLAGS32(global21), LOGICALFLAGS32(global21), LOGICALFLAGS32(global21));
local11 = ebx;
local11 = ebx;
local12 = ebp_2;
local12 = ebp_2;
}
}
ebx_1 = local11;
esp_1 = esp;
ebp_2 = local12;
local16 = esp_1;
local17 = ebp_2;
local17 = ebp_2;
local17 = ebp_2;
if ( !(edi != 0 && edi != 3)) {
*(__size32*)(esp_1 - 4) = *(ebp_2 + 16);
*(in*)(esp_1 - 8) = edi;
*(__size32*)(esp_1 - 12) = *(ebp_2 + 8);
eax = proc4(*(esp_1 - 8));
local16 = esp_5;
local16 = esp_5;
esi = esi & 0 - (0 < eax);
*(int*)(ebp_2 - 28) = esi;
if ( !(esi == 0 || global21 == 0)) {
*(__size32*)(esp_1 - 4) = *(ebp_2 + 16);
*(int*)(esp_1 - 8) = edi;
*(__size32*)(esp_1 - 12) = *(ebp_2 + 8);
(*global21)(local1, local2, local0, global21, ecx, edx, ebx_1, ebp_2, esi, edi, LOGICALFLAGS32(global21), LOGICALFLAGS32(global21), LOGICALFLAGS32(global21));
local13 = ebx_2;
local14 = esp_4;
local15 = ebp_5;
esi = eax;
goto L3;
}
}
} else {
if (global21 != 0) {
*(__size32*)(esp_2 - 4) = *(ebp_1 + 16);
*(int*)(esp_2 - 8) = edi;
*(__size32*)(esp_2 - 12) = *(ebp_1 + 8);
(*global21)(pc, 0x10003508, 16, global21, param1, param2, 0, ebp_1, 1, edi, LOGICALFLAGS32(global21), LOGICALFLAGS32(global21), LOGICALFLAGS32(global21));
local6 = esp_3;
local7 = ebp_4;
esi = eax;
*(int*)(ebp_4 28) = eax;
}
ebx_1 = ebx;
esp_3 = local6;
ebp_4 = local7;
local8 = ebx_1;
local10 = ebp_4;
local16 = esp_3;
local17 = ebp_4;
local17 = ebp_4;
if (esi != 0) {
*(__size32*)(esp_3 - 4) = *(ebp_4 + 16);
*(int*)(esp_3 - 8) = edi;
*(__size32*)(esp_3 - 12) = *(ebp_4 + 8);
eax = proc4(*(esp_3 - 8)); /* Warning: also results in esp_1 */
local9 = esp_1;
local16 = esp_1;
*(int*)(ebp_4 - 28) = eax;
if (eax != 0) {
goto L15;
}
}
}
}
esp_1 = local16;
ebp_2 = local17;
*(__size32*)(ebp_2 - 4) = ebx_1;
*(__size32*)(ebp_2 - 4) = -2;
proc6();
proc7(ebp_);
return;
}
// address: 0x100021f0
void *proc3(int param1, __size32 param2, __size32 param3, __size32 param4) {
__size32 *esp; // r28
__size32 local0; // m[esp]
*(__size32*)(esp - param1 - 12) = param2;
*(__size32*)(esp - param1 - 16) = param3;
*(__size32*)(esp - param1 - 20) = param4;
*(int*)(esp - param1 - 24) = global1 ^ (esp + 8);
*(__size32*)(esp - param1 - 28) = local0;
*(union { __size32 * x227; int x228; }*)0 = (esp - 8);
return (esp + 8);
}
// address: 0x10001d54
__size32 proc4(__size32 param1) {
__size32 eax; // r24
if (param1 != 0) {
if (param1 == 1) {
}
eax = 1;
} else {
if (global8 > 0) {
global8 = global8 - 1;
}
eax = 0;
}
return eax;
}
// address: 0x10001720
__size32 proc5(HMODULE param1, __size32 param2, __size32 param3, __size32 param4) {
__size32 ecx; // r25
__size32 edx; // r26
__size32 local4; // param3{51}
__size32 local5; // param4{52}
local4 = param3;
local5 = param4;
if (param2 == 1) {
MessageBoxW(0, 0x100031ac, 0x1000319c, 0);
DisableThreadLibraryCalls(param1);
_beginthreadex();
local4 = ecx;
local5 = edx;
}
param3 = local4;
param4 = local5;
return 1; /* WARNING: Also returning: ecx := param3, edx := param4 */
}
// address: 0x10001f49
void _start(int param1, int param2, __size32 param3, __size32 param4, __size32 param5, __size32 param6, __size32 param7, __size32 param8) {
__size32 ecx; // r25
__size32 edi; // r31
__size32 edx; // r26
__size32 esi; // r30
__size32 local2; // param4{30}
__size32 local3; // param5{31}
__size32 local4; // param7{33}
__size32 local5; // param8{34}
local2 = param4;
local3 = param5;
local4 = param7;
local5 = param8;
if (param3 == 1) {
esi = proc1(param1, param2, param4, param5); /* Warning: also results in ecx, edx, edi */
local2 = ecx;
local3 = edx;
local4 = esi;
local5 = edi;
}
param4 = local2;
param5 = local3;
param7 = local4;
param8 = local5;
proc2(param4, param5, param6, param7, param8);
return;
}
// address: 0x10002094
void proc6() {
global6 = -1;
return;
}
// address: 0x10002235
void proc7(__size32 *param1) {
__size32 ecx; // r25
__size32 local0; // m[esp]
ecx = *(param1 - 16);
*(__size32*)0 = ecx;
*(__size32*)param1 = local0;
return;
}