|
WinHex to Dec 16進位轉換成10進位 位址程式可針對 Sector per cluster 及 Hidden Sector 設定
Sector cluster Hidden WinHex
把BusHound 抓到的TXT檔案轉存XXX.TXT
編輯XXX.TXT,把-----------------------------以上都刪除(包含---------------)
轉存XXX-A.TXT
Sector cluster Hidden WinHex
打開WinHex2Dec.exe程式
按上圖輸入Sector per cluster 及 Hidden Sector 單位
選擇檔案 (目標值轉十進制 - Sector per cluster) / Hidden Sector = 輸出
在同一路徑會輸出一檔案XXX-A-output.TXT
Sector cluster Hidden WinHex
打開就可以看到已經計算好的輸出值
打開WinHex程式,插入USB轉接卡,選擇磁碟如D:透過檔案管理員搜尋要尋找的檔案,對目標檔案壓右鍵
如:appmanifest_291550.acf (右鍵navigation->List clusters->出現clusters 14598位置)
對應XXX-A-output.TXT就可知是否有出現在讀取LOG內
原始碼
- import pandas as pd
- import tkinter as tk
- from tkinter import filedialog
- def hex2dec():
- if input_entry.get() == '':
- SPC = 8
- else:
- SPC = int(input_entry.get())
- if input1_entry.get() == '':
- HS = 2048
- else:
- HS = int(input1_entry.get())
- file_path = filedialog.askopenfilename() # 選擇檔案後回傳檔案路徑與名稱
- print(file_path)
- # 表頭有五項標籤 'Device', 'Phase', 'Data', 'Description', 'Cmd.Phase'
- header = ['Device', 'Phase', 'Data', 'Description', 'Cmd.Phase']
- # 讀取檔案成dataframe
- #df = pd.read_fwf("GameSart_DownLoad.txt")
- df = pd.read_fwf(file_path)
- file_path_arr = file_path.split('.txt')
- print(file_path_arr[0])
- # print(type(df))
- # print(df)
- print(df.shape)
- # print(df.iloc[:,1:7])
- # 從dataframe取DATA那行 1-7 行,第0行不讀
- first_col_cut = df.iloc[:, 1:7]
- print(first_col_cut.shape)
- print(type(first_col_cut))
- a = ""
- # 重組OUT字串
- for i in range(0, len(first_col_cut)):
- for j in range(0, 6):
- a = a + str(first_col_cut.iloc[i, j])
- # print(a)
- # 切割OUT字串
- out_arr = a.split('OUT')
- # print(out_arr)
- # 重新命名輸出檔案
- path = file_path_arr[0]+'-output.txt'
- f = open(path, 'w')
- # 輸出設定訊息
- f.write("設定 Sector per cluster: " + str(SPC))
- print("設定 Sector per cluster: " + str(SPC))
- f.write("\n")
- f.write("設定 Hidden Sector: " + str(HS))
- print("設定 Hidden Sector: " + str(HS))
- f.write("\n")
- f.write("\n")
- for i in range(0, len(out_arr)):
- # print(len(out_arr))
- # out_arr1 =
- hex_arr = out_arr[i]
- # 輸出每列及計算的訊息
- f.write("第" +str(i) + "列 的值: OUT " + hex_arr)
- print("第" +str(i) + "列 的值: OUT " + hex_arr)
- f.write("\n")
- # print(type(hex_arr))
- # 切割nan字串
- hex_arr1 = hex_arr.split('nan')
- for j in range(0, len(hex_arr1)):
- # print(hex_arr1[j])
- if j == 2:
- # 取nan陣列2字串
- hex_arr2 = hex_arr1[j]
- # print (hex_arr2 )
- # 從字串第5位置切割
- hex_6code = hex_arr2[4:]
- f.write("16進位位址: " + hex_6code)
- f.write("\n")
- print("16進位位址: " + hex_6code)
- # 十六進位轉換十進位
- number = int(hex_6code, 16)
- if number <= 2048:
- f.write("值小於"+ str(HS) +",無法計算")
- print("值小於"+ str(HS) +",無法計算")
- else:
- f.write("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
- print("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
- print(" ")
- f.write("\n")
- f.write("\n")
- f.close()
- path_label.configure(text='來源:' + file_path, font=(font_type, 11), fg='red')
- message_label.configure(text='目的:' + path, font=(font_type, 11), fg='red')
- message1_label.configure( text= ' 轉換成功,請關閉視窗', font=(font_type,12), fg ='red')
- btn["state"] = "disable"
- # 圖形使用者介面
- window = tk.Tk()
- window.title('Winhex 資料位址,16進位 轉 10進位')
- window.geometry('500x160')
- title_size =14
- notice_size =13
- font_size = 12
- font_type='微軟正黑體'
- header_label = tk.Label(window, text='Winhex 資料位址轉換', font=(font_type,title_size))
- header_label.pack(side=tk.TOP)
- input_frame = tk.Frame(window)
- input_frame.pack(side=tk.TOP)
- input_label = tk.Label(input_frame, text='Sector per cluster')
- input_label.pack(side=tk.LEFT)
- input_entry = tk.Entry(input_frame,width=4)
- input_entry.insert(0,'8')
- input_entry.pack(side=tk.LEFT)
- input1_label = tk.Label(input_frame, text=' Hidden Sector')
- input1_label.pack(side=tk.LEFT)
- input1_entry = tk.Entry(input_frame,width=6)
- input1_entry.insert(0,'2048')
- input1_entry.pack(side=tk.LEFT)
- btn = tk.Button(window,
- text='選擇檔案',
- font=(font_type,14,'bold'),
- command=hex2dec
- )
- btn.pack()
- path_label = tk.Label(window, text='', font=(font_type,font_size))
- path_label.pack(side=tk.TOP)
- message_label = tk.Label(window, text='', fg ='red',width=80)
- message_label.pack(padx=5,pady=5)
- message1_label = tk.Label(window, text='', fg ='red',width=80)
- message1_label.pack(padx=5,pady=5)
- window.mainloop()
複製代碼
下載路徑
https://drive.google.com/file/d/159O4X7s3U1h3-VFxdtq_VOX4KvfGjDuH/view?usp=sharing
|
|