import
subprocess
import
win32api
import
win32con
def
start_suspended_process(proc_name):
creation_flags
=
0x14
process
=
subprocess.Popen(proc_name, creationflags
=
creation_flags)
print
(
"子进程已启动并挂起"
)
return
process.pid
import
ctypes
def
resume_process(pid):
try
:
kernel32
=
ctypes.WinDLL(
'kernel32'
, use_last_error
=
True
)
kernel32.DebugActiveProcess(pid)
print
(f
"进程 {pid} 已恢复."
)
except
OSError as e:
print
(f
"恢复进程时发生错误: {str(e)}"
)
printable
=
"`!\"#$%&'()*+,-./:;<=>?@[\]^_{|}~0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
import
frida, sys
number
=
102741
number
=
103833
new_number
=
0
def
is_right():
global
new_number,number
if
new_number > number:
number
=
new_number
return
True
else
:
return
False
def
on_message(message, data):
global
new_number
if
message[
'type'
]
=
=
'send'
:
print
(
"[*] {0}"
.
format
(message[
'payload'
]))
new_number
=
message[
'payload'
]
elif
message[
'type'
]
=
=
"error"
:
print
(message[
"description"
])
print
(message[
"stack"
])
print
(message[
"fileName"
],
"line:"
,message[
"lineNumber"
],
"colum:"
,message[
"columnNumber"
])
else
:
print
(message)
pass
jscode
=
open
(
"h00k.js"
,
"rb"
).read().decode()
import
subprocess
flag
=
"flag{O"
for
index
in
range
(
len
(flag),
44
):
for
i
in
printable:
process
=
subprocess.Popen(
"ezVm.exe"
,
stdin
=
subprocess.PIPE,
stdout
=
subprocess.PIPE,
stderr
=
subprocess.PIPE,
universal_newlines
=
True
)
tmp_flag
=
(flag
+
i).ljust(
43
,
"A"
)
+
"}"
print
(tmp_flag)
print
(
"try index:"
,index ,
"chr :"
,i)
session
=
frida.attach(
"ezVM.exe"
)
script
=
session.create_script(jscode)
script.on(
'message'
, on_message)
script.load()
process.stdin.write(tmp_flag)
output, error
=
process.communicate()
if
(i
=
=
'`'
):
number
=
new_number
elif
(is_right()
=
=
True
):
flag
+
=
i
print
(flag)
break
process.terminate()