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

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

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

Создано: 15 июня 2012 17:08
· Личное сообщение · #1

Привет всем

Распаковал программу, снял все защиты, перепаковал ресурсы.
Теперь нужно изменить строки в программе. Есть некоторые строки, которые сохраняются в ресурсах файла и их изменить не есть проблемой. А есть строки, которые задаются непосредственно в коде.
В функции onCreate формы прорисовываются кнопки - это не особо важно. А вот в onPaint прорисовывается весь текст, мало того, объекты, на которые выводится текст, создаются также динамически.

Зашел в IDA Pro и начал искать. Нашел вот это:
Code:
  1. .text:0040230C qrc             = tagRECT ptr -1B0h
  2. .text:0040230C var_1A0         = byte ptr -1A0h
  3. .text:0040230C Rect            = tagRECT ptr -190h
  4. .text:0040230C var_180         = byte ptr -180h
  5. .text:0040230C var_170         = byte ptr -170h
  6. .text:0040230C String          = byte ptr -160h
  7. .text:0040230C var_F4          = dword ptr -0F4h
  8. .text:0040230C var_F0          = dword ptr -0F0h
  9. .text:0040230C var_EC          = byte ptr -0ECh
  10. .text:0040230C var_C0          = byte ptr -0C0h
  11. .text:0040230C var_90          = byte ptr -90h
  12. .text:0040230C var_52          = byte ptr -52h
  13. .text:0040230C var_51          = byte ptr -51h
  14. .text:0040230C s               = dword ptr -50h
  15. .text:0040230C var_4C          = dword ptr -4Ch
  16. .text:0040230C var_48          = dword ptr -48h
  17. .text:0040230C var_44          = dword ptr -44h
  18. .text:0040230C var_34          = word ptr -34h
  19. .text:0040230C var_28          = dword ptr -28h
  20. .text:0040230C var_20          = byte ptr -20h
  21. .text:0040230C var_1C          = byte ptr -1Ch
  22. .text:0040230C var_18          = byte ptr -18h
  23. .text:0040230C var_14          = byte ptr -14h
  24. .text:0040230C var_10          = byte ptr -10h
  25. .text:0040230C var_C           = byte ptr -0Ch
  26. .text:0040230C var_8           = byte ptr -8
  27. .text:0040230C var_4           = byte ptr -4

Это находится в функции, которая вызывается с onPaint. Эта функция одна и я так понимаю, что это и есть эти строки.
Как их можно изменить и как вообще высчитать их местоположение по данной информации?

Заранее благодарю




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 15 июня 2012 17:11
· Личное сообщение · #2

в приведенном никаких строк нет, а только переменые в стеке и их смещение.

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 15 июня 2012 17:21
· Личное сообщение · #3

OKOB, так значит эти строки уже загружены в стек?
Тогда как отследить, где он загружает их туда?
Мне нужно изменить текст, который выводится при открытии окна.
Вот видимо сам вывод текста:
Code:
  1. .text:0040243B                 push    3
  2. .text:0040243D                 mov     edx, 62EBF60Dh
  3. .text:00402442                 mov     eax, 78C9045Dh
  4. .text:00402447                 call    esi
  5. .text:00402449                 mov     [ebp+var_34], 18h
  6. .text:0040244F                 lea     edx, [ebp+s]
  7. .text:00402452                 lea     eax, [ebp+var_8]
  8. .text:00402455                 call    @System@AnsiString@$bctr$qqrpxc ; System::AnsiString::AnsiString(char *)
  9. .text:0040245A                 inc     [ebp+var_28]
  10. .text:0040245D                 mov     ecx, [eax]
  11. .text:0040245F                 mov     eax, ebx
  12. .text:00402461                 push    ecx
  13. .text:00402462                 call    sub_691150
  14. .text:00402467                 mov     ecx, 8
  15. .text:0040246C                 mov     edx, 0Ch
  16. .text:00402471                 call    j_@Graphics@TCanvas@TextOut$qqriix17System@AnsiString ; Graphics::TCanvas::TextOut(int,int,System::AnsiString)
  17. .text:00402476                 dec     [ebp+var_28]





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 15 июня 2012 17:39
· Личное сообщение · #4

Настоятельно рекомендуется почитать статьи для новичков и разобраться хотя бы с основами, что такое переменные на стеке, как происходят операции со строками и тд. И заодно софт выкладывать надо.



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

Создано: 15 июня 2012 17:42 · Поправил: ghaiklor
· Личное сообщение · #5

Archer, хорошо, почитаю.
Подскажите в какую сторону копать в самом коде.



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

Создано: 15 июня 2012 18:29
· Личное сообщение · #6

Вроде нашел нужную секцию данных:
Code:
  1. .data:007F1761                 dd offset _TAboutForm_FormCreate
  2. .data:007F1765                 db 10,'FormCreate'
  3. .data:007F1770 aTaboutform     db 10,'TAboutForm'
  4. .data:007F177B                 db  90h ; Р
  5. .data:007F177C stru_7F177C     _excHdr <0>             ; DATA XREF: sub_403048+11o
  6. .data:007F1784                 db 0DCh ; -
  7. .data:007F1785                 db 0FFh
  8. .data:007F1786                 db 0FFh
  9. .data:007F1787                 db 0FFh
  10. .data:007F1788                 db 0F8h ; °
  11. .data:007F1789                 db  2Eh ; .
  12. .data:007F178A                 db  40h ; @
  13. .data:007F178B                 db    0
  14. .data:007F178C                 db    5
  15. .data:007F178D                 db    4
  16. .data:007F178E                 db    0
  17. .data:007F178F                 db    0
  18. .data:007F1790                 db 0FCh ; №
  19. .data:007F1791                 db 0FFh
  20. .data:007F1792                 db 0FFh
  21. .data:007F1793                 db 0FFh

И список продолжается. Но так как текст на русском, он конечно же "игнорирует" его.
Каким образом можно заставить вывести мне эти строки на русском с нормальной кодировкой?




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

Создано: 15 июня 2012 18:50
· Личное сообщение · #7

ghaiklor
в приведённом участке нет локализуемых строк
TAboutForm - это название класса формы
FormCreate - название события

стоило бы не просто тыкаться в поисках какого-либо текста вообще,
а для начала найти конкретную строку, которую нужно перевести,
а остальные будут где-то неподалёку.



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

Создано: 15 июня 2012 18:56
· Личное сообщение · #8

-=AkaBOSS=-, конкретная строка представлена исключительно русскими буквами. Как я могу ее найти в коде, если нет представления этих самых русских букв?




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

Создано: 15 июня 2012 19:24 · Поправил: -=AkaBOSS=-
· Личное сообщение · #9

ghaiklor пишет:
Как я могу ее найти в коде, если нет представления этих самых русских букв?

1. Отрываешь нужный модуль в хекс-редакторе (например, WinHex)
2. Ищешь нужный текст (там есть два режима: ANSI и Unicode, попробуй оба)
3. Берёшь тулзу типа PeEditor из PETools и преобразуешь смещение в файле в виртуальный адрес


Скачал, посмотрел
Большой блок русских строк начинается на вирт. адресе 83D4F6 (в файле - 43C4F6). Не оно случаем?



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

Создано: 15 июня 2012 20:02
· Личное сообщение · #10

-=AkaBOSS=-, может быть и оно.
Открываю свой файл WinHex-ом и вбиваю нужную строку в поиск. Говорит что пусто. Пробовал на двух кодировках.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 15 июня 2012 20:12
· Личное сообщение · #11

Попробуй в Ольке шрифт поставить юникодный.



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

Создано: 15 июня 2012 20:14
· Личное сообщение · #12

Быть может Radialix Lokalizer тебе поможет?



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

Создано: 15 июня 2012 20:16
· Личное сообщение · #13

-=AkaBOSS=-
Вот одна из них: "Внимание! Последнюю версию программы всегда можно скачать абсолютно бесплатно с нашего официального сайта".
NikolayD
Допустим я найду эту самую строку с помощью ольки. Таким образом я узнаю адрес в файле, но а как его потом изменить?



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

Создано: 15 июня 2012 20:16
· Личное сообщение · #14

hlmadip
Radialix'ом пробовал искать. Пока безуспешно.




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

Создано: 15 июня 2012 20:17 · Поправил: -=AkaBOSS=-
· Личное сообщение · #15

ghaiklor пишет:
"Внимание! Последнюю версию программы всегда можно скачать абсолютно бесплатно с нашего официального сайта"

эта строка зашифрована.
лови вызов VirtualAlloc с параметром Size=0x150
в аллоцированный блок копируется код, расшифровывающий строки
потом чуть ниже происходит вызов этого кода
после чего movsd результат в стэковый буфер

NikolayD
Да в ольке-то всё нормально отображается, это в Иде кодировка долбанутая.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 15 июня 2012 20:28
· Личное сообщение · #16

ghaiklor пишет:
Допустим я найду эту самую строку с помощью ольки. Таким образом я узнаю адрес в файле, но а как его потом изменить?

На что адрес изменить?!



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

Создано: 15 июня 2012 20:56
· Личное сообщение · #17

NikolayD, не адрес, а строку, извини если не так написал
-=AkaBOSS=-, вот это уже слишком тяжело для меня Спасибо, буду теперь разбираться с этим всем



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

Создано: 17 июня 2012 15:22
· Личное сообщение · #18

Появился вопрос слегка не по теме.
Строку я так и не нашел, но теперь нужно сделать локализации этой программе.
Радиаликсом переводит не все, т.к. есть строки, которые лежат в коде, я так понимаю.
Как можно все это дело перевести включая захарденные строки, мож утилитка есть какая-то?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 17 июня 2012 16:07
· Личное сообщение · #19

ghaiklor
Программа непростая,видать писал её любитель кодить малварь выделяется через VirtualAlloc участок памяти туда копирутся криптованный асм код,расшифровывается выполняется и раскриптовывает строчки ghaiklor нехочу вас расстраивать но лучше оставить всё как есть....

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 17 июня 2012 18:19 · Поправил: ghaiklor
· Личное сообщение · #20

ClockMan, весь прикол в том, что самые обычные строки главного меню тоже закодированные, правда некоторые. То есть процентов 95 приложения переводит нормально, есть доступ. Но остальные 5 процентов втупую нету в ресурсах
Как так?) Ради одной строчки кодировали ее?
P.S. Или может есть другой способ сделать локализацию приложению?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 18 июня 2012 10:48
· Личное сообщение · #21

ghaiklor пишет:
Как так?) Ради одной строчки кодировали ее?

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 18 июня 2012 12:02
· Личное сообщение · #22

ClockMan, да уж, не ожидал я такого поворота событий


 eXeL@B —› Вопросы новичков —› Изменение строк в дизасемблированной программе
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати