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

 eXeL@B —› Вопросы новичков —› Как узнать название компонентов в проге Microsoft Visual C++ 8.0 [Debug]
Посл.ответ Сообщение

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

Создано: 08 января 2018 13:39 · Поправил: mazaxaker
· Личное сообщение · #1

Парни, подскажите, чем можно посмотреть gui интерфейс проги, написанной на Microsoft Visual C++ 8.0 [Debug] (Peid) ? В проге рисуются графические элементы, мне интересно какой компонент windows forms типа использовали. Чем подобное можно посмотреть. Хочу как в делфи прогах через idr можно узнать имена компонентов на форме.

Вот так хочется https://ibb.co/nR4h6m
Вот файлик http://rgho.st/89Z7ZZZ2t может кто подсказать по центру белое поле, которое потом заполняется графиком, что там за компонент стоит.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 08 января 2018 13:57 · Поправил: dosprog
· Личное сообщение · #2

Failed to load RTS_Communicator.dll

srcrescue пишет:
File is not Delphi/CBuilder/Kylix executable and does not contains any forms.

- Нету их там.





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

Создано: 08 января 2018 14:55 · Поправил: mazaxaker
· Личное сообщение · #3

dosprog пишет:
Failed to load

http://rgho.st/7KZMQ7gls вот с либами, эта запустится.

Вот так в этой проге выглядит графика после запуска http://ibb.co/jncoU6
Эта прям на форме рисуют я так понял ?
Там в коде глядел, эта прога сама особо ничего не делает, тока вызывает методы из rts_communication.dll

http://ibb.co/iTufbm Вот после 0x447937 вызова call eax, который как раз идет в эту дллку, происходит отрисовка графики, хотя я прогу на бряке держу, после этого вызова.
Я правильно понимаю, что все рисует либа сама, мне тока ее методы вызывать ?



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 08 января 2018 15:11
· Личное сообщение · #4

Что-то специфическое. "MSTS not installed".
Ну и ладно.
Так о каких "формах" речь вообще, если их там нету?
Библиотека отрисовывает? - Ну так это нормально.



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

Создано: 08 января 2018 15:28
· Личное сообщение · #5

dosprog пишет:
"MSTS not installed"

Ну да наверно без игры то не будет запускаться.
dosprog пишет:
Так о каких "формах" речь вообще, если их там нету?

Ну а на скрине, что тут тогда http://ibb.co/jncoU6 там в ней менюшка, а все остальное под меню заливается графической частью.

dosprog пишет:
Библиотека отрисовывает?

Я про то, что если я просто в своем проекте вызову все также методы rts_comm либы, которые вызывает эта прога exe, будет ли также отрисовывать. У меня идея доделать эту прогу, так как сама прога вроде тока из либы вызывает функции, я думаю так просто в своем проекте повторить, используя эту либу.



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

Создано: 08 января 2018 15:35
· Личное сообщение · #6

dosprog пишет:
Что-то специфическое. "MSTS not installed".

Code:
  1. 00402A5E  |.  52            PUSH EDX                                 ; /pResult = 2
  2. 00402A5F  |.  68 0E645700   PUSH OFFSET 0057640E                     ; |SubKey = "SOFTWARE\Microsoft\Microsoft Games\Train Simulator\1.0"
  3. 00402A64  |.  68 02000080   PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
  4. 00402A69  |.  E8 C41B1700   CALL <JMP.&ADVAPI32.RegOpenKeyW>         ; \ADVAPI32.RegOpenKeyW

Очевидно, что MSTS это Microsoft Train Simulator. Если запатчить вытаскивание путей из реестра - можно выйти в главное меню даже.

mazaxaker пишет:
написанной на Microsoft Visual C++ 8.0 [Debug] (Peid)

Code:
  1. 004011A4   . /EB 10         JMP SHORT 004011B6
  2. 004011A6     |66            DB 66                                    ; CHAR 'f'
  3. 004011A7     |62            DB 62                                    ; CHAR 'b'
  4. 004011A8     |3A            DB 3A                                    ; CHAR ':'
  5. 004011A9     |43            DB 43                                    ; CHAR 'C'
  6. 004011AA     |2B            DB 2B                                    ; CHAR '+'
  7. 004011AB     |2B            DB 2B                                    ; CHAR '+'
  8. 004011AC     |48            DB 48                                    ; CHAR 'H'
  9. 004011AD     |4F            DB 4F                                    ; CHAR 'O'
  10. 004011AE     |4F            DB 4F                                    ; CHAR 'O'
  11. 004011AF     |4B            DB 4B                                    ; CHAR 'K'
  12. 004011B0     |90            NOP
  13. 004011B1     |E9            DB E9
  14. 004011B2   . |98505700      DD OFFSET ___CPPdebugHook

Borland C++

mazaxaker пишет:
Я правильно понимаю, что все рисует либа сама, мне тока ее методы вызывать ?

Рисует вероятно rts1.exe - там импорт из DDRAW/OpenGL присуствует.



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

Создано: 08 января 2018 15:44
· Личное сообщение · #7

ELF_7719116 пишет:
Если запатчить вытаскивание путей из реестра - можно выйти в главное меню даже.

Ага, она через реестр палит, есть ли msts, если нужно могу свою ветку реестра игры сбросить, но я так понял ты уже там поправил и так.
rts1.exe на борланде с++, а эта RTS_AE_Test.exe на с++ 8.0 вроде

Вот такая у нее OEP это вроде с++ 8.0
Code:
  1. 0044A31F   > \E8 3EE2FEFF   CALL RTS_AE_T.00438562
  2. 0044A324   .^ E9 F8FDFFFF   JMP RTS_AE_T.0044A121
  3. 0044A329      CC            INT3
  4. 0044A32A      CC            INT3



ELF_7719116 пишет:
Рисует вероятно rts1.exe

Я там видел, что он вызывается уже из кода либы, а RTS_AE_Test подгружает либу, вызывает в ней метод, а уже внутри метода либы rts1.exe вызывается, поэтому тут главное просто либу прикрутить к своему проекту, а она уж rts1.exe там вызовит сама.



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

Создано: 08 января 2018 18:20
· Личное сообщение · #8

mazaxaker пишет:
RTS_AE_Test.exe на с++ 8.0 вроде

эм! эта, да!
Они через pipe обмениваются (/startIPC)

mazaxaker пишет:
RTS_AE_Test подгружает либу, вызывает в ней метод, а уже внутри метода либы rts1.exe вызывается, поэтому тут главное просто либу прикрутить к своему проекту, а она уж rts1.exe там вызовит сама.

Ну то, что rts1.exe там рисует сама - сомнений нет. Очевидно, что через pipe какой-то контекст dc/хендл окна передаётся, где требуется рисовать. Вызови от себя и посмотри что будет (обрати внимание, что там два аргумента и __cdecl):
Code:
  1. 0044781F  |.  68 70B04A00   PUSH OFFSET 004AB070                     ; /Procname = "_CreateRTSCommObj"
  2. 00447824  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ; |
  3. 00447827  |.  50            PUSH EAX                                 ; |hModule => [LOCAL.2]
  4. 00447828  |.  FF15 28F14B00 CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd ; \KERNEL32.GetProcAddress
  5. 0044782E  |.  3BF4          CMP ESI,ESP
  6. 00447830  |.  E8 3000FFFF   CALL 00437865
  7. 00447835  |.  8945 EC       MOV DWORD PTR SS:[EBP-14],EAX
  8. 00447838  |.  C705 D8954B00 MOV DWORD PTR DS:[4B95D8],0
  9. 00447842  |.  C705 44944B00 MOV DWORD PTR DS:[4B9444],0
  10. 0044784C  |.  837D EC 00    CMP DWORD PTR SS:[EBP-14],0
  11. 00447850  |.  74 36         JE SHORT 00447888
  12. 00447852  |.  8BF4          MOV ESI,ESP
  13. 00447854  |.  6A 01         PUSH 1
  14. 00447856  |.  B9 00C64B00   MOV ECX,OFFSET 004BC600
  15. 0044785B  |.  E8 C7FCFEFF   CALL 00437527
  16. 00447860  |.  50            PUSH EAX //arg.2 - lp на строку "rts1.exe"
  17. 00447861  |.  6A 66         PUSH 66 //arg.1 - 0x66
  18. 00447863  |.  FF55 EC       CALL DWORD PTR SS:[EBP-14] //тута вызывается
  19. 00447866  |.  83C4 0C       ADD ESP,0C //__очистка стека за тобой


| Сообщение посчитали полезным: mazaxaker

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

Создано: 21 января 2018 02:32
· Личное сообщение · #9

ELF_7719116, да действительно, разбираюсь с отрисовкой.
Вот такой вопрос, отладчик как-то криво определил название функции загрузки текстур opengl. Я думал, что это auxRGBImageLoad или auxDIBImageLoad, других просто в glaux.h нету подобных. Но их реализация не совпадает с этой, можете подсказать как это qpbruit2rucouipcp9ACEHEADERpuct7 правильно распознать.
Нужна функция из opengl по загрузке ACE текстур.
Code:
  1. 00458FFA  |.  FF75 10       PUSH DWORD PTR SS:[EBP+10]                                ; /Arg10
  2. 00458FFD  |.  6A 00         PUSH 0                                                    ; |Arg9 = 00000000
  3. 00458FFF  |.  6A 00         PUSH 0                                                    ; |Arg8 = 00000000
  4. 00459001  |.  6A 00         PUSH 0                                                    ; |Arg7 = 00000000
  5. 00459003  |.  6A 00         PUSH 0                                                    ; |Arg6 = 00000000
  6. 00459005  |.  6A 00         PUSH 0                                                    ; |Arg5 = 00000000
  7. 00459007  |.  8D45 F3       LEA EAX,DWORD PTR SS:[EBP-D]                              ; |
  8. 0045900A  |.  50            PUSH EAX                                                  ; |Arg4
  9. 0045900B  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]                              ; |
  10. 0045900E  |.  52            PUSH EDX                                                  ; |Arg3
  11. 0045900F  |.  8D4D F8       LEA ECX,DWORD PTR SS:[EBP-8]                              ; |
  12. 00459012  |.  51            PUSH ECX                                                  ; |Arg2
  13. 00459013  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                                 ; |Arg1
  14. 00459016  |.  E8 C5E0FFFF   CALL rts1.@LoadTexture$qpbruit2rucouipcp9ACEHEADERpuct7   ; \@LoadTexture$qpbruit2rucouipcp9ACEHEADERpuct7




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

Создано: 21 января 2018 15:03
· Личное сообщение · #10

mazaxaker пишет:
00459016  |.  E8 C5E0FFFF   CALL rts1.@LoadTexture$qpbruit2rucouipcp9ACEHEADERpuct7   

IDA пишет корректно:
LoadTexture(wchar_t *,uint &,uint &,uchar &,bool,uint,char *,ACEHEADER *,uchar *,char *)
Я так понял это самопал авторов программы.
Собственно мы сейчас внутри функи:
Code:
  1. .text:00458FF4 ; int __cdecl sub_458FF4(LPCWSTR lpFileName, int, LPCSTR)

, которая первым аргументом принимает ссылку на картинко:
Code:
  1. char __cdecl sub_458FF4(LPCWSTR lpFileName, int a2, LPCSTR a3)
  2. {
  3.  
  4.   LPCVOID lpMem; // [esp+Ch] [ebp-4h]
  5.  
  6.   lpMem = LoadTexture(lpFileName, (int)&v31, (int)&v30 + 1, (int)&v30, 0, 0, 0, 0, 0, a3);
  7.   if ( !lpMem )
  8.     return 0;
  9.   v4 = glEnable(3553);
  10.   v7 = glGenTextures(v4, v5, v6);
  11.   v8 = *(_DWORD *)a2;
  12.   v10 = glBindTexture(v7, a2, v9);
  13. ...




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

Создано: 21 января 2018 15:17
· Личное сообщение · #11

ELF_7719116 пишет:
Я так понял это самопал авторов программы.

Похоже, я тоже ничего не нашел в opengl под это, решил просто в bmp создать и грузить через opengl метод.



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

Создано: 21 января 2018 15:25
· Личное сообщение · #12

mazaxaker пишет:
решил просто в bmp создать и грузить через opengl метод.

так текстуры дозволено и вручную грузить, судя по докам:
http://www.opengl-tutorial.org/ru/beginners-tutorials/tutorial-5-a-textured-cube/
что собственно и делают авторы проги, получая указатель LPCVOID lpMem на регион с текстурой




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 21 января 2018 15:31
· Личное сообщение · #13

> интересно какой компонент windows forms типа использовали.

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

-----
vx




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

Создано: 21 января 2018 15:38
· Личное сообщение · #14

difexacaw пишет:
Даже если задача решается в десяток апи вызовов

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




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

Создано: 21 января 2018 15:48
· Личное сообщение · #15

difexacaw
Переведи на "новичковый" свой ответ..



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

Создано: 21 января 2018 16:05
· Личное сообщение · #16

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

Там, во-первых, строки есть, когда программа грузит всякие объекты и субъекты:
Code:
  1. .text:0040D5E5                 push    offset aLoadingEnviron ; "Loading environment"
  2. .text:0040D5EA                 call    sub_40D9CC
  3. .text:0040D6E0                 push    offset aLoadingRoads ; "Loading roads"
  4. .text:0040D6E5                 call    sub_40D9CC
  5. .text:0040D6F0                 push    offset aLoadingRtsTerr ; "Loading RTS terrain"
  6. .text:0040D6F5                 call    sub_40D9CC
  7. .text:00454F9E                 push    offset aLoadingWorldOb ; "Loading world objects"
  8. .text:00454FA3                 call    sub_40D9CC

Наверное-ж нужно раскручивать нить от "Loading roads". Какие файло читаются в этом месте.
Во-вторых, определи какой именно вызов glVertex2f (там ещё есть glVertex2d) рисует. Ноликами аргументы забей, как вариант.


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


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