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

 eXeL@B —› Вопросы новичков —› Qt файл и его "отлом".
Посл.ответ Сообщение


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

Создано: 17 февраля 2017 02:20 · Поправил: ==DJ==[ZLO]
· Личное сообщение · #1

Приветствую всех.
Начну пожалуй с самого начала. Знаний во взломе у меня нет. Но, эта тема мне знакома. Есть в природе графические файлы *.pvr.ccz. вьювера или конвертора я бесплатного не нашел (или гугл мой сломался). Все пути ведут на продукт CodeAndWeb TexturePacker. Поискав "пилюлю" на данный продукт , тоже был удивлен её отсутствием. (точнее есть CodeAndWeb.TexturePacker.Pro.4.3.1.Crack.Read.Nfo-LC но то-ли отломана не до конца то-ли прикрыли лавочку на сервере. продолжает запускаться с отметкой у вас осталось 0(ноль) дней триала, но, накладывает фатермарк на файлы см. ниже) Сама программа идёт в двух редакциях. (Я ковыряю TexturePacker4.3.1-x64).
Сама программа консольная , но есть и гуишная морда. Написана на:
Qt(5.7.0.0)[-]
Microsoft Visual C++(2013)[-]
Microsoft Linker(12.0)[EXE64,console,signed]
Энтропия говорит что не пакован. Как такового "редактора ресурсов" для Qt нет. Как я понял на этапе предкомпиляции ресурсы кодируются в С++ код. А, не в секцию. hors поправь если не так( что бы посмотреть что в ресурсах на наличие строк или окон триала). Так и не нашел в каком дизасме можно "нормально" Qt открыть(пробовал в Olly DeFixed и в IDA 4.5 падают)
И так сама программа при запуске и открытии файла - при закрытии стучит по адресу 37.17.224.77. Есть триал на 30ть дней, по истечению на экспортируемые файлы накладывается ватермарк с просьбой купить продукт. "please purchase a license to use pro features". Сам триал от сервера. Повторная активация не возможна на данном железе.
Искал стринг в файлах "please purchase a license to use pro features" нет результатов.
Решил поподробнее посмотреть файл на наличие заголовков файлов JPEG PNG , и бинго! Были замечены в коде заголовки SVG и PNG. Стал "выдирать" каждый и просматривать. Был найден данный ватермарк в PNG формате:

0047712С (приатачил) 168х35х24 начало файла. Если заменить данный файл на прозрачный (это я так подумал его обмануть) то , в программе он отображает хорошо, но при сохранении накладывает черный фон.
Так в самой программе:

Так выглядит с наложением ватермарка:

А, так с замененной текстурой прозрачный блок:

-----
--> Сам файл x64<-- (если нужны другие скажите)
-----
1) Чем лучше дизассемблировать файлы Qt? 2) И, зная место в файле - как правильно найти место(ссылку) в дизассемблере не него. Буду рад любому пинку.
З.ы.
Если данная тема не формат - в топку.


3382_17.02.2017_EXELAB.rU.tgz - noname9.zip




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 17 февраля 2017 02:24
· Личное сообщение · #2

ida 6.8 что не открывает ?

Добавлено спустя -56 минут
с логики нужно начинать, с самого начала отламывать
а не замазывать грабли которые всплывают




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

Создано: 17 февраля 2017 02:30 · Поправил: ==DJ==[ZLO]
· Личное сообщение · #3

reversecode пишет:
ida 6.8 что не открывает ?

Уважаемый reversecode спасибо. уже нашел и качаю. Не подскажете по пункту два ?
И, зная место в файле - как правильно найти место(ссылку) в дизассемблере не него. Буду рад любому пинку.

зы.
Вот попались еще строки:

Добавлено спустя - 6 минут
Так можно ли зацепиться за этот файл(PNG), и считать что это начало ?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 17 февраля 2017 02:31
· Личное сообщение · #4

ида сама найдет ссылки на эти строки



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

Создано: 17 февраля 2017 04:44 · Поправил: LinXP
· Личное сообщение · #5

чёт я не понял, нужен вьювер *.pvr.ccz или отломать TexturePacker?
если первое - то примеры в студию, но предположу что речь идёт про кокосовский формат и *.pvr.ccz это просто *.pvr сжатый zlib, распаковав его, файл можно будет посмотреть через бесплатный PVRTexTool (ещё попадаются зашифрованные *.pvr.ccz, для их расшифровки нужно ключ отлавливать)
ну а если второе - то тоже не откажусь от последней леченной версии.. (последняя кстати 4.3.3 от 2017-01-12)




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 17 февраля 2017 08:55 · Поправил: -=AkaBOSS=-
· Личное сообщение · #6

==DJ==[ZLO] пишет:
--> Сам файл x64<-- (если нужны другие скажите)

во-первых, это полный установщик проги. во-вторых, он устарел. в-третьих, зачем плодить мусор на обменнике, если на офсайте он лежит свободно?

==DJ==[ZLO] пишет:
Как я понял на этапе предкомпиляции ресурсы кодируются в С++ код.

именно так.
ресурсы хранятся в своих внутренних структурах, и перед вызовом main() объявляются таким кодом
Code:
  1. qRegisterResourceData (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);


==DJ==[ZLO] пишет:
Был найден данный ватермарк в PNG формате

немного полазив по ресурсам, можно выяснить, что интересующий файл называется newFile.png
а дальше поиск по ascii строке поможет выйти на нужное место
Code:
  1. watermark = new QImage (":/newFile.png");
  2. if ( inputImage.width() > 0 && inputImage.height() > 0 )
  3.   for ( posX = 0; posX < inputImage.width(); posX++ )
  4.     for ( posY = 0; posY < inputImage.height(); posY++ )
  5.     {
  6.       pix1 = inputImage.pixel (posX, posY);
  7.       pix2 = pix1 ^ watermark.pixel (posX % watermark.width(), posY % watermark.height());
  8.       inputImage.setPixel (posX, posY, pix1 ^ pix2 & 0xFFFFFF);
  9.     }





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

Создано: 17 февраля 2017 09:58 · Поправил: ==DJ==[ZLO]
· Личное сообщение · #7

-=AkaBOSS=- пишет:
во-первых, это полный установщик проги. во-вторых, он устарел. в-третьих, зачем плодить мусор на обменнике, если на офсайте он лежит свободно?
Спасибо. да, я действительно не правильно описал - это сам установщик простите. Они обновляют часто. Дал ту версию которая у меня установлена.
Подскажите. Каким инструментом можно добиться такого вида кода? Вроде разобрался - это IDA ?
Добавлено спустя - 4-5 часа
LinXP пишет:
чёт я не понял, нужен вьювер *.pvr.ccz или отломать TexturePacker?

Нужен инструмент который будет сохранять *.pvr.ccz в PNG просто - консольный TexturePacker справляется на ура.
Добавлено спустя - 10 часов
whoami пишет:
А то что есть на гитхабе смотрели? Там мало чего, но может что рабочее, хз.

Скомпилил бы кто.



Ранг: 2.2 (гость), 4thx
Активность: 0.010
Статус: Участник

Создано: 17 февраля 2017 22:29 · Поправил: whoami
· Личное сообщение · #8

> Нужен инструмент который будет сохранять *.pvr.ccz в PNG

А то что есть на гитхабе смотрели? Там мало чего, но может что рабочее, хз.



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

Создано: 18 февраля 2017 07:45 · Поправил: LinXP
· Личное сообщение · #9

==DJ==[ZLO] http://sendfile.su/1309978
Code:
  1. CCZTool.exe example.pvr.ccz
  2. PVRTexToolCLI.exe -i example.pvr --f r8g8b8a8

батничек хоть сделаешь?

| Сообщение посчитали полезным: ==DJ==[ZLO]


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

Создано: 18 февраля 2017 11:40
· Личное сообщение · #10

LinXP пишет:
батничек хоть сделаешь?

Спасибо! Медленно конечно чем TexturePacker , но работу делает.
В PVR . bat
Code:
  1. @echo off
  2. for %%in (d:\CCZ\*.pvr.ccz) do (CCZTool.exe %%X)

В PNG . bat
Code:
  1. @echo off
  2. for %%in (d:\CCZ\*.pvr) do (PVRTexToolCLI.exe -%%--f r8g8b8a8)

Удалить весь шлак . bat
Code:
  1. @del /*.pvr

------------------------------------
Вернувшись к :
-=AkaBOSS=- пишет:
немного полазив по ресурсам, можно выяснить, что интересующий файл называется newFile.png
а дальше поиск по ascii строке поможет выйти на нужное место

Code:
  1. watermark = new QImage (":/newFile.png");
  2. if ( inputImage.width() > 0 && inputImage.height() > 0 )
  3.   for ( posX = 0; posX < inputImage.width(); posX++ )
  4.     for ( posY = 0; posY < inputImage.height(); posY++ )
  5.     {
  6.       pix1 = inputImage.pixel (posX, posY);
  7.       pix2 = pix1 ^ watermark.pixel (posX % watermark.width(), posY % watermark.height());
  8.       inputImage.setPixel (posX, posY, pix1 ^ pix2 & 0xFFFFFF);
  9.     }

Как я понимаю условие не выполнится?
if ( inputImage.width() < 0 && inputImage.height() < 0 )
Так и не нашел как привести в такой вид код. У меня в IDA это место вот так.

-------------------------------
в целом, задача решена. Но, осталось много вопросов... за которые меня здесь, я знаю куда отправят т.ч. лучше буду молчать.
Спасибо всем откликнувшимся.




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 19 февраля 2017 02:14
· Личное сообщение · #11

==DJ==[ZLO] пишет:
Так и не нашел как привести в такой вид код. У меня в IDA это место вот так.

волшебной кнопкой F5. потом останется руками поподчищать компиляторный мусор и переименовать переменные.

==DJ==[ZLO] пишет:
Как я понимаю условие не выполнится?
if ( inputImage.width() < 0 && inputImage.height() < 0 )

не выполнится.
но я бы вообще всю эту процедуру через ret обратно завернул, чтоб прога меньше ерундой занималась.

| Сообщение посчитали полезным: ==DJ==[ZLO]
 eXeL@B —› Вопросы новичков —› Qt файл и его "отлом".
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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