Перейти к содержанию

Trainme. Взлом таймера


MasterGH

Рекомендуемые сообщения

post-3-0-47359400-1422701572_thumb.png

 

Цель. В течении 30 секунд нужно заморозить время или сделать его больше текущего. Если сделали все правильно, то по истечении 30 секунд будет проверка и появится сообщение о выигрыше или проигрыше.

 

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

 

- Для упрощения задачи, при смене фокуса с окна трейнми процесс игры останавливается;

- Размер трейнми весьма большой, но другой делать влом;

- Трейнми сделан на игровом движке с .net технологией, а это значит, что придти к цели можно не только сканером памяти или отладчиком CE, но и воспользоваться слабостями .net (код без обфускации). Интереснее всего будет не пользоваться этими слабостями (не подсматривать декомпилированный .net-код, не делать перекомпиляцию), но если очень сложно, то пользуйтесь

 

64-х разрядная версия

TraineMeTimer.rar

 

32-х разрядная версия

TrainmeTimer_x86.rar

Изменено пользователем MasterGH
Ссылка на комментарий
Поделиться на другие сайты

Попробовал, но видно не для моего уровня.

Отладчик к процессу у меня не подключается, а при отсеве адресов (в конце, когда остаётся около 200 адресов)  при заморозке вылетает.


Отладчик наверное не подключается из-за того, что у меня в ОС (Win7 64) какая-то ошибка и Cheat Engine 6.3 (64-bit) у меня не запускается, а только Cheat Engine 6.3 (32-bit). (но переустанавливать сейчас ОС не получится - слишком много нужно будет переустановить тогда).

Ссылка на комментарий
Поделиться на другие сайты

У меня нет ошибок.

 

Win7 64 Pro

CE 6.4 "cheatengine-x86_64.exe"

 

Поиск адресов и установка бряков работает. Проверено.

Подсказка. Значение зашифровано по принципу кодирования Chicken Invaders 4. Этот принцип я разбирал в одной из тем на форуме. Это значит, что рабочий адрес таймера невозможно найти через сканер памяти. Могут быть лишь зацепки. Поиск адреса текста и реверс до места шифрования или поиск/отсев call-ов через Ultimap, которые показывают диалоги, но придется ждать каждый раз 30 секунд.

Ссылка на комментарий
Поделиться на другие сайты

Когда делал поиск: неизвестное/тип "байт"/увеличилось, в конце оставалось около 150 адресов, по порциям замораживал и на какой- то заморозке - таймер остановился, но после этого произошёл вылет.

Xipho мне ещё раньше говорил, что у меня проблема с Осью (замечал не только при работе с СЕ и Артемоне, но и в других случаях, например со Скайпом), но переустанавливать сейчас не резон.

А тему помню - вот она.  

Ссылка на комментарий
Поделиться на другие сайты

Когда делал поиск: неизвестное/тип "байт"/увеличилось, в конце оставалось около 150 адресов, по порциям замораживал и на какой- то заморозке - таймер остановился, но после этого произошёл вылет.

Xipho мне ещё раньше говорил, что у меня проблема с Осью (замечал не только при работе с СЕ и Артемоне, но и в других случаях, например со Скайпом), но переустанавливать сейчас не резон.

А тему помню - вот она.  

То что ты находил - это визуал :)  ищется и не сказать что сложно,но это всё только визуально. х32 версия. А то есть - это то что нашел и ты. И этот скрипт визуальный.

[ENABLE]
aobscan(Time,89 07 8B 45 FC 01 05 84 2F 20 10 FF 15 48 01 13)
registersymbol(Time)
 
Time:
db 90 90
 
[DISABLE]
Time:
db 89 07
unregistersymbol(Time)
//10109975:
Изменено пользователем LIRW
Ссылка на комментарий
Поделиться на другие сайты

 

То что ты находил - это визуал :)  ищется и не сказать что сложно,но это всё только визуально. х32 версия. А то есть - это то что нашел и ты. И этот скрипт визуальный.

 

Да это я и находил. Из него теперь можно найти и не визуальное значение. Но у меня к сожалению всё равно вылеты. (и для 32) Так что я не сумею взломать.

Ссылка на комментарий
Поделиться на другие сайты

У меня "89 07 8B 45 FC 01 05 84 2F 20 10 FF 15 48 01 13)"  такой сигнатуры нет в 32х разрядной версии, скрипт не запускается.

 

Посмотрите CIL декомпилятором (например ILSpy.exe) файл Assembly-CSharp.dll, там будет подсказка. Вот она подсказка...

 

 

Вот эту хрень в отладке

 

uint num2 = (this.xorTime1 ^ this.xorTime2) - (uint)(Time.deltaTime * 1000f);

 

в байт коде будет как "dec .... " найти и занопить. 

 

Тогда будет решение.

using System;using UnityEngine;using UnityEngine.UI;public class Timer : MonoBehaviour{	public Text text;	public GameObject win;	public GameObject lose;	private uint checkXorTime1;	private uint checkXorTime2;	private uint xorTime1;	private uint xorTime2;	private void Start()	{		this.checkXorTime1 = (uint)UnityEngine.Random.Range(0, 2147483647);		this.checkXorTime2 = this.checkXorTime1;		this.xorTime1 = (uint)UnityEngine.Random.Range(0, 2147483647);		this.xorTime2 = (30000u ^ this.xorTime1);	}	private void Update()	{		uint num = (this.checkXorTime1 ^ this.checkXorTime2) + (uint)(Time.deltaTime * 1000f);		uint num2 = (this.xorTime1 ^ this.xorTime2) - (uint)(Time.deltaTime * 1000f);		if (num > 30000u)		{			if (num2 > 0u && num2 < 1000000u)			{				this.win.SetActive(true);			}			else			{				this.lose.SetActive(true);			}			base.enabled = false;		}		else		{			string text = num2.ToString();			this.text.text = ((text.Length <= 3) ? "0" : text.Remove(text.Length - 3, 3));			this.xorTime1 = (uint)UnityEngine.Random.Range(0, 2147483647);			this.xorTime2 = (num2 ^ this.xorTime1);			this.checkXorTime1 = (uint)UnityEngine.Random.Range(0, 2147483647);			this.checkXorTime2 = (num ^ this.checkXorTime1);		}	}	public void OnClickExit()	{		Application.Quit();	}	public void OnClickNewLevel()	{		Application.LoadLevel(0);	}}
Ссылка на комментарий
Поделиться на другие сайты

У меня  

останавливает таймер., но только визуальный, т.е. висит цифра 29 и когда проходят 29 секунд, пишет 0, а потом вылет.  

[ENABLE]aobscan(Time,89 07 8B 45 FC 01 05 84 2F 20 10 FF 15 48 01 13)registersymbol(Time) Time:db 90 90 [DISABLE]Time:db 89 07unregistersymbol(Time)//10109975: 
Ссылка на комментарий
Поделиться на другие сайты

garik66, у меня не останавливается таймер. Я проверил сигнатура такая не находится.

 

По заданию не должно быть вылета, и через 30 секунд должно появляться окно о победе :)

Ссылка на комментарий
Поделиться на другие сайты

Короче, нужно будет собраться с силами и переустановить ОС, ну и всё остальное. А то она у меня самая долгоиграющая из всех - ей уже 4,5 года.

Изменено пользователем garik66
Ссылка на комментарий
Поделиться на другие сайты

garik66, у меня не останавливается таймер. Я проверил сигнатура такая не находится.

 

По заданию не должно быть вылета, и через 30 секунд должно появляться окно о победе :)

 А не находит из за того что не которые байты уже изменились и адрес уже не работает... Вот задумано :) но когда я его искал и проверял при заморозке - он был зеленый.

Изменено пользователем LIRW
Ссылка на комментарий
Поделиться на другие сайты

У меня по адресу 10109975 никаких данных нет, кроме знаков вопроса (там нет данных памяти)

 

Как же так. garik66 и LIRW судя по вашим постам у вас сигна находится, а у меня нет. Вы случайно не на одном компе сидите?  :-D

Ссылка на комментарий
Поделиться на другие сайты

У меня по адресу 10109975 никаких данных нет, кроме знаков вопроса (там нет данных памяти)

 

Как же так. garik66 и LIRW судя по вашим постам у вас сигна находится, а у меня нет. Вы случайно не на одном компе сидите?  :-D

Кстати он сказал правду - что замораживаешь ну нупишь и адрес то стоит,но после 30 секунд идет крашь... Как то он это узнал ??? значит у него сработало. Может телепат  :)

Не чего не понимаю - скрипт то работает,то нет... Зависит от каждого раза вот этого прибамбаса с часами... Вот попробуйте - раза 2-3 запустить по новой - может сработает... У меня минуту назад не работало,ну байты были другие и адрес уже не работал,а по новой запустил и нашел то что надо....

Ссылка на комментарий
Поделиться на другие сайты

garik66, у меня не останавливается таймер. Я проверил сигнатура такая не находится.

 

По заданию не должно быть вылета, и через 30 секунд должно появляться окно о победе :)

У меня находит всегда, вот заснял видео:

 

 

Как же так. garik66 и LIRW судя по вашим постам у вас сигна находится, а у меня нет. Вы случайно не на одном компе сидите?  :-D

Точно MasterGH, ты нас раскусил: я просто очень быстро бегаю и сегодня вечером бегал к LIRW из Москвы в Пензу  :D

Изменено пользователем garik66
Ссылка на комментарий
Поделиться на другие сайты

Знаете почему со мной не интересно делать трейнми? :-D

 

Потому,  что я даю ответ быстрее чем его смогут решить. 

 

[ENABLE]aobscan(injection, 2BC18945F081FB307500000F864C0000008B45)label(injection2)registersymbol(injection2)injection:injection2:nopnop [DISABLE]injection2:sub eax,ecxunregistersymbol(injection2)
 

 

 

Как я искал

1. Ищем адрес с текстом таймера

2. Ставим бряк на запись

3. Делаем бряк условным на запись где EAX==0xАДРЕС_ТЕКСТА

4. Снимаю три дампа плагином Тини дампер

post-3-0-23768800-1422914185_thumb.png

5. Сравниваю стеки и нахожу отличия... они очень палятся при сравнении.

post-3-0-60304700-1422914202_thumb.png

Это значения тамера с отличием в примерно в 0,01 секунды. Запоминаю смещения от верхушки стека по которым это значение находится 

5. После прерывания бряк удаляю, делаю трейс лог на 10 тыс без входа в call-ы

6. Поднимаюсь вверх по трейс логу из call-ов и смотрю когда в стеке пропадет значение таймера. Их копий много, вроде около шести. Я дождался когда копии в стеке пропали и вышел сюда

post-3-0-09555400-1422914235_thumb.png

7. Посмотрел внимательно выше инструкции, которые бы вычитали и нашел sub. Написал скрипт с занопиванием и сигной.

8. Подождал уныло секунд 20, когда таймер не двигался и появилось окно "Победа"

post-3-0-67616100-1422914389_thumb.png

 

Можете проделать тоже самое и записать видео. Мне к сожалению влом.

...044E9D2B - 53                    - push ebx044E9D2C - 57                    - push edi044E9D2D - 56                    - push esi044E9D2E - 83 EC 1C              - sub esp,1C044E9D31 - 8B 7D 08              - mov edi,[ebp+08]044E9D34 - C7 45 F0 00000000     - mov [ebp-10],00000000044E9D3B - 8B 47 1C              - mov eax,[edi+1C]044E9D3E - 8B 4F 20              - mov ecx,[edi+20]044E9D41 - 33 C1                 - xor eax,ecx044E9D43 - 89 45 E0              - mov [ebp-20],eax044E9D46 - E8 9D010000           - call 044E9EE8044E9D4B - D9 05 8097000A        - fld dword ptr [0A009780] : [(float)1000.0000]044E9D51 - DEC9                  - fmulp st(1),st(0)044E9D53 - 83 EC 08              - sub esp,08044E9D56 - 83 EC 08              - sub esp,08044E9D59 - DD 1C 24              - fstp qword ptr [esp]044E9D5C - E8 D7010000           - call 044E9F38044E9D61 - 83 C4 10              - add esp,10044E9D64 - 8B C8                 - mov ecx,eax044E9D66 - 8B 45 E0              - mov eax,[ebp-20]044E9D69 - 8B D8                 - mov ebx,eax044E9D6B - 03 D9                 - add ebx,ecx044E9D6D - 8B 47 24              - mov eax,[edi+24]044E9D70 - 8B 4F 28              - mov ecx,[edi+28]044E9D73 - 33 C1                 - xor eax,ecx044E9D75 - 89 45 E4              - mov [ebp-1C],eax044E9D78 - E8 6B010000           - call 044E9EE8044E9D7D - D9 05 8897000A        - fld dword ptr [0A009788] : [(float)1000.0000]044E9D83 - DEC9                  - fmulp st(1),st(0)044E9D85 - 83 EC 08              - sub esp,08044E9D88 - 83 EC 08              - sub esp,08044E9D8B - DD 1C 24              - fstp qword ptr [esp]044E9D8E - E8 A5010000           - call 044E9F38044E9D93 - 83 C4 10              - add esp,10044E9D96 - 8B C8                 - mov ecx,eax044E9D98 - 8B 45 E4              - mov eax,[ebp-1C]044E9D9B - 29 C8                 - sub eax,ecx       // вот она!044E9D9D - 89 45 F0              - mov [ebp-10],eax044E9DA0 - 81 FB 30750000        - cmp ebx,00007530044E9DA6 - 0F86 4C000000         - jbe 044E9DF8044E9DAC - 8B 45 F0              - mov eax,[ebp-10]044E9DAF - 85 C0                 - test eax,eax044E9DB1 - 76 1F                 - jna 044E9DD2...
Ссылка на комментарий
Поделиться на другие сайты

У меня по адресу 10109975 никаких данных нет, кроме знаков вопроса (там нет данных памяти)

 

Как же так. garik66 и LIRW судя по вашим постам у вас сигна находится, а у меня нет. Вы случайно не на одном компе сидите?  :-D

У меня сигнатура LIRW тоже находится, и также TrainMe падает :)

 

Знаете почему со мной не интересно делать трейнми? :-D

 

Потому,  что я даю ответ быстрее чем его смогут решить.

Ну, судя по количеству скачавших, и по комментариям в теме - взломать его не удалось еще никому, поэтому лично мне интересно было посмотреть на взлом этого хитрого таймера) Но это только один из возможных вариантов взлома, с использованием плагина "Тини Дампер", которого не было у Geri в его видео, поэтому я думаю, что есть еще масса способов взлома таймера.

TrainMe интересен, по-крайней мере, меня - точно зацепил) Я пробовал использовать один трассировщик, но у меня, к сожалению, ничего не вышло вчера ночью со взломом, и перед сном я был вынужден ворочаться с мыслями о том, что же я не так мог сделать :D

Собственно, что касается моего взлома, то я сначала также искал строковое значение таймера, но глянув в отладчик - я как-то быстро передумал, т.к. реверсить такую "картину" - у меня коленки дрожали, поэтому я искал значение с типом 4 байта, методом "Уменьшилось", и далее - бряк на запись, и трассировка выползших инструкций. Только взлом завершить не удалось, т.к. первая инструкция указывает на адрес, по которому я пришел в отладчик, а уровнем выше - после возврата значения из функции (ret) - на адресе +4 от текущего адреса. Само значение адреса при пошаговой отладке прыгает либо на ноль (0), либо на шифрованное значение (4294957020), и ни разу - на действительное (если судить по видео от Geri).

В общем, буду пробовать еще) Я еще не сдался))

Ссылка на комментарий
Поделиться на другие сайты

У меня сигнатура LIRW тоже находится, и также TrainMe падает :)

Этот вариант не приносит результат. Смущает на видео, что сигна с модульной адресацией находится около mono_thread clear_unity_domian_fields. Похоже это системный файл... Вопрос конечно интересный почему я не могу найти эту сигну, но в любом случае это не ведет к решению трейнми.

 

Ну, судя по количеству скачавших, и по комментариям в теме - взломать его не удалось еще никому, поэтому лично мне интересно было посмотреть на взлом этого хитрого таймера) Но это только один из возможных вариантов взлома, с использованием плагина "Тини Дампер", которого не было у Geri в его видео, поэтому я думаю, что есть еще масса способов взлома таймера.

1) Скорее всего, я привел наиболее универсальный вариант - бряк на адрес текста, анализ трейс лога, анализ стека (можно и без Тини дампера, наглаз и с блокнотом) и поиск кода, который пишет в стек. Geri рассматривал способ как искать код записывающий в адрес стека в своей статье и в своем видео. И я еще немного писал о том как найти код записывающий в стек в Ultimap-теме. В этом же случае (трейнми) мне достаточно было поискать внимательно инструкцию уменьшающую значение - sub, dec, а не искать запись в стек подледного значения таймера. Почему? Потому что видно в игре, что таймер уменьшается. Раз уменьшается значится высока вероятность увидеть выше call инструкцию sub... Она должна быть где-то не очень далеко или совсем рядом.

2) Тини дампер и расструктуризация позволят не прочесывать стек, а сразу увидеть отличия. Ветка кода выполняется с записью текста таймера с разным стеком. С помощью ТиниДампера мы имеем возможность найти отличия в дампах стека и поднимаясь вверх по ретам выходя из call-ов вставать на место, где отличия в стеке будут происходить при вхождении в call, из которого вышли последний раз. Это сигнал о том, что где-то выше есть код, который пишет отличия (в изменении значения таймера) в стек.

3) Я думаю, что рабочий адрес таймера невозможно найти в памяти обычными правилами сканирования.За таймер отвечают два адреса, в которых значения постоянно меняются случайным образом. Поиск отдельного адреса не получится.

 

Рассмотрим код

// Здесь расшифровка xor. Расшифрованное значение в стекеuint num2 = (this.xorTime1 ^ this.xorTime2) - (uint)(Time.deltaTime * 1000f);if (num > 30000u)   //...}else{   string text = num2.ToString();   this.text.text = ((text.Length <= 3) ? "0" : text.Remove(text.Length - 3, 3)); // визуализация тамера с отсечением микросекунд   this.xorTime1 = (uint)UnityEngine.Random.Range(0, 2147483647); // это полный рандом uint   this.xorTime2 = (num2 ^ this.xorTime1); // это кодирование константы xorTime2 по расшифрованному в стеке num2 таймеру//...}
 

Ни num2, ни xorTime1, ни xorTime2 невозможно найти в памяти сканером. Не в прямой, не в обратной национальностях, не "как изменилось" или "не изменилось". Иными словами в памяти таймер всегда за проход в Update будет существовать как случайное число, а в стеке будет расшифрованным. 

 

TrainMe интересен, по-крайней мере, меня - точно зацепил) Я пробовал использовать один трассировщик, но у меня, к сожалению, ничего не вышло вчера ночью со взломом, и перед сном я был вынужден ворочаться с мыслями о том, что же я не так мог сделать :D

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

Первая заповедь реверсера. Дохрена непонятного отладочного кода - это и есть реверс, чувствуй себя уютно. Это огромный стог сена, в котором как я уже показал можно найти два байта и исправить их. Обычно надо палить стек, палить до каких call-ов в стек перестанут попадать нужные значения. Ставить условные бряки, использовать трейслог, использовать сравнения стека.

Можешь попробовать вспомнить видео Geri о том, как он искал запись числа по адресу в стеке. Т.е. тебе в трейнми можно было бы по аналогии поискать запись расшифрованного значения увиденного в стеке в адрес стека (даже не используя ТиниДампер). Но дело в том, что ты можешь долго гадать какое значение является таймером в стеке. Там этих значений может быть куча и они могут быть не похожи или похожи на уменьшающийся таймер. А сравнивая дампы стека ты можешь более быстро найти значение таймера в стеке, т.к. таймер уменьшается в каждом дампе

 

прыгает либо на ноль (0), либо на шифрованное значение (4294957020).

Там нифига не прыгает на ноль, либо на 4294957020. Кто там прыгает? :-D 

1) Шифрование

случайная константа1 = рандом(0, uint)

почти случайная константа2 = "timer в стеке" XOR "константа1"

2) Расшифровка таймера

"timer в стеке" = почти случайная константа2 XOR "константа1"

"timer в стеке" -= Timde.deltaTime;

3) Снова шифрование после расшифровки

случайная константа1 = рандом(0, uint)

почти случайная константа2 = "timer в стеке" XOR "константа1"

Ссылка на комментарий
Поделиться на другие сайты

Этот вариант не приносит результат. Смущает на видео, что сигна с модульной адресацией находится около mono_thread clear_unity_domian_fields. Похоже это системный файл... Вопрос конечно интересный почему я не могу найти эту сигну, но в любом случае это не ведет к решению трейнми.

Это понятно, что результата не приносит, интересно как-раз то, что у нас сигнатура есть (находится), а у тебя - нет. Я еще вчера себе голову изломал этим вопросом) Возможно, дело в ОСи, или обновлении каком-то конкретном (или в его отсутствии). Отсюда я, кстати, уже сделал предположение, что может поэтому и не удается взлом. Может софт какой нужен дополнительный, или обновление какое-то лишнее, или еще чего :) Ведь должна быть причина, почему сигнатура у тебя (как у автора этого TrainMe) не находится, а у других - она есть, и это может повлиять (и вероятно - влияет) на успех при взломе. В общем, черт его знает :D

 

Можешь попробовать вспомнить видео Geri о том, как он искал запись числа по адресу в стеке. Т.е. тебе в трейнми можно было бы по аналогии поискать запись расшифрованного значения увиденного в стеке в адрес стека (даже не используя ТиниДампер). Но дело в том, что ты можешь долго гадать какое значение является таймером в стеке. Там этих значений может быть куча и они могут быть не похожи или похожи на уменьшающийся таймер. А сравнивая дампы стека ты можешь более быстро найти значение таймера в стеке, т.к. таймер уменьшается в каждом дампе

Вот в этом и проблема, что значений - куча. Попробую с плагином Tiny Dumper, может чего выйдет.

 

Там нифига не прыгает на ноль, либо на 4294957020. Кто там прыгает? :-D

Значение изменяется, в смысле)

P.S.

И, да - ай-яй-яй, MasterGH, ай-яй-яй - не использовать тег кода) А то ж я пользователей ругаю отсутствием тегов, а администрация сама их не использует) Я, конечно, понимаю, что там важное выделено, и поэтому может тег код не использовался, но все-таки... Наругать нужно было :)

Ссылка на комментарий
Поделиться на другие сайты

Знаете почему со мной не интересно делать трейнми? :-D

 

Потому,  что я даю ответ быстрее чем его смогут решить. 

 

MasterGH, если не сложно, найди время и засними видео взлома на примере своего Trainme с использованием плагина Тини дампер с самого начала - с поиска адреса.

Просто, для меня текст, если я этого ещё не разу не делал, воспринимается с трудом. А после просмотра видео - всё в голове встаёт по местам.

Заранее Большое СПАСИБО.

Думаю, что не только я один и другие - будут благодарны. 

Ссылка на комментарий
Поделиться на другие сайты

Пока видео обещать не могу, посмотрим.

Если есть конкретные вопросы,то могу помочь.

Да не, MasterGH, конкретных вопросов пока нет. 

Дело в том, что я пока даже и не приступал к изучению новых для меня опций СЕ.

Не знаю с какого боку к ним подойти и где применить.

Возникнет необходимость - поизучаю.

Ссылка на комментарий
Поделиться на другие сайты

Есть небольшие новости

 

1. Начал делать видео, из-за артефактов не получилось (понадеялся не на ту прогу)

2. Выяснилось несколько нюансев,  о которых не было сказано. 

2.1 На инструкции записи текста таймера проскакивает два адреса, а это значит две группы дампов стека

2.2 Если снимать дампы ТиниДампером не каждый дамп стека на записи, а только когда окно трейнми отрабатывает фокус и показывает CE окно, то снимаются дампы одной группы. Это правильное снятие дампов. Т.е. если снимать дампы как попало, то нужно ввести две группы в окне расструктуризации.

2.3 При расструктуризации нужно соблюдать порядковый номер имени дампов/ Например, dump1, dump2, dump3... Т.е. чтобы числа в имени шли на увеличение слева направо. Даже если будет две группы дампов, то нужно соблюдать порядок. Это нужно для пункта 2.4

2.4 Поскольку таймер уменьшается, то мы должны искать отличающиеся числа (красные) и при этом они должны уменьшаться слева-направо. Мы должны проследить самое нижнее смещении в дампе стеков с таким рядом. Оно будет esp+B8

3. Больше не нужно использовать tracer log для решения trainme. Вместо него мы должны добавить адрес стека esp+B8 в главную таблицу, поставить бряк на запись. Когда сработает условный бряк на записи текста, то в окне прервавшихся инструкции на запись в стек esp+b8 самая нижняя инструкция будет той, которая будет стоять впритык с sub инструкцией, которая вычитает из расшифрованного значения таймера некоторую дельтатайм в функции Update(кадр рендеринга). Т.е. никаких трейс логов не нужно. 

 

*Меня подвела программа по снятию видео. Видео не получилось, много артефактов...пришлось забить на сегодня.

 

*Понял одну интересную вещь, что сначала надо снимать видео отдельно, а потом накладывать на него аудио ряд. Мне сложно сосредоточиться и говорить, и делать... Формулирование и объяснение тормозит очень сильно.

Ссылка на комментарий
Поделиться на другие сайты

MasterGH попробуй для снятия видео вот эту прогу:  "Open Broadcaster Software".

У предыдущей проги, которую я использовал слетела активация.

 "Open Broadcaster Software". - оказалась довольно не плохой, использовал для записи видео для этого сообщения.. Много полезных настроек.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.