本人小菜一枚,若有錯誤請大神們指正。 考試系列產(chǎn)品市場上主要有 代碼: sqlite3_key是輸入密鑰,如果數(shù)據(jù)庫已加密必須先執(zhí)行此函數(shù)并輸入正確密鑰才能進(jìn)行操作,如果數(shù)據(jù)庫沒有加密,執(zhí)行此函數(shù)后進(jìn)行數(shù)據(jù)庫操作反而會出現(xiàn)“此數(shù)據(jù)庫已加密或不是一個數(shù)據(jù)庫文件”的錯誤。 int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定數(shù)據(jù)庫,pKey 是密鑰,nKey 是密鑰長度。例:sqlite3_key( db, "lo6.net", 7); sqlite3_rekey是變更密鑰或給沒有加密的數(shù)據(jù)庫添加密鑰或清空密鑰,變更密鑰或清空密鑰前必須先正確執(zhí)行 sqlite3_key。在正確執(zhí)行 sqlite3_rekey 之后在 sqlite3_close 關(guān)閉數(shù)據(jù)庫之前可以正 常操作數(shù)據(jù)庫,不需要再執(zhí)行 sqlite3_key。 int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),參數(shù)同上。 清空密鑰為 sqlite3_rekey( db, NULL, 0)。 No.3系列 簡單分析了下助考之星的加密算法,寫了所有系列產(chǎn)品注冊機(jī),如下 代碼: 00C0621C 55 push ebp ; OEP 00C0621D 8BEC mov ebp,esp 00C0621F 83C4 E0 add esp,-0x20 00C06222 53 push ebx 00C06223 56 push esi ; 0002-06A7-0FEB-FBFF-8098-2203[PT_N]11111111111111111111111 00C06224 57 push edi ; 0xE進(jìn)棧;//EDI 00C06225 33DB xor ebx,ebx ; EBX=0,CF=0;//自身xor運算結(jié)果為0,CF=0 00C06227 895D E4 mov dword ptr ss:[ebp-0x1C],ebx ; SS段 清空 00C0622A 895D E0 mov dword ptr ss:[ebp-0x20],ebx 而且,sqlite數(shù)據(jù)庫中竟然有一處保存著類似FTP賬號密碼的東東。。而且竟然連接上了=.= 軟件怎么能這么弱 這都在哪兒找的開發(fā)人員?? No.2系列:題無憂[C# .NET] Xenocode殼 C# .NET 我一直沒看過...而且加了個Xenocode殼搞得我更不懂了.. 換個思路 不調(diào)試了,有些做C#這種高級語言的都不懂得釋放,嘗試內(nèi)存搜索找出密碼! 運行程序后,拿出外掛注入器CE,插入題無憂.exe 盲目搜索一些關(guān)鍵字符串 比如 SQLite Format3 等這種解密后的頭。功夫不負(fù)有心人,在內(nèi)存里找到了DB密碼。 復(fù)制出System.Data.SQLite.DLL[c#]自己寫個C#語言的調(diào)用程序清空密鑰就OK了。 No.1系列:考試寶典[Delphi] Safengine Protector v2.1.9.0強殼 這個剛剛開始感覺無從下手,斷斷續(xù)續(xù)1星期搞定的。主要原因是1.強殼我不會脫,2.無sqlite3.dll調(diào)用 他自己將sqlite源碼寫在exe里面了!有了DB密碼也打不開的(⊙o⊙)… 我想了幾個方案: 1.找到sqlite3算法源碼 嘗試從算法解密[下載了份C源碼,看了幾眼立馬放棄了!全是一排排一列列的矩陣數(shù)字,這么成熟的東西我這無知的小菜妄想了....] 2.能不能遠(yuǎn)程插入調(diào)用?[沒嘗試 感覺不會] 3.內(nèi)存dump解密后的數(shù)據(jù)庫 [無知的小菜又妄想了。。] 4.修改sqlite3指令導(dǎo)出解密后的DB數(shù)據(jù)庫 [可惜..沒有這功能語句] 5.試遍所有sqlite3.dll [下載了幾十種sqlite3...] 6.是否存在open_rekey()函數(shù) [如果開發(fā)人員夠2,沒有移除的話。。我來構(gòu)造調(diào)用讓其自解密!] OD載入后如下: 代碼: 00BA433B > $ E8 1D000000 call 00BA435D ; (initial cpu selection); PUSH ASCII "Safengine Protector v2.1.9.0" 00BA4340 . 53 61 66 65 6>ascii "Safengine P" 00BA434B > 72 6F jb short 00BA43BC 00BA434D 74 db 74 ; CHAR 't' 00BA434E 65 db 65 ; CHAR 'e' 00BA434F 63 db 63 ; CHAR 'c' 00BA4350 . 74 6F 72 20 7>ascii "tor v2.1.9.0",0 00BA435D > 9C pushfd 彈窗出錯嘍...各種被偷窺到了哈。。SQLiteTable3.pas[這個可百度谷歌到源碼!] 動態(tài)調(diào)試SE殼里的程序,我是先跳轉(zhuǎn)到關(guān)鍵位置[解密前必經(jīng)過],然后點運行,他會解出原反匯編代碼,手要快按下下斷。。 動態(tài)調(diào)試也要有個參考吧!不然這么下斷如同大海撈針。我在解出原反匯編代碼斷下來后,用PELOAD dump保存整個程序,拖到IDA和DEDE里面后可以分析一些東西了~! 下面要做的就是:通過sqlite3提供的C源碼 或者 SQLiteTable3.pas 結(jié)合IDA 定位open_rekey()函數(shù) //我做的時候并不清楚到底有沒有這接口,雖然有些無力但我沒放棄哈。 這是以前留下的筆記 代碼: 1.脫SE殼 ->修改DB數(shù)據(jù)庫 造成無法打開彈出錯誤 暴露軟件真實地址 2.過SE殼OD加載程序 下斷點 或者找到OEP下段 LoadPE -> Dump整個程序 3.dede分析 + IDA分析 4.利用IDA的ASCII碼與源碼定位sqlite3_open函數(shù) sqlite3_open = 0054094C sqlite3_rekey = 00543A58 5. 00545EFE 8B55 08 mov edx,dword ptr ss:[ebp+0x8] ; password 00545F01 8B45 FC mov eax,dword ptr ss:[ebp-0x4] 00545F04 E8 77090000 call ExamBibl.00546880 ; sqlite3_key(mydb, password, strlen(pwd)) 00545F09 84C0 test al,al 00545F0B 74 09 je short ExamBibl.00545F16 --------------------------------------------------------------------- 0054689F A1 5CC67900 mov eax,dword ptr ds:[0x79C65C] 005468A4 8B00 mov eax,dword ptr ds:[eax] 005468A6 FFD0 call eax ; ExamBibl.00543A3C ------| 005468A8 83C4 0C add esp,0xC ; 用密碼打開成功 平衡堆棧 | 005468AB 85C0 test eax,eax ; 利用key構(gòu)造rekey自解密--------|----用密碼打開后,平衡堆棧完畢 再跳回去構(gòu)造解密 //jmp 00543A3C 005468AD 0F94C0 sete al | 005468B0 84C0 test al,al | --------------------------------------------------------------------- | 00543A3C 55 push ebp ; 真sqlite3_key函數(shù) <<<------- 00543A3D 8BEC mov ebp,esp 00543A3F 8B45 10 mov eax,dword ptr ss:[ebp+0x10] ; strlen(password) // 改0 實現(xiàn)無密碼 00543A42 50 push eax 00543A43 8B55 0C mov edx,dword ptr ss:[ebp+0xC] ; password // 改0 實現(xiàn)無密碼 00543A46 52 push edx 00543A47 6A 00 push 0x0 00543A49 8B4D 08 mov ecx,dword ptr ss:[ebp+0x8] ; *mydb = 02AC20A8 /* Database to be rekeyed */ 00543A4C 51 push ecx 00543A4D E8 76FEFFFF call ExamBibl.005438C8 ; 執(zhí)行sqlite3_key() //call sqlite3_rekey() call 00543A58 00543A52 83C4 10 add esp,0x10 ; 自解密完畢??! 00543A55 5D pop ebp 00543A56 C3 retn //自動腳本 005468AD 0F94C0 sete al //執(zhí)行到此處修改一下代碼實現(xiàn)自解密 ----------- 005468AD 50 push eax //push strlen(pwd) = 0 005468AE 52 push edx //push password = 0 005468AF 6A 00 push 0x0 005468B1 51 push ecx //push mydb 005468B2 E8 A1D1FFFF call ExamBibl.00543A58 //call sqlite3_rekey()自解密 005468B7 90 nop 005468B8 90 nop 005468B9 90 nop |
|