signed
int
__usercall sub_47B430@<eax>(
int
ebx0@<ebx>,
int
a2@<edi>,
int
a3@<esi>,
int
a1)
{
if
( sub_40A580(ebx0, a2, a3, a1, (char
*
*
)&
input
, &input_len) ) √
/
/
3339
解base64,刚解密出来是正常的
{
if
( sub_455F80((
int
)
input
, input_len) ) (
"4234567890"
,
10
) Crc32(
"前len-4位"
)
=
=
后
4
位 √
{
if
( sub_458D90(ebx0, a2,
input
, input_len
-
4
, (
int
)&v2357, (
int
)&v2356) )
/
/
字符串中有
2
个长度标记位,校验通过,√
{
if
( sub_474170(
*
v2357,
*
v2356) )
/
/
对
2
个dword进行除法校验,满足的情况总共有
2
*
4
=
8
种
{
v1378
=
v2357
+
8
;
/
/
5153
.text:
004870AC
这里就要篡改一次数据
for
( i169
=
0
; i169 < v1379;
+
+
i169 )
{
v5
=
16
;
*
(_BYTE
*
)(i169
+
v1378) ^
=
*
(&v1593
+
i169
%
0x10u
);
}
sub_4E1620(
*
(_DWORD
*
)v2357, v2357
+
8
,
*
(unsigned __int16
*
)(v2357
+
4
));
/
/
5298
将
+
8
数组进行xor操作
sub_4E1620(
*
(_DWORD
*
)v2356, v2356
+
8
,
*
(unsigned __int16
*
)(v2356
+
4
));
/
/
5453
v1360
=
v2357
+
8
;
/
/
5602
for
( i214
=
0
; i214 < v1361;
+
+
i214 )
{
v5
=
16
;
*
(_BYTE
*
)(i214
+
v1360) ^
=
*
(&v1577
+
i214
%
0x10u
);
/
/
arr1比arr2多
2
次xor
}
if
( sub_45F640(
(
int
)(v2357
+
2
),
*
((unsigned __int16
*
)v2357
+
2
),
(
int
)(v2356
+
2
),
*
((unsigned __int16
*
)v2356
+
2
)) )
{
sub_4E81E0(ebx0, a2, v5, v2359);
result
=
1
;
}
else
result
=
0
;
}
else
result
=
0
;
}
else
result
=
0
;
}
else
result
=
0
;
}
else
result
=
0
;
}