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

 eXeL@B —› Вопросы новичков —› Помогите доломать JPEGmini 1.8.23
Посл.ответ Сообщение

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

Создано: 13 октября 2014 21:34
· Личное сообщение · #1

Всем привет.

Есть такое прикольное приложение, JPEGmini (в 1.8.23), позволяющее сжимать jpeg'и в несколько раз без заметной потери качества (www.jpegmini.com). Написано на С# Net4 и С++, защищено SmartAssembly. Это первое серьезное приложение, которое я пытался взломать. Почти получилось, но похоже остается еще одна проверка, которую я не могу обойти.

Я убрал SmartAssembly de4dot'ом, удалил при помощи Reflector/Reflexil проверки целостности файлов, проверки на состояние активации программы (isActivated) и удалил ссылки, ведущие на сайт программы и в Google Analytics. Теперь программа загружается в активированном виде и не лезет в инет, но она не сжимает файлы.

Мне кажется, осталась еще одна проверка на целостность файлов и лицензию в dll программы (ICVT.JPEGmini.Core.dll::JpegMiniAPI - код ниже), но я не могу изменить код, так как это mixed-mode assembly, и Reflexil не умеет их сохранять. К сожалению, я новичок в реверсинге и не владею в достаточной степени дебаггерами и дисассемблерами, поэтому не получается завершить взлом проги, а очень бы хотелось.

Ссылка на программу + мой экзешник: http://www.multiupfile.com/f/e5bb4aed

Программу можно также загрузить на оф. сайте: www.jpegmini.com/app

Буду крайне признателен за любую помощь в доламывании программы.

====================================

Из ICVT.JPEGmini.Core.dll (mixed-mode)

Code:
  1. namespace ICVT.JpegMini
  2. {
  3.      public class JpegMiniAPI : IDisposable
  4.     {
  5.         private unsafe void* _jmlib;
  6.  
  7.         public unsafe JpegMiniAPI()
  8.         {
  9.             void* voidPtr = null;
  10.             //...
  11.             // наскольно я понимаю, это проверка подписи какого-то файла и выброс с ошибкой при плохом результате. Хотелось бы удалить или изменить.
  12.             int num = (int) __unep@?label_app_crc_block_start@@$$J0YAXXZ;
  13.             crc32_bitwise((void modopt(IsConst)*) num, (uint) (__unep@?label_app_crc_block_end@@$$J0YAXXZ - num), 0);
  14.             if (jm_init_app_license(&voidPtr, (JMSignatureValidationResult modopt(CallConvCdecl) *()) __unep@?validate_windows_assembly_signature@@$$J0YA?AUJMSignatureValidationResult@@XZ) != null)
  15.             {
  16.                 throw new Exception("Failed to initialize");
  17.             }
  18.             this._jmlib = voidPtr;
  19.         }
  20.  
  21.      
  22.         public unsafe JPEGminiResult CompressFile(void* image, ref byte[] compressedBytes)
  23.         {
  24.             tagjmIMGBUF* mimgbufPtr;
  25.             tagjmResultCode code = jm_image_recompress(image, 1f, 0, 1, (tagjmQuality) 0, &mimgbufPtr);
  26.             if (((tagjmResultCode) 0) == code) // Вероятно, это относится к enum'y JPEGminiResult (ниже) и, возможно следует изменить на: (( tagjmResultCode) 0 || ... -4 || ... -5) == code))
  27.             {
  28.                 compressedBytes = new byte[*((int*) (mimgbufPtr + 4))];
  29.                 IntPtr source = new IntPtr(*((void**) mimgbufPtr));
  30.                 Marshal.Copy(source, compressedBytes, 0, *((int*) (mimgbufPtr + 4)));
  31.                 jm_free_img_buf(mimgbufPtr);
  32.             }
  33.             return (JPEGminiResult) code; // JPEGmini.exe при получении этого результата, если он не 0 (NoError) выдает различные ошибки (обычно что файлы заблокированы) и сжатия не происходит. По-видимому, у меня не получилось корректно инициализировать лицензию и, хотя программа думает, что она активирована, она все равно выдает результат LicenseUninitialized или LicenseInvalid.
  34.         }
  35.     }
  36. }
  37.  
  38. //...
  39.     public enum JPEGminiResult
  40.     {
  41.         Expired = -3,
  42.         Failed = -1,
  43.         InvalidArg = -2,
  44.         LicenseInvalid = -5,
  45.         LicenseUninitialized = -4,
  46.         NoError = 0,
  47.         OOM = -6
  48.     }




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

Создано: 14 октября 2014 03:56
· Личное сообщение · #2

ByteMe должен помочь.. ну или хардкорный хекс


 eXeL@B —› Вопросы новичков —› Помогите доломать JPEGmini 1.8.23
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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