本人小菜一枚,若有错误请大神们指正。 考试系列产品市场上主要有 代码: sqlite3_key是输入密钥,如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。 int sqlite3_key( sqlite3 *db, const void *pKey, int nKey),db 是指定数据库,pKey 是密钥,nKey 是密钥长度。例:sqlite3_key( db, "lo6.net", 7); sqlite3_rekey是变更密钥或给没有加密的数据库添加密钥或清空密钥,变更密钥或清空密钥前必须先正确执行 sqlite3_key。在正确执行 sqlite3_rekey 之后在 sqlite3_close 关闭数据库之前可以正 常操作数据库,不需要再执行 sqlite3_key。 int sqlite3_rekey( sqlite3 *db, const void *pKey, int nKey),参数同上。 清空密钥为 sqlite3_rekey( db, NULL, 0)。 No.3系列 简单分析了下助考之星的加密算法,写了所有系列产品注册机,如下 代码: 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进栈;//EDI 00C06225 33DB xor ebx,ebx ; EBX=0,CF=0;//自身xor运算结果为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数据库中竟然有一处保存着类似FTP账号密码的东东。。而且竟然连接上了=.= 软件怎么能这么弱 这都在哪儿找的开发人员?? No.2系列:题无忧[C# .NET] Xenocode壳 C# .NET 我一直没看过...而且加了个Xenocode壳搞得我更不懂了.. 换个思路 不调试了,有些做C#这种高级语言的都不懂得释放,尝试内存搜索找出密码! 运行程序后,拿出外挂注入器CE,插入题无忧.exe 盲目搜索一些关键字符串 比如 SQLite Format3 等这种解密后的头。功夫不负有心人,在内存里找到了DB密码。 复制出System.Data.SQLite.DLL[c#]自己写个C#语言的调用程序清空密钥就OK了。 No.1系列:考试宝典[Delphi] Safengine Protector v2.1.9.0强壳 这个刚刚开始感觉无从下手,断断续续1星期搞定的。主要原因是1.强壳我不会脱,2.无sqlite3.dll调用 他自己将sqlite源码写在exe里面了!有了DB密码也打不开的(⊙o⊙)… 我想了几个方案: 1.找到sqlite3算法源码 尝试从算法解密[下载了份C源码,看了几眼立马放弃了!全是一排排一列列的矩阵数字,这么成熟的东西我这无知的小菜妄想了....] 2.能不能远程插入调用?[没尝试 感觉不会] 3.内存dump解密后的数据库 [无知的小菜又妄想了。。] 4.修改sqlite3指令导出解密后的DB数据库 [可惜..没有这功能语句] 5.试遍所有sqlite3.dll [下载了几十种sqlite3...] 6.是否存在open_rekey()函数 [如果开发人员够2,没有移除的话。。我来构造调用让其自解密!] 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[这个可百度谷歌到源码!] 动态调试SE壳里的程序,我是先跳转到关键位置[解密前必经过],然后点运行,他会解出原反汇编代码,手要快按下下断。。 动态调试也要有个参考吧!不然这么下断如同大海捞针。我在解出原反汇编代码断下来后,用PELOAD dump保存整个程序,拖到IDA和DEDE里面后可以分析一些东西了~! 下面要做的就是:通过sqlite3提供的C源码 或者 SQLiteTable3.pas 结合IDA 定位open_rekey()函数 //我做的时候并不清楚到底有没有这接口,虽然有些无力但我没放弃哈。 这是以前留下的笔记 代码: 1.脱SE壳 ->修改DB数据库 造成无法打开弹出错误 暴露软件真实地址 2.过SE壳OD加载程序 下断点 或者找到OEP下段 LoadPE -> Dump整个程序 3.dede分析 + IDA分析 4.利用IDA的ASCII码与源码定位sqlite3_open函数 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构造rekey自解密--------|----用密码打开后,平衡堆栈完毕 再跳回去构造解密 //jmp 00543A3C 005468AD 0F94C0 sete al | 005468B0 84C0 test al,al | --------------------------------------------------------------------- | 00543A3C 55 push ebp ; 真sqlite3_key函数 <<<------- 00543A3D 8BEC mov ebp,esp 00543A3F 8B45 10 mov eax,dword ptr ss:[ebp+0x10] ; strlen(password) // 改0 实现无密码 00543A42 50 push eax 00543A43 8B55 0C mov edx,dword ptr ss:[ebp+0xC] ; password // 改0 实现无密码 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 ; 执行sqlite3_key() //call sqlite3_rekey() call 00543A58 00543A52 83C4 10 add esp,0x10 ; 自解密完毕!! 00543A55 5D pop ebp 00543A56 C3 retn //自动脚本 005468AD 0F94C0 sete al //执行到此处修改一下代码实现自解密 ----------- 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 |
|
来自: herowuking > 《Cracker》