Сейчас на форуме: localhost1, vsv1, asfa, tyns777 (+5 невидимых)

 [email protected] —› Вопросы новичков —› Расшифровка базы теста
Посл.ответ Сообщение

Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 23 апреля 2020 12:42
· Личное сообщение · #1

Здравствуйте, есть программа на Borland Dephi 7
https://dropmefiles.com/yLcqn
Тест, отдельно лежит база вопросов, пытаюсь ее расшифровать.
Пробовал загрузить в DeDe, поискать ссылки на функции вроде TMemo,когда отмечаешь вопрос должно сравниваться с верным, ставлю bp-все проходит мимо.
В самой OllyDbg ставлю брекопоинты на чтение строк, трассировкой регистры смотрел-нигде вопрос-ответ не высвечиваются.
Направьте новичка.
Спасибо.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 23 апреля 2020 13:24 · Поправил: _MBK_
· Личное сообщение · #2

TMemo это какбэ не функция а класс.
Вы уверены что поля ввода именно этого класса?
Каков результат декомпиляции через DeDe (хотя предполагаю ответ) и на основании чего и где вы ставите бряки в олли?
А вообще говоря, вы как то не с той стороны реверсировать базу начали - обычно смотрят на чтение из файла а не из формочки ввода.



Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 23 апреля 2020 13:35
· Личное сообщение · #3


Поля ввода в виде галочек напротив верного ответа.
Попробую чтение из файла поимать.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 23 апреля 2020 13:41 · Поправил: _MBK_
· Личное сообщение · #4

А с чего вы решили, что там именно TMemo?
Если будете чтение из файла ковырять, советую начать с ProcMon - многое прояснится уже на этом этапе



Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 23 апреля 2020 14:39
· Личное сообщение · #5

Просто предположил про Тмемо-по скрину похоже что они используются.
Судя по Procmon используется CreateFile, ReadFile, чтение по 128 бит.
Когда ставлю брекпоинт на CreateFile(все вызовы пробовал)-программа аварийно завершается-какая то антиотладка стоит?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 23 апреля 2020 16:39
· Личное сообщение · #6

Я с утюга, поэтому ваш файл посмотреть не могу, но какая антиотладка из под дельфи? Die что говорит - на программу точно ничего сверху не навешено?
Вы уверены, что 128 бит, даже 128 байт и то как то странно, прямо с нулевого смещения так таки весь файл до конца одинаковыми порциями по 128 бит читает???
Попробуйте запустить программу и в процессе выполнения прицепиться а потом бряк на API поставить - тоже крэшится?



Ранг: 1.2 (гость)
Активность: 0.03=0.03
Статус: Участник

Создано: 23 апреля 2020 18:31
· Личное сообщение · #7

Как минимум пару фалов не хватает - instr.ini и lbr.ini.
Код чистый делфя - падает на ошибке чтения, настраивайте отладчик.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 23 апреля 2020 19:18
· Личное сообщение · #8

Для начала можно крутнуть и найти выборку искомых строк, это будет первое событие при их адресации.

-----
vx





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 23 апреля 2020 20:11
· Личное сообщение · #9

ОМГ, чего только не насоветуют

Бряк на CreateFileW, выйдешь на
Code:
  1. 004AB734 <Unit1.sub_004AB734>            /$  55            PUSH EBP                                 ; Unit1.sub_004AB734


Трейсь и смотри что происходит с твоим файлом.

-----
ds


| Сообщение посчитали полезным: Veliant

Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 23 апреля 2020 20:12 · Поправил: _MBK_
· Личное сообщение · #10

Первый взгляд на базу - от каждого байта в блоке используются только младшие 5 бит, остальные установлены в 1
На ум приходит модификация base64
То есть вся база - текстовый файл, каждая строка которого состоит из элементов пятибитной длины, дополненных до байта единицами, в конце каждой строки некие служебные маркеры
В общем, как правильно сказал DimitarSerg, внимательно курите алгоритм расшифровки считанного буфера в процедуре начиная с адреса 4AB734:
Code:
  1. 004AB734 | push ebp                                
  2. 004AB735 | mov ebp,esp                             
  3. 004AB737 | push ecx                                
  4. 004AB738 | mov ecx,4                               
  5. 004AB73D | push 0                                  
  6. 004AB73F | push 0                                  
  7. 004AB741 | dec ecx                                 
  8. 004AB742 | jne test.4AB73D                         
  9. 004AB744 | xchg dword ptr ss:[ebp-4],ecx           
  10. 004AB747 | push ebx                                
  11. 004AB748 | push esi                                
  12. 004AB749 | push edi                                
  13. 004AB74A | mov edi,ecx                             
  14. 004AB74C | mov dword ptr ss:[ebp-4],edx            
  15. 004AB74F | mov eax,dword ptr ss:[ebp-4]            
  16. 004AB752 | call test.404D6C                        
  17. 004AB757 | xor eax,eax                            
  18. 004AB759 | push ebp                                
  19. 004AB75A | push test.4AB895                        
  20. 004AB75F | push dword ptr fs:[eax]                 
  21. 004AB762 | mov dword ptr fs:[eax],esp              
  22. 004AB765 | lea eax,dword ptr ss:[ebp-8]            
  23. 004AB768 | call test.4048BC                        
  24. 004AB76D | mov ebx,edi                             
  25. 004AB76F | test ebx,ebx                            
  26. 004AB771 | jle test.4AB799                         
  27. 004AB773 | mov esi,1                               
  28. 004AB778 | lea eax,dword ptr ss:[ebp-10]           
  29. 004AB77B | mov edx,dword ptr ss:[ebp-4]            
  30. 004AB77E | mov dl,byte ptr ds:[edx+esi-1]          ; Считать байт из буфера
  31. 004AB782 | xor dl,10




Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 27 апреля 2020 08:10
· Личное сообщение · #11

Login_
вместе с недостающими файлами https://dropmefiles.com/sYlTq
difexacaw подробнее, не понял
DimitarSerg спасибо
_MBK_ спасибо, начал трассировку отсюда, потом попадаю в два цикла на 4AB778 и 4AB7AC, похоже он посимвольно их расшифровывает-появляются числа 0074, 0033- коды символов?
Может после запуска программы как то из памяти забрать уже расшифрованную базу?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 27 апреля 2020 08:19
· Личное сообщение · #12

buhanoid пишет:
Может после запуска программы как то из памяти забрать уже расшифрованную базу?

Ну так для этого надо сперва понять куда программа ее расшифровывает
Там все не так просто, алгоритм на первый взгляд весьма странный или они специально запутали дабы затруднить реверс
К примеру, указанное в моем листинге значение dl судя по всему, сразу теряется, не используясь потом




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2020 08:52
· Личное сообщение · #13

buhanoid

> подробнее, не понял

Найти выборку в базу данных автоматикой. Выборка(data fetch) это железячное событие, вначале происходит адресная трансляция, вычисляется линейный адрес, затем происходит обращение к памяти. Так вот для начала нужно это событие обнаружить, это покажет во первых формат бд и станет ясно возможен ли дамп(собирается ли бд в памяти). Иначе это всё танцы с бубном, не технический подход к задаче.

-----
vx




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 27 апреля 2020 08:56
· Личное сообщение · #14

Какая выборка, там база - слегка шифрованный текстовый файл, чтение уже прошли, на данном этапе разбираем пррцедуру расшифровки считанных данных




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 27 апреля 2020 09:00
· Личное сообщение · #15

_MBK_

А какая разница какой источник данных и криптофункция. В памяти оно декриптовано и собрано или же нет, на лету собирается строка. Дашь строковую сигнатуру(там наверно юникод) я крутну визором он найдёт всё.

-----
vx




Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 27 апреля 2020 09:11
· Личное сообщение · #16

Да нет там никакой криптофункции, энтропия полученного текста минимальная, какой то школьный самопал, (как я уже говорил) на первый взгляд смахивающий на вариацию base64, процедура расшифровки найдена, осталось только внимательно покурить алгоритм, по моему неплохое домашнее задание топикстартеру.



Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 27 апреля 2020 09:21
· Личное сообщение · #17

_MBK_ Спасибо, скажите что конкретнее искать? Ссылку на данные?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 27 апреля 2020 09:28 · Поправил: _MBK_
· Личное сообщение · #18

Смотря что вы хотите найти. Если реверсировать алгоритм - ставьте аппаратный бряк на любой байт из считанного буфера и следите за его перемещением. Правда, будьте готовы к тому, что в процессе алгоритм его зачем то туда-сюда много раз перетасовывает через movsb. На каждое новое местонахождение старательно бряк переставлять надо, лично я, сказать по правде, замаялся и бросил.
А если хотите просто расшифрованные данные получить - в каждой вызываемой процедуре внимательно следите за передаваемыми параметрами - в одной из них, скорее всего, параметром будет адрес буфера, заполняемого после вызова расшифрованными данными.



Ранг: 3.5 (гость), 2thx
Активность: 0.010.02
Статус: Участник

Создано: 27 апреля 2020 09:35
· Личное сообщение · #19

_MBK_, алгоритм скорее всего ZBase32 с русским алфавитом. Мне бы просто данные получить, буду искать адрес.



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 27 апреля 2020 11:15 · Поправил: Veliant
· Личное сообщение · #20

Нет там никакого особого шифрования. Читает до \x0d\x0a, ксорит с 0x10, разворачивает по два байта (Как пример .-АокитПр "ПИ0С => 0СПИ Приток-А). В начале строки всегда идет число указывающее длину строки. Все остальное - мусор.
Вкуривайте функцию, указанную DimitarSerg, в ней все происходит.

| Сообщение посчитали полезным: _MBK_, CyberGod
 [email protected] —› Вопросы новичков —› Расшифровка базы теста
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати