首页
社区
课程
招聘
[原创]2026第2题wp
发表于: 2026-8-11 22:27 103

[原创]2026第2题wp

2026-8-11 22:27
103

技术方案:IDA动态调试子进程,断点打在python解释器input处,dump出PyObject进行反编译


基本流程

  1. exe程序执行

  2. 生成临时文件python313解释器

  3. python业务代码


分步骤拆解:

题目.ext => sub_7FF70DF940E0

主程序加载python解释器之后,发现C:目录下生成临时文件。断点不再阻塞,主逻辑进入子进程。


python313.dll => sub_7FF97F592350

IDA加载python313.dll,并attach到子进程后,断点往上追堆栈,找到python313相关segment。字符串输入发生在sub_7FF97F592350中


python313.dll => 7FF97F592A79

可以看到这里的v23 = PyUnicode_Decode(v49, v56, const_utf8, const_surrogateescape),是把输入的字符串转为python对象


python313.dll => 7FF97F597738

回答解释器层, PyEval_EvalFrameDefault中的v195 = v193(v194, v1024, v188);是在执行python的input

断点锚定在这个函数,IDAPython dump出 pyc文件:

import idc
import idaapi

def dump_pyc():
rdx = idc.get_reg_value("RDX")
print(f"[*] RDX (Args Array) at: {hex(rdx)}")
pycode_type = idc.get_name_ea_simple("PyCode_Type")
if pycode_type == idc.BADADDR:
print("[-] 找不到 PyCode_Type 符号,请确保 IDA 识别了 DLL 导出表")
return
code_obj = 0
for i in range(0, 0x1000, 8):
addr = rdx - i
try:
f_exec = idc.get_qword(addr)
if f_exec > 0x10000:
ob_type = idc.get_qword(f_exec + 8)
if ob_type == pycode_type:
print(f"[*] 找到 Frame Header: {hex(addr)}")
print(f"[*] 找到目标 PyCodeObject: {hex(f_exec)}")
code_obj = f_exec
break
except:
pass

if not code_obj:
print("[-] 未能在栈上找到 PyCodeObject")
return

marshal_func = idc.get_name_ea_simple("PyMarshal_WriteObjectToString")
idc.SetType(marshal_func, "void* __fastcall PyMarshal_WriteObjectToString(void* obj, int version);")
print("[*] 正在调用 PyMarshal_WriteObjectToString...")
bytes_ptr = idaapi.Appcall.PyMarshal_WriteObjectToString(code_obj, 4)
if not bytes_ptr:
print("[-] Marshal 序列化失败")
return


bytes_ea = bytes_ptr.value
ob_size = idc.get_qword(bytes_ea + 0x10)
print(f"[*] 序列化数据大小: {ob_size} bytes")
pyc_data = idc.get_bytes(bytes_ea + 0x20, ob_size)
header = b'\xcb\x0d\x0d\x0a' + (b'\x00' * 12)

with open("dump-biz.pyc", "wb") as f:
f.write(header + pyc_data)

dump_pyc()





[招生]科锐逆向工程师培训(2026年11月13日实地,远程教学同时开班, 第57期)

最后于 9小时前 被逆向大聪明编辑 ,原因:
上传的附件:
收藏
点赞 ・0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回