|
本人小菜一枚,若有錯(cuò)誤請(qǐng)大神們指正。 考試系列產(chǎn)品市場(chǎng)上主要有 代碼: sqlite3_key是輸入密鑰,如果數(shù)據(jù)庫(kù)已加密必須先執(zhí)行此函數(shù)并輸入正確密鑰才能進(jìn)行操作,如果數(shù)據(jù)庫(kù)沒(méi)有加密,執(zhí)行此函數(shù)后進(jìn)行數(shù)據(jù)庫(kù)操作反而會(huì)出現(xiàn)“此數(shù)據(jù)庫(kù)已加密或不是一個(gè)數(shù)據(jù)庫(kù)文件”的錯(cuò)誤。 int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定數(shù)據(jù)庫(kù),pKey 是密鑰,nKey 是密鑰長(zhǎng)度。例:sqlite3_key( db, "lo6.net", 7); sqlite3_rekey是變更密鑰或給沒(méi)有加密的數(shù)據(jù)庫(kù)添加密鑰或清空密鑰,變更密鑰或清空密鑰前必須先正確執(zhí)行 sqlite3_key。在正確執(zhí)行 sqlite3_rekey 之后在 sqlite3_close 關(guān)閉數(shù)據(jù)庫(kù)之前可以正 常操作數(shù)據(jù)庫(kù),不需要再執(zhí)行 sqlite3_key。 int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),參數(shù)同上。 清空密鑰為 sqlite3_rekey( db, NULL, 0)。 No.3系列 簡(jiǎn)單分析了下助考之星的加密算法,寫(xiě)了所有系列產(chǎn)品注冊(cè)機(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運(yùn)算結(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ù)庫(kù)中竟然有一處保存著類(lèi)似FTP賬號(hào)密碼的東東。。而且竟然連接上了=.= 軟件怎么能這么弱 這都在哪兒找的開(kāi)發(fā)人員?? No.2系列:題無(wú)憂(yōu)[C# .NET] Xenocode殼 C# .NET 我一直沒(méi)看過(guò)...而且加了個(gè)Xenocode殼搞得我更不懂了.. 換個(gè)思路 不調(diào)試了,有些做C#這種高級(jí)語(yǔ)言的都不懂得釋放,嘗試內(nèi)存搜索找出密碼! 運(yùn)行程序后,拿出外掛注入器CE,插入題無(wú)憂(yōu).exe 盲目搜索一些關(guān)鍵字符串 比如 SQLite Format3 等這種解密后的頭。功夫不負(fù)有心人,在內(nèi)存里找到了DB密碼。 復(fù)制出System.Data.SQLite.DLL[c#]自己寫(xiě)個(gè)C#語(yǔ)言的調(diào)用程序清空密鑰就OK了。 No.1系列:考試寶典[Delphi] Safengine Protector v2.1.9.0強(qiáng)殼 這個(gè)剛剛開(kāi)始感覺(jué)無(wú)從下手,斷斷續(xù)續(xù)1星期搞定的。主要原因是1.強(qiáng)殼我不會(huì)脫,2.無(wú)sqlite3.dll調(diào)用 他自己將sqlite源碼寫(xiě)在exe里面了!有了DB密碼也打不開(kāi)的(⊙o⊙)… 我想了幾個(gè)方案: 1.找到sqlite3算法源碼 嘗試從算法解密[下載了份C源碼,看了幾眼立馬放棄了!全是一排排一列列的矩陣數(shù)字,這么成熟的東西我這無(wú)知的小菜妄想了....] 2.能不能遠(yuǎn)程插入調(diào)用?[沒(méi)嘗試 感覺(jué)不會(huì)] 3.內(nèi)存dump解密后的數(shù)據(jù)庫(kù) [無(wú)知的小菜又妄想了。。] 4.修改sqlite3指令導(dǎo)出解密后的DB數(shù)據(jù)庫(kù) [可惜..沒(méi)有這功能語(yǔ)句] 5.試遍所有sqlite3.dll [下載了幾十種sqlite3...] 6.是否存在open_rekey()函數(shù) [如果開(kāi)發(fā)人員夠2,沒(méi)有移除的話(huà)。。我來(lái)構(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 彈窗出錯(cuò)嘍...各種被偷窺到了哈。。SQLiteTable3.pas[這個(gè)可百度谷歌到源碼!] 動(dòng)態(tài)調(diào)試SE殼里的程序,我是先跳轉(zhuǎn)到關(guān)鍵位置[解密前必經(jīng)過(guò)],然后點(diǎn)運(yùn)行,他會(huì)解出原反匯編代碼,手要快按下下斷。。 動(dòng)態(tài)調(diào)試也要有個(gè)參考吧!不然這么下斷如同大海撈針。我在解出原反匯編代碼斷下來(lái)后,用PELOAD dump保存整個(gè)程序,拖到IDA和DEDE里面后可以分析一些東西了~! 下面要做的就是:通過(guò)sqlite3提供的C源碼 或者 SQLiteTable3.pas 結(jié)合IDA 定位open_rekey()函數(shù) //我做的時(shí)候并不清楚到底有沒(méi)有這接口,雖然有些無(wú)力但我沒(méi)放棄哈。 這是以前留下的筆記 代碼: 1.脫SE殼 ->修改DB數(shù)據(jù)庫(kù) 造成無(wú)法打開(kāi)彈出錯(cuò)誤 暴露軟件真實(shí)地址 2.過(guò)SE殼OD加載程序 下斷點(diǎn) 或者找到OEP下段 LoadPE -> Dump整個(gè)程序 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 ; 用密碼打開(kāi)成功 平衡堆棧 | 005468AB 85C0 test eax,eax ; 利用key構(gòu)造rekey自解密--------|----用密碼打開(kāi)后,平衡堆棧完畢 再跳回去構(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 實(shí)現(xiàn)無(wú)密碼 00543A42 50 push eax 00543A43 8B55 0C mov edx,dword ptr ss:[ebp+0xC] ; password // 改0 實(shí)現(xiàn)無(wú)密碼 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 //自動(dòng)腳本 005468AD 0F94C0 sete al //執(zhí)行到此處修改一下代碼實(shí)現(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 |
|
|
來(lái)自: herowuking > 《Cracker》