Статья ASM – работа с базами SQLite (часть 2. Читаем cookies браузеров)
Рассмотрев в предыдущей части формат и основные возможности подсистемы SQLite, перейдём к операциям с данными, которые осуществляются посредством вызова методов из библиотеки sqlite3.dll. Самая последняя версия 3.35.05 этой либы выдаёт на экспорт всего 329 функций, предоставляя нам широкий выбор действий. Некоторые из них могут иметь переменное число параметров, и автор не стал делать на них акцент. Он просто оформил все функции с соглашением о вызове «cdecl» (декларация языка С++), а не стандартным «stdcall». Это означает, что на выходе, ответственность за очистку аргументов функции в стеке полностью возложена на нас, для чего ассемблер FASM имеет макросы cinvoke и ccall (последний используется для вызовов по указателю). Экскурсии по часто используемым функциям и посвящена данная часть статьи.
1. Основные функции библиотеки sqlite3.dll;
• операторы и оформление запросов;
2. Практика – чтение структуры базы-данных ;
3. Практика – собираем «cookies» браузеров.
Одним из недостатков компилятора FASM (по сравнению с тем-же масмом) является отсутствие в базовом его пакете большинства заголовочных файлов с описанием структур. Томас Грыштар ограничился лишь основными библиотеками типа User/Shell/Kernel32.dll, зато предусмотрел простую возможность добавления сторонних инклуд, по мере их необходимости. В частности, это относится к перечислению импорта из статически подключаемых библиотек при компиляции проектов. Применительно к указанным выше DLL, освобождают нас от этой рутины файлы из папки FASM\INCLUDE\API , в которых перечислены все функции экспорта каждой из DLL. Теперь, просто подключив их к своему исходному коду, нам не нужно импортировать функции явно – компилятор сам позаботится об этом.
Чтобы добавить красок в работу с базами-данных SQLite, я (придерживаясь рекомендаций автора fasm) создал точно такой-же инклуд импорта, только для библиотеки sqlite3.dll. Результат настолько воодушевил, что не поленился собрать аналогичный инклуд сразу и для консольной либы msvcrt.dll – оба этих файла можно будет найти в скрепке, в подвале статьи. В итоге, служебная часть исходника остаётся за его периметром во-внешних инклудах, что повышает читабельность кода.
Паспорт sqlite3.dll
File : sqlite3.dll Version : 3.35.5 Size : 1071715 byte Type : PE Base Of Code : 00001000, Code Size: 000ABC00 Base Of Data : 000AD000, Data Size: 000CA400 Image Base : 61E00000 Entry Point : 61E01400 File sections: Name | VirtAddr | VirtSize | Offset | PhysSize | Flags | Code ----------+----------+----------+----------+----------+----------+------ .text | 61E01000 | 000ABAF0 | 00000600 | 000ABC00 | 60500060 | Yes .data | 61EAD000 | 000022DC | 000AC200 | 00002400 | C0600040 | .rdata | 61EB0000 | 00013AB0 | 000AE600 | 00013C00 | 40600040 | .bss | 61EC4000 | 00000828 | 00000000 | 00000000 | C0600080 | .edata | 61EC5000 | 0000292B | 000C2200 | 00002A00 | 40300040 | .idata | 61EC8000 | 00000CD0 | 000C4C00 | 00000E00 | C0300040 | .CRT | 61EC9000 | 0000002C | 000C5A00 | 00000200 | C0300040 | .tls | 61ECA000 | 00000020 | 000C5C00 | 00000200 | C0300040 | .rsrc | 61ECB000 | 000004A8 | 000C5E00 | 00000600 | C0300040 | .reloc | 61ECC000 | 00003A28 | 000C6400 | 00003C00 | 42300040 | /4 | 61ED0000 | 00000538 | 000CA000 | 00000600 | 42400040 | /19 | 61ED1000 | 0000C852 | 000CA600 | 0000CA00 | 42100040 | /31 | 61EDE000 | 0000275D | 000D7000 | 00002800 | 42100040 | /45 | 61EE1000 | 00002D9A | 000D9800 | 00002E00 | 42100040 | /57 | 61EE4000 | 00000B5C | 000DC600 | 00000C00 | 42300040 | /70 | 61EE5000 | 00000323 | 000DD200 | 00000400 | 42100040 | /81 | 61EE6000 | 00003A73 | 000DD600 | 00003C00 | 42100040 | /92 | 61EEA000 | 00000350 | 000E1200 | 00000400 | 42100040 | Number of Exported Functions = 0329 (decimal) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Addr:61E16307 Ord: 1 (0001h) Name: sqlite3_aggregate_context Addr:61E034E5 Ord: 2 (0002h) Name: sqlite3_aggregate_count Addr:61EA373D Ord: 3 (0003h) Name: sqlite3_auto_extension Addr:61E530BD Ord: 4 (0004h) Name: sqlite3_backup_finish Addr:61E52C23 Ord: 5 (0005h) Name: sqlite3_backup_init Addr:61E03043 Ord: 6 (0006h) Name: sqlite3_backup_pagecount Addr:61E03038 Ord: 7 (0007h) Name: sqlite3_backup_remaining Addr:61E50B80 Ord: 8 (0008h) Name: sqlite3_backup_step Addr:61E25476 Ord: 9 (0009h) Name: sqlite3_bind_blob Addr:61E2549D Ord: 10 (000Ah) Name: sqlite3_bind_blob64 Addr:61E25176 Ord: 11 (000Bh) Name: sqlite3_bind_double Addr:61E25216 Ord: 12 (000Ch) Name: sqlite3_bind_int Addr:61E251C7 Ord: 13 (000Dh) Name: sqlite3_bind_int64 Addr:61E2523C Ord: 14 (000Eh) Name: sqlite3_bind_null Addr:61E03523 Ord: 15 (000Fh) Name: sqlite3_bind_parameter_count Addr:61E1A0B4 Ord: 16 (0010h) Name: sqlite3_bind_parameter_index Addr:61E03535 Ord: 17 (0011h) Name: sqlite3_bind_parameter_name Addr:61E2526D Ord: 18 (0012h) Name: sqlite3_bind_pointer Addr:61E254E4 Ord: 19 (0013h) Name: sqlite3_bind_text Addr:61E25578 Ord: 20 (0014h) Name: sqlite3_bind_text16 Addr:61E2550B Ord: 21 (0015h) Name: sqlite3_bind_text64 Addr:61E2559F Ord: 22 (0016h) Name: sqlite3_bind_value Addr:61E252EA Ord: 23 (0017h) Name: sqlite3_bind_zeroblob Addr:61E25357 Ord: 24 (0018h) Name: sqlite3_bind_zeroblob64 Addr:61E03605 Ord: 25 (0019h) Name: sqlite3_blob_bytes Addr:61E543A9 Ord: 26 (001Ah) Name: sqlite3_blob_close Addr:61E8F3FE Ord: 27 (001Bh) Name: sqlite3_blob_open Addr:61E56167 Ord: 28 (001Ch) Name: sqlite3_blob_read Addr:61E8FB94 Ord: 29 (001Dh) Name: sqlite3_blob_reopen Addr:61E56EC9 Ord: 30 (001Eh) Name: sqlite3_blob_write Addr:61E056F9 Ord: 31 (001Fh) Name: sqlite3_busy_handler Addr:61E0DE4E Ord: 32 (0020h) Name: sqlite3_busy_timeout Addr:61E041C5 Ord: 33 (0021h) Name: sqlite3_cancel_auto_extension Addr:61E055BB Ord: 34 (0022h) Name: sqlite3_changes Addr:61E0AFAD Ord: 35 (0023h) Name: sqlite3_clear_bindings Addr:61E532B7 Ord: 36 (0024h) Name: sqlite3_close Addr:61E532C5 Ord: 37 (0025h) Name: sqlite3_close_v2 Addr:61E05A02 Ord: 38 (0026h) Name: sqlite3_collation_needed Addr:61E05A46 Ord: 39 (0027h) Name: sqlite3_collation_needed16 Addr:61E21569 Ord: 40 (0028h) Name: sqlite3_column_blob Addr:61E212F9 Ord: 41 (0029h) Name: sqlite3_column_bytes Addr:61E213CD Ord: 42 (002Ah) Name: sqlite3_column_bytes16 Addr:61E034F3 Ord: 43 (002Bh) Name: sqlite3_column_count Addr:61E224D3 Ord: 44 (002Ch) Name: sqlite3_column_database_name Addr:61E224EB Ord: 45 (002Dh) Name: sqlite3_column_database_name16 Addr:61E224A0 Ord: 46 (002Eh) Name: sqlite3_column_decltype Addr:61E224B8 Ord: 47 (002Fh) Name: sqlite3_column_decltype16 Addr:61E2BC85 Ord: 48 (0030h) Name: sqlite3_column_double Addr:61E11245 Ord: 49 (0031h) Name: sqlite3_column_int Addr:61E11271 Ord: 50 (0032h) Name: sqlite3_column_int64 Addr:61E2246D Ord: 51 (0033h) Name: sqlite3_column_name Addr:61E22485 Ord: 52 (0034h) Name: sqlite3_column_name16 Addr:61E22539 Ord: 53 (0035h) Name: sqlite3_column_origin_name Addr:61E22551 Ord: 54 (0036h) Name: sqlite3_column_origin_name16 Addr:61E22506 Ord: 55 (0037h) Name: sqlite3_column_table_name Addr:61E2251E Ord: 56 (0038h) Name: sqlite3_column_table_name16 Addr:61E216A2 Ord: 57 (0039h) Name: sqlite3_column_text Addr:61E2256C Ord: 58 (003Ah) Name: sqlite3_column_text16 Addr:61E11315 Ord: 59 (003Bh) Name: sqlite3_column_type Addr:61E1129A Ord: 60 (003Ch) Name: sqlite3_column_value Addr:61E058B2 Ord: 61 (003Dh) Name: sqlite3_commit_hook Addr:61E05B44 Ord: 62 (003Eh) Name: sqlite3_compileoption_get Addr:61E09874 Ord: 63 (003Fh) Name: sqlite3_compileoption_used Addr:61E05295 Ord: 64 (0040h) Name: sqlite3_complete Addr:61EA38E3 Ord: 65 (0041h) Name: sqlite3_complete16 Addr:61E3240D Ord: 66 (0042h) Name: sqlite3_config Addr:61E03482 Ord: 67 (0043h) Name: sqlite3_context_db_handle Addr:61E2B2C2 Ord: 68 (0044h) Name: sqlite3_create_collation Addr:61E2B2F9 Ord: 69 (0045h) Name: sqlite3_create_collation16 Addr:61E2B26B Ord: 70 (0046h) Name: sqlite3_create_collation_v2 Addr:61E373B4 Ord: 71 (0047h) Name: sqlite3_create_filename Addr:61E2AC20 Ord: 72 (0048h) Name: sqlite3_create_function Addr:61E2AFF2 Ord: 73 (0049h) Name: sqlite3_create_function16 Addr:61E2AE6A Ord: 74 (004Ah) Name: sqlite3_create_function_v2 Addr:61E1C351 Ord: 75 (004Bh) Name: sqlite3_create_module Addr:61E1C39B Ord: 76 (004Ch) Name: sqlite3_create_module_v2 Addr:61E2AEB0 Ord: 77 (004Dh) Name: sqlite3_create_window_function Addr:61E03508 Ord: 78 (004Eh) Name: sqlite3_data_count Addr:61EC4020 Ord: 79 (004Fh) Name: sqlite3_data_directory Addr:61E02823 Ord: 80 (0050h) Name: sqlite3_database_file_object Addr:61E505BC Ord: 81 (0051h) Name: sqlite3_db_cacheflush Addr:61E13FC8 Ord: 82 (0052h) Name: sqlite3_db_config Addr:61E130E6 Ord: 83 (0053h) Name: sqlite3_db_filename Addr:61E03552 Ord: 84 (0054h) Name: sqlite3_db_handle Addr:61E05534 Ord: 85 (0055h) Name: sqlite3_db_mutex Addr:61E05B22 Ord: 86 (0056h) Name: sqlite3_db_readonly Addr:61E19CBF Ord: 87 (0057h) Name: sqlite3_db_release_memory Addr:61E1C423 Ord: 88 (0058h) Name: sqlite3_db_status Addr:61E83B89 Ord: 89 (0059h) Name: sqlite3_declare_vtab Addr:61E8626F Ord: 90 (005Ah) Name: sqlite3_deserialize Addr:61E1C3B9 Ord: 91 (005Bh) Name: sqlite3_drop_modules Addr:61E323C7 Ord: 92 (005Ch) Name: sqlite3_enable_load_extension Addr:61E02ABE Ord: 93 (005Dh) Name: sqlite3_enable_shared_cache Addr:61E24F5A Ord: 94 (005Eh) Name: sqlite3_errcode Addr:61E24FCD Ord: 95 (005Fh) Name: sqlite3_errmsg Addr:61E2B08E Ord: 96 (0060h) Name: sqlite3_errmsg16 Addr:61E0DE45 Ord: 97 (0061h) Name: sqlite3_errstr Addr:61E6FF07 Ord: 98 (0062h) Name: sqlite3_exec Addr:61E210D4 Ord: 99 (0063h) Name: sqlite3_expanded_sql Addr:61E033EC Ord: 100 (0064h) Name: sqlite3_expired Addr:61E24F95 Ord: 101 (0065h) Name: sqlite3_extended_errcode Addr:61E05A9B Ord: 102 (0066h) Name: sqlite3_extended_result_codes Addr:61E1A856 Ord: 103 (0067h) Name: sqlite3_file_control Addr:61E05AF2 Ord: 104 (0068h) Name: sqlite3_filename_database Addr:61E09829 Ord: 105 (0069h) Name: sqlite3_filename_journal Addr:61E09858 Ord: 106 (006Ah) Name: sqlite3_filename_wal Addr:61E542B8 Ord: 107 (006Bh) Name: sqlite3_finalize Addr:61E0AA0B Ord: 108 (006Ch) Name: sqlite3_free Addr:61E0B350 Ord: 109 (006Dh) Name: sqlite3_free_filename Addr:61E0B303 Ord: 110 (006Eh) Name: sqlite3_free_table Addr:61EAEBA0 Ord: 111 (006Fh) Name: sqlite3_fts3_may_be_corrupt Addr:61EAEA18 Ord: 112 (0070h) Name: sqlite3_fts5_may_be_corrupt Addr:61E05A8A Ord: 113 (0071h) Name: sqlite3_get_autocommit Addr:61E034AA Ord: 114 (0072h) Name: sqlite3_get_auxdata Addr:61E85A82 Ord: 115 (0073h) Name: sqlite3_get_table Addr:61EA3F97 Ord: 116 (0074h) Name: sqlite3_global_recover Addr:61E32C96 Ord: 117 (0075h) Name: sqlite3_hard_heap_limit64 Addr:61E3260E Ord: 118 (0076h) Name: sqlite3_initialize Addr:61E08566 Ord: 119 (0077h) Name: sqlite3_interrupt Addr:61E12C89 Ord: 120 (0078h) Name: sqlite3_keyword_check Addr:61E04DDB Ord: 121 (0079h) Name: sqlite3_keyword_count Addr:61E04DA6 Ord: 122 (007Ah) Name: sqlite3_keyword_name Addr:61E05578 Ord: 123 (007Bh) Name: sqlite3_last_insert_rowid Addr:61E05516 Ord: 124 (007Ch) Name: sqlite3_libversion Addr:61E05520 Ord: 125 (007Dh) Name: sqlite3_libversion_number Addr:61E059CB Ord: 126 (007Eh) Name: sqlite3_limit Addr:61E42392 Ord: 127 (007Fh) Name: sqlite3_load_extension Addr:61E22B27 Ord: 128 (0080h) Name: sqlite3_log Addr:61E32D24 Ord: 129 (0081h) Name: sqlite3_malloc Addr:61E33DEC Ord: 130 (0082h) Name: sqlite3_malloc64 Addr:61E30A62 Ord: 131 (0083h) Name: sqlite3_memory_alarm Addr:61E24DDD Ord: 132 (0084h) Name: sqlite3_memory_highwater Addr:61E24DAD Ord: 133 (0085h) Name: sqlite3_memory_used Addr:61E405A8 Ord: 134 (0086h) Name: sqlite3_mprintf Addr:61E017A0 Ord: 135 (0087h) Name: sqlite3_msize Addr:61E32B6E Ord: 136 (0088h) Name: sqlite3_mutex_alloc Addr:61E01743 Ord: 137 (0089h) Name: sqlite3_mutex_enter Addr:61E01730 Ord: 138 (008Ah) Name: sqlite3_mutex_free Addr:61E0176B Ord: 139 (008Bh) Name: sqlite3_mutex_leave Addr:61E01756 Ord: 140 (008Ch) Name: sqlite3_mutex_try Addr:61E035B8 Ord: 141 (008Dh) Name: sqlite3_next_stmt Addr:61EA3E82 Ord: 142 (008Eh) Name: sqlite3_open Addr:61EA3EB5 Ord: 143 (008Fh) Name: sqlite3_open16 Addr:61EA3E9D Ord: 144 (0090h) Name: sqlite3_open_v2 Addr:61E32205 Ord: 145 (0091h) Name: sqlite3_os_end Addr:61E32AA7 Ord: 146 (0092h) Name: sqlite3_os_init Addr:61E43C6B Ord: 147 (0093h) Name: sqlite3_overload_function Addr:61E806E0 Ord: 148 (0094h) Name: sqlite3_prepare Addr:61E81288 Ord: 149 (0095h) Name: sqlite3_prepare16 Addr:61E812AF Ord: 150 (0096h) Name: sqlite3_prepare16_v2 Addr:61E812D6 Ord: 151 (0097h) Name: sqlite3_prepare16_v3 Addr:61E8070E Ord: 152 (0098h) Name: sqlite3_prepare_v2 Addr:61E80B62 Ord: 153 (0099h) Name: sqlite3_prepare_v3 Addr:61E32216 Ord: 154 (009Ah) Name: sqlite3_preupdate_count Addr:61E32234 Ord: 155 (009Bh) Name: sqlite3_preupdate_depth Addr:61EA3F55 Ord: 156 (009Ch) Name: sqlite3_preupdate_hook Addr:61E32256 Ord: 157 (009Dh) Name: sqlite3_preupdate_new Addr:61E4E419 Ord: 158 (009Eh) Name: sqlite3_preupdate_old Addr:61E0585E Ord: 159 (009Fh) Name: sqlite3_profile Addr:61E05747 Ord: 160 (00A0h) Name: sqlite3_progress_handler Addr:61E46B88 Ord: 161 (00A1h) Name: sqlite3_randomness Addr:61E376AA Ord: 162 (00A2h) Name: sqlite3_realloc Addr:61E38B36 Ord: 163 (00A3h) Name: sqlite3_realloc64 Addr:61E01788 Ord: 164 (00A4h) Name: sqlite3_release_memory Addr:61E56F76 Ord: 165 (00A5h) Name: sqlite3_reset Addr:61EA37CF Ord: 166 (00A6h) Name: sqlite3_reset_auto_extension Addr:61E171F1 Ord: 167 (00A7h) Name: sqlite3_result_blob Addr:61E17881 Ord: 168 (00A8h) Name: sqlite3_result_blob64 Addr:61E13158 Ord: 169 (00A9h) Name: sqlite3_result_double Addr:61E16F29 Ord: 170 (00AAh) Name: sqlite3_result_error Addr:61E170A9 Ord: 171 (00ABh) Name: sqlite3_result_error16 Addr:61E170D2 Ord: 172 (00ACh) Name: sqlite3_result_error_code Addr:61E10958 Ord: 173 (00ADh) Name: sqlite3_result_error_nomem Addr:61E1715E Ord: 174 (00AEh) Name: sqlite3_result_error_toobig Addr:61E0AED4 Ord: 175 (00AFh) Name: sqlite3_result_int Addr:61E0AF0F Ord: 176 (00B0h) Name: sqlite3_result_int64 Addr:61E0AF3A Ord: 177 (00B1h) Name: sqlite3_result_null Addr:61E13012 Ord: 178 (00B2h) Name: sqlite3_result_pointer Addr:61E0345E Ord: 179 (00B3h) Name: sqlite3_result_subtype Addr:61E172DA Ord: 180 (00B4h) Name: sqlite3_result_text Addr:61E1787B Ord: 181 (00B5h) Name: sqlite3_result_text16 Addr:61E1783D Ord: 182 (00B6h) Name: sqlite3_result_text16be Addr:61E1785C Ord: 183 (00B7h) Name: sqlite3_result_text16le Addr:61E178BD Ord: 184 (00B8h) Name: sqlite3_result_text64 Addr:61E16AB4 Ord: 185 (00B9h) Name: sqlite3_result_value Addr:61E133B7 Ord: 186 (00BAh) Name: sqlite3_result_zeroblob Addr:61E0B01D Ord: 187 (00BBh) Name: sqlite3_result_zeroblob64 Addr:61E05936 Ord: 188 (00BCh) Name: sqlite3_rollback_hook Addr:61EA3F9E Ord: 189 (00BDh) Name: sqlite3_rtree_geometry_callback Addr:61EA401C Ord: 190 (00BEh) Name: sqlite3_rtree_query_callback Addr:61E86065 Ord: 191 (00BFh) Name: sqlite3_serialize Addr:61E03C24 Ord: 192 (00C0h) Name: sqlite3_set_authorizer Addr:61E15E97 Ord: 193 (00C1h) Name: sqlite3_set_auxdata Addr:61E05586 Ord: 194 (00C2h) Name: sqlite3_set_last_insert_rowid Addr:61EA3822 Ord: 195 (00C3h) Name: sqlite3_shutdown Addr:61E32A0D Ord: 196 (00C4h) Name: sqlite3_sleep Addr:61E229BB Ord: 197 (00C5h) Name: sqlite3_snprintf Addr:61E32C72 Ord: 198 (00C6h) Name: sqlite3_soft_heap_limit Addr:61E32B9D Ord: 199 (00C7h) Name: sqlite3_soft_heap_limit64 Addr:61E0855C Ord: 200 (00C8h) Name: sqlite3_sourceid Addr:61E035F1 Ord: 201 (00C9h) Name: sqlite3_sql Addr:61E24D55 Ord: 202 (00CAh) Name: sqlite3_status Addr:61E24CC5 Ord: 203 (00CBh) Name: sqlite3_status64 Addr:61E6F227 Ord: 204 (00CCh) Name: sqlite3_step Addr:61E03599 Ord: 205 (00CDh) Name: sqlite3_stmt_busy Addr:61E0357F Ord: 206 (00CEh) Name: sqlite3_stmt_isexplain Addr:61E03562 Ord: 207 (00CFh) Name: sqlite3_stmt_readonly Addr:61E11166 Ord: 208 (00D0h) Name: sqlite3_stmt_status Addr:61E197C9 Ord: 209 (00D1h) Name: sqlite3_str_append Addr:61E197FE Ord: 210 (00D2h) Name: sqlite3_str_appendall Addr:61E1456B Ord: 211 (00D3h) Name: sqlite3_str_appendchar Addr:61E2077B Ord: 212 (00D4h) Name: sqlite3_str_appendf Addr:61E017BF Ord: 213 (00D5h) Name: sqlite3_str_errcode Addr:61E16178 Ord: 214 (00D6h) Name: sqlite3_str_finish Addr:61E017D4 Ord: 215 (00D7h) Name: sqlite3_str_length Addr:61E33E12 Ord: 216 (00D8h) Name: sqlite3_str_new Addr:61E0AAFA Ord: 217 (00D9h) Name: sqlite3_str_reset Addr:61E017E5 Ord: 218 (00DAh) Name: sqlite3_str_value Addr:61E1F3C7 Ord: 219 (00DBh) Name: sqlite3_str_vappendf Addr:61E0A5E7 Ord: 220 (00DCh) Name: sqlite3_strglob Addr:61E01964 Ord: 221 (00DDh) Name: sqlite3_stricmp Addr:61E0A602 Ord: 222 (00DEh) Name: sqlite3_strlike Addr:61E0198A Ord: 223 (00DFh) Name: sqlite3_strnicmp Addr:61E059BA Ord: 224 (00E0h) Name: sqlite3_system_errno Addr:61E8578B Ord: 225 (00E1h) Name: sqlite3_table_column_metadata Addr:61EC4024 Ord: 226 (00E2h) Name: sqlite3_temp_directory Addr:61EA3189 Ord: 227 (00E3h) Name: sqlite3_test_control Addr:61E05A96 Ord: 228 (00E4h) Name: sqlite3_thread_cleanup Addr:61E0552A Ord: 229 (00E5h) Name: sqlite3_threadsafe Addr:61E055C6 Ord: 230 (00E6h) Name: sqlite3_total_changes Addr:61E057B5 Ord: 231 (00E7h) Name: sqlite3_trace Addr:61E05806 Ord: 232 (00E8h) Name: sqlite3_trace_v2 Addr:61E12890 Ord: 233 (00E9h) Name: sqlite3_transfer_bindings Addr:61E055D1 Ord: 234 (00EAh) Name: sqlite3_txn_state Addr:61E058F4 Ord: 235 (00EBh) Name: sqlite3_update_hook Addr:61E097AA Ord: 236 (00ECh) Name: sqlite3_uri_boolean Addr:61E119DD Ord: 237 (00EDh) Name: sqlite3_uri_int64 Addr:61E097DD Ord: 238 (00EEh) Name: sqlite3_uri_key Addr:61E09753 Ord: 239 (00EFh) Name: sqlite3_uri_parameter Addr:61E03474 Ord: 240 (00F0h) Name: sqlite3_user_data Addr:61E2146C Ord: 241 (00F1h) Name: sqlite3_value_blob Addr:61E212EB Ord: 242 (00F2h) Name: sqlite3_value_bytes Addr:61E213BC Ord: 243 (00F3h) Name: sqlite3_value_bytes16 Addr:61E1F3BB Ord: 244 (00F4h) Name: sqlite3_value_double Addr:61E32FA3 Ord: 245 (00F5h) Name: sqlite3_value_dup Addr:61E0B092 Ord: 246 (00F6h) Name: sqlite3_value_free Addr:61E0344C Ord: 247 (00F7h) Name: sqlite3_value_frombind Addr:61E0C477 Ord: 248 (00F8h) Name: sqlite3_value_int Addr:61E0C484 Ord: 249 (00F9h) Name: sqlite3_value_int64 Addr:61E03433 Ord: 250 (00FAh) Name: sqlite3_value_nochange Addr:61E305AE Ord: 251 (00FBh) Name: sqlite3_value_numeric_type Addr:61E11827 Ord: 252 (00FCh) Name: sqlite3_value_pointer Addr:61E03409 Ord: 253 (00FDh) Name: sqlite3_value_subtype Addr:61E21433 Ord: 254 (00FEh) Name: sqlite3_value_text Addr:61E22598 Ord: 255 (00FFh) Name: sqlite3_value_text16 Addr:61E223C5 Ord: 256 (0100h) Name: sqlite3_value_text16be Addr:61E223D6 Ord: 257 (0101h) Name: sqlite3_value_text16le Addr:61E0341E Ord: 258 (0102h) Name: sqlite3_value_type Addr:61EC2E20 Ord: 259 (0103h) Name: sqlite3_version Addr:61E329AA Ord: 260 (0104h) Name: sqlite3_vfs_find Addr:61E32A44 Ord: 261 (0105h) Name: sqlite3_vfs_register Addr:61E32B2E Ord: 262 (0106h) Name: sqlite3_vfs_unregister Addr:61E3FAC4 Ord: 263 (0107h) Name: sqlite3_vmprintf Addr:61E2295F Ord: 264 (0108h) Name: sqlite3_vsnprintf Addr:61E29769 Ord: 265 (0109h) Name: sqlite3_vtab_collation Addr:61E24E0C Ord: 266 (010Ah) Name: sqlite3_vtab_config Addr:61E0348F Ord: 267 (010Bh) Name: sqlite3_vtab_nochange Addr:61E04568 Ord: 268 (010Ch) Name: sqlite3_vtab_on_conflict Addr:61E0DE9D Ord: 269 (010Dh) Name: sqlite3_wal_autocheckpoint Addr:61E538C9 Ord: 270 (010Eh) Name: sqlite3_wal_checkpoint Addr:61E53885 Ord: 271 (010Fh) Name: sqlite3_wal_checkpoint_v2 Addr:61E05978 Ord: 272 (0110h) Name: sqlite3_wal_hook Addr:61E30BE6 Ord: 273 (0111h) Name: sqlite3_win32_is_nt Addr:61EA35DE Ord: 274 (0112h) Name: sqlite3_win32_mbcs_to_utf8 Addr:61EA3607 Ord: 275 (0113h) Name: sqlite3_win32_mbcs_to_utf8_v2 Addr:61EA3737 Ord: 276 (0114h) Name: sqlite3_win32_set_directory Addr:61EA36EB Ord: 277 (0115h) Name: sqlite3_win32_set_directory16 Addr:61EA367C Ord: 278 (0116h) Name: sqlite3_win32_set_directory8 Addr:61E30ACB Ord: 279 (0117h) Name: sqlite3_win32_sleep Addr:61EA35BD Ord: 280 (0118h) Name: sqlite3_win32_unicode_to_utf8 Addr:61EA362D Ord: 281 (0119h) Name: sqlite3_win32_utf8_to_mbcs Addr:61EA3656 Ord: 282 (011Ah) Name: sqlite3_win32_utf8_to_mbcs_v2 Addr:61EA359C Ord: 283 (011Bh) Name: sqlite3_win32_utf8_to_unicode Addr:61E30A69 Ord: 284 (011Ch) Name: sqlite3_win32_write_debug Addr:61EA5929 Ord: 285 (011Dh) Name: sqlite3changegroup_add Addr:61EA598B Ord: 286 (011Eh) Name: sqlite3changegroup_add_strm Addr:61EA59F1 Ord: 287 (011Fh) Name: sqlite3changegroup_delete Addr:61EA5B40 Ord: 288 (0120h) Name: sqlite3changegroup_new Addr:61EA596F Ord: 289 (0121h) Name: sqlite3changegroup_output Addr:61EA59D1 Ord: 290 (0122h) Name: sqlite3changegroup_output_strm Addr:61EA581C Ord: 291 (0123h) Name: sqlite3changeset_apply Addr:61EA58DB Ord: 292 (0124h) Name: sqlite3changeset_apply_strm Addr:61EA57AF Ord: 293 (0125h) Name: sqlite3changeset_apply_v2 Addr:61EA586A Ord: 294 (0126h) Name: sqlite3changeset_apply_v2_strm Addr:61EA5AC5 Ord: 295 (0127h) Name: sqlite3changeset_concat Addr:61EA5A4A Ord: 296 (0128h) Name: sqlite3changeset_concat_strm Addr:61EA4AB3 Ord: 297 (0129h) Name: sqlite3changeset_conflict Addr:61EA4B16 Ord: 298 (012Ah) Name: sqlite3changeset_finalize Addr:61EA4AF3 Ord: 299 (012Bh) Name: sqlite3changeset_fk_conflicts Addr:61EA571A Ord: 300 (012Ch) Name: sqlite3changeset_invert Addr:61EA5759 Ord: 301 (012Dh) Name: sqlite3changeset_invert_strm Addr:61E0EBC9 Ord: 302 (012Eh) Name: sqlite3changeset_new Addr:61EA4A4C Ord: 303 (012Fh) Name: sqlite3changeset_next Addr:61E0EB8F Ord: 304 (0130h) Name: sqlite3changeset_old Addr:61EA4A63 Ord: 305 (0131h) Name: sqlite3changeset_op Addr:61EA4A93 Ord: 306 (0132h) Name: sqlite3changeset_pk Addr:61EA4984 Ord: 307 (0133h) Name: sqlite3changeset_start Addr:61EA49E3 Ord: 308 (0134h) Name: sqlite3changeset_start_strm Addr:61EA49B5 Ord: 309 (0135h) Name: sqlite3changeset_start_v2 Addr:61EA4A18 Ord: 310 (0136h) Name: sqlite3changeset_start_v2_strm Addr:61EA5B49 Ord: 311 (0137h) Name: sqlite3rebaser_configure Addr:61EA5A16 Ord: 312 (0138h) Name: sqlite3rebaser_create Addr:61EA5C69 Ord: 313 (0139h) Name: sqlite3rebaser_delete Addr:61EA5B99 Ord: 314 (013Ah) Name: sqlite3rebaser_rebase Addr:61EA5C00 Ord: 315 (013Bh) Name: sqlite3rebaser_rebase_strm Addr:61EA4213 Ord: 316 (013Ch) Name: sqlite3session_attach Addr:61EA4837 Ord: 317 (013Dh) Name: sqlite3session_changeset Addr:61EA484E Ord: 318 (013Eh) Name: sqlite3session_changeset_strm Addr:61EA5C8E Ord: 319 (013Fh) Name: sqlite3session_config Addr:61EA4099 Ord: 320 (0140h) Name: sqlite3session_create Addr:61EA4165 Ord: 321 (0141h) Name: sqlite3session_delete Addr:61EA435F Ord: 322 (0142h) Name: sqlite3session_diff Addr:61EA48B5 Ord: 323 (0143h) Name: sqlite3session_enable Addr:61EA48F0 Ord: 324 (0144h) Name: sqlite3session_indirect Addr:61EA492B Ord: 325 (0145h) Name: sqlite3session_isempty Addr:61EA4976 Ord: 326 (0146h) Name: sqlite3session_memory_used Addr:61EA489B Ord: 327 (0147h) Name: sqlite3session_patchset Addr:61EA4873 Ord: 328 (0148h) Name: sqlite3session_patchset_strm Addr:61EA41F8 Ord: 329 (0149h) Name: sqlite3session_table_filter
1. Основные функции библиотеки sqlite 3.dll
Функции SQLite позволяют выполнять следующий набор операций:
Как расшифровать cookies?
Хочу понять какая информация хранится в cookies. Не прочитать, а увидеть своими глазами. Пропробывать что-то записывать в cookies свое. Никаких взломов паролей, расшифровки хэшей и прочего.
Вопрос. Кто-нибудь знает как устроены сейчас cookies? Для firefox и chrome это сейчас по сути файл базы sqlite. Если его открывать редакторами, то по ходу только hex редактором можно хоть что-то увидеть и понять. Можно загрузить в редактор баз данных, тогда я вижу поля, вижу сайты, время посещения прочее. А дальше идет поле encrypted_value. Так не могу понять его кодировку и расшифровать что там? Обычно говорят что cookies хранят информацию с сайтов, так вот саму информацию никак не могу прочитать, интересно что они вносят туда или они это шифруют всегда? Хочется на python для себя написать скрипт, чтобы потестировать работу с cookies на сайте своем. Писать что нужно, считывать это. Кто-нибудь может подсказать как прочесть данные в cookies и как расшифровать их?
- Вопрос задан более трёх лет назад
- 38717 просмотров
Комментировать
Решения вопроса 1
Вот там есть строчка значений value — это какой-то зашифрованный хэш?
Это строка, которую положил туда сервер.
Что вообще значат все эти сокращения ?
Как решит сервер.
Куки это фактически key-value пары. Хранить там можно что угодно, от флагов (show_ads=1), до строк, хешей, зашифрованных данных и просто мусора.
Если вы хотите добраться до кук извне браузера или изменить куки другого сайта, то у вас проблемы: браузеры делают всё, чтобы не допустить этого в целях безопасности.
Ответ написан более трёх лет назад
Нравится 2 8 комментариев
seosova @seosova Автор вопроса
Я хочу свои личные cookies поменять. Посмотреть что мне мне написали. По сути почему я на своем пк не могу их изменить? В чём тут вопрос безопасности? ( кроме варианта что мне вирус их там все подменил )
seosova: >По сути почему я на своем пк не могу их изменить?
Можете. Через браузер.
Манипулировать куками может сайт, который их ставил или пользователь через консоль браузера.
> В чём тут вопрос безопасности? ( кроме варианта что мне вирус их там все подменил )
В этом и есть. Если дать свободный доступ к кукам: вшиваем в трояна хромиум, забираем куки от почты, подделываем user-agent и получаем доступ к почте.
Можете посмотреть, имеют ли аддоны доступ к кукам, и написать своего Павлика Морозова, который будет посредником между приложением и браузером.
seosova @seosova Автор вопроса
Я хочу менять свои cookies через python ( по сути он легко работает с sqlite ). В данном случае это не реально? Без браузера? Или может просто через браузер менять, тот же selenium умеет так?
seosova: В Винде Хром хранит куки зашифрованными через пароль текущего пользователя. Вам придётся использовать DPAPI ( https://msdn.microsoft.com/en-us/library/ms995355.aspx ) для расшифровки.
В Файрфоксе куки вроде как не шифруются. В остальных браузерах не знаю.
seosova @seosova Автор вопроса
MiiNiPaa: А после расшифровки что видно? К сожалению, сейчас нет Windows под рукой. До расшифровки вообще ничего не понятно, а потом видны те же хэши в значениях. Или после расшифровки уже никаких хэшей в полях value и все прям видно?
How do I use SQLite to read data from the Firefox cookies file?
In my Firefox profile directory there is a cookies.sqlite file which holds the data for Firefox’s cookies. I grabbed the Firefox SQLite Manager extension and loaded this file, which works, but how can I use plain query commands to read the cookies out of that file? This is what I’ve tried so far:
$ sqlite3 cookies.sqlite sqlite> SELECT * FROM dbname.sqlite_master WHERE type='table'; SQL error: file is encrypted or is not a database
I can’t even list the tables, so I’m not able to start trying to list the cookies yet. If I can connect I’d like to be able to read and write data there, but I’m new to SQLite.
30.8k 22 22 gold badges 106 106 silver badges 131 131 bronze badges
asked Sep 30, 2011 at 13:15
53.2k 53 53 gold badges 161 161 silver badges 198 198 bronze badges
What platform are you on? Is this Windows? Linux? (This is usually caused by an sqlite version mismatch, by the way.)
Sep 30, 2011 at 13:27
I was testing in terminal on OSX with sqlite3 — I don’t have a plain sqlite command available — perhaps I need to install that? Or does sqlite3 have reverse compatibility?
Sep 30, 2011 at 13:28
Use sqlite3 —version to tell what version your tool is.
Sep 30, 2011 at 13:40
ok it says SQLite format 3 in the first few bytes of the file. So I guess my original question is still relavant.
Sep 30, 2011 at 14:38
To just get a cookie out of Firefox, you can also try extracting it from the JSON file in the sessionstore-backups directory — see stackoverflow.com/questions/19486161/…
Feb 6, 2017 at 16:31
3 Answers 3
I had the same problem trying to read the cookies.sqlite file on Mac OS 10.6.8 (Snow Leopard). I downloaded SQLite 3.7.10 from http://www.sqlite.org/download.html and then I could open the file.
Here’s a walkthrough of what I did.
- Download SQLite 3, go to your downloads folder and unzip the file so that you now have a new SQLite 3 sitting in your downloads folder.
- Open up a new finder window, press CMD + Shift + G, in the ‘go to’ dialog that pops up enter ~/Library/Application Support/Firefox/Profiles and then press return.
- Presuming you only have one Firefox profile, you should see a folder here called XXXXXXXX.default (where the XXX string will be some random characters). Open this folder, or if you have more than one profile, open the folder of the profile you are looking for.
- Inside you will find the cookies.sqlite database file, you can use this here directly, but you might want to make a copy somewhere else to use without risk of messing up the one that Firefox uses. If you want to use the Firefox one directly then I think you have to quit Firefox first, otherwise it has a lock on the file.
- Open a new terminal window, and drag the sqlite3 binary from the downloads folder to the terminal window, this should enter the path to sqlite3 onto the command line.
- Now, drag the cookies.sqlite3 database (the original or your copy) to the terminal, press return in the terminal.
If all goes well you should get the sqlite> command prompt. If you enter .tables you should see the table moz_cookies, which you can then query and investigate further.
The following commands might help:
.mode column .headers on select * from moz_cookies where domain = '.stackoverflow.com';
You should see all the values stored in your cookie for this site.
If you want to update the existing sqlite3 on your Mac, I did sudo mv /usr/bin/sqlite3 /usr/bin/sqlite3.old (just in case of any future problems, I can move it back again) and then sudo mv ~/downloads/sqlite3 /usr/bin/sqlite3 .
SQLite3::open
Открывает базу данных SQLite 3. Если сборка включает шифрование, то она будет пробовать использовать ключ.
Список параметров
Путь к БД SQLite или :memory: для использования БД в памяти.
- SQLITE3_OPEN_READONLY : Открыть БД только для чтения.
- SQLITE3_OPEN_READWRITE : Открыть БД для чтения и записи.
- SQLITE3_OPEN_CREATE : Создать БД, если её нет.
Опциональный ключ, для использования шифрования при работе с БД. Если модуль шифрования не установлен, то данная опция не будет использована.
Возвращаемые значения
Функция не возвращает значения после выполнения.
Примеры
Пример #1 Пример использования SQLite3::open()
/**
* Простой пример расширения класса SQLite3 и изменения параметров конструктора.
* После чего использование метода open для инициализации БД.
*/
class MyDB extends SQLite3
function __construct ()
$this -> open ( ‘mysqlitedb.db’ );
>
>
?php
$db -> exec ( ‘CREATE TABLE foo (bar STRING)’ );
$db -> exec ( «INSERT INTO foo (bar) VALUES (‘This is a test’)» );
$result = $db -> query ( ‘SELECT bar FROM foo’ );
var_dump ( $result -> fetchArray ());
?>
User Contributed Notes 4 notes
7 years ago
Just a quick note on not being able to open() two databases together and copy the exact info, say for instance to create a backup db. I searched the net for and answer, none of which served. The comment and solution of attaching seems complicated to me. Eventually I worked out that the same result could be more simply accomplished using the copy() function.
copy ( «old.db» , «new.db» );
?>
5 years ago
If you plan to have concurrent access to a SQLITE3 database, it is advised to change the default SQLite3::busyTimeout value (set to zero by default). Otherwise, you may get a «database locked» error while writing to the database.
With the timeout set to a non zero value, a write attempt to a locked database will wait for the lock to be released (within the timeout) before sending an error.
Note that the default value was set to 60 seconds on SQLITE2.
6 years ago
Note that the SQLITE3_OPEN_READONLY flag cannot be combined with the SQLITE3_OPEN_CREATE flag. If you combine both of these flags, a rather unhelpful «Unable to open database: out of memory» exception will be thrown.
13 years ago
If you are trying to use the open() method to open multiple database files within the same SQLite3 object (which I could not get to work), here is an alternative way to do so using special SQLite3 syntax additions to the SQL language. This took some investigation on my part, so hopefully the solution I found will help you too.
These are the nice features within SQLite3 that are leveraged:
* The create statement query for a table is stored within a table called «sqlite_master» within the parent database file.
* SQLite3 supports the «insert into. select * from» SQL syntax for doing bulkload-speed inserts into a table — but what if the source and target tables are in separate database files?
* SQLite3 has an «attach [filename] as [reference database name]» which will allow multiple database files to be opened and accessible to the same SQLite3 object.
Assume you have a table called «my_template» in the SQLite3 database file «source.db». You want to make a copy of this table into the database file «target.db» and call the table «working_table».
//attach the source database file to the bulkload connection object;
$bulkload_connection = new SQLite3 ( «c:/sqlite3_database_files/source.db» );
//retrieve the create statement query for the source table;
$sourcetbl_create_statement = $bulkload_connection -> querySingle ( «select sql from sqlite_master where type=’table’ and name=’my_template'» );
if ( $sourcetbl_create_statement === false ) exit( $bulkload_connection -> lastErrorMsg ());
//build the create statement query for the target table;
$targettbl_create_statement = str_replace ( ‘CREATE TABLE my_template’ , ‘CREATE TABLE bulkload.working_table’ , $sourcetbl_create_statement );
//attach the target database file to the bulkload connection object — and reference it as the database called [bulkload];
$result = $bulkload_connection -> exec ( «attach ‘c:/sqlite3_database_files/target.db’ as bulkload» );
if ( $result === false ) exit( $bulkload_connection -> lastErrorMsg ());
//issue the query to create the target table within the target database file;
$result = $bulkload_connection -> exec ( $targettbl_create_statement );
if ( $result === false ) exit( $bulkload_connection -> lastErrorMsg ());
//copy the rows from the source table to the target table as quickly as possible;
$result = $bulkload_connection -> exec ( «insert into bulkload.working_table select * from my_template» );
if ( $result === false ) exit( $bulkload_connection -> lastErrorMsg ());
//release the OS file locks on the attached database files;
$bulkload_connection -> close ();
unset( $bulkload_connection );
?>
- Copyright © 2001-2023 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy