iPhone SMS修改教學 Part1 ~ 基本簡訊資料修改

這篇算是拖了大半年的教學吧XD

由於很多人會問說,該如何從舊的手機匯入簡訊到iPhone,

或者iPhone簡訊消失了該怎麼手動增加...之類的,

所以皮樂就來教大家如何來修改你的iPhone SMS吧。

 

在開始之前皮樂必須先嚴正聲明:

所有關於SMS的修改教學僅供個人備份、匯入、回復簡訊使用,

請勿利用任何的方式,去修改、創建未經真正傳輸所得到的簡訊,

或者在未經他人同意下修改、備份他人簡訊,

否則要是出事情的話,有可能將會以偽造文書罪處理。

 

在修改之前,請準備以下的知識以及工具:

1. 一台JB過的iPhone

2. iPhone 簡訊資料庫 sms.db (在 /User/Library/SMS 底下)

3. 一台可以安裝Firefox 4.x以上版本的電腦(不限作業系統)

4. 基本的iPhone檔案權限管理知識

5. 基本的英文能力

 

 

首先,請對你的SMS資料庫作備份,以防萬一,

另外,建議仔細檢查一下是否有未傳成功的簡訊,

有的話請傳出去或者刪除,否則可能會造成修改後的檔案出錯

之後開啟Firefox,到這裡安裝外掛,以修改sms.db。

 

安裝之後在工具裡面開啟SQLiteManager,

OpenSQLiteManager

 

接著在SQLiteManager裡面開啟你的sms.db,

在左邊欄位找到Triggers這項,把它展開,

 

每個人的Triggers數量可能不同,有人有8項,有人只有7項,

不過沒有關係,操作方式都是一樣的。

DropTrigger

 

現在對著 insert_unread_message 、mark_message_read、mark_message_unread、delete_message

這四個Trigger按右鍵,選擇Drop Trigger,使得簡訊的保護機制被刪除。

 

 

接著按照下圖指示,去瀏覽簡訊。

SMSEdit

 

點簡訊內容兩下,就可以修改了,按右上角的Add則可以新增簡訊。

 

接著介紹各項欄位的用處:

(有些人可能沒有最後一項smsc_ref,不過同樣不影響修改)

Table

 

ROWID:

簡訊在資料庫序列號,為獨一無二,不可重複,

只要不重複的話可以隨意填寫,但是要注意以後收到的簡訊的ROWID都會是以最大值+1開始起跳,

所以一般來說,如果新增簡訊的話,就是填目前的ROWID最大值+1就好了,修改簡訊內容的話則不需要理ROWID。

 

address:

電話號碼,格式以你資料庫顯示的為準,有些有+886,有些則沒有,

無論是你傳出去,或者對方傳給你的簡訊,這欄一律都是填對方號碼。

 

date:

簡訊的時間,是UNIX格式,可以在這裡轉換成一般人看得懂的時間。

要注意的是,時間是以GMT標準時間顯示,所以在台灣的話,就請自行加8小時,換算回去的時候也是一樣。

據網友測試,時間一定要照舊到新排列,也就是說ROWID比較大的項目,其date一定也必須比較大,

這一點我還沒有試過,所以無法確認是否一定得這樣作才行。

 

text:

簡訊內容,可以使用換行符號。

 

flags:

2是對方傳來,3是你傳出去的。

 

replace:

不用管,填0就是了。

 

svc_center:

不用管,留者空白就是了。

 

group_id:

同一個電話號碼的group_id是一樣的,請按照對方的group_id來填寫。

 

association_id:

只會出現在flags = 3的情況出現,一般來說會跟date的值一樣,

不過填0似乎也不會怎樣。

 

height:

填0。

 

UIflags:

大部分是4跟0、少數會是5或者其他數字,填4或0應該就可以了。

 

version:

總是0。

 

subject:

MMS的主旨,如果是一般簡訊的話請留空。

 

country:

依照你其他的簡訊的值來填,

我的情況是無論我在國外還是對方在國外,都是顯示為tw。

(此項目可能跟電話號碼格式顯示方式有關,不確定)

 

接下來兩項保持為空,

最後的read:

1為已讀該簡訊,正常來說就填1吧。

 

 

修改完畢之後,也不用存檔,因為在修改的時候就會自動儲存了...

接著我們要作的是把刪除的Trigger還原。

SQLiteExecute

 

接著請一項一項複製貼上到Enter SQL底下的欄位中,之後按下RunSQL。

(請一項一項複製、執行,勿一次執行全部)

 

1.

CREATE TRIGGER insert_unread_message AFTER INSERT ON message WHEN NOT read(new.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = new.group_id) + 1 WHERE ROWID = new.group_id; END

 

2.

CREATE TRIGGER mark_message_read AFTER UPDATE ON message WHEN NOT read(old.flags) AND read(new.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = new.group_id) - 1 WHERE ROWID = new.group_id; END

3.

CREATE TRIGGER mark_message_unread AFTER UPDATE ON message WHEN read(old.flags) AND NOT read(new.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = new.group_id) + 1 WHERE ROWID = new.group_id; END

4.

CREATE TRIGGER delete_message AFTER DELETE ON message WHEN NOT read(old.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = old.group_id) - 1 WHERE ROWID = old.group_id; END

 

之後看到Trigger數量會回到原本修改前的數量就是成功了,

接下來,把sms.db丟回去iPhone中,修改權限(可以使用iFile) 為 755(或777),Owner跟Group為mobile,

 

最後一定要Respring或重開機,簡訊資料庫才會真正載入進去,

接著請隨便發一封簡訊,發送成功之後刪除該簡訊,

再關閉簡訊程式,重新開啟簡訊程式,進去看看刪除的簡訊是否真正刪除,

如果以上兩個測試OK的話,代表修改完畢的簡訊資料庫是正確,沒有問題的。

 

本次教學就到這邊,

下次會教大家如何大量匯入簡訊。

27 則留言

  1. 「mike kao」的個人頭像
    mike kao

    強!我要好好的研究這篇

  2. 「Falcon」的個人頭像
    Falcon

    755 是執行檔,sms.db 是資料檔,用 644 應該是可以的。

    1. 「皮樂」的個人頭像
      皮樂

      感謝更正~
      我自己是避免權限設不夠,所以都設777...
      不知道設太高會有缺點嗎?

  3. 「echelon」的個人頭像
    echelon

    2.
    SQLiteManager: Likely SQL syntax error: CREATE TRIGGER mark_message_read AFTER UPDATE ON message WHEN NOT read(old.flags) AND read(new.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = new.group_id) – 1 WHERE ROWID = new.group_id; END
    [ near "–": syntax error ]
    Exception Name: NS_ERROR_FAILURE
    Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]
    4.
    SQLiteManager: Likely SQL syntax error: CREATE TRIGGER delete_message AFTER DELETE ON message WHEN NOT read(old.flags) BEGIN UPDATE msg_group SET unread_count = (SELECT unread_count FROM msg_group WHERE ROWID = old.group_id) – 1 WHERE ROWID = old.group_id; END [ near "–": syntax error ]
    Exception Name: NS_ERROR_FAILURE
    Exception Message: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]
    怎麼辦?好像那兩個添加不上!

    1. 「皮樂」的個人頭像
      皮樂

      現在才有人看到這個問題,我真不知道該哭還是該笑XDDDD
      解決方式:你看到指令當中有個 -1吧?
      把那個負號刪除,之後重新打個負號進去,就可以了,
      簡單來說,我的網站上面的 "-" 在複製過去的時候字會跑掉,所以你必須重新手動打個 "-" 進去

  4. 「a3619453」的個人頭像
    a3619453

    請問一下我要如何得知哪個號碼是屬於哪個gruop_id?
    我這隻iphone是新的,所以沒法查group_id
    還是可以從哪個檔案得到?

    1. 「a3619453」的個人頭像
      a3619453

      就算我新增了group_id..原本只有到2(因為拿到iphone後我有收到兩封簡訊)
      後來依據我簡訊內的寄信人來增加group_id,從3開始往上加
      傳回手機後再傳簡訊給自己測試發現..iphone自己會把我的電話的group_id一樣由3開始加
      就是iphone不管我自己設的group_id了,他還是會從他原本自己家的group_id往上加
      這樣簡訊就跟以前的混在一起了

      而且iphone不能完全顯示我自己增加的簡訊
      有些會顯示有些則無...
      group_id被我設為1與2的簡訊會顯示出來
      但是被我設成3以後的簡訊必須在手機收到被認定group_id=3的寄件人(即是我自己寄給自己簡訊,然後手機認定我這個號碼才是group_id=3)簡訊後才會顯示出來

      不知道這樣表達是否清楚(我表達能力有點爛...)
      還是我可以寄我的sms.db給您幫我看看呢?

    2. 「皮樂」的個人頭像
      皮樂

      嗯...看來你必須先搜集到新的group id才行,不過請原本傳你簡訊的對方隨便傳一封訊息不就可以了嗎?XD

      另外一種方法是,準備兩個手機+門號,從另一只傳簡訊給iPhone,這樣iPhone會得到新的group id,接著改掉對應的號碼,這樣再傳一次,就可以獲得新的group id了

    3. 「a3619453」的個人頭像
      a3619453

      這麼簡單的方法我沒想到
      太感謝了!

  5. 「a3619453」的個人頭像
    a3619453

    用自己一支手機自己傳就改好了
    不過這樣僅能先把舊簡訊分類好
    等那個聯絡人在傳簡訊過來時會建立一個新群組
    所以要再去把舊的group_id全部改成新的

    不過能看見舊簡訊能在iphone上顯示已經很感動了
    感謝您啦

  6. 「Chun」的個人頭像
    Chun

    請問一下part2有沒有?

    1. 「皮樂」的個人頭像
      皮樂

      還沒寫,不過好像也忘記本來要寫什麼了(被打

  7. 「qowieu」的個人頭像
    qowieu

    我想問一下,是否一定要使用OS X,才能把sms.db拿出來啊?
    或者有其他方法可以拿,煩請解惑了

    1. 「皮樂」的個人頭像
      皮樂

      不是啊,Windows也可以用的,你先去找一下Windows底下管理iPhone檔案的教學吧

    2. 「qowieu」的個人頭像
      qowieu

      了解,謝謝您,我會努力的:)

  8. 「天天」的個人頭像
    天天

    想請問一下皮勒姐,我的愛瘋今天忽然在我打簡訊時當機斷電,結果重新開機後發現簡訊全部不見,照這邊的教學打開sms.db檔後也沒有發現過往的資料,請問這樣是代表舊有的資料全沒了,沒挽救的餘地了嗎?

  9. 「天天」的個人頭像
    天天

    上面忘記說明我的手機的系統資料,3GS、iOS 4.3.3、JB過、使用biteSMS。

    1. 「皮樂」的個人頭像
      皮樂

      如果你的SMS.db大小太小的話,表示真的已經遺失資料了,請使用iTunes恢復檔案吧

  10. 「qowieu」的個人頭像
    qowieu

    您好,我近期在嘗試著將同一個人的兩隻不同手機號碼的簡訊合併,我將address和group_id改成相同的,但是重新開機後,兩者的簡訊並沒有合併在一起。(權限有改成755或777了)
    是不是我有哪一個部份沒有做到呢?或者其實這件事是不可行的啊...@@

  11. 「qowieu」的個人頭像
    qowieu

    補一個,address似乎沒有辦法打"+886"的"+"吔...有辦法以其他的方式輸入嗎??

    1. 「皮樂」的個人頭像
      皮樂

      iOS5可能不一樣了,我沒在iOS5用過

  12. 「broken0808」的個人頭像
    broken0808

    您好請問一下,我手邊是iphone 6,請問回復Trigger程式碼跟您上面所敘述的還是一樣嗎?因為我看目前IOS 8.1.2 的Trigger 名稱有些不一樣,煩請您解答一下感謝^^

  13. 「broken0808」的個人頭像
    broken0808

    此為我IOS 8.1.2 DB上面的Trigger照片
    http://imgur.com/uvIXdpT

    1. 「皮樂」的個人頭像
      皮樂

      現在 trigger 名稱都改了,但是重點是只要可以編輯就好,記得現在 trigger 不會鎖編輯,所以不必刪除...

  14. 「broken0808」的個人頭像
    broken0808

    ok , 謝謝您解答^^

  15. 「Danny Lee」的個人頭像
    Danny Lee

    請問要如何看出簡訊有被修改過

    1. 「皮樂」的個人頭像
      皮樂

      完美被修改過的話是看不出來的,但是如果讀取資料庫的話,可以從時間戳記去推算是否合理(例如有三四封簡訊進去看時間點發現是同一秒發出來的話,那就不合理了)

發佈留言