搞破解的人大概都知道什麼叫暴力攻擊法吧!

今天被一個ORACLE Error搞得極度火大,利用OracleCommand INSERT資料,ORACLE冷冷地說: "ORA-01401 inserted value too large for column",很好,給的字串太長? 為何不說哪個欄位有問題? 我用OracleParamer沒法直接轉出SQL語法去SQLPLUS驗證,而且總共有三四十個欄位耶~~ 你不要光搖頭!! 你倒是說呀!! 你給我說呀!!(猛力搖晃肩膀)

網路上查到ORACLE 10g會比較親切地指出問題出在哪一個欄位,雖然現在用的是9i,只要花少少幾百萬就可以讓ORACLE更親切耶! 真是太超值! 太划算了... orz

可想而知,解決這問題的正途是人工逐一檢查比對各欄位的長度。不過今天在盛怒之下,我做了一件不理性的事,寫了一小段暴力攻擊法,逐一縮短字串長度,直到指令執行成功為止,如此就可以知道那一個欄位長度要多短才會過關。

不過,這裡有幾個假設:

1.所有欄位中只有一個超出長度
2.你想知道明確的值位長度上限(不然直接將欄位設成空字串會比較有效率)
3.使用的ORACLE資料庫是測試開發性質,經得起你催殘
   (換句話說,使用風險自負,不管被DBA譙、被老板罵、被公司開除都與我無關)
4.你知道將catch Block當成正常流程極無效率,會這麼做只是為了洩憤
5.使用完畢後應前往寺廟為自己的嗔怒業障懺悔贖罪

適度的宣泄情緒有助於程式開發人員的心理健康,想了想,還是把這段跑起來很爽的Code跟大家分享一下,阿彌陀佛!

//Log Command Error
System.Diagnostics.Debug.WriteLine("Command Error!!");
System.Diagnostics.Debug.WriteLine("CommandText=" + cmd.CommandText);
foreach (OracleParameter p in cmd.Parameters)
{
    System.Diagnostics.Debug.WriteLine(
        string.Format("Parameter[{0}](Type:{1})(Len:{2})={3}",
        p.ParameterName, 
        p.DbType.ToString(),
        p.Value.ToString().Length, p.Value.ToString())
        );
}
//Brute Force Attack 
(Warning: Never run these unless you know what you are doing)
using (OracleConnection bfcn = new OracleConnection(_cnnString))
{
    bfcn.Open();
    cmd.Connection = bfcn;
    foreach (OracleParameter p in cmd.Parameters)
    {
        if (p.OracleType == OracleType.VarChar || 
            p.OracleType == OracleType.NVarChar)
        {
            string v = p.Value.ToString();
            string origVal = v;
            for (int i = v.Length - 1; i >= 0; i--)
            {
                p.Value = v.Substring(0, i);
                try
                {
                    cmd.ExecuteNonQuery();
                    System.Diagnostics.Debug.WriteLine("Hallelujah");
                    System.Diagnostics.Debug.WriteLine(
                        string.Format("Parameter[{0}]-Len[{1}]",
                        p.ParameterName,
                        i));
                    break;
                }
                catch
                {
                }
            }
            p.Value = origVal;
        }
    }
}

Comments

# by

可以請妳教我破解日盛證券的spe檔鎖碼嗎?多少費用?winhsu888@gmail.com 謝謝

# by Joy

是否可請破解日盛證券SPE檔的密碼? 報價多少? 我的MAIL: kimberly2008@livemail.tw 謝謝您

Post a comment


65 - 1 =