發表文章

目前顯示的是 2021的文章

[Win10]關閉全形設定

圖片
  設定>時間與語言>語言> 語言選項:中文(繁體台灣) 點選微軟注音輸入法>選項>一般> 關閉 "使用Shift + 空白鍵切換字元寬度"

[C#]紀錄被綁架的資料庫還原

 近來出現一波針對威聯通(QNAP)網路儲存裝置(NAS)的勒索攻擊 Qlocker,用戶裝置一旦感染之後,NAS 中的所有檔案便會被惡意軟體使用 7zip 壓縮並加上密碼保護。據了解,Qlocker 的幕後主使者在短短五天之内,不法所得已高達 26 萬美元以上。 根據資安媒體 BleepingComupter 報導,從 2021 年 4 月 19 日起觀測到Qlocker 勒索攻擊的足跡,且受害者數量快速增加,世界各國陸續傳出災情。使用者的 QNAP NAS 裝置一旦感染 Qlocker,當中所有檔案便會被惡意軟體使用 7zip 壓縮並加上密碼保護。而當 Qlocker 完成壓縮後,用戶的 NAS 中便會出現一個顯示「!!!READ_ME.txt」的未加密文字檔,內文即是威脅用戶付出 0.01 枚比特幣的贖金,以取得解壓縮用的密碼。 如同上述文章,最近花錢消災,取得加密密碼後,才發現後續工程才是一大麻煩啊! 先分析加密的資料有那些問題~ 超過20M以上不會被加密壓縮 中文檔案的壓縮檔打開後的檔名是亂碼 .7z檔 無法直接用套件解壓縮原本使用  DoNetZip 的套件,但是一直出現錯誤(無法視為ZipFile) 解決方法     直接用cmd 執行7zip 解壓縮      //解壓縮           {             Process process = new Process();             process.StartInfo.FileName = @"C:\Program Files\7-zip\7z.exe";             process.StartInfo.Arguments = @"e E:\test.zip -o(檔案路徑) -p(密碼)";             process.Start();        } 但問題解了一個還有一個,中文檔案的名稱不對阿   ヽ(#`Д´)ノ 原本打算先從cmd 取得檔名,然後利用.7z 檔名取代內部錯誤的檔名,但是檔名是亂碼根本無法取得檔案。 產生一個暫存資料夾,解壓縮一份檔案後取得資料夾內部檔案,利用File.Move()的方式,將檔名更換,最後刪掉暫存檔的資料。 最後發現這樣還是無法判斷執行檔到底有沒有work,需要產生一個l

[JAVA]enumeration 列舉

列舉可做為「常數」的集合 ,如果不在集合內的物件,compiler不會過。 ※ 使用列舉可以避免誤用錯誤的常數   列舉可搭配 switch 使用 列舉可以在類別內 (inline) 定義 列舉可以有建構子 (constructor) ,可建構複雜的列舉 依據上例,有幾件事項要說明一下: 1.       列舉實例必須最先定義。 2.       最後一個列舉實例必須加上分號 (;) 。 3.       新屬性不能在列舉實例之前宣告,需在列舉實例之後宣告。 4.       建構子有二個參數,所以每個 列舉實例都要傳入二個參數。 5.       建構子是隱含性的 private , private 修飾詞可寫可不寫,不能變更為 public 。 參考:https://www.tpisoftware.com/tpu/articleDetails/1432

[Java]例外處理

覆寫  java 子類別 override 父類別別名方法不能拋出 種類,範圍大於父類別所宣告的exception。 Assertion 斷言(斷定他不會發生) 語法:   assert  條件; assert 條件 : 自定訊息;  // 條件為否時做,訊息跳出的指令為  java -ea 檔名 try  catch final

[VM]虛擬機安裝

 SQL Injecttion WINDOWS10設定 CMD(系統管理員的身分) 下指令-bcdEdit /set hypervisorlaunchtype off 開始功能表中選取 命令提示字元  (Command Prompt) 磚按右鍵,然後點選 以系統管理員身分執行  (Run as administrator)   關閉Hypers 在[控制台] 中,選取[ 程式和功能]。 選取[ 開啟] 或[ 關閉Windows  功能]。 展開 Hyper -V,展開 Hyper -V 平臺],然後清除[  Hyper -V 虛擬機器監控程式] 核取方塊。 安裝Virtual Box  帳號:root 密碼:123456 安裝MySQL (可能需要裝c++ 分散套件) 帳號:root 密碼:a123456B+ 測試Mysql是否有執行(需在Linux底下執行) systemctl status mysqld 如果MySQL掛了  systemctl  restart mysqld 加密模式連線虛擬機 Putty WinScp

[Java]import 與 static

import -告訴以下程式使用哪一個package下的元件 java import 文法; import packageName.className //單一類別 import java.util.Date; class importtime{ public static void main(String[] args){ Date date2 = new Date(); System.out.println(date2); } } import packageName.* //package以下同一層的所有類別 import java.util.*; class importtime{ public static void main(String[] args){ Date date2 = new Date(); System.out.println(date2); } } import java.util.*; import java.sql.*; class importtime{ public static void main(String[] args){ Date date2 = new Date(); System.out.println(date2); } } //產生error 無法辨識是哪一個package底下的成員 static import -package下的元件中有static的成員 import static java.lang.System.out; class importstatic{ public static void main(String[] args){ out.println("step1"); out.println("step2"); out.println("step3"); out.println("step4");

套件-Package

 FQN -Fully qualified name 完全限定名稱 功能-做軟體分類 安全性控管 命名規則-小寫的倒寫URL 實作-以目錄的形式來實踐 package com.lccnet; class HelloWord{ public static void main(String[] args){ System.out.println("Hello World!!!!"); } } 通常一份 .java 檔格式的程式碼結構 package com.000; //一個 import OOOO; //多個 class HelloWord //多個 { public static void main(String[] args){ System.out.println("Hello World!!!!"); } } 當使用套件執行.java檔時,必須再套件的前一個目錄才能執行  javac HelloWord.java 如果要在所有的目錄底下都可以執行該套件的.java檔的.class檔時,必須設定絕對路徑 set classpath=C:\Alice\classes;%classpath% C:\>java com.lccnet.HelloWord 開發程式會將.java檔跟.class檔分開 src→ .java檔 classes→ .classes檔 java -d C:\Alice\classes com.lccnet.HelloWord //命令列模式 java -cp C:\Alice\classes com.lccnet.HelloWord //單行模式 java -classpath C:\Alice\classes com.lccnet.HelloWord //單行模式 verbose 檢視呼叫過哪些執行檔 java -verbose com.lccnet.HelloWord //單行模式 在java的系統中ext的優先權最高,將.jar檔放入C:\jdk1.8\jre\lib\ex

繼承-Inheritance

物件導向程式開發的三個重點,Java是單一繼承  (C++是多重繼承) 繼承-目的 code reuse 封裝 多型 通常是特殊型別 繼承 通用型別 語法 class 子類別名稱 extends 父類別名稱{    } override overload 覆寫 多載 子類別繼承父類別的屬性跟方法, 然後改寫 相同的 方法名稱,擁有不同的 實作。 class SuperClass { String str="super str"; void fun (){ System.out.println("super method"); } } class SubClass extends SuperClass { void fun (){ System.out.println("子類別改寫父類別方法override"); } String newstr="子類別新屬性";      void newfun (){ System.out.println("子類別的新方法"); } } void test () ; void test ( int i) ; void test ( char c) ; void test (String s, int i) ; void test (String s, String s2) ; 子類別可以new 父類別的型別 物件 obj1 是子類別,但是只有父類別的屬性跟方法 SubClass obj1= new SubClass();   物件 obj1 可以轉回子類別 obj2 SubClass obj2=(SubClass) obj1; Instanceof &

類別型態 vs 基本型態

基本型態 類別型態 目的 效率 類型 long、int、double、float、boolean、byte Long、Integer、Double、Float、Boolean、Byte 語法 基本型態 變數名= XX; 類別型態 變數名=new 類別型態(); 自動裝箱(Auto Boxing) 您要使用包裹型態(Wrapper Types)才能將基本資料型態包裝為物件,前一個小節中您已經知道在 J2SE 5.0 之前,要如下才能將 int 包裝為一個 Integer 物件: Integer integer = new Integer(10); Long k=new Long(0); 在 J2SE 5.0 之後提供了自動裝箱的功能,您可以直接如下撰寫來包裹基本型態: Integer integer = 10; Long k=0L; 自動拆箱(unboxing) public class AutoBoxDemo2 { public static void main (String[] args) { Integer i1 = 100 ; Integer i2 = 100 ; if (i1 == i2) System.out.println( "i1 == i2" ); else System.out.println( "i1 != i2" ); } } Integer pool 的範圍為1byte :-127~128 物件型態的處理時間比基本型態還慢!!! class wrapperclass { public static void main ( String[] args ) { long

[Java]物件導向

 http://tw.gitbook.net/java/index.html 陣列 型態 變數名 ; int[] array = new int[5]; class Testarray  {    public static void main(String[] args){                       System.out.println("陣列");           int[][] arr= new int[3][9];           int k=1;                      System.out.println("tttt"+arr.length);            for(int i = 0;i<arr.length;i++){                                 for(int j = 0;j<arr[i].length;j++){                                     arr[i][j] =k++;                                             System.out.print(" "+arr[i][j]);                   if((k-1)%3==0 && k>1) System.out.println();                                 }               System.out.println();                           }     } } OUTPUT: 1 2 3 4 5 6  7 8 9 10 11 12 13  14 15  16 17 18 19 20 21 22 23 24 25 26 27

[Java]迴圈_2

圖片
For用法 for(int i=1;i<10;i++) for( ;i<10;i++ ) for(int i=1; ;i++) for(int i=1;i<10; ) for(int i=1; ; ) for( ;i<10; ) for( ; ;i++) for( ; ; ) = while(true) 迴圈( 條件 ){     敘述一;     continue; //跳到迴圈開頭      敘述二;     break; //跳出迴圈, 終止程式      敘述三;     break  bable1;      continue    bable1; } class ForBreak{     public static void main(String[] args){                  System.out.println("九九乘法表");         int i=1;          for(;;){           int j=1;                      for(;;){                 System.out.print(i+"*"+j+"="+i*j);                 System.out.print(i*j>9?" ":"  ");                   if(j>8) break;                 j++;                                           }                if(i>8) break;                i++;                      System.out.println();                      }                    } } 迴圈次數 不限次數 do wh

[Java]迴圈_1

For for( 初始化參數;迴圈判斷;迴圈增量 ){ } class ForMulti{     public static void main(String[] args){                   System.out.println("九九乘法表");                  for(int j=1;j<10;++j){                       for(int i=1;i<10;++i){                 System.out.print(i+"*"+j+"="+i*j);                 if(i*j>=10){                 System.out.print(" ");                 }                 else{                 System.out.print("  ");                 }                             }                System.out.println();                       }                   } } class ForMulti1{     public static void main(String[] args){                   System.out.println("九九乘法表");                  for(int j=1;j<10;++j){                       for(int i=1;i<10;++i){                 System.out.print(i+"*"+j+"="+i*j);                    System.out.print(i*j>9?" ":"  ");    //三元運算指令