發表文章

目前顯示的是 2018的文章

格式透視 - 解析 PE 文件格式

圖片
程式身家基本訊息:PE file structure PE 是 Portable Executable 的縮寫,也就是 Windows 系統中的可執行(Executable)程式或動態連結函式庫(Dynamic link library)的文件格式,主要使用在 32 位和 64 位的 Windows 操作系统上。 為了能夠瞭解 PE 格式,我們需要以下的對照: 1. PE 格式示意圖 2. Hiew 程式,以小算盤為範例 3. PE 格式圖 以下為簡單對照 DOS MZ Header 開頭必定為"MZ"4D 5A,這是 DOS EXE 的 Signature。而這東西讓 PE file 在 DOS 模式下也可執行,所佔大小為 40h bytes。 DOS Stub 但也不是什麼都能在 DOS 底下執行,若是程式在 DOS 下無法執行便會跳出這邊的錯誤訊息:" This Program cannot be run in DOS mode "。 PE Header 為了找到 PE 的開頭位置,我們可從 DOS Header 0x3C 的位置找到一個 Double word(又稱 dword,大小為 4 個 bytes),這個 dword 大小表示了整個 DOS MZ Header 的 size, 也就是 D8 00 00 00 ,注意!這裡實際位置是 0x000000D8 ,想必 IQ180 的各位已經注意到必須以 Byte 為單位顛倒過來看才行,這種反向讀取方式稱之為 Little-endian order ,在 PE 文件中皆採用此種讀取方式。 到了 PE 位置所看到的必定是 50 45,PE Header 裡包含了許許多多的訊息,其中最重要之一就是距離 PE 位置(0xD8)後 0x28 的 dword,這裡是這隻程式執行時的入口點(Entry point)。聽起來好像沒什麼重要的,不過若是入口點被設置在檔案的 Overlay 區域呢?這就很有趣了~正常來說是不會設置在這邊的。 什麼是 Overlay? 這個以後會再說 再往後數 12 Bytes 則是 Image base,下圖最後 4 Bytes,也就是 0x01000000 之前找到的入口點是相對虛擬位置(Relative virt

doc 命令列特性

2.命令列特性 多行指令合併 要將分開多行的指令寫成一行,可利用 & dir & pause 切換目錄:CD change directory的縮寫,注意絕對路徑與相對路徑的差別,鍵入cd /?可得到更多的說明 使用 /D 參數可以同時變更工作磁碟機及其工作目錄 D: cd /d c:\windows\system32 路徑中含有空白字元時,請使用雙引號括起來 cd "\winnt\profiles\username\programs\start menu" 切換工作目錄至批次檔所在目錄 cd /d "%~dp0" 顯示目前工作目錄 echo %CD% 顯示目前磁碟機 echo %CD:~0,3% 導向(Redirect) 以命令的處理為主,輸入導向是檔案、輸出導向也是到檔案 將命令的輸出導向到檔案或控制碼,對於檔案來說有新建立(>)與附加(>>)二種 命令 > 檔案名稱 命令 >> 檔案名稱 命令 2>>檔案名稱 命令 2>&1 命令的輸入來自某個檔案或控制碼,只有 < 一種 命令 < 檔案名稱 dir > list.txt sort < list.txt sort < list.txt > alphlist.txt 控制碼英文 控制碼數值 控制碼意義 stdin 0 鍵盤輸入 stdout 1 正常輸出至命令提示字元 stderr 2 錯誤輸出至命令提示字元 特殊裝置 Windows 效法了 Linux 作業系統將周邊裝置視為檔案的作法,至少有下列2種特殊裝置可視為檔案來運作 主控台(console) 透過命令列方式直接keyin內容,以建立檔案 copy con newfile.txt 黑洞(nul) 一般用來將指令的正常訊息導向至黑洞,使正常訊息不要顯示在螢幕上,然後配合判斷 errorlevel 或 %errorlevel%變數,寫入log ping 168.95.192.1 > nul if errorlevel 1 echo ping target fail

LINE嚴選好物官方帳號

圖片
正確答案如下 Q1 LINE 嚴選好物官方帳號 推播圖中的戳章在商品圖的哪裡 ? 答案 : 右下方 ( 也有左上方的,但選項沒有 ) Q2 以下哪一品   非 嚴選好物 近期推出的商品呢 ? 答案 : 無墨水鋼筆 Q3 請問怎樣才可以順利 拿到嚴選好物的點數回饋呢 ? 答案 : 以上皆是

windows 批次檔介紹

圖片
1.批次檔介紹 將命令提示字元(Command Prompt)中輸入的指令集結起來,輸入在文字檔中,用以批次執行,稱之為批次(Batch file)檔。 批次檔指令每行的長度預設為127個字元,執行後若要中斷可按下Ctrl+C。 命令提示字元預設的字碼頁為ANSI/BIG5編碼,因此檢視UTF-8編碼檔案時會出現亂碼,所以批次檔的編寫應盡量使用 ANSI 的編碼方式,建議使用  NotePad++  之類的有顏色與語法提示的純文字編輯器編寫。 NotePad++目前編輯文字檔採用的編碼方式會在右下角提示, 建議透過功能表:編碼 / 轉換至ANSI 編碼格式,將編碼轉換為  ANSI  格式。    學習批次檔等同於學習一個作業系統在命令列環境(shell)的用法,Windows環境目前有很多Linux的影子,例如導向、管線、指令與檔案名稱補齊...等,理解之後未來接觸Linux也有很大的幫助。 學習批次檔一般而言相當的簡單又直覺,怎樣算是學會呢,以本人的經驗,至少要將變數延遲展開特性與 for 迴圈指令給透徹了解才算是掌握了批次檔喔。 副檔名 預設有下面這2種,在DOS與Windows 9x 時代副檔名為.bat,在Windows NT 之後則改用.cmd,表示在視窗模式下的命令提示字元(cmd.exe)執行 bat cmd 註解方式 標準是使用 rem,但通常會使用2個以上的冒號來當註解符號,畢竟字數比較少嘛 rem :: 顯示訊息 批次檔中用來顯示訊息的指令是 echo , 其後可加上字串或變數(可混搭) ,在正常的情況下,批次檔中的每道指令執行前都會先出現螢幕上,使用 echo off 指令,就可以關閉顯示指令,通常在不需要互動的批次檔中都一定會出現。 @ech off set /P myname=Please input your name: echo Hello %myname% echo. echo Today is %date% %time% pause 停止下達的指令顯示在螢幕上 => echo off 空一行 => echo. 顯示當前目錄 => echo %cd% 顯示日期 => echo %date% 顯示時間 => echo %time%

doc 變數

變數 設定變數 批次檔使用的變數就是作業系統的 環境變數 ,一般來說都視為字串變數,而且是是全域變數,我們可以透過下面的指令觀察有哪些環境變數。 set 設定變數時,一樣使用 set 指令, 注意等號左右不能有空白 。 set myname=Peter 若設定的變數代表路徑時,因為路徑中可能包含空白字元,建議以雙引號含括起來較好,單純顯示沒問題,但在命令列解析時,因為會以空白當作參數分隔,若沒有用雙引號時,會被分開當成2個參數處理,造成錯誤。 set ProgramPath="c:\Program Files (x86)" 取用變數 取用變數時,則需在變數前後加上% echo %myname% 取消變數 取消變數時,只需依照設定變數的方式,但值是空白即可 set var= 變數的運算 set 使用 /a 參數,可使後面的敘述成為運算式 set var=6 set /a var+=3 需注意的是,若變數的值為08或09的時候,會被視為一個錯誤的8進位而其值為0,影響後續的計算 set var=08 set /a var+=3 set var=09 set /a var+=3 輸入提示 set 使用 /p 參數,等號(=)開始到冒號(:)結束的一段文字將視為輸入的提示 @echo off :menu echo 1.dir echo 2.dir /w echo 0.離開 set /p id=請輸入功能代碼: if %id%==1 goto one if %id%==2 goto two if %id%==0 goto zero :one dir goto menu :two dir /w goto menu :zero 字串的擷取 批次檔也可以像一般程式語言一樣,做到從字串的第n個位置開始擷取m個字元這件事 步驟 %date% %date :~0,4 % 說明 當下日期變數 變數從第0位開始取4碼  1 值 2015/10/17 週六 2015 上述說明的程式碼如下 set today=%date:~0,4%/%date:~5,2%/%date:~8,2% echo %today% 1 字串擷取符號說明 冒號(:) 波浪符號(~) 開始位置(從0