文件為可執(zhí)行文件 ./test可執(zhí)行
1、pyinstxtractor
使用pyinstxtractor報(bào)錯(cuò)
Error: Unsupported pyinstaller version or not a pyinstaller archive
2、uncompyle6
更改文件名后綴為.pyc或pyo,使用uncompyle6報(bào)錯(cuò)
KeyError: b'\x7fELF'
3、objdump
objdump -x結(jié)果如下。可知執(zhí)行環(huán)境為python3.6,無(wú)殼,-d可以生成asm代碼,長(zhǎng)度約28w行
test: file format elf64-x86-64
test
architecture: i386:x86-64, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000000000404040
Program Header:
PHDR off 0x0000000000000040 vaddr 0x0000000000400040 paddr 0x000000000040 0040 align 2**3
filesz 0x0000000000000268 memsz 0x0000000000000268 flags r-x
INTERP off 0x00000000000002a8 vaddr 0x00000000004002a8 paddr 0x000000000040 02a8 align 2**0
filesz 0x000000000000001c memsz 0x000000000000001c flags r--
LOAD off 0x0000000000000000 vaddr 0x0000000000400000 paddr 0x000000000040 0000 align 2**21
filesz 0x0000000000132990 memsz 0x0000000000132990 flags r-x
LOAD off 0x0000000000132c90 vaddr 0x0000000000732c90 paddr 0x000000000073 2c90 align 2**21
filesz 0x0000000000016a30 memsz 0x000000000001b2a8 flags rw-
DYNAMIC off 0x0000000000132ca0 vaddr 0x0000000000732ca0 paddr 0x000000000073 2ca0 align 2**3
filesz 0x0000000000000220 memsz 0x0000000000000220 flags rw-
NOTE off 0x00000000000002c4 vaddr 0x00000000004002c4 paddr 0x000000000040 02c4 align 2**2
filesz 0x0000000000000020 memsz 0x0000000000000020 flags r--
NOTE off 0x00000000000002e8 vaddr 0x00000000004002e8 paddr 0x000000000040 02e8 align 2**3
filesz 0x0000000000000030 memsz 0x0000000000000030 flags r--
NOTE off 0x0000000000000318 vaddr 0x0000000000400318 paddr 0x000000000040 0318 align 2**2
filesz 0x0000000000000024 memsz 0x0000000000000024 flags r--
EH_FRAME off 0x00000000001265b0 vaddr 0x00000000005265b0 paddr 0x000000000052 65b0 align 2**2
filesz 0x000000000000155c memsz 0x000000000000155c flags r--
STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x000000000000 0000 align 2**4
filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
RELRO off 0x0000000000132c90 vaddr 0x0000000000732c90 paddr 0x000000000073 2c90 align 2**0
filesz 0x0000000000000370 memsz 0x0000000000000370 flags r--
Dynamic Section:
NEEDED libpython3.6m.so.1.0
NEEDED libpthread.so.0
NEEDED libdl.so.2
NEEDED libutil.so.1
NEEDED libm.so.6
NEEDED libc.so.6
INIT 0x00000000004033e0
FINI 0x000000000051f7c4
INIT_ARRAY 0x0000000000732c90
INIT_ARRAYSZ 0x0000000000000008
FINI_ARRAY 0x0000000000732c98
FINI_ARRAYSZ 0x0000000000000008
GNU_HASH 0x0000000000400340
STRTAB 0x00000000004015d0
SYMTAB 0x0000000000400400
STRSZ 0x0000000000000ca2
SYMENT 0x0000000000000018
DEBUG 0x0000000000000000
PLTGOT 0x0000000000733000
PLTRELSZ 0x0000000000000c00
PLTREL 0x0000000000000007
JMPREL 0x00000000004027e0
RELA 0x0000000000402420
RELASZ 0x00000000000003c0
RELAENT 0x0000000000000018
VERNEED 0x00000000004023f0
VERNEEDNUM 0x0000000000000001
VERSYM 0x0000000000402272
Version References:
required from libc.so.6:
0x0d696914 0x00 03 GLIBC_2.4
0x09691a75 0x00 02 GLIBC_2.2.5
Sections:
Idx Name Size VMA LMA File off Algn
0 .interp 0000001c 00000000004002a8 00000000004002a8 000002a8 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .note.ABI-tag 00000020 00000000004002c4 00000000004002c4 000002c4 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .note.gnu.property 00000030 00000000004002e8 00000000004002e8 000002e8 2 **3
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .note.gnu.build-id 00000024 0000000000400318 0000000000400318 00000318 2 **2
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .gnu.hash 000000bc 0000000000400340 0000000000400340 00000340 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
5 .dynsym 000011d0 0000000000400400 0000000000400400 00000400 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
6 .dynstr 00000ca2 00000000004015d0 00000000004015d0 000015d0 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
7 .gnu.version 0000017c 0000000000402272 0000000000402272 00002272 2**1
CONTENTS, ALLOC, LOAD, READONLY, DATA
8 .gnu.version_r 00000030 00000000004023f0 00000000004023f0 000023f0 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
9 .rela.dyn 000003c0 0000000000402420 0000000000402420 00002420 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
10 .rela.plt 00000c00 00000000004027e0 00000000004027e0 000027e0 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
11 .init 00000017 00000000004033e0 00000000004033e0 000033e0 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
12 .plt 00000810 0000000000403400 0000000000403400 00003400 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .text 0011bbb1 0000000000403c10 0000000000403c10 00003c10 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
14 .fini 00000009 000000000051f7c4 000000000051f7c4 0011f7c4 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
15 .rodata 00006dce 000000000051f7e0 000000000051f7e0 0011f7e0 2**5
CONTENTS, ALLOC, LOAD, READONLY, DATA
16 .eh_frame_hdr 0000155c 00000000005265b0 00000000005265b0 001265b0 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
17 .eh_frame 0000ae80 0000000000527b10 0000000000527b10 00127b10 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
18 .init_array 00000008 0000000000732c90 0000000000732c90 00132c90 2**3
CONTENTS, ALLOC, LOAD, DATA
19 .fini_array 00000008 0000000000732c98 0000000000732c98 00132c98 2**3
CONTENTS, ALLOC, LOAD, DATA
20 .dynamic 00000220 0000000000732ca0 0000000000732ca0 00132ca0 2**3
CONTENTS, ALLOC, LOAD, DATA
21 .got 00000140 0000000000732ec0 0000000000732ec0 00132ec0 2**3
CONTENTS, ALLOC, LOAD, DATA
22 .got.plt 00000418 0000000000733000 0000000000733000 00133000 2**3
CONTENTS, ALLOC, LOAD, DATA
23 .data 000162a0 0000000000733420 0000000000733420 00133420 2**5
CONTENTS, ALLOC, LOAD, DATA
24 .bss 00004878 00000000007496c0 00000000007496c0 001496c0 2**5
ALLOC
25 .comment 00000058 0000000000000000 0000000000000000 001496c0 2**0
CONTENTS, READONLY
26 .gnu.build.attributes 000007e8 0000000000000000 0000000000000000 00149718 2**2
CONTENTS, READONLY
SYMBOL TABLE:
no symbols
匯編部分截圖
問(wèn)題如何把test文件轉(zhuǎn)為打包前的py文件?
理論上,這種無(wú)法還原到最初的 python 源碼,但可以先用反匯編工具分析,得到近似的 c 源碼,再轉(zhuǎn)成 python 源碼。
據(jù)我所知,目前(2018年8月22日)尚無(wú)完整的工具鏈。
反匯編工具首選 IDA Pro。
不同于 pyinstaller 生成的文件,這種文件通常是 cython + gcc 生成,它依賴 libpythonX.Ym.so 庫(kù)文件,但不需要 python 環(huán)境。
你可以運(yùn)行 ldd <file>
確認(rèn)。
附上生成的示例
編寫(xiě) python 源碼,如 a.pyx
print('hi')
將 python 源碼轉(zhuǎn)成 c 源碼,得到 a.c
cython a.pyx --embed
編譯 c 文件
gcc -I /usr/include/pythonX.Ym -o a a.c -lpythonX.Ym
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。