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

 eXeL@B —› Вопросы новичков —› Сохранить изображение
Посл.ответ Сообщение

Ранг: 26.9 (посетитель), 1thx
Активность: 0.050.01
Статус: Участник

Создано: 20 февраля 2019 19:05
· Личное сообщение · #1

Исследуемая жертва - инструмент для обработки изображений. Триальный режим отключает возможность сохранения изображения, с которым производилась работа. Задача: убрать это ограничение, не используя для этого регистрацию.
Разрабы - явные параноики, на пути к GetSaveFileNameW нагородили чёрт знает что, от запутывания путей до встраивания в код закладок, от которых не зарегистрированный сабж крашится. Всё это удалось разрулить, и остался один самый последний (надеюсь) момент: сохранить картинку в неиспорченном виде. Суть в том, что картинка сохраняется, однако вместо изображения получаем сплошной чёрный фон.
Само сохранение происходит в два цикла: в первом файл сохраняется в виде стандартной виндусовой иконки (CreateFileW), и здесь всё нормально, а во втором виндусовый шаблон должен быть заменён изображением (CloseHandle). На этом пути десятки процедур, и все их проанализировать нереально, особенно если не знаешь, что точно надо искать. Короче, опять закладка. Ощущение такое, что в ней используется флаг "не зарегистрировано", а вот в каком виде, куда его воткнули и, главное, что конкретно он делает с атрибутами изображения - не понятно.

За что можно зацепиться для решения проблемы?




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 20 февраля 2019 19:49 · Поправил: Kindly
· Личное сообщение · #2

Че за софт то?

Chris пишет:
--> Link <--

Файла Target.rar нет.
очень информативно

-----
Array[Login..Logout] of Life




Ранг: 26.9 (посетитель), 1thx
Активность: 0.050.01
Статус: Участник

Создано: 20 февраля 2019 20:01 · Поправил: Chris
· Личное сообщение · #3

Kindly пишет:
Че за софт то?


--> Link <--



bc37_20.02.2019_EXELAB.rU.tgz - 2019-02-20_220710.png



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 20 февраля 2019 20:12
· Личное сообщение · #4

Chris
Похожая тема на форуме была 1-1,5 года назад.
Мыслю, что при сохранении в каком нибудь jpg, подгружается сторонняя библиотека, куда отправляется буфер с изображением. И скорее всего, оно туда приходит покарапченным. Membp на буфер.

Kindly пишет:
Файла Target.rar нет.

Разработчики софта всё скачали))




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 20 февраля 2019 20:22 · Поправил: Kindly
· Личное сообщение · #5

Chris пишет:
bc37_20.02.2019_EXELAB.rU.tgz - 2019-02-20_220710.png

--> тыц! <--

ELF_7719116 пишет:
Разработчики софта всё скачали))

и не говори, бьют по сигнатурам

-----
Array[Login..Logout] of Life




Ранг: 26.9 (посетитель), 1thx
Активность: 0.050.01
Статус: Участник

Создано: 20 февраля 2019 20:36
· Личное сообщение · #6

Kindly пишет:
и не говори, бьют по сигнатурам

От политических высказываний с привлечением русского фольклора воздержусь.

--> Link <--




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 20 февраля 2019 20:50
· Личное сообщение · #7

Chris пишет:
За что можно зацепиться для решения проблемы?

за кастомную VM.

-----
Array[Login..Logout] of Life




Ранг: 26.9 (посетитель), 1thx
Активность: 0.050.01
Статус: Участник

Создано: 20 февраля 2019 20:51
· Личное сообщение · #8

ELF_7719116 пишет:
при сохранении в каком нибудь jpg, подгружается сторонняя библиотека, куда отправляется буфер с изображением

Очевидно так и есть, т.к. сохранение только в семействе jpeg (одна библиотека).
По каким признакам искать буфер?




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 20 февраля 2019 21:01 · Поправил: Kindly
· Личное сообщение · #9

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

речь про фотоинструмент.

-----
Array[Login..Logout] of Life




Ранг: 26.9 (посетитель), 1thx
Активность: 0.050.01
Статус: Участник

Создано: 20 февраля 2019 21:39 · Поправил: Chris
· Личное сообщение · #10

Kindly пишет:
можешь даже не тратить время

Общая картина мне примерно известна, и именно поэтому обозначена задача убрать ограничение, не используя регистрацию. Осталось-то всего-ничего: "разбанить" изображение, тем более, что оно уже сохраняется.
Сабж мне тоже не нужен, но интересно решить до конца эту задачку. Есть ещё и сопутствующие моменты.




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

Создано: 20 февраля 2019 22:05 · Поправил: Boostyq
· Личное сообщение · #11

Есть у кого нибудь дамп таргета после распаковки или что там? (не хочу устанавливать эту мишуру, а мне только взглянуть)

-----
В облачке многоточия





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

Создано: 20 февраля 2019 22:13
· Личное сообщение · #12

суровые хакерши innounp принципиально не используют ?




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

Создано: 20 февраля 2019 22:33 · Поправил: Boostyq
· Личное сообщение · #13

Boostyq пишет:
суровые хакерши innounp принципиально не используют

Нее, это ты хакерша, а я просто рядом стою
И про Inno Setup я вообще второй раз слышу, так что хз чего ты троллишь
Я просила дамп главного файла, т.к. не хочу запускать эту штукенцию даже на вм, тем более автор параноик, а тс все равно его запустил уже

-----
В облачке многоточия





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

Создано: 20 февраля 2019 22:35
· Личное сообщение · #14

вот я и говорю какой дамп ?
там инсталляха которая открывается через innounp
дальше чистый екзе файл
лучше сначала посмотреть а не спрашивать




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

Создано: 20 февраля 2019 22:51
· Личное сообщение · #15

reversecode пишет:
лучше сначала посмотреть а не спрашивать

Хорошо, насчет Inno Setup вы правы, действительно есть строки соответствующие строки в установочнике
Но насчет самого файла вы зря агритесь, т.к. было сказано, что там вм и я предположила, что файл так же упакован, соответственно проще спросить сразу дамп конечно файла, чем все это расковыривать
И нет, не лучше, дешевле спросить, чем тратить личное время на низкоприоритетную вещь, я спросила и вы выдали мне все с потрохами, просто чтобы унизить и показать какой вы умный

-----
В облачке многоточия





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

Создано: 20 февраля 2019 22:56
· Личное сообщение · #16

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




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

Создано: 21 февраля 2019 02:55 · Поправил: Boostyq
· Личное сообщение · #17

reversecode пишет:
я плохой

Такого не говорила, просто ты хулиган
Ладно, первая вм для детишек (уе, мой уровень):
Code:
  1. struct VM1
  2. {
  3.          std::deque<uint32_t> argstk; // 0000
  4.          std::deque<uint32_t> callstk; // 0014
  5.          const uint32_t* data; // 0028
  6.          uint32_t ip; // 002C
  7.          uint32_t size; // 0030
  8. }; // 0034

Code:
  1. 01 - add:
  2. tmp1 = as_pop();
  3. as_back() += tmp1;
  4. ip += 1;
  5.  
  6. 02 - neg:
  7. tmp1 = as_back();
  8. as_back() = -tmp1;
  9. ip += 1;
  10.  
  11. 03 - jne(arg):
  12. ip += (as_back() != arg) ? 2 : 1;
  13.   
  14. 04 - jeb(arg):
  15. ip += (as_back() >= arg) ? 2 : 1;
  16.   
  17. 05 - jel(arg):
  18. ip += (as_back() <= arg) ? 2 : 1;
  19.   
  20. 06 - je(arg):
  21. ip += (as_back() == arg) ? 2 : 1;
  22.   
  23. 07 - jmp(arg):
  24. ip = find_label(arg) + 1;
  25.  
  26. 08 - label(arg):
  27. ip += 1;
  28.  
  29. 09 - call(arg):
  30. tmp1 = find_proc(arg);
  31. cs_push(ip);
  32. ip = tmp1;
  33.  
  34. 0A - proc(arg):
  35. ip = find_ret() + 1;
  36.  
  37. 0B - ret:
  38. ip = cs_pop() + 1;
  39.  
  40. 0C - nop:
  41. ip += 1;
  42.  
  43. 0D - pop:
  44. as_pop();
  45. ip += 1;
  46.  
  47. 0E - pushac:
  48. tmp1 = as_count();
  49. as_push(tmp1);
  50. ip += 1;
  51.  
  52. 0F - swap:
  53. tmp1 = as_pop();
  54. tmp2 = as_back();
  55. as_back() = tmp1;
  56. as_push(tmp2);
  57. ip += 1;
  58.  
  59. 10 - pushi(arg):
  60. as_push(arg);
  61. ip += 1;

Code:
  1. 0000 | 0A 000D7E | proc(000D7E)  ;
  2. 0001 | 10 000001 | pushi(1)      ;
  3. 0002 | 01 000000 | add           ;
  4. 0003 | 0B 000000 | ret           ;
  5.   
  6. 0004 | 0A 012721 | proc(012721)  ;
  7. 0005 | 10 000001 | pushi(1)      ;
  8. 0006 | 02 000000 | neg           ;
  9. 0007 | 01 000000 | add           ;
  10. 0008 | 0B 000000 | ret           ;
  11.   
  12. 0009 | 0A 000513 | proc(000513)  ;
  13. 000A | 08 00000A | label(00000A) ;
  14. 000B | 0E 000000 | pushac        ;
  15. 000C | 04 000002 | jeb(2)        ; 000E
  16. 000D | 07 00000B | jmp(00000B)   ; 0011
  17. 000E | 0D 000000 | pop           ;
  18. 000F | 01 000000 | add           ;
  19. 0010 | 07 00000A | jmp(00000A)   ; 000A
  20. 0011 | 08 00000B | label(00000B) ;
  21. 0012 | 0D 000000 | pop           ;
  22. 0013 | 0B 000000 | ret           ;
  23.  
  24. 0014 | 0A 00D448 | proc(00D448)  ;
  25. 0015 | 09 000513 | call(000513)  ; 0009
  26. 0016 | 09 00A55E | call(00A55E)  ; 0018
  27. 0017 | 0B 000000 | ret           ;
  28.   
  29. 0018 | 0A 00A55E | proc(00A55E)  ;
  30. 0019 | 08 000046 | label(000046) ;
  31. 001A | 10 000007 | pushi(7)      ;
  32. 001B | 02 000000 | neg           ;
  33. 001C | 01 000000 | add           ;
  34. 001D | 05 000000 | jel(0)        ; 001F
  35. 001E | 07 000046 | jmp(000046)   ; 0019
  36. 001F | 03 000000 | jne(0)        ; 0021
  37. 0020 | 0B 000000 | ret           ;
  38. 0021 | 10 000007 | pushi(7)      ;
  39. 0022 | 01 000000 | add           ;
  40. 0023 | 0B 000000 | ret           ;
  41.   
  42. 0024 | 0A 015526 | proc(015526)  ;
  43. 0025 | 03 000000 | jne(0)        ; 0027
  44. 0026 | 0B 000000 | ret           ;
  45. 0027 | 10 000001 | pushi(1)      ;
  46. 0028 | 0B 000000 | ret           ;
  47.   
  48. 0029 | 0A 0083E4 | proc(0083E4)  ;
  49. 002A | 09 015526 | call(015526)  ; 0024
  50. 002B | 09 012721 | call(012721)  ; 0004
  51. 002C | 04 000000 | jeb(0)        ; 002E
  52. 002D | 02 000000 | neg           ;
  53. 002E | 0B 000000 | ret           ;
  54.   
  55. 002F | 0A 009A3D | proc(009A3D)  ;
  56. 0030 | 0E 000000 | pushac        ;
  57. 0031 | 03 000001 | jne(1)        ; 0033
  58. 0032 | 07 000050 | jmp(000050)   ; 0039
  59. 0033 | 0D 000000 | pop           ;
  60. 0034 | 01 000000 | add           ;
  61. 0035 | 05 000000 | jel(0)        ; 0037
  62. 0036 | 09 012721 | call(012721)  ; 0004
  63. 0037 | 09 015526 | call(015526)  ; 0024
  64. 0038 | 07 000058 | jmp(000058)   ; 003C
  65. 0039 | 08 000050 | label(000050) ;
  66. 003A | 0D 000000 | pop           ;
  67. 003B | 10 000000 | pushi(0)      ;
  68. 003C | 08 000058 | label(000058) ;
  69. 003D | 09 015526 | call(015526)  ; 0024
  70. 003E | 0B 000000 | ret           ;


-----
В облачке многоточия



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


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