1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| unsigned __int64 __usercall sub_401C4C@<rax>(__int64 a1@<rbx>, __int64 a2@<r12>, double a3@<xmm0>, double a4@<xmm1>, double a5@<xmm2>, double a6@<xmm3>, double a7@<xmm6>, double a8@<xmm7>)
{
double v8; // xmm4_8
double v9; // xmm5_8
unsigned __int64 result; // rax
signed int v11; // [rsp+0h] [rbp-40280h]
signed int v12; // [rsp+4h] [rbp-4027Ch]
signed int v13; // [rsp+8h] [rbp-40278h]
int v14; // [rsp+Ch] [rbp-40274h]
char v15[262760]; // [rsp+10h] [rbp-40270h]
unsigned __int64 v16; // [rsp+40278h] [rbp-8h]
__int64 savedregs; // [rsp+40280h] [rbp+0h]
v16 = __readfsqword(0x28u);
v11 = 0;
v12 = 0;
v13 = 0;
v14 = 0;
while ( v11 != 1 || v12 != 1 )
{
if ( v13 > 131376 )
v11 = 1;
else
v15[v14++] = byte_4A80C0[v13];
if ( v13 > 131376 )
v12 = 1;
else
v15[v14++] = byte_4C8200[v13];
++v13;
}
sub_401B55(v15, 97, a1, a2, a3, a4, a5, a6, a7, a8);
result = __readfsqword(0x28u) ^ v16;
if ( result )
sub_4405C0(a1, (__int64)&savedregs, a2, a3, a4, a5, a6, v8, v9, a7, a8);
return result;
}
__int64 __usercall sub_401B55@<rax>(const char *a1@<rdi>, char a2@<sil>, __int64 a3@<rbx>, __int64 a4@<r12>, double a5@<xmm0>, double a6@<xmm1>, double a7@<xmm2>, double a8@<xmm3>, double a9@<xmm6>, double a10@<xmm7>)
{
unsigned int fd; // ST18_4
unsigned int v11; // ST1C_4
size_t count; // ST00_8
double v13; // xmm4_8
double v14; // xmm5_8
__int64 result; // rax
double v16; // xmm4_8
double v17; // xmm5_8
char *v18; // [rsp+20h] [rbp-30h]
__int64 v19; // [rsp+28h] [rbp-28h]
char filename[8]; // [rsp+39h] [rbp-17h]
unsigned __int64 v21; // [rsp+48h] [rbp-8h]
__int64 savedregs; // [rsp+50h] [rbp+0h]
v21 = __readfsqword(0x28u);
strcpy(filename, "/tmp/fooXXXXXX");
fd = mkostemp((__int64 *)filename, 1, (const char *)a4, a5, a6, a7, a8, a9, a10);
chmod(filename, 320LL);
v11 = open(filename, 0, a2);
unlink(filename);
write(fd, a1, count);
close(fd);
v18 = filename;
v19 = 0LL;
fexecve(v11, (const char *)&v18, qword_4EB7C0, a3, (const char *)&savedregs, a5, a6, a7, a8, v13, v14, a9, a10);
result = sub_4093A0("ERROR");
if ( __readfsqword(0x28u) != v21 )
sub_4405C0(a3, (__int64)&savedregs, a4, a5, a6, a7, a8, v16, v17, a9, a10);
return result;
}
|