eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме:
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Вопрос по С#
Посл.ответ Сообщение

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 28 октября 2019 23:05 New!
Цитата · Личное сообщение · #1

Всем доброго время суток!
Столкнулся с проблемой, незнаю куда двигать дальше.
Code:
  1. rastrClass.GetLicenseInfo(ref text, ref text2, ref num);

Перехожу по GetLicenseInfo, а там ...
Code:
  1. // Token: 0x060000E3 RID: 227
  2.                  [DispId(62)]
  3.                  [MethodImpl(MethodImplOptions.InternalCall)]
  4.                  public virtual extern void GetLicenseInfo([MarshalAs(UnmanagedType.BStr)] ref string CompanyName, [MarshalAs(UnmanagedType.BStr)] ref string UserName, ref int LicenseValid);

Подскажите что это? Непойму откуда возвращаются данные с параметров string CompanyName, string UserName и int LicenseValid?!

Ранг: 510.2 (!)
Статус: Модератор

Создано: 28 октября 2019 23:12 New!
Цитата · Личное сообщение · #2

Jaa
в нативную дллку, куда ж еще..

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 28 октября 2019 23:14 · Поправил: Jaa New!
Цитата · Личное сообщение · #3

Обычно оно видно в какую дллку, а тут непонятно в какую.
Как понять какую использует библиотеку?

Ранг: 105.8 (ветеран)
Статус: Участник

Создано: 28 октября 2019 23:20 New!
Цитата · Личное сообщение · #4

Я думаю сам в себя. Managed и Unmanaged код в "одном флаконе"

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 28 октября 2019 23:27 New!
Цитата · Личное сообщение · #5

хм Как тогда подменить возвращаемые параметры, эта фигня используется не в одном месте

Ранг: 45.5 (посетитель)
Статус: Участник

Создано: 29 октября 2019 00:03 · Поправил: Adler New!
Цитата · Личное сообщение · #6

Jaa, а чего то похожего на
Code:
  1. [Guid("790C6E0B-9194-4cc9-9426-A48A63185696"), InterfaceType(ComInterfaceType.InterfaceIsDual)]
  2. [ComImport]
выше по коду нет?

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 29 октября 2019 00:06 New!
Цитата · Личное сообщение · #7

Есть такое
Code:
  1.          [ComSourceInterfaces("ASTRALib._IRastrEvents\0\0")]
  2.          [TypeLibType(TypeLibTypeFlags.FCanCreate)]
  3.          [Guid("EFC5E4AD-A3DD-11D3-B73F-00500454CF3F")]
  4.          [ClassInterface(ClassInterfaceType.None)]
  5.          [ComImport]

Ранг: 386.2 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 октября 2019 00:10 New!
Цитата · Личное сообщение · #8

Jaa
Собственно, чем накрыта dll'ка или exe'шник?

InternalCall, MarshalAs, "rastrClass" - покажите весь класс (скриншотом).
"GetLicenseInfo" - часом в таблице экспорта этой процедуры нет?!

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 29 октября 2019 00:17 · Поправил: Jaa New!
Цитата · Личное сообщение · #9

ELF_7719116 пишет:
"GetLicenseInfo" - часом в таблице экспорта этой процедуры нет?!

Неа


ELF_7719116 пишет:
InternalCall, MarshalAs, "rastrClass" - покажите весь класс (скриншотом).

Одним не получится, дофига всего
--> Скрин <--

--> Тут полный список <--

InternalCall, MarshalAs - это системные

Добавлено спустя 11 минут
ELF_7719116 пишет:
Собственно, чем накрыта dll'ка или exe'шник?

Ничем не накрыто.

Ранг: 386.2 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 октября 2019 01:00 New!
Цитата · Личное сообщение · #10

Jaa
Code:
  1. [Guid("EFC5E4AD-A3DD-11D3-B73F-00500454CF3F")]
- что, собственно, COM грузит??
ASTRALib - есть ли dll'ка с похожим именем?
Судя по всему, все процедуры, задекларирированные в классе вызываются из COM (dll'ки, которая как раз может быть и накрыта. Иначе весь взлом сводится к подмене COM).

Jaa пишет:
InternalCall, MarshalAs - это системные

Ага. И что вызывается через COM, manage assembly?! Впрочем уже озвучили выше.

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 29 октября 2019 01:02 · Поправил: Jaa New!
Цитата · Личное сообщение · #11

Такая дллка есть, но она тоже не накрыта, где ловить этот COM?

Ранг: 386.2 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 октября 2019 08:18 New!
Цитата · Личное сообщение · #12

Jaa пишет:
где ловить этот COM

В реестре regedit.exe посмотреть запись HKEY_CLASSES_ROOT\ClassID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}
Jaa пишет:
Такая дллка есть,

Вероятно она там и будет.

Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 29 октября 2019 12:03 · Поправил: Jaa New!
Цитата · Личное сообщение · #13

ELF_7719116 пишет:
В реестре regedit.exe посмотреть запись HKEY_CLASSES_ROOT\ClassID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}

Code:
  1. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}]
  2. @="Rastr Class"
  3.  
  4. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}\InprocServer32]
  5. @="C:\Program Files (x86)\RastrWin3\astra.dll"
  6. "ThreadingModel"="Apartment"
  7.  
  8. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}\ProgID]
  9. @="Astra.Rastr.1"
  10.  
  11. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}\Programmable]
  12.  
  13. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}\TypeLib]
  14. @="{84B05080-ABC9-11D3-B740-00500454CF3F}"
  15.  
  16. [HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{EFC5E4AD-A3DD-11D3-B73F-00500454CF3F}\VersionIndependentProgID]
  17. @="Astra.Rastr"


"C:\Program Files (x86)\RastrWin3\astra.dll" Написана на с++ но там ничего интересного по активации нету(

Ранг: 84.0 (постоянный)
Статус: Участник

Создано: 29 октября 2019 13:23 New!
Цитата · Личное сообщение · #14

Jaa
Можно сам файл?

Ранг: 105.8 (ветеран)
Статус: Участник

Создано: 29 октября 2019 13:31 New!
Цитата · Личное сообщение · #15

Jaa пишет:
"C:\Program Files (x86)\RastrWin3\astra.dll" Написана на с++ но там ничего интересного по активации нету(

Ну как нету... В TypeLib то загляни... Затаскиваю в Delphi и вижу:
Code:
  1.     procedure GetLicenseInfo(var CompanyName: WideString; var UserName: WideString;
  2.                              var LicenseValid: Integer); safecall;
  3.     function GetFunctionStatus(nIndex: Integer; var FunctionName: WideString;
  4.                                var DateExpired: WideString; var Enabled: Integer): Integer; safecall;
  5.     procedure SaveLicense(const CompanyName: WideString; const UserName: WideString); safecall;
  6.  

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


Ранг: 121.3 (ветеран)
Статус: Участник

Создано: 29 октября 2019 13:32 · Поправил: Jaa New!
Цитата · Личное сообщение · #16

Добавлено спустя 3 минуты
digger70 пишет:
Ну как нету... В TypeLib то загляни... Затаскиваю в Delphi и вижу:

Я только в ресурсах нашел, в самом коде ссылок не вижу.
Мне нужно вернуть нужные значения с GetLicenseInfo и GetFunctionStatus собственно и всё

Code:
  1. public virtual extern void GetLicenseInfo([MarshalAs(UnmanagedType.BStr)] ref string CompanyName, [MarshalAs(UnmanagedType.BStr)] ref string UserName, ref int LicenseValid);
  2. public virtual extern int GetFunctionStatus([In] int nIndex, [MarshalAs(UnmanagedType.BStr)] ref string FunctionName, [MarshalAs(UnmanagedType.BStr)] ref string DateExpired, ref int Enabled);

И самое главное Сохранение
Code:
  1. // Token: 0x060000B4 RID: 180
  2.                  [DispId(13)]
  3.                  [MethodImpl(MethodImplOptions.InternalCall)]
  4.                  public virtual extern void Save([MarshalAs(UnmanagedType.BStr)] [In] string Name, [MarshalAs(UnmanagedType.BStr)] [In] string templ);

Ранг: 386.2 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 октября 2019 20:52 New!
Цитата · Личное сообщение · #17

Jaa
Резюмируя уже сказанное выше - имеем .net сборку, которая обращается к управлемому коду посредством COM-класса. Последний находится в библиотеке astra.dll, которая ничем не накрыта.
Естественно, всё это можно беззаботно дебажить, запустив Rastr3.exe в отладчике. Библиотека astra.dll подгружается при вызове класса и работает в том же процессе, что очевидно с самого начала.
Прога чекает файл лицензии: C:\Program Files (x86)\RastrWin3\win-(имя компа)_license.dat
В astra.dll детектятся строки "PublicExponent", "Modulus" - по видимому, из лицухи RSA-ключ вытаскивается. Это наводит на мысли на кейгене (есть тут на форуме замечательные люди, кто потрошит rsa и находится на расстоянии вытянутой руки ).
Однако, в Вашем случае, кейгенить смысла нет, если COM-класс банально возвращает данные из лицухи. Собственно, это было сразу озвучено - накатайте свою astra.dll с COM-классом, который уже возвращает "правильные" данные.
Строки данных из лицухи:
machinehash, username, userFirstName, userLastName, userCompany, signature, dateExpiry


subroutine ищет и читает сам файл лицухи:
$ - начало секции .text в astra.dll (если ImageBase != 0x10000000)
Code:
  1. $+15040   | push ebp                                            |
  2. $+15041   | mov ebp,esp                                         |
  3. $+15043   | mov edx,dword ptr ss:[ebp+14]                       |
  4. $+15046   | test edx,edx                                        |
  5. $+15048   | je astra.10016090                                   |
  6. $+1504A   | cmp dword ptr ss:[ebp+C],0                          |
  7. $+1504E   | mov ecx,dword ptr ss:[ebp+10]                       | ecx:sub_10016040
  8. $+15051   | mov dword ptr ds:[edx],0                            |
  9. $+15057   | je astra.1001607F                                   |
  10. $+15059   | cmp dword ptr ds:[ecx],0                            | ecx:sub_10016040
  11. $+1505C   | jne astra.10016076                                  |
  12. $+1505E   | cmp dword ptr ds:[ecx+4],0                          | ecx+4:sub_10016040+4
  13. $+15062   | jne astra.10016076                                  |
  14. $+15064   | cmp dword ptr ds:[ecx+8],C0                         | ecx+8:sub_10016040+8
  15. $+1506B   | jne astra.10016076                                  |
  16. ...
  17. вызов call eax
  18. $+1508A   | call eax                                            |
  19. ...
  20. $+19EE8   | mov dword ptr ss:[ebp-4],FFFFFFFF                   |
  21. $+19EEF   | mov ebx,dword ptr ss:[ebp+10]                       |
  22. $+19EF2   | mov edi,dword ptr ss:[ebp-18]                       |
  23. $+19EF5   | mov esi,dword ptr ss:[ebp-14]                       |
  24. $+19EF8   | test esi,esi                                        |
  25. $+19EFA   | je astra.1001AF2C                                   |
  26. $+19EFC   | inc dword ptr ds:[esi+18]                           | [esi+18]:sub_10535E52+3E
  27. $+19EFF   | mov ecx,esi                                         |
  28. $+19F01   | call <astra.sub_1024C940>                           | << в этой функе MessageBox и доступ к лицухе
  29. $+19F06   | xor edi,edi                                         | edi:&"rb"
  30. $+19F08   | test eax,eax                                        |
  31. $+19F0A   | cmovs edi,eax                                       | edi:&"rb"
  32. $+19F0D   | dec dword ptr ds:[esi+18]                           | [esi+18]:sub_10535E52+3E
  33. $+19F10   | test edi,edi                                        | edi:&"rb"
  34. $+19F12   | jne astra.1001AF23                                  |


Несколько проблематично определить имя фукнции, которая вызывается (разве что по аргументам). В стеке refs на имена не наблюдаются. Возможно, в недрах clr.dll (net) или ole32.dll (вызывает конструктор или как это называется) валяется.

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

 eXeL@B —› Основной форум —› Вопрос по С#

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS