德錡Keypro Rockey4 ND 軟體保護鎖 Keypro測試

對於開發軟體的人來說,最怕的莫過於自己辛苦開發多時的軟體,上市之後馬上遭受破解、盜版。不僅對開發者來說是莫大損失,也會降低開發的意願,所以開發者便會以各種方式來保護軟體。

保護軟體目前的方式有軟體保護(註冊碼、試用期間….)或硬體保護二種方式。當然軟體的部份總是道高一尺、魔高一丈,網路上總有神人有辦法破解,比較保險的做法仍是以硬體保護為主。ROCKEY4ND軟體保護鎖剛好前陣子接到德錡實業的業務經理簡先生電話,寄來了一支測試的Rockey4軟體保護鎖,順便將測試的結果告訴大家。

目前Rockey4軟體保護鎖支援的系統有:

  • Dos
  • Win98
  • Win2000
  • Win NT
  • Win XP
  • Vista
  • Win 7 32/64(二種版本均支援)
  • Win8 32/64(二種版本均支援)
  • Linux

支援的程式語言則有:

  • ASM
  • ASP
  • BCB
  • Cobol
  • Delphi
  • Fortran
  • FoxPro
  • Java
  • JavaScript
  • LabView
  • Perl
  • PHP
  • PowerBuilder
  • Visual Basic
  • VBA
  • VC
  • VS.NET

這邊筆者就列出PHP跟Delphi的使用方式

PHP
在使用前需註冊 regsvr32 Rockey4NDCom.dll

[php]
// 使用COM調用Dll
$Rockey = new COM("Com.CRockey4ND") or die("<h3>無法初始化保護鎖元件</h3>");
$Rockey->p1 = new VARIANT(0xc44c, VT_UI2);
$Rockey->p2 = new VARIANT(0xc8f8, VT_UI2);
$Rockey->p3 = new VARIANT(0x0799, VT_UI2);
$Rockey->p4 = new VARIANT(0xc43b, VT_UI2);

// 開啟保護鎖
$result = $Rockey->RockeyCM(3);
if ($result==0) {
print "<h4>Success</h4>";
} else {
print "<h4>Failed, Error Code: $result</h4>";
exit();
}
// 讀出資料
$Rockey->buffer = new VARIANT($text, VT_BSTR);
$Rockey->p1 = new VARIANT(0, VT_UI4);
$Rockey->p2 = new VARIANT(500, VT_UI4);
$result = $Rockey->RockeyCM(7);
if ($result==0) {
print "<h4>Success, Result: ".$Rockey->buffer."</h4>";
} else {
print "<h4>Failed, Error Code: $result</h4>";
exit();
}
[/php]

Delphi
Delphi的方式則有二種:一種是以Dcu一種是載入Dll
Dcu(Delphi Compiled Unit)要先把Rockey4ND.dcu複製到開發的資料夾。
DLL則是要把Rockey4ND.dll複製到開發的資料夾。
DCU寫法
1.Use rockey4nd;
2.宣告
mBuf:array[0..100] of Byte;
mFun,mP1,mP2,mP3,mP4,rt:Word;
lP1,lP2:LongWord;
mHand:array[0..16] of Word;
mHardID:array[0..16] of LongWord;
rc:array[0..4] of Word;

[pascal]
R4ND_Init(); //初始化
mP1:=$c44c;
mP2:=$c8f8;
mP3:=$799;
mP4:=$c43b;
for i:=0 to 30 do
mBuf[i]:=0;
rt:=0;
// 尋找是否有插Keypro
mFun:=1;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,’cannot find ROCKEY1,error:%d ‘,[rt]);
List.Items.Add(str);
exit;
end;
List.Items.Add(‘find ROCKEY No.1’);
[/pascal]

DLL寫法

[pascal]
mBuf:array[0..100] of Byte;
mFun,mP1,mP2,mP3,mP4,rt:Word;
lP1,lP2:LongWord;
mHand:array[0..16] of Word;
mHardID:array[0..16] of LongWord;
rc:array[0..4] of Word;

function Rockey(fun:Word; var Handle:Word;
var lp1,lp2:LongWord;
var P1,P2,P3,P4:Word;
var buf:Byte):Word;
stdcall;external ‘Rockey4ND.dll’;
[/pascal]

 

[pascal]
mP1:=$c44c;
mP2:=$c8f8;
mP3:=$799;
mP4:=$c43b;
for i:=0 to 30 do
mBuf[i]:=0;
rt:=0;
mFun:=1;
rt:= Rockey(mFun,mHand[0],lP1,lP2,mP1,mP2,mP3,mP4,mBuf[0]);
if rt<>0 then
begin
FmtStr(str,’not find ROCKEY1,error:%x ‘,[rt]);
List.Items.Add(str);
exit;
end;
List.Items.Add(‘Find the first ROCKEY’);
[/pascal]

在測試完之後,發現程式的撰寫並不複雜。可以杜絕盜版以及破解的風險,避免軟體從商用變成公用 🙂

在安全性上保護鎖上面分兩級 4 個密碼,每個密碼 16 位長,第一級是基本密碼,對加密鎖進行基本調用時用,第二級密碼是開發商專用密碼,作用是控制加密鎖的寫入和定義加密算法,它在最終用戶的軟體中是不應該也是不需要出現的,即使跟蹤也跟不到。而每個開發商的加密鎖密碼都是不同的,也不用擔心其他開發商可以破解。
價格的部份,一支的價格介於400-500上下(依數量而定),也算是還可以接受的價格。建議有需要的朋友可以參考囉 🙂

相關連結:

德錡實業有限公司(http://www.mtitw.com)

Feitian http://www.ftsafe.com/
業務 簡建昌 0988778171電話 02-27555955
地址 台北市復興南路二段180巷29號1樓德錡實業有限公司 業務經理 簡建昌

回顧2013生活大事「自分新聞」

2013年即將結束,準備邁向2014年了。日本的網友做了一個「自分新聞」的服務,透過facebook的發文來計算相關數據。大家可以建立一份自己的2013生活大事新聞。

自分新聞:https://apps.facebook.com/jibunshimbun/

あなたが2013年にFacebookで投稿したポストからあなただけの自分新聞を作成します!

左上角:12月份人氣話題

左下角:年度發文趨勢

右上角:最多讚的人氣文章(頭條)

右 中:最多人留言的文章

右下左:按讚王

右下右:流行語

紙本電子發票格式統一並正名電子發票證明聯

雖然電子發票已經實施三年多,但紙本的電子發票格式凌亂不堪~終於財政部規定明年開始的電子發票格式統一為5.7公分寬、9公分長,另外發票期別發票號碼將加大與加粗,交易明細將不再主動列印,直接儲存於發票下方的兩個QRcode,民眾可直接利用APP 查詢。如對交易明細有需求的民眾,可要求營業人於開立發票時一併列印供保存查詢,但對統編等有報帳需求之民眾,仍由營業人主動列印給予交易明細。另為符合 電子發票雲端儲存的模式,紙本電子發票(收執聯)將更名為「電子發票證明聯」。

電子發票相關問題可以到「財政部電子發票整合服務平台」看資料。

網址: https://www.einvoice.nat.gov.tw/

 

Delphi將Image存入MySQL資料庫

存入
[php]
var astream : Tmemorystream;
begin
AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
if adoquery1.Active then
begin
adoquery1.Edit;
TBlobField(adoquery1.FieldByName(‘File’)).LoadFromStream(AStream);
adoquery1.Post;
end;
finally
AStream.Free;
end;
[/php]

取出
[php]
var
Ms:TStringStream;
jpg1:Tjpegimage;
begin
Ms := TStringStream.Create(”);
jpg1 := Tjpegimage.create;
try
if adoquery1.Active then
begin
TBlobField(adoquery1.FieldByName(‘File’)).SaveToStream(Ms);
Ms.Position := 0;
jpg1.LoadFromStream(ms);
image1.Picture.Bitmap.Assign(jpg1);
end;
finally
ms.Free;
jpg1.Free;
end;
[/php]

注意,如果出現Got a packet bigger than ‘max_allowed_packet’ bytes
在My.ini加上
max_allowed_packet = 10M

php4fun找出PHP漏洞小遊戲

php4fun是一個很好玩的PHP資訊安全小測試的網站,提供8道不同的題目,您要從出現的訊息以及原始碼中找到漏洞進而解答取得目標。

以第一題為例,頁面上出現Invalid password!。

看一下原始碼

[html]

<!–
#GOAL: get password from admin;
error_reporting(0);
require ‘db.inc.php’;

function clean($str){
if(get_magic_quotes_gpc()){
$str=stripslashes($str);
}
return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET[‘username’]);
$password = @clean((string)$_GET[‘password’]);

$query=’SELECT * FROM users WHERE name=\”.$username.’\’ AND pass=\”.$password.’\’;’;
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
die(‘Invalid password!’);
}

$row = mysql_fetch_assoc($result);

echo "Hello ".$row[‘name’]."</br>";
echo "Your password is:".$row[‘pass’]."</br>";
–>
Invalid password!
[/html]

了解是要取得admin…..接下來就要思考透過sql injection的技巧去解題了。
php4fun

http://php4fun.sinaapp.com/

國道計程收費通行費試算網站

預計在2014年1月(下個月)要實行的國道計程收費即將上路,預計有不少駕駛人為了節省里程費,會提早下高速公路改行駛快速或平面道路。

國道高速公路局也推出一個計程通行費試算的網站,讓大家可以試算費用。

服務內容: 國道高速公路局 – 計程通行費試算
服務網址: http://fare.fetc.net.tw/

國道計程收費試算
國道計程收費試算

自訂行程  建議行程