import
idaapi
import
idautils
import
idc
import
binascii
import
string
def
dec_name(
str
):
str
key
=
binascii.a2b_hex(
'0702050003'
)
keylen
=
len
(key)
str
=
binascii.a2b_hex(
str
)
strlen
=
len
(
str
)
de_str
=
''
for
i
in
range
(
0
,strlen):
de_str
+
=
chr
((
ord
(key[i
%
keylen])^
ord
(
str
[i]))&
0xff
)
return
de_str
def
getint(
str
):
pos
=
0
for
i
in
range
(
0
,
len
(
str
)):
if
(
str
[
0
:i
+
1
].isdigit()):
pos
=
i
+
1
else
:
if
pos>
0
:
return
pos
return
0
def
getsysm(
str
):
rep_str
=
[]
if
(
str
[
0
:
3
]
=
=
'_ZN'
):
i
=
3
while
i<
len
(
str
):
pos
=
getint(
str
[i:])
if
pos<
=
0
:
break
;
pre_len
=
str
[i:i
+
pos]
int_len
=
string.atoi(pre_len)
ba_str
=
str
[i
+
pos:i
+
pos
+
int_len]
if
(ba_str[
0
:
4
]
=
=
'BAGA'
):
dec_str
=
dec_name(ba_str[
4
:])
else
:
i
+
=
int_len
+
len
(pre_len)
continue
rep_str
+
=
[[pre_len
+
ba_str,
"%d%s"
%
(
len
(dec_str),dec_str)]]
i
+
=
int_len
+
len
(pre_len)
for
i
in
rep_str:
str
=
str
.replace(i[
0
],i[
1
])
return
str
else
:
return
None
funlist
=
list
(idautils.Entries())
for
i
in
funlist:
str
=
getsysm(i[
3
])
if
str
:
idc.MakeNameEx(i[
2
],
str
,idc.SN_NOWARN)