pyd逆向处理

news/2025/10/26 17:54:31/文章来源:https://www.cnblogs.com/msjs/p/19167090

一,初查:

1.查版本

先用die或者ida或者010查看pyd对应的版本号

假如版本不对的话是不能运行的

2.查函数和参数

可以使用 python自带的help()dir()函数,查看里面有什么函数或者参数

二,静态分析

通过查字符串可以找到这样函数的结构:
image

PyLong_FromLong()是固定数据

后面那个基地址加偏移是函数的位置

可以先像这样记录下来,以便以后查询或者猜测数据

29:0
30:1
31:2
32:4
33:5
.......

通过查字符串还能找到这样的结构

image

最底下的return里的函数就是这个名字函数的具体逻辑

然后自己分析就行了

三,动调

首先我们要先写一个py脚本引入pyd

然后引入os和sys库

之后使用print(sys.executable) print(os.getpid()) 加载解释器和进程pid

再之后使用input暂停终端

在IDA中选择Local Windows debugger

再点击Debugger,选择attath to process

搜索你刚刚得到的pid,选择那个程序,就可以附加上,然后动调了

例如

import rand0m
import sys
import os
print(sys.executable)
print(os.getpid())
flag = input("Please input: ")
if(rand0m.check(flag)):print("Congrats! Flag is: flag{"+flag+"}") 
else: print("Wrong! Try again!")

rand0m就是pyd库

输出

PS D:\下载文件\ctf\cina_24> py -3.12 a.py
D:\app\python\python.exe
31628
Please input:

在此时打开IDA,依照上面的步骤,附加id搜索31628然后附加就能动调pyd了

四,frida

这里的代码来自于https://imconfident11.github.io/2025/07/15/pyd/

我们需要按照上面的流程获取pid

然后使用下面的模板来运行,里面的脚本名字和pid都需要自己手动改

import frida
import sys
import timewith open("a.js", encoding="utf-8") as f:#读取脚本的名字,需要自己改jscode = f.read()def on_message(message, data):print("[*]", message)def main():try:device = frida.get_local_device()target = 40836#pid,需要自己改try:pid = int(target)session = device.attach(pid)except ValueError:session = device.attach(target)print(f"[*] Attached to {target}")script = session.create_script(jscode)script.on('message', on_message)script.load()print("[*] Script loaded. Monitoring Python operations...")print("[*] Press Ctrl+C to stop and analyze.\n")try:while True:time.sleep(1)except KeyboardInterrupt:print("\n[*] Stopping trace and analyzing...")try:# 尝试调用 stop() 函数script.exports.stop()except Exception as e:print(f"[!] Error during stop: {e}")finally:# 确保资源被清理script.unload()session.detach()print("[*] Cleanup completed")except KeyboardInterrupt:print("\n[*] Exiting...")except Exception as e:print(f"[-] Error: {e}")if __name__ == "__main__":main()

js 脚本

一般都是hook cpython的库,例如python312.dll python311.dll,关于Cpython有什么数值

然后对里面的数值操作运算做hook,值得注意的是python长整型和大整数还有内部储存格式需要做处理

关于Cpython有什么数值操作函数可以看这个,Cpython:https://docs.python.org/zh-cn/3.12/c-api/number.html#c.PyNumber_Add

这是一个处理参考

function parsePyLong(addr) {try {if (!addr || addr.isNull()) {return 0;}const ob_size = addr.add(0x10).readS64();if (ob_size === 0) return 0;const isNegative = ob_size < 0;const numdigits = Math.abs(Number(ob_size));if (numdigits > 0x1000) {const digit = addr.add(0x18).readU32();return isNegative ? -digit : digit;}if (numdigits > 2) {let bigVal = 0n;for (let i = 0; i < numdigits; i++) {const digit = addr.add(0x18 + 4 * i).readU32();bigVal += BigInt(digit) * (1n << (30n * BigInt(i)));}return isNegative ? -bigVal : bigVal;}let val = 0;for (let i = 0; i < numdigits; i++) {val += addr.add(0x18 + 4 * i).readU32() * Math.pow(2, 30 * i);}return isNegative ? -val : val;} catch (e) {return 0;}
}

这是另一种,代码来自https://www.cnblogs.com/lordtianqiyi/p/18614184

function parseInt_python12(addr){  var ob_refcnt = addr.readU64()var ob_type = addr.add(0x8).readU64()var lv_tag = addr.add(0x10).readU64()var sign = lv_tag & 3var numdigits = lv_tag >> 3let val = 0for(var i=0;i<numdigits;i++){val += addr.add(0x18 + 4*i).readU32() * (2 ** (30*i))          // counld not handle BigInt}return (1-sign) * val
}function parseInt_python12(addr){  var ob_refcnt = addr.readU64()var ob_type = addr.add(0x8).readU64()var ob_size = addr.add(0x10).readS64()  // not unsignedvar numdigits = ob_sizeif(ob_size < 0){numdigits = -numdigits;}let val = 0if (numdigits > 0x10000){               // to big , maby not PyLongval = addr.add(0x18).readU32()console.log("unexpected data , " + "0x" + val.toString(16))}else{for(var i=0;i<numdigits;i++){val += addr.add(0x18 + 4*i).readU32() * (2 ** (30*i))          // counld not handle BigInt}}if(ob_size == 0){return 0}else if(ob_size >0){return val}else if(ob_size <0){return -val}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年包装机厂家权威推荐排行榜:自动包装机,食品包装机,真空包装机,颗粒包装机优质品牌深度解析

2025年包装机厂家权威推荐排行榜:自动包装机,食品包装机,真空包装机,颗粒包装机优质品牌深度解析 行业背景与发展趋势 包装机械行业作为制造业的重要支撑领域,近年来在智能化、自动化浪潮的推动下呈现出快速发展的…

ia16生成8086汇编

配置:Ubuntu-24.04 ia16 # 添加 PPA 仓库 sudo add-apt-repository ppa:tkchia/build-ia16 sudo apt-get update# 安装预编译包 sudo apt-get install gcc-ia16-elf libi86-ia16-elf# 验证安装 ia16-elf-gcc -v # 应该…

太突然!湘潭大学计算机学院刘昊霖教授不幸逝世,年仅37岁。

近日,我国计算机科学领域一颗冉冉升起的学术之星骤然陨落。湘潭大学计算机学院网络空间安全学院教授、博士生导师刘昊霖因突发疾病,经抢救无效不幸去世,年仅37岁。他的英年早逝,是学校、学界和我国科研事业的重大损…

解包魔改pyinstaller

在做NSSCTF 4th 的CrackMe&F***Me也是见到被魔改的pyinstaller生成的exe文件 直接用工具直接就报错了,这里来写一写这道题的魔改点,虽然我不会魔改pyinstaller,但 1.魔改判断标识: 正常文件结尾应该是这个: 但…

反编译解包微信小程序

做湾区杯时也是遇到了,记录一下 小程序的后缀应为.wxapg使用 npm i wedecode -g安装工具 运行 命令行直接输入 wedecode 即可运行, 全程自动引导wedecode 命令行直接指定参数 # 手动指定一个包wedecode ./name.wxapkg…

浅谈C++中的作用域

C++的作用域是每个初学者很容易混淆的一个知识点,C++ 中的作用域(scope)指的是变量、函数或其他标识符的可见和可访问的范围,如果对于C++的作用域没有一个清晰的认知的话很容易会出现空值或者空指针还有值未能及时…

2025年摩托车厂家权威推荐榜:覆盖街车、跑车、巡航车及越野车型的全方位选购指南与实力解析

2025年摩托车厂家权威推荐榜:覆盖街车、跑车、巡航车及越野车型的全方位选购指南与实力解析 摩托车作为现代交通工具与休闲生活方式的重要组成部分,其市场呈现出多元化、专业化的发展趋势。随着消费者对骑行体验要求…

AIGC图片视频制作通用提示词 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年锡条厂家推荐排行榜,高温抗氧化锡条,焊接专用锡条,电子行业锡条,工业级锡条公司精选

2025年锡条厂家推荐排行榜:高温抗氧化锡条与焊接专用锡条权威指南 行业背景与发展趋势 随着电子制造业的快速发展,锡条作为电子焊接领域的关键材料,其市场需求持续增长。特别是在5G通信、新能源汽车、智能家居等新兴…

2025年冠晶石厂家推荐排行榜,外墙冠晶石,内墙冠晶石,防霉冠晶石,水包水冠晶石,水包砂冠晶石,耐污冠晶石,自洁冠晶石公司推荐

2025年冠晶石厂家推荐排行榜:外墙冠晶石、内墙冠晶石等全品类权威指南 随着建筑装饰行业对环保、耐久和美观性要求的不断提升,冠晶石作为一种高性能涂料,在内外墙装饰领域占据重要地位。冠晶石不仅具备出色的耐候性…

类和对象project3

类和对象 C++面向对象的三大特性:封装,继承,多态 C++认为万事万物都皆为对象,对象上有其属性 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类 封装(project3 filename06 project3 filename07 )…

2025年透声膜厂家推荐排行榜,防水透声膜,防水透气透声膜,手表透气透声膜,耳机透气透声膜,智能手环透声膜公司推荐

2025年透声膜厂家推荐排行榜:深度解析行业领先企业 随着智能穿戴设备和消费电子产品的快速发展,透声膜作为关键功能材料在电子产品防水、透声领域发挥着不可替代的作用。从高端智能手表到无线耳机,从运动手环到工业…

2025年包装机厂家权威推荐榜单:全自动包装机,真空包装机,食品包装机,立式包装机源头厂家综合实力解析

2025年包装机厂家权威推荐榜单:全自动包装机,真空包装机,食品包装机,立式包装机源头厂家综合实力解析 随着制造业智能化转型的深入推进,包装机械行业正迎来技术革新的关键时期。全自动包装机、真空包装机、食品包…

2025 ICPC Xian Regional Contest 【LJIF】

2025 ICPC Xian Regional Contest 【LJIF】写在前面 好像不能传播题解,然后这是我自己补的上周那场区域赛,应该没问题吧 怎么说呢,反正 vp 打铁 3 题,补题银牌就补不动了 这里就只放下代码了 该加训了,但是说实话…

安装配置 Claude Code Router 备忘录

通过 zcf 安装和配置 Claude 很简单,但是要在多个模型、供应商之间切换,还是有点麻烦。后来在 zcf 中看到有 CCR 代理,发现这个开源工具可以接入多个模型供应商或多个模型,使用起来方便不少。下面简要记录一下配置…

学弟欢乐赛 - T3 T4 题解

T3 一道经典经典的计数题目。 我们考虑如果没有进行交换的总方案数。 因为要求子序列是 xyz,我们先从 y 开始考虑。我们假设这个 y 前面有 \(cnt1\) 个x,后面有 \(cnt2\) 个,根据乘法原理,我们很容易知道这个 y 的…

2025年空调维保厂家推荐排行榜,空调维保/末端保养/空调保养/空调清洗/水处理公司专业服务与高效维护首选

2025年空调维保厂家推荐排行榜,空调维保/末端保养/空调保养/空调清洗/水处理公司专业服务与高效维护首选 随着现代建筑对室内环境质量要求的不断提升,中央空调系统的稳定运行已成为商业运营和工业生产的重要保障。空…

2025 ICPC Xian Regional Contest

2025 ICPC Xian Regional Contest写在前面 好像不能传播题解,然后这是我自己补的上周那场区域赛,应该没问题吧 怎么说呢,反正 vp 打铁 3 题,补题银牌就补不动了 这里就只放下代码了 该加训了,但是说实话这个难度我…

2025年自动包装机厂家推荐排行榜:食品包装机,药品包装机,五金配件包装机,全自动包装设备公司精选

2025年自动包装机厂家推荐排行榜:食品包装机,药品包装机,五金配件包装机,全自动包装设备公司精选 随着制造业智能化转型的深入推进,自动包装设备行业正迎来技术革新的关键时期。在食品、药品、五金配件等细分领域…

2025 年 10 月系统门窗厂商榜单揭晓,专业智造实力与品牌保障口碑优选

2025 年 10 月系统门窗厂商榜单由中国建筑金属结构协会、全国工商联家具装饰业商会联合发布,此次评选聚焦系统门窗 “制造精细化、保障全周期” 核心要求,以《铝合金门窗》(GB/T 8478-2008)及《系统门窗技术要求》…