LSSender protocol reverse.

_bl4de_

floppy-диск
Пользователь
Регистрация
05.04.2013
Сообщения
1
Оценка реакций
0
Баллы
8
Piaro LSSender protocol reverse

Заказал мне недавно один человек отвязку данного софта от железа. Так как сначала хотелось побыстрее сделать кряк и получить свои шекели, то было принято решение снять пакер и пропатчить софт, чтобы работал везде. Моим планам не суждено было сбыться, т.к. заказчик исчез. Чтобы не пропадал софт и потраченное время, я решил посмотреть какую информацию собирает софт о компьютере, как взаимодействует с контрольной панелью и т.д.

Получение информации о железе.

Здесь все как и у всех - используется известная многим либа hddinfo.pas (она была нагуглена по строкам ошибок вида: 'DeviceIoControl filed!', 'GetDevInfoNTScsibyName filed!')
Вот они в дампе:


Чтобы узнать как информация о компьютере будет шифроваться или хэшироваться, можно использовать CryptoSearcher



Как мы видим на скриншоте, программа нашла целых 17 сигнатур, что довольно-таки много для простого спаммера по личкам.


Взаимодействие с сервером.
Так как для данного приложения нужен логин и серийный номер, который мы получаем на сайте автора, то данное приложение должно как-то взаимодействовать с сервером. Чтобы узнать куда стучит и какую информацию получает достаточно обычного снифера. Итак, с помощью снифера мы определили, что приложение обращается к двум скриптам автора:

1. http://%AUTHOR_HOST%/requests/api.php
2. http://%AUTHOR_HOST%/requests/info_api.php

На первый скрипт данные пост запроса выглядят так:
id=1&iv=[data1]&da=base64_encode([data2])
Примеры запросов:
id=1&iv=1fefc75027e719bc&da=base64_encode([data2])
id=1&iv=6355d0e74937b48f&da=base64_encode([data2])



Внимательные заметят, что параметр iv всегда разный по значению но одинаковый по длине. Возможно, этот параметр является ключом к расшифровке полученных от сервера данных.

Разбор данных.

Пример:
Код:
Y0tgGWGAjnEWsbcKPHNJKcy3qiLD5r4rivqypHbMfQMMor3KaMESBrmY8Mmrzj3RwELTSD6BRcYbS0VGt8O6uUQ2DUT9egwqiSTUHJxQCZz3Xfq71qIGprnaHgLaK6D1H9viSOy3L8AdezLnFJ8bODM95NF0fI8vj7/yUVBC1TfpPrb8cZOYLHYBGSA/juAZ
как мы видим, данные, полученные от сервера закодированы с помощью алгоритма base64. После раскодирования мы получаем набор каких-то данных, из этого следует, что данные зашифрованы.
За расшифровку отвечает процедура, расположенная по адресу 0070B37C . Так как мы имеем дело с приложением, написанным на делфи, то данные параметры в функцию передаются через регистры. (fastcall)

Код:
  MOV EDX,DWORD PTR SS:[EBP-54h] // данные, которые нужно расшифровать
  MOV ECX,070C1B4h // ключ f5e52609 (статически зашит в билд ) 
  XOR EAX,EAX // код алгоритма расшифровки (в данном случае eax = 0; 0 это rijndael)
  CALL 070B37Ch
Код:
  PUSH EBP
  MOV EBP,ESP
  PUSH 0h
  PUSH 0h
  PUSH 0h
  PUSH 0h
  PUSH 0h
  PUSH 0h
  PUSH EBX
  PUSH ESI
  PUSH EDI
  MOV DWORD PTR SS:[EBP-8h],ECX
  MOV DWORD PTR SS:[EBP-4h],EDX
  MOV EBX,EAX <- айди алгоритма
  MOV EAX,DWORD PTR SS:[EBP-4h]
  CALL 040A334h
  MOV EAX,DWORD PTR SS:[EBP-8h]
  CALL 040A334h
  MOV EAX,DWORD PTR SS:[EBP+10h]
  CALL 040A334h
  XOR EAX,EAX
  PUSH EBP
  PUSH 070B575h
  PUSH DWORD PTR FS:[EAX]
  MOV DWORD PTR FS:[EAX],ESP
  TEST EBX,EBX
  JNZ L030
  MOV EAX,070B594h  <- rijndael
  CALL 070B2FCh
  MOV ESI,EAX
L030:
  CMP EBX,1h
  JNZ SHORT 0070B3DDh
Как видим данные на сервере шифруются с помощью алгоритма rijndael. Но как мы помним на сервер отсылается параметр iv, который всегда разный. Пропустив процедуры инициализации rijndael мы попадем в цикл расшифровки данных (этот цикл отвечает за расшифроку большинства данных) - 006F85C4

Код:
L000:
  MOV ESI,EBX
  MOV EDX,ESI
  MOV EDI,DWORD PTR SS:[EBP-8h]
  MOV EAX,EDI
  MOV ECX,10h
  CALL 0406950h
  LEA EDX,DWORD PTR SS:[EBP-1Ch]
  MOV EAX,EDI
  MOV ECX,10h
  CALL 0406950h
  MOV ECX,ESI
  MOV EDX,ESI
  MOV EAX,DWORD PTR SS:[EBP-4h]
  MOV EDI,DWORD PTR DS:[EAX]
  CALL DWORD PTR DS:[EDI+88h] < Rijndael.decrypt
  MOV EAX,DWORD PTR SS:[EBP-4h]
  LEA EDX,DWORD PTR DS:[EAX+50h] <- iv параметр, который являет начальным ксор ключом 
  MOV EAX,ESI <- данные, которые ксорим
  MOV ECX,10h <- 16 байт это длина параметра iv, которая равна размеру блока в алгоритме rijndael
  CALL 06F6898h <- !!
  MOV EAX,DWORD PTR SS:[EBP-4h]
  LEA EDX,DWORD PTR DS:[EAX+50h]
  LEA EAX,DWORD PTR SS:[EBP-1Ch]
  MOV ECX,10h
  CALL 0406950h
  ADD DWORD PTR SS:[EBP-8h],8h10h
  ADD EBX,10h
  DEC DWORD PTR SS:[EBP-0Ch]
  JNZ L000
Функция по адресу 06F6898 являет собой обычный ксор
Код:
  PUSH ESI
  PUSH EDI
  MOV ESI,EAX
  MOV EDI,EDX
  MOV EDX,ECX
  DEC EDX
  TEST EDX,EDX
  JB L015
  INC EDX
  XOR EAX,EAX
L010:
  MOVZX ECX,BYTE PTR DS:[EDI+EAX]
  XOR BYTE PTR DS:[ESI+EAX],CL
  INC EAX
  DEC EDX
  JNZ L010
L015:
  POP EDI
  POP ESI
  RET
В итоге расшифрованные данные имеют вид:
Код:
<data>"id":"1";"msg":"%MSG_TEXT%";"license":"%LIC_ID%";"data":"vk.com";</data><time>%REG_TIME%</time><spec>bla-bla-bla</spec><date>%REG_DATE% %REG_TIME%</date>
С полями time и date все понятно, но за что же отвечает поле license. Чтобы узнать это достаточно зарегистрироваться на сайте автора, перейти в панель упраления программами и посмотреть код select'а параметра "Тип лицензии".
Код:
<td class="tdfill1">
    	<select id="sellic_1" class="sellic cselected">
      <option value="0">Выберите лицензию</option>
      <option value="1">Стандартная</option><option value="2">Расширенная (PRO)</option><option value="3">Бесплатная (Demo)</option>
    	</select>
    </td>
Из этого получаем license ids:
1 - стандартная
2 - PRO
3 - Demo

Вот и всё. = )
P.S.: надеюсь, что ваши заказчики не будут такими говноедами. = )
P.P.S.: тем кому надоест обходить антиотладку и прочий треш, советую использовать Phantom Plugin 1.85 для OllyDebugger

Мануал по использованию кряка (Windows):
1. устанавливаем denwer на компьютер
2. в файле hosts пишем 127.0.0.1 www.piaro.org
3. в папке localhost денвера создает папку requests и кладем туда наш скрипт api.php
В итоге получаем прогу с нужной себе лицензией.

В аттаче найдете некоторые наработки по генерации хэша системы и расшифровки файла с лицензией.
 

Вложения

  • 3.9 МБ Просмотры: 41
  • 7.8 КБ Просмотры: 35

12309

(L3) cache
Пользователь
Регистрация
06.07.2011
Сообщения
151
Оценка реакций
3
Баллы
18

demien

(L2) cache
Пользователь
Регистрация
29.09.2008
Сообщения
496
Оценка реакций
4
Баллы
18
молодец. но желательно писать не только потому что заказчики пропадают, ну и просто ради развития своего, как автора статей и самой дамаги
 

Ar3s

Старожил форума
Легенда
Регистрация
30.12.2004
Сообщения
2 952
Оценка реакций
187
Баллы
55
А мне все понравилось. Молодец!
 
Верх