从手欠删除源代码到反编译exe找回
2022-11-18 09:3:35 Author: 浪飒sec(查看原文) 阅读量:30 收藏

免责声明

本公众号所发布的文章及工具只限交流学习,本公众号不承担任何责任!如有侵权,请告知我们立即删除。

前言

之前发的EDU查询辅助工具,只用Pyinstaller打包了exe,有MAC的小伙伴想要运行,但是我觉得屎山代码没必要开源,在某一天我将项目源码永久删除,恢复之后乱码,所以没办法满足小伙伴的需求。后面想着找个机会能不能反编译一下,反正代码超简单。

项目介绍

目地址

https://github.com/langsasec/edusrc


这是之前闲的没事用Flask开发的一个超轻量的网站,主要方便用于EDU_SRC查询具体学校和信息搜集用,最开始是包含Sqlite数据库文件的,后来觉得就两张表,索性把数据查出来放到Python列表里更方便。最后只有一个后端文件main.py和静态资源。

准备工作

所用软件

环境:Python3

  1. edusrc.exe(已用Pyinstaller打包好Flask的exe)
  2. X-ways(16进制编辑器即可,我用的X-ways,windows用WinHex,Mac用010 editor)
  3. reverse_pyexe(pyinstaller打包的exe逆向还原项目)
  4. Pyc反编译工具(在线或uncompyle6等其他方法)

edusrc.exe→main.pyc

执行命令

将需要反编译的exepyinstxtractor.py放到同一个目录下直接运行


python pyinstxtractor.py edusrc.exe

生成edusrc.exe_extracted文件夹


包含的静态资源已经反编译出来


十六进制构造main.pyc

原理

pyinstaller在打包的时候,会将pyc文件的前8个字节清除,所以后期需要自己添加上去,前四个字节为python编译的版本,后四个字节为时间戳。(四个字节的magic number、四个字节的timestamp) 所以在这里可以通过struct文件来获取其中的信息。

开干

找到如下两个文件:main和struct


用16进制编辑器打开这两个文件,并新建一个main.pyc,共同打开,我这里用X-ways代替。


main.pyc=struct第一行+main

struct


main


main.pyc


main.pyc→main.py

方法一:uncompyle6

pip3 install uncompyle6
uncompyle6 main.pyc

我本地是Python3.10,所以不支持,如果要用这个尽量用Python3.8


方法二:在线pyc反编译

地址:https://tool.lu/pyc


成功拿到main.py源码


一些问题

  1. 直接反编译出来的代码可能会和最开始自己写的有一部分出入。

  2. 部分代码因为逻辑问题可能出现Bug,经过我的调试已解决。

    例如:

    Flask中的app路由装饰器代码被修改使得程序无法运行。

    Flask中的渲染模块render_template的参数格式也被修改

  3. 反编译后需要做少量的调试才能正常运行,代码量巨大时估计会很头疼。

Reference

https://github.com/MrWQ/reverse_pyinstaller


历史推荐

工具推荐——又有三个Burp插件

Q4已过半,快看看你明年的竞争对手!

好多CTF资料,别看了没用的,安心刷题!

人工智能化攻击系统

工具推荐——SharpDecryptPwd

VPS快速代理到本地主机,你难道还不会?

漏洞复现——php inclusion

漏洞复现——CVE-2017-5645

工具推荐——三个Burp插件

AK4安全工具集装箱V1.0.1正式发布


文章来源: http://mp.weixin.qq.com/s?__biz=MzI1ODM1MjUxMQ==&mid=2247490109&idx=1&sn=e38938e589a3a1b0a88cf89607fa902d&chksm=ea082e2ddd7fa73bac02137ca614da3a22922a98eab21024c90d1373f4c4e1db72444b6c65e0#rd
如有侵权请联系:admin#unsafe.sh