kowala's home

kowala's home
這裡是我的學習筆記,陸續增加中。
http://kowala21.blogspot.com

2012-06-25

Prince of Persia 波斯王子1

有夠懷念的 Dos Game,1990年代,那時我才高中吧。。。沉思中
剛剛突然看到,找了一下,把它相關資料找齊了,跟大家分享,回味一下 :-)


有感覺了吧 :-)


下載
http://www.bestoldgames.net/eng/old-games/prince-of-persia.php

攻略
http://blog.xuite.net/laurated/game/41823550-%E6%B3%A2%E6%96%AF%E7%8E%8B%E5%AD%901%28%E6%94%BB%E7%95%A5%29


這個攻略做得真好,拍一張來給各位看看。


開始玩吧,Win7不能執行Dos全螢幕,可能需要去找虛擬軟體 VMWare 來模擬 XP 或直接開XP來玩。


聽到那醜醜的 PC 喇叭聲,沒錯了,就是這個。

操作
*「←」「↑」「↓」「→」控制方向
*「↑」是跳躍
*「←」+「↑」或「→」+「↑」是斜跳
*「←」+ Shift  或「→」+ Shift 是走路
* 地上的血按「Shift」可以喝
* 爬牆用「↑」+「Shift」
* 攻擊模式 :
 Shift = 攻擊(站立會自動拔劍,必須先有劍,第一關有劍可以撿。)
「↑」 = 擋「↓」 = 收劍
*「空白鍵」看剩多少時間

撿劍


如何在 win7 執行

今天找了一下,發現有人用 DOSBox DOS Emulator 在 win7 下模擬 Dos 環境,經過實測可以,說明如下。

1.下載 DOSBox DOS Emulator ,這是一個免費的專案。
http://www.dosbox.com

2.把 Prince of Persia 波斯王子1 目錄 copy 到 C:\

3.安裝並執行
3.接著輸入下列命令

mount p c:\prince
p:
prince

就可以玩了




全螢幕切換 Alt + Enter

跳出 DOSBox 視窗 Alt + Tab

DOSBox設定教學
http://diy123.blogspot.tw/2007/08/dosbox2.html



以下是本站提供

懶得自己打字,就用載入器幫您打字。

載入器 PrinceLoader
http://kowala21.blogspot.tw/2012/07/prince-of-persia-1.html


血不夠,時間不夠,那就用這個,簡單的外掛。

波斯王子1 PrinceBot
http://kowala21.blogspot.tw/2012/07/prince-of-persia-1-princebot.html

懶得一個一個抓,全幫您打包好了
https://www.dropbox.com/s/cu5xwh7jmo7695c/PrincePaks.rar

裡頭有
prince-of-persia.zip
DOSBox0.74-win32-installer.exe
PrinceLoader.rar
PrinceBot20130218.rar

2012-06-21

tools 檢查特定程序載入了哪些DLL

若我們想要了解系統裡哪些程序正在跑,或是某隻特定程序它呼叫了哪些DLL,就可以使用本工具來查看,本工具提供的訊息包括呼叫者的 PID、Process,DLL的 Base、EntryPoint、size、Path 及 FileName 。

使用說明:
先開啟 "工作管理員" (TaskManager)。


可以看到很多執行中程序,我們來查看 firefox.exe 用了哪些 dll,可以透過批次檔來完成。
先下載 LookUseDlls.rar 解壓縮後,在同一個目錄下,開一個文件 seeusedlls.bat,輸入以下內容。



參數說明
LookUseDlls -[s|l] [filename]

     -s = short name (filename only)
     -l  = Long name (path+filename)
     filename = which exe do you want to check.

Example:
LookUseDlls -l firefox.exe > pids.txt
     check firefox.exe use dlls and turn in to pids.txt
LookUseDlls -s explorer.exe >> pids.txt
     check explorer.exe use dlls and append into pids.txt
LookUseDlls >> pids.txt
      no param is use the default setting that is -s to show all PID's dlls.
LookUseDlls -l >> pids.txt
      show all PID's dlls by long name (path+filename).


點兩下批次檔 seeusedlls.bat,會看到以下結果。


 這可以用來檢查看看有沒有奇怪的程序或DLL藏在其中,也許能查出木馬藏身處:O
當然,也可以看本程式使用的DLL :-)

  PID   proc      Base    EntryPoint   size    FileName
----- ------- ---------- ---------- -------- -----------
01300 0x00030 0x00400000 0x0040126C   110592 C:\Users\k320\Desktop\LookUseDlls.exe
01300 0x00030 0x77CA0000 0x00000000  1294336 C:\Windows\SYSTEM32\ntdll.dll
01300 0x00030 0x772E0000 0x773310C5   868352 C:\Windows\system32\kernel32.dll
01300 0x00030 0x76050000 0x76057A9D   303104 C:\Windows\system32\KERNELBASE.dll
01300 0x00030 0x75DC0000 0x75DD45EE   212992 C:\Program Files\AVAST Software\Avast\snxhk.dll
01300 0x00030 0x77B90000 0x77B9A472   704512 C:\Windows\system32\msvcrt.dll
01300 0x00030 0x76EA0000 0x76EA1438    20480 C:\Windows\system32\PSAPI.DLL
--------------------------------------------------------
LookUseDlls.exe use dlls counts: 6


在不下任何參數的條件下,預設值會秀出全部的程序及使用的DLL,可以看到每個都有這行,這行是防毒程式把程序截了過去。

01300 0x00030 0x75DC0000 0x75DD45EE   212992 C:\Program Files\AVAST Software\Avast\snxhk.dll

防毒程式只能比對程式碼,找已知的病毒樣本,或特徵,但新的病毒可能就要自己找了,我功力不夠,還看不出所以... XD

聽說 Google 有提供雲端 HD ,來試試看好不好用,這樣就不用到處找空間放了 = =

下載 LookUseDlls.rar

https://docs.google.com/open?id=0B9_qAWWvUIuUS0FyUGxOR0EyN0k

另一個載點

https://www.dropbox.com/s/j8unsw3e9gavuy7/LookUseDlls.rar





參考資料
ListDLLs ,這是微軟併購公司的產品,免費下載,也是查看DLL的工具。
http://technet.microsoft.com/en-us/sysinternals/bb896656



2012-06-15

wxDev C++ 開始製作 DLL

讓我們開始為她裝上翅膀,wxDev C++ 也可以很簡單的製作 DLL,什麼是 DLL,簡單的說,就是動態連結程式庫 (Dynamic Link Library, DLL) 是具有函式的共用程式庫功能的可執行檔[1]。

承接上例 Dev C++ psapi.h 使用方法,我們把它轉成 DLL。

先開一個 DLL 專案,命名為 getDD,然後在 getDD.h 及 getDD.cpp 檔,加入以下內容。

/***************
     getDD.h
****************/
#if BUILDING_DLL
# define MY_DECLSPEC __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define MY_DECLSPEC __declspec (dllimport)
#endif /* Not BUILDING_DLL */
extern "C"{
    MY_DECLSPEC void showDll(char str[]);
    MY_DECLSPEC void showAllDll();
}
typedef void (*sDll)(char*);
typedef void (*aDll)();

/***************
   getDD.cpp
****************/
#include "getDD.h"
#include <windows.h>
#include <stdio.h>
#include <psapi.h>

MODULEINFO mi = {0};
void showDll(char str[]){
    printf("XD %s\n",str);
    GetModuleInformation(GetCurrentProcess(),GetModuleHandle(str),&mi,sizeof(mi));
    printf("(1) %s is 0x%p\n",str,mi.lpBaseOfDll);
    printf("(2) %s is 0x%p\n",str,GetModuleHandle(str));
}
void showAllDll(){
    printf("XD All...\n");
    GetModuleInformation(GetCurrentProcess(),GetModuleHandle("psapi.dll"),&mi,sizeof(mi));
    printf("(1) psapi.dll is 0x%p\n",mi.lpBaseOfDll);
    printf("(2) psapi.dll is 0x%p\n",GetModuleHandle("psapi.dll"));
}

打好之後,必須在 Project > Project options > Parameters 加上引用 lib
-lpsapi


再按下編譯,它會產生一個 getDD.a 及 getDD.dll 檔。

接著再開一個 C++ Console 專案來測試,命名為 getDDTest 內容如下。

/***************
 getDDTest.cpp
****************/
#include <windows.h>
#include "getDD.h"

using namespace std;

int main(int argc, char *argv[]){
    HMODULE hInst = LoadLibrary("getDD.dll");
   
    sDll sd=(sDll)GetProcAddress(hInst,"showDll");
    aDll ad=(aDll)GetProcAddress(hInst,"showAllDll");
   
    sd("kernel32.dll");
    ad();
   
    FreeLibrary(hInst);
    system("pause");
    return EXIT_SUCCESS;
}

執行畫面如下




這裡示範動態載入 DLL 執行,也就是說,它是在 RUNTIME 才載入的,
這裡使用 LoadLibrary 載入 DLL,FreeLibrary 釋放 DLL。

LoadLibrary("getDD.dll");

FreeLibrary(hInst);

結束時要記得釋放,LoadLibrary 與 FreeLibrary 是成對出現的,這點寫程式時要注意。

編譯時,要先含入 DLL 資訊檔 libgetDD.a ,可以用她的 Add 按鈕來加入,以避免打錯字。


這樣一共會產生3個檔,但是發佈時,只需要 exe 及 dll 檔就可以執行了。



Reference
[1].http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E5%BA%93
[2].http://www.mingw.org/wiki/sampleDLL

2012-06-13

wxDev C++ exe 瘦身計畫

編譯過後的執行檔經常會很肥大,要如何瘦身?本文來探討這個問題。
以前一個例子 Dev C++ psapi.h 使用方法 來說明

#include <cstdlib>
//#include <iostream>
#include <windows.h>
#include <psapi.h>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[]){
    MODULEINFO mi = {0};
    GetModuleInformation( GetCurrentProcess(), GetModuleHandle( "psapi.dll" ), &mi, sizeof(mi) );
    printf("(1) psapi.dll is 0x%p\n",mi.lpBaseOfDll);

    printf("(2) psapi.dll is 0x%p\n",GetModuleHandle( "psapi.dll" ));

    //cout << "Press the enter key to continue ...";   
    //cin.get();
    system("PAUSE");
    return EXIT_SUCCESS;
}

這個檔案若使用 wxDev C++ 預設值來編譯,出來的執行檔將會是 1.43MB


若我們不使用肥大的函數,改使用舊的較陽春函數,編譯後執行檔將會是 427kb

    cout << "Press the enter key to continue ...";   
    cin.get();

    system("PAUSE");

不要使用[1]
    #include <iostream>



如果再把除錯資訊去除,那體積縮減量更為可觀,編譯後執行檔將會是 7kb
 

我們只須在 Linker 中加上參數 -s 即可。[2]





reference
[1].http://stackoverflow.com/questions/1042773/gcc-c-hello-world-program-exe-is-500kb-big-when-compiled-on-windows-how
[2].http://www.mingw.org/wiki/Large_executables

2012-06-12

Dev C++ psapi.h 使用方法

很多人認為,Dev C++ 沒什路用,不能用 win api,其實只要簡單的設定參數,就能用到翻過去了 ;-)
下面就用這個 psapi.dll 來當範例,來秀出一個指定 dll 的位址。

代碼

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <psapi.h>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[]){
    MODULEINFO mi = {0};
    GetModuleInformation( GetCurrentProcess(), GetModuleHandle( "psapi.dll" ), &mi, sizeof(mi) );
    printf("(1) psapi.dll is 0x%p\n",mi.lpBaseOfDll);

    printf("(2) psapi.dll is 0x%p\n",GetModuleHandle( "psapi.dll" ));

    cout << "Press the enter key to continue ...";
    cin.get();
    return EXIT_SUCCESS;
}

上面引用了 3 個 lib
#include <windows.h>
#include <psapi.h>
#include <stdio.h>

psapi.h 這個必須自己載入,在 DevC 中,要另外以專案參數寫入
PSAPI.DLL 在專案link下增加參數
-lpsapi


windows.h 中定義了許多用到的符號,例如 LPVOID,DWORD,HMODULE,LPMODULEINFO...
stdio.h 我們有使用 printf()

參考資料:
http://forum.cheatengine.org/viewtopic.php?p=2386858&sid=f7d158bf3497bce59f1e5b85059f2ee8

2012-06-08

顯示器驅動程式停止回應

不知各位有無這種問題,顯示器驅動程式停止回應,強烈懷疑是一種新型木馬

前幾天看新聞提到,俄羅斯發現新型木馬,體積很龐大,不具破壞性,但會蒐集按鍵及拍照,他們懷疑是美國政府所為,或是暗中資助。。。

我的電腦也常常會固定黑屏,而且都是在 not busy 狀態時,我把系統還原後就不會了,但是每當我小孩來用電腦後,他們是玩線上遊戲,就會出現這種症狀了,特徵如下。

1.打字會 lag
2.定時黑屏(拍照),顯示器驅動程式停止回應

故有上述聯想,當我忍不住時,就會拿出還原光碟,花一個小時還原,就搞定了,各位參考看看,還有,建議別在電腦搞金流,免得損失。


P.S. 2012-6-21 我花了幾天寫了一隻查看 DLL 工具,希望有幫助。
 tools 檢查特定程序載入了哪些DLL