Сейчас на форуме: igorcauret (+8 невидимых)

 eXeL@B —› Вопросы новичков —› AeroGlass for Win8.1
Посл.ответ Сообщение

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

Создано: 13 июля 2014 15:45 · Поправил: v00doo
· Личное сообщение · #1

Все же рискну написать, хотя сейчас меня закидают помидорами, но все же.

В общем цель:
http://sourceforge.net/projects/glass8.berlios/files/win81_x86_1.2.5.7z/download

Инжект в винду для восстановления Aero в 8.1 (точнее переписанное Aero, отрисовывается через DirectX)

Лоадырь - aerohost.exe
Ничего особенного не делает просто грузит функу InjectGlass в dwmglass.dll.
Все остальное в dwmglass.dll (либа ничем не накрыта, но внутри проверка целостности).

Первая проверка проcто на SID пользователя, от которого грузится либа:
Code:
  1. .text:1000ED82                 call    CheckSID
  2. .text:1000ED87                 test    al, al
  3. .text:1000ED89                 jnz     short NextLoad

Дальше инжектится стандартным методом в winlogon.exe через CreateRemoteThread ну и делает свои грязные делишки.

И тут в общем первый вопрос: как это все нормально трейсить?
Так как нужно добраться до функи по адресу 100092A0 (offset 86A0), там основная проверка.
Либа грузит donation.key, если тот существует.
Code:
  1. .text:10009417                 push    offset aDonation_key ; "\donation.key"
  2. .text:1000941C                 lea     ecx, [esp+6ECh+var_5FC] ; void *
  3. .text:10009423                 call    sub_1000A5B0

А вот дальше начинается уже основное:
Получает инфу CPU
Code:
  1. .text:1000959C                 cpuid
  2. .text:1000959E                 xorps   xmm0, xmm0
  3. .text:100095A1                 mov     [esp+6E8h+var_660], 1234567

А затем, кажется хэширует это все, вроде это Tiger-192
Code:
  1. .text:100095FB                 mov     [esp+6F0h+var_65C], 76543210h
  2. .text:10009606                 mov     [esp+6F0h+var_658], 0FEDCBA98h
  3. .text:10009611                 mov     [esp+6F0h+var_654], 0C3B2E187h
  4. .text:1000961C                 mov     [esp+6F0h+var_650], 0F096A5B4h
  5. .text:10009627                 call    MaybeTiger
  6. .text:1000962C                 lea     ecx, [esp+6E8h+var_6A4]
  7. .text:10009630                 call    MaybeTryTiger

Вроде он:
http://www.cs.technion.ac.il/~biham/Reports/Tiger/
Но я не уверен в этом и в том, что оно просто хэшит его.
После этого получает ид жесткого
Code:
  1. .text:100096C2                 mov     [esp+6F4h+var_6D0], offset a_Physicaldrive ; "\.\PhysicalDrive0"
  2. .text:100096CA                 add     esp, 0Ch
  3. .text:100096CD                 mov     [esp+6E8h+lpFileName], eax

И его снова хэшит и мешает с предыдущем, потом все это еще как я понял частями делит и высчитывает ID пк.
А вот дальше использует уже очередность крипто апи:
CryptAcquireContextW
CryptImportKey
CryptCreateHash
CryptHashData
CryptVerifySignatureW

И все бы хорошо было бы, запатчить проверку после CryptVerifySignatureW и либа съест любой файл-пустышку, но вот внутри где-то проверка целостности либы и это не CRC.
Несколько человек говорили, что вычисляется хэш либы (как - хз) и с помощью него расшифровывает шаблон для поиска нужного места в dwm.exe для отрисовки самой прозрачности.

В крипто апи не силен, но до них еще добраться надо, кто опытнее, может сказать, есть ли смысл вообще до них рыть?
В какую сторону вообще смотреть? Может проще будет сдампить кусок (если возможно) с правильными значениями после расшифровки, но тогда где кусок и как добраться до него, если либу трогать нельзя?
Писать свой лоадырь который зациклит ее? Но функция вызывается не раз, как поймать нужный, именно загрузку ключа?



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

Создано: 13 июля 2014 16:25
· Личное сообщение · #2

Первое, что пришло в голову: Копирнуть оригинальную либу, Хукнуть CreateFile&CreateFileMapping и перенаправлять на копию оригинала.

Второе: изменить пару байт в либе, поставить бряк на выше указанные функции и ждать срабатывания. И через f8 шуровать до выхода из функции, а уже в теле приложения изучать.



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

Создано: 13 июля 2014 16:34 · Поправил: v00doo
· Личное сообщение · #3

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

А на счет брякаться на CreateFile, то пробовал, но то ли у меня руки кривые, то ли черт его, постоянно попадал только на чтение файла лицензии, лога и в общем на все, кроме самой либы, на счет перенаправления идея тоже была, но место которое я нашел, оказалось совсем не тем.



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

Создано: 13 июля 2014 18:09
· Личное сообщение · #4

v00doo, добавь в импорт либы длл с хуком на CreateFile и чеком на открытие себя (если путь заканчивается на название самой себя то меняем на копию.)



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

Создано: 13 июля 2014 22:17 · Поправил: Dart Raiden
· Личное сообщение · #5

<offtopic>
Использовать Sourceforge в качестве хостинга для проприетарного софта, да еще и указывать его, как тему для KDE (!), это, конечно, нечто...
</offtopic>



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

Создано: 15 июля 2014 00:41
· Личное сообщение · #6

Вопрос решился, проксей msimg32.dll подгружаю вторую либу, которая делает свои грязные дела.


 eXeL@B —› Вопросы новичков —› AeroGlass for Win8.1
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати