步骤1:
(前置)下载pyinstxtractor.py
①将pyinstxtractor.py文件移动到想要解包的文件目录下
②并在当前目录下输入cmd打开终端,执行>python pyinstxtractor.py 待反编译.exe
eg:E:\my_decode>python pyinstxtractor.py service_decode.exe
步骤2:
①在生成的文件夹service_decode.exe_extracted下找到:没有后缀的service_decode文件、和struct文件;
②以上两个文件和“第2步修改头文件.py”放同级目录,运行py,
'''
第2步修改头文件.py
为了添加pyc的字节头;所以不需要把所有的字节显示出来,
只需要把文件前16个字节打印出来,
'''
def fanbianyi_main():
f1=open('E:\my_decode\startcpchost.exe_extracted\struct', 'rb')#打开struct文件
f2=open('E:\my_decode\startcpchost.exe_extracted\server_decode', 'rb')#打开待反编文件
name='E:\my_decode\startcpchost.exe_extracted\server_decode'
w2_all=f2.read()#先读取待反编文件原来的内容
f2.seek(0)#读取完之后从头开始
w=f1.read(17).hex()#struct再读取16个字节用于比较
w2=f2.read(17).hex()#反编译也读取16个用于比较
print("struct也读取16个用于比较:",w,w2,sep='\n')#打印出来让我们看见
'''
w1:420d0d0a000000007079693010010000e3
w2:e300000000000000000000000006000000
'''
add=input('Please input the codes you need to write:')#然后问你要在开头写入什么
add=bytes.fromhex(add)#把普通字符串转换为bytes格式,并不是encode,而是fromhex(),把字符串看成是十六进制编码
f2.close()#关闭
f2=open(name+'.pyc', 'wb')#创建pyc待反编文件
f2.write(add+w2_all)#把加入的字节和原来的字节合并写入文件
f1.close()
f2.close()
print('完成添加struct的头到反编译文件中')
input()
if __name__ == '__main__':
fanbianyi_main()
{注:待反编译的文件以e3打头,而struct第17个字节是e3,所以把stuct的前16个复制到 待反编译的文件中;总之是把e3前的加入到待反编译的文件中,如果是12位就拷贝12位,依此类推}
步骤3:
(前置)pip3 install uncompyle6
①uncompyle6 main.pyc > test.py
eg: E:\my_decode\service_decode.exe_extracted>uncompyle6 service_decode.pyc >server_decode.py
②E:\my_decode\service_decode.exe_extracted 文件夹下找到反编译后的代码server_decode.py
注:
如果是由多文件打包成一个.exe的,反编译只能获取main/主文件的.py,被引用文件在此目录下,暂未找到方法转换,有方法的欢迎留言;