pyd文件逆向(二)
前言
上次写了一个pyd逆向,在文章末尾讲了hook模块等方法。现在来完善一下。众所周知,python打包的exe,如果没加任何加密的话,源码是可以很容易被轻松逆向出来的。所以就会有人会将python代码打包成pyd文件。其实就是一种dll文件。来增加破解难度。
1.hook模块
一.首先,我们手动写一个例子
import base64 key = input("请输入密码:") print(str(base64.b64encode(key.encode()),'utf-8')) key = str(base64.b64encode(key.encode()),'utf-8') if key == "MTIzNDU2":print("成功") else:print("失败")
这个是个很简单的例子,就是对输入的字符串进行base64编码,再进行比较。我们将这个例子打包成pyd,来测试一下
import test1 test1
我们可以得到以下结果
请输入密码:123456 MTIzNDU2 成功
这个是成功的状态
请输入密码:12345 MTIzNDU= 失败
这个失败的状态。
现在我们来尝试hook一下base64模块,当然,这个是我们自己写的代码,我们知道引用那些模块,别人写的,我们肯定是不知道的。那咋办?
二.将pyd拿到ida里面进行分析,找到导入了那些模块
这里我们可以看到,里面有些字符串都出来了,甚至密码都出来了,当然我们这里是个例子是很简单的,就是一个测试。一般验证不会这样简单。我们看到了base64这个字符串,我们就有理由怀疑,他是不是引用了base64模块,这里我们做一个测试,我们将这个base64这个字符串改一下名字,引入我们自己的模块
这里我们改成base66。然后再运行一下我们的代码。那肯定会报错,会说没有base66这个模块。
三.搭建自己的模块base66
在和pyd相同文件夹下,创建base66.py文件。里面先不写任何代码。然后再运行一下代码。看看效果
他说base66这个模块没有b64encode这个属性。那当然,我们啥代码没有写,那肯定是没有这个属性的,但是不打紧。我们知道他是一个base64加密,我们就在里面调用base64.b64encode
它接收字节,那我们就这样写
import base64 def b64encode(s, altchars=None):print(s)return base64.b64encode(s)
很简单的,运行一下看看
请输入密码:1234 b'1234' MTIzNA== b'1234' 失败
可以得到我们输入的参数,我们hook的目的就达到了。
2.修改if返回
pyd验证正不正确,里面肯定会用到if语句,我们能不能改一下if语句返回了?那当然是肯定的。那如何修改了。这里参考了这篇文章(https://www.keepnight.com/archives/767/)。我们将py编译成pyd的时候,多出来了一个c文件,那个我们可以参考参考。
找到这个函数__Pyx_PyUnicode_Equals,看样子就是比较字符串的。这个pyd也就是这个c语言编译的,那么到ida里面也能找到。
在ida里面找到这样的函数,看样子就是了。那我们改一下汇编语言
将第一个分叉,jz改成jmp。这个if就只会返回true了。当然你也可以改成本来是true返回flase,false返回true的。改完保存一下。再运行一下,看看效果
请输入密码:1212121 b'1212121' MTIxMjEyMQ== b'1212121' 成功
接下来就会发现,不论输入什么,都会返回成功了。改if返回也成功了。
OK,今天就到这里了,有啥问题可以加一群342096685,二群902854353。
pyd文件逆向(二)相关推荐
- [网络安全自学篇] 六十一.PE文件逆向之数字签名详细解析及Signcode、PEView、010Editor、Asn1View等工具用法(二)
本系列虽然叫"网络安全自学篇",但由于系统安全.软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步.前文 &qu ...
- [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
本系列虽然叫"网络安全自学篇",但由于系统安全.软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步.前文讲解了i ...
- win10 下pycharm+anaconda 编译生成pyd文件
由于生产部署的问题,需要把用python写的深度学习代码编译为可被调用的文件.上网搜索了下,暂时了解到win10下pyd文件比较流行.下面是直接引用某位博主的结论,个人感觉总结的很好.其中Cython ...
- android p ify 三星,Enjarify - Android逆向(二)
Enjarify - Android逆向(二) 首先奉上enjarify的Github地址,小伙伴们可以clone到本地使用哦 Enjarify介绍 上一节我们说了,在开发Android应用时,And ...
- python:.py文件转.dll文件(.pyd文件)
基于python,把python文件转为.dll文件,我查了很多方法,没有能把python文件直接转.dll文件的..py要转dll文件都是先转成.pyd文件,然后再把.pyd这个后缀改成.dll,如 ...
- Python将py文件转换为pyd文件
Python减少内存占用,可以参考如下文章: 从青铜到王者,一文教你节省90%内存占用 文章中提到的将py文件进行编译,编译成pyd文件(Windows),或者.so文件(linux)后会提高运行效率 ...
- VS2019编译自动微分库ADOL-C并利用SWIG打包为.pyd文件
目录 前言 一.VS编译ADOL-C 二.SWIG生成.py和.cxx接口文件 三.VS编译.cxx生成.pyd 1. VS项目属性配置 2. 生成.pyd文件 前言 自动微分库ADOL-C提供了SW ...
- Python文件格式详解:py、pyc、pyo、pyd文件区别
Python文件格式详解:py.pyc.pyo.pyd文件区别 Python是一种非常流行的编程语言,它具有简洁.易学.高效等优势,在各个领域得到了广泛的应用.而在Python编写程序时,我们会发现存 ...
- pyinstaller打包venv(虚拟环境),.pyd文件,非.py文件打包
pyinstaller打包venv(虚拟环境),.pyd文件,非.py文件打包 1 首先pyinstaller不会使用venv中的包,请先进入虚拟环境,然后再使用 pyinstaller xxx.py ...
- 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测...
话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...
最新文章
- nodejs配置nginx 以后链接mongodb数据库
- LeetCode OJ - Copy List with Random Pointer
- delphi 怎么获取工程版本号
- Flask框架后端开发常见错误处理(2018/11/14)
- zend studio安装xdebug调试工具
- Effective C#:避免使用ICloneable接口
- 终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的
- CSS浏览器兼容性----Hack
- android上实现0.5px线条
- InnoDB与UUID
- 借书表设计 mysql_请设计一套图书馆借书管理系统的数据库表结构
- 如何实现批量替换文件夹名称?
- 出生年分数 15作者 陈越单位 浙江大学
- CryENGINE 3 百度百科介绍
- 数值重映射方法(Remap)
- Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)
- [设计模式]设计模式SOLID原则
- 2023南京大学文博专业考研上岸经验
- 本周聚划算| 避免上班5分钟被开除 直降2000元企业办公实用利器一站全掌握
- LeetCode 题库 全	JAVA 解题---771.宝石与石头
热门文章
- java苹果沙盒验证参数问题_java -苹果支付凭证校验
- java 初始化duration_Java Duration toMillis()用法及代码示例
- Debian7 更换源
- 初识c语言思维导图及大纲 (内含思维导图图片及pdf版下载链接)
- 计算机桌面应用程序图标不见了怎么办,桌面程序图标不见了,桌面软件快捷方式不见了怎么办?...
- 区块链供应链金融实战3
- 能否将一个网址(如QQ空间网址),打包成APK,然后别人下载APK安装到手机后,点击进入这个网址?
- DialogFragment dismiss闪退异常DialogFragment何时持有FragmentManager
- 怎样使用 Hardhat 开发 Solidity 智能合约
- ThinkBook 14 G2 ITL 重装系统 笔记