吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 12014|回复: 103
上一主题 下一主题

[原创] 浅谈python反编译

    [复制链接]
跳转到指定楼层
楼主
pwp 发表于 2020-2-10 23:03 回帖奖励
本帖最后由 panwanpeng 于 2020-2-10 23:06 编辑

发现这里有个悬赏贴,想练练手 ,就开始了 https://www.52pojie.cn/thread-976622-1-1.html

调整字体大小、颜色、加粗
教学内容:
一、用pyinstxtractor.py文件将exe文件转换成pyc文件:命令python pyinstxtractor.py [filename]
二、Winhex修复pyc资源
三、用uncompyle6将pyc反编译成py文件:命令uncompyle6 [filename] > nixiangmingmingdefilename.py

准备工作:
0、安装python3.x ,相信想反编译Python的大佬们都安装了,菜鸟自行百度
1、下载我的反编译工具包
链接:https://pan.baidu.com/s/1KflvKTNxklAWYR5XgG9w2A
提取码:0nok
复制这段内容后打开百度网盘手机App,操作更方便哦
2、安装神器 uncompyle6 使用命令:pip install uncompyle6

教学过程:

开始:我来考考大家,把大象装进冰箱需要几步?(3步)

第一步:打开冰箱门
用pyinstxtractor.py文件将exe文件转换成pyc文件
命令python pyinstxtractor.py [filename]
方法是把pyinstxtractor.py从我给的链接下载下来,复制到需要反编译的目录,如图:


然后在地址栏输入cmd,回车,弹出cmd,注意cmd路径已到当前目录:


最后输入一小行命令python pyinstxtractor.py [filename],即可完成转换:
我中英文都不好,百度了一下filename是文件名,待反编译的文件名是SUN,所以在cmd里面是这么用的:

一句话总结上面的图:执行完代码,看到Successfully extracted pyinstaller archive: filename.exe,多出一个文件夹,解密成功一半。



第二步:把大象装进冰箱
打开第一步生成的sun.exe_extracted文件夹,找到struct和SUN(filename):


用WinHex打开这两个文件,以 为例:

把大象装进冰箱这一步很关键,魔术是否成功就看这一招,由于是64位系统,我练了整整一周,这里总结出来大家别走弯路,慢动作,看好了:
网上文献:我们需要在主文件(即SUN文件)起始位置加上8个字节的pyc头,由4字节的magic和4字节的时间戳组成,其中magic会因为python版本的不同而不同,那我们怎么知道是啥呢?有个技巧就是,查看struct文件的magic,直接复制过去。
艹,就是这句话,害我琢磨了整整一个星期,现总结如下:
看看主程序SUN第一个字节是以什么开头的,然后找到struct这个字节前面的内容复制过来就可以了。为什么这样总结,因为有些64位程序就是这样,等下附张图在最后


具体操作是这样:
1、在struct中,鼠标拖动选中,CTRL+C复制

2、在SUN中,单击6如上图,CTRL+V粘贴,如下图,弹出对话框,选择确定:

看看SUN的第一行和struct的第一行是不是一样了:


小结:不管是32位还是64位或是128位的windows系统,只要将这一行搞成一模一样,下一步才能成功。
3、另存修改好的SUN为pyc文件(winhex中文件--另存为):


手动加.pyc后缀,得到的文件效果:



第三步:关上冰箱门:
用uncompyle6将pyc反编译成py文件:
命令是uncompyle6 [filename] > nixiangmingmingdefilename.py
同样的方法,在当前目录输入cmd,回车,弹出黑框框:



然后输入uncompyle6 SUN.pyc >test.py

大功告成。test.py的内容是这样的:


哈哈,本文就是抛砖引玉!大佬莫笑!

附件:有些struct就不止多出8个字节,所以不管他多出8个还是9个字节,我们一样复制,让这两个文件头长得一样就可以了。

免费评分

参与人数 66威望 +1 吾爱币 +85 热心值 +61 收起 理由
几分从前 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Mind_M + 1 + 1 谢谢@Thanks!
小朋友呢 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
feiyangooo + 1 + 1 谢谢@Thanks!
揰掵佲 + 1 + 1 我很赞同!
python初学者 + 1 + 1 热心回复!
无奈· + 1 + 1 谢谢@Thanks!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tory + 1 用心讨论,共获提升!
sun孙靖飞 + 1 第一次评论啊,好紧张啊,该怎么说啊,打多少字才显的有文采啊,这样说好不.
xnsoul1314 + 1 + 1 我很赞同!
知意执意 + 1 谢谢@Thanks!
yydxll + 1 + 1 用心讨论,共获提升!
江南第一帅 + 1 + 1 谢谢@Thanks!
行者悠然 + 1 + 1 谢谢@Thanks!
犬入六合 + 1 + 1 谢谢@Thanks!
yika + 1 + 1 谢谢@Thanks!感谢介绍
Zhangga + 1 + 1 谢谢@Thanks!
风雨3137 + 1 我很赞同!
dave_tw + 1 谢谢@Thanks!
hao898225957 + 1 我很赞同!
茎待佳阴 + 1 + 1 谢谢@Thanks!
Q8443590 + 1 用心讨论,共获提升!
hxw0204 + 1 + 1 热心回复!
yankyue + 1 + 1 谢谢@Thanks!
jack0811 + 1 + 1 谢谢@Thanks!
刘甲乙 + 1 + 1 谢谢@Thanks!
autist + 1 + 1 我很赞同!
libozi + 1 + 1 谢谢@Thanks!
xiaoyou328 + 1 + 1 用心讨论,共获提升!
lovekin + 1 + 1 用心讨论,共获提升!
鹤舞九月天 + 1 + 1 谢谢@Thanks!
5omggx + 1 + 1 用心讨论,共获提升!
坏人。丶 + 1 + 1 我很赞同!
17666ba + 1 + 1 热心回复!
无名氏wyw + 1 + 1 学习了
bluerabbit + 1 + 1 用心讨论,共获提升!
iamshy520 + 1 + 1 用心讨论,共获提升!
女萝岩 + 1 + 1 我很赞同!
zha + 1 + 1 我很赞同!
518 + 2 + 1 我很赞同!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
玩世不攻 + 1 + 1 热心回复!
yike911 + 1 + 1 谢谢分享。。。。
xiaobiao + 2 + 1 我很赞同!
山上的冷 + 1 谢谢@Thanks!
wxue + 1 + 1 谢谢@Thanks!
yangand + 2 + 1 谢谢@Thanks!
没皮皮的鱼 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fruitg + 1 + 1 我很赞同!
阿萨德话噶 + 1 谢谢@Thanks!
daniel7785 + 1 用心讨论,共获提升!
lhtzty + 1 + 1 用心讨论,共获提升!
dogz + 1 + 1 用心讨论,共获提升!
drawning + 1 + 1 谢谢@Thanks!
resu + 1 + 1 第二步很关键哟!
FleTime + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Psyber + 1 谢谢@Thanks!
bp946 + 1 + 1 谢谢@Thanks!
laoxiaodiao + 1 + 1 用心讨论,共获提升!
陈世界 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
凯咪 + 2 + 1 感谢大佬倾囊
simon77 + 1 + 1 用心讨论,共获提升!
ColoThor + 1 + 1 签名牛批
D小小贱 + 3 + 1 膜拜(>ω<)
逍遥一仙 + 2 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
minisys 发表于 2020-2-11 22:35
这方法只适用于py2,没做混淆的,有一部分可以成功,py3的字节码结构有点变化,前四个字节是魔术字,版本识别之类的,然后是四字节时间戳,然后是四字节的好像是长度,不记得是不是四个了,然后是一个code对象,code对象前面会有一个字母c,记住他,字母c,c开始就是字节码对象了,如果文件开头就是c开头的这样字节码文件,可以用marshal库加载起来,然后通过代码调用uncompyle的方式,好像是uncompyle.main.decompile,加个版本号,给个输出的流,一样可以拿到代码,py3了解的不多,对2稍稍有一丢丢的了解

免费评分

参与人数 4吾爱币 +5 热心值 +4 收起 理由
stuartshi + 1 + 1 我很赞同!
deffun + 1 + 1 大佬厉害
pwp + 2 + 1 我很赞同!
skyward + 1 + 1 我很赞同!

查看全部评分

推荐
wenweiqun 发表于 2020-2-11 08:56
4#
bp946 发表于 2020-2-11 00:18
5#
resu 发表于 2020-2-11 01:00
原来如此!
第二步有的需要加一整行……
6#
 楼主| pwp 发表于 2020-2-11 01:20 |楼主
resu 发表于 2020-2-11 01:00
原来如此!
第二步有的需要加一整行……

是啊,有个软件我折腾了好久才发现这个奥秘的
7#
tfrist 发表于 2020-2-11 02:50
嗯 步骤写的非常详细!赞一个!
8#
冥界3大法王 发表于 2020-2-11 08:14
汉化过wing ide for python
用在线工具反编译的
9#
小小de账号 发表于 2020-2-11 08:29
学习关注一下
10#
daiqing 发表于 2020-2-11 08:37
原来struct里面就直接有编码了啊,以前都要试半天的
11#
pepete 发表于 2020-2-11 08:43
学习python反编译 谢谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-10-2 03:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表