找回密碼
 註冊
搜索
查看: 348|回復: 0

[教學] WinHex to Dec 16進位轉換成10進位 位址程式

[複製鏈接]
發表於 2025-1-28 23:05:34 | 顯示全部樓層 |閱讀模式
 
Push to Facebook
WinHex to Dec 16進位轉換成10進位 位址程式可針對 Sector per cluster 及 Hidden Sector 設定

Sector cluster Hidden WinHex

Sector cluster Hidden WinHex

把BusHound 抓到的TXT檔案轉存XXX.TXT
編輯XXX.TXT,把-----------------------------以上都刪除(包含---------------)
轉存XXX-A.TXT

Sector cluster Hidden WinHex

Sector cluster Hidden WinHex



打開WinHex2Dec.exe程式
上圖輸入Sector per cluster 及 Hidden Sector 單位
選擇檔案 (目標值轉十進制 - Sector per cluster) / Hidden Sector = 輸出

在同一路徑會輸出一檔案XXX-A-output.TXT

Sector cluster Hidden WinHex

Sector cluster Hidden WinHex

打開就可以看到已經計算好的輸出值


打開WinHex程式,插入USB轉接卡,選擇磁碟如D:
透過檔案管理員搜尋要尋找的檔案,對目標檔案壓右鍵
如:appmanifest_291550.acf (右鍵navigation->List clusters->出現clusters 14598位置)
對應XXX-A-output.TXT就可知是否有出現在讀取LOG內


原始碼
  1. import pandas as pd
  2. import tkinter as tk
  3. from tkinter import filedialog

  4. def hex2dec():
  5.     if input_entry.get() == '':
  6.         SPC = 8
  7.     else:
  8.         SPC = int(input_entry.get())

  9.     if input1_entry.get() == '':
  10.         HS = 2048
  11.     else:
  12.         HS = int(input1_entry.get())

  13.     file_path = filedialog.askopenfilename()  # 選擇檔案後回傳檔案路徑與名稱
  14.     print(file_path)

  15.     # 表頭有五項標籤 'Device', 'Phase', 'Data', 'Description', 'Cmd.Phase'
  16.     header = ['Device', 'Phase', 'Data', 'Description', 'Cmd.Phase']
  17.     # 讀取檔案成dataframe
  18.     #df = pd.read_fwf("GameSart_DownLoad.txt")
  19.     df = pd.read_fwf(file_path)
  20.     file_path_arr = file_path.split('.txt')
  21.     print(file_path_arr[0])

  22.     # print(type(df))
  23.     # print(df)
  24.     print(df.shape)
  25.     # print(df.iloc[:,1:7])
  26.     # 從dataframe取DATA那行 1-7 行,第0行不讀
  27.     first_col_cut = df.iloc[:, 1:7]
  28.     print(first_col_cut.shape)
  29.     print(type(first_col_cut))
  30.     a = ""
  31.     # 重組OUT字串
  32.     for i in range(0, len(first_col_cut)):
  33.         for j in range(0, 6):
  34.             a = a + str(first_col_cut.iloc[i, j])

  35.     # print(a)
  36.     # 切割OUT字串
  37.     out_arr = a.split('OUT')
  38.     # print(out_arr)
  39.     # 重新命名輸出檔案
  40.     path = file_path_arr[0]+'-output.txt'
  41.     f = open(path, 'w')
  42.     # 輸出設定訊息
  43.     f.write("設定 Sector per cluster: " + str(SPC))
  44.     print("設定 Sector per cluster: " + str(SPC))
  45.     f.write("\n")
  46.     f.write("設定 Hidden Sector: " + str(HS))
  47.     print("設定 Hidden Sector: " + str(HS))
  48.     f.write("\n")
  49.     f.write("\n")
  50.     for i in range(0, len(out_arr)):
  51.         # print(len(out_arr))
  52.         # out_arr1 =
  53.         hex_arr = out_arr[i]
  54.         # 輸出每列及計算的訊息
  55.         f.write("第" +str(i) + "列 的值: OUT " + hex_arr)
  56.         print("第" +str(i) + "列 的值: OUT " + hex_arr)
  57.         f.write("\n")
  58.         # print(type(hex_arr))
  59.         # 切割nan字串
  60.         hex_arr1 = hex_arr.split('nan')
  61.         for j in range(0, len(hex_arr1)):
  62.             # print(hex_arr1[j])
  63.             if j == 2:
  64.                 # 取nan陣列2字串
  65.                 hex_arr2 = hex_arr1[j]
  66.                 # print (hex_arr2 )
  67.                 # 從字串第5位置切割
  68.                 hex_6code = hex_arr2[4:]
  69.                 f.write("16進位位址: " + hex_6code)
  70.                 f.write("\n")
  71.                 print("16進位位址: " + hex_6code)
  72.                 # 十六進位轉換十進位
  73.                 number = int(hex_6code, 16)
  74.                 if number <= 2048:
  75.                     f.write("值小於"+ str(HS) +",無法計算")
  76.                     print("值小於"+ str(HS) +",無法計算")
  77.                 else:
  78.                     f.write("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
  79.                     print("十進位位址: (" + str(number) + "-"+ str(HS) +")/"+ str(SPC) +" = " + str(int((number - HS) / SPC)))
  80.                 print(" ")
  81.                 f.write("\n")
  82.                 f.write("\n")

  83.     f.close()
  84.     path_label.configure(text='來源:' + file_path, font=(font_type, 11), fg='red')
  85.     message_label.configure(text='目的:' + path, font=(font_type, 11), fg='red')
  86.     message1_label.configure( text= ' 轉換成功,請關閉視窗', font=(font_type,12), fg ='red')
  87.     btn["state"] = "disable"

  88. # 圖形使用者介面
  89. window = tk.Tk()
  90. window.title('Winhex 資料位址,16進位 轉 10進位')
  91. window.geometry('500x160')

  92. title_size =14
  93. notice_size =13
  94. font_size = 12
  95. font_type='微軟正黑體'


  96. header_label = tk.Label(window, text='Winhex 資料位址轉換', font=(font_type,title_size))
  97. header_label.pack(side=tk.TOP)

  98. input_frame = tk.Frame(window)
  99. input_frame.pack(side=tk.TOP)
  100. input_label = tk.Label(input_frame, text='Sector per cluster')
  101. input_label.pack(side=tk.LEFT)
  102. input_entry = tk.Entry(input_frame,width=4)
  103. input_entry.insert(0,'8')
  104. input_entry.pack(side=tk.LEFT)

  105. input1_label = tk.Label(input_frame, text='  Hidden Sector')
  106. input1_label.pack(side=tk.LEFT)
  107. input1_entry = tk.Entry(input_frame,width=6)
  108. input1_entry.insert(0,'2048')
  109. input1_entry.pack(side=tk.LEFT)

  110. btn = tk.Button(window,
  111.                 text='選擇檔案',
  112.                 font=(font_type,14,'bold'),
  113.                 command=hex2dec
  114.               )
  115. btn.pack()
  116. path_label = tk.Label(window, text='', font=(font_type,font_size))
  117. path_label.pack(side=tk.TOP)
  118. message_label = tk.Label(window, text='', fg ='red',width=80)
  119. message_label.pack(padx=5,pady=5)

  120. message1_label = tk.Label(window, text='', fg ='red',width=80)
  121. message1_label.pack(padx=5,pady=5)

  122. window.mainloop()


複製代碼

下載路徑
https://drive.google.com/file/d/159O4X7s3U1h3-VFxdtq_VOX4KvfGjDuH/view?usp=sharing





 
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-6-15 18:24 , Processed in 0.024863 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表