Coder Опубликовано 4 сентября, 2012 Автор Поделиться Опубликовано 4 сентября, 2012 ANT' timestamp='1346761775' post='11130']После 1.0 смотрел только "c" и "d". Оба грузят проц на 100%, иногда терпимо, а иногда полный зависон.С горе пополам, смог посмотреть "c" версию, и думаю, что у ZOCKIR самое правильное решение. Т.к. так уже решить "нельзя", то вот[ENABLE]alloc(newmem,2048)label(returnhere)newmem: mov [ebp-04],0 mov ecx,[ebp-04] mov edx,[TrainME_C.exe+3394] jmp returnhere"TrainME_C.exe"+1340: jmp newmem db 90 90 90 90returnhere:[DISABLE]"TrainME_C.exe"+1340: mov ecx,[ebp-04] mov edx,[TrainME_C.exe+3394]dealloc(newmem)Правда, начинает работать при втором нажатии на кнопку.В "d" версии сначало нужно обходить защиту, но при такой нагрузке на проц - увольте.Пусть кто-то другой попытает счастье, или ждите, когда я себе любимому сделаю подарок на НГ в виде более мощного компа. Хотя, думаю, что проблема в, извиняюсь, говнокоде =/Проблема, извиняюсь в говно проце Хотя это ещё не максимальные возможности нагрузки ЦП) Хотя, опять же 2 экземпляра программы, убивают мой проц (100% нагрузка), но комп не виснет)Скоро будет версия 1.2 она для слабых ПК будет, и с обновлённым кодом (+ к безопасности)Про взлом версий "b" и "c" приведу в пример случай с зарубежного форума (текст переведён мной на русский) - "Я использовал в BattleField 3 v1.5 хук для BattleField 3 v1.2, почему меня забанили? Он же должен был работать!", нет смысла ломать старые версии, когда новая уже есть) Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 4 сентября, 2012 Поделиться Опубликовано 4 сентября, 2012 "c" я сломал еще до выхода "d"Сейчас у меня Athlon ii x2 250 (я амд дрочер, а текущие FX серии откровенно слабые, жду Vishera, а если и там провал, то пересежу на феноме или уйду в стан врага). С зависоном я погорячился, просто были офигеннейщи лаги, что было проще ребутнуть комп, чем довести мышкой до крестика программы. Не самый мощный проц на данный момент, но думаю и у вас перегиб с защитой. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 4 сентября, 2012 Автор Поделиться Опубликовано 4 сентября, 2012 ANT' timestamp='1346763532' post='11132']"c" я сломал еще до выхода "d"Сейчас у меня Athlon ii x2 250 (я амд дрочер, а текущие FX серии откровенно слабые, жду Vishera, а если и там провал, то пересежу на феноме или уйду в стан врага). С зависоном я погорячился, просто были офигеннейщи лаги, что было проще ребутнуть комп, чем довести мышкой до крестика программы. Не самый мощный проц на данный момент, но думаю и у вас перегиб с защитой.Да там всё делается проще)Мне лень было проводить какую либо оптимизацию. У меня AMD Phenom II x4 3.4Ghz, версия "c" даёт нагрузку на мой ЦП 25%, "b" - 50%. Ссылка на комментарий Поделиться на другие сайты Поделиться
JuGGerNaunT Опубликовано 4 сентября, 2012 Поделиться Опубликовано 4 сентября, 2012 Адресс инструкции записи в значение - TrainME.exe+135C(можно занопить), проверка но целостность - TrainME.exe+1250(просто перепрыгиваем проверку) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 5 сентября, 2012 Автор Поделиться Опубликовано 5 сентября, 2012 Адресс инструкции записи в значение - TrainME.exe+135C(можно занопить), проверка но целостность - TrainME.exe+1250(просто перепрыгиваем проверку)Ну так давай, выложи людям скрипт)Заодно я оценю. Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 8 сентября, 2012 Поделиться Опубликовано 8 сентября, 2012 Что народ ТрейнМи взломан? Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 8 сентября, 2012 Автор Поделиться Опубликовано 8 сентября, 2012 Что народ ТрейнМи взломан?Пока я не получил подтверждения этого.Как только оно будет, на свет выйдет v1.2 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 сентября, 2012 Поделиться Опубликовано 9 сентября, 2012 Что народ ТрейнМи взломан?Попробуй Инструменты: IDA + (Hex-Rays)Перед решением любого трейнми нужно помнить, что дизассемблерное представление сложней в восприятии чем если бы править исходники этого трейнми на С++ для решения поставленной задачи. Т.е. у автора Трейнми есть огромное преимущество - он видит всё в сжатом виде на синтаксисе с++ и видит общую картину защиты, а мы - решающую эту задачу, раз в 5,10 и более лишены прозрачности происходящих действий.Используя IDA + (Hex-Rays)1) Видно что какие-то два дополнительных потока создаются в основном потоке и что-то постоянно делают.2) Кусок памяти считывающий сообщения из очереди сообщений я так понял был перемещён и чуть ли не продублирован несколько раз для запутывания.Если исследовать код до запуска приложения, то видим код обработки сообщений из очереди (потом он будет удалён и продублирован)LRESULT __stdcall sub_4012F0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam){ int v4; // esi@6 __time64_t v5; // qax@6 int v6; // edi@6 int v7; // ebx@6 int v8; // ST1C_4@6 int v9; // eax@6 int v10; // edx@6 signed int v11; // ST0C_4@6 HWND v12; // eax@6 if ( Msg == 2 ) { PostQuitMessage(0); } else { if ( Msg != 273 ) return DefWindowProcA(hWnd, Msg, wParam, lParam); } if ( wParam == 1 ) { v4 = dword_403394; v5 = time64(0); v6 = v5; v7 = HIDWORD(v5); v8 = rand() % 1000; v9 = sub_401CE0(v6, v7, 1000000, 0); v10 = dword_403394; *(_DWORD *)v4 = v9 + v8; // (*1) v11 = *(_DWORD *)v10; flt_403018 = (double)*(signed int *)v10; sub_4013D0("Health: %d", v11); v12 = GetDlgItem(hWnd, 2); SetWindowTextA(v12, String); flt_403018 = (double)*(signed int *)dword_403394; } return DefWindowProcA(hWnd, Msg, wParam, lParam);}Интуитивно можно предположить, что в выделенной памяти бегает "оригинальное" значение. Затем меняется. Затем значение поступает в переменную v11.Итак ещё раз.Меняется адрес значения -> меняется значение (место (*1))-> адрес значения поступает в sub_4013D0("Health: %d", v11)Решения:1) Ищем сигнатуры места (1*) и исправляем их2) Делаем патч внутри exe файла и исправляем место (1*)Даже не знаю верно ли это. Пробуйте, многим это будет полезнее для тренеровки с IDA чем мне. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 9 сентября, 2012 Автор Поделиться Опубликовано 9 сентября, 2012 Попробуй Инструменты: IDA + (Hex-Rays)Перед решением любого трейнми нужно помнить, что дизассемблерное представление сложней в восприятии чем если бы править исходники этого трейнми на С++ для решения поставленной задачи. Т.е. у автора Трейнми есть огромное преимущество - он видит всё в сжатом виде на синтаксисе с++ и видит общую картину защиты, а мы - решающую эту задачу, раз в 5,10 и более лишены прозрачности происходящих действий.Используя IDA + (Hex-Rays)1) Видно что какие-то два дополнительных потока создаются в основном потоке и что-то постоянно делают.2) Кусок памяти считывающий сообщения из очереди сообщений я так понял был перемещён и чуть ли не продублирован несколько раз для запутывания.Если исследовать код до запуска приложения, то видим код обработки сообщений из очереди (потом он будет удалён и продублирован)LRESULT __stdcall sub_4012F0(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam){ int v4; // esi@6 __time64_t v5; // qax@6 int v6; // edi@6 int v7; // ebx@6 int v8; // ST1C_4@6 int v9; // eax@6 int v10; // edx@6 signed int v11; // ST0C_4@6 HWND v12; // eax@6 if ( Msg == 2 ) { PostQuitMessage(0); } else { if ( Msg != 273 ) return DefWindowProcA(hWnd, Msg, wParam, lParam); } if ( wParam == 1 ) { v4 = dword_403394; v5 = time64(0); v6 = v5; v7 = HIDWORD(v5); v8 = rand() % 1000; v9 = sub_401CE0(v6, v7, 1000000, 0); v10 = dword_403394; *(_DWORD *)v4 = v9 + v8; // (*1) v11 = *(_DWORD *)v10; flt_403018 = (double)*(signed int *)v10; sub_4013D0("Health: %d", v11); v12 = GetDlgItem(hWnd, 2); SetWindowTextA(v12, String); flt_403018 = (double)*(signed int *)dword_403394; } return DefWindowProcA(hWnd, Msg, wParam, lParam);}Интуитивно можно предположить, что в выделенной памяти бегает "оригинальное" значение. Затем меняется. Затем значение поступает в переменную v11.Итак ещё раз.Меняется адрес значения -> меняется значение (место (*1))-> адрес значения поступает в sub_4013D0("Health: %d", v11)Решения:1) Ищем сигнатуры места (1*) и исправляем их2) Делаем патч внутри exe файла и исправляем место (1*)Даже не знаю верно ли это. Пробуйте, многим это будет полезнее для тренеровки с IDA чем мне.Ээээ, Андрей!Ты давай там, секреты производства не разглашай Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 9 сентября, 2012 Поделиться Опубликовано 9 сентября, 2012 В трейнми укажи (В заголовке окна) какая версия пример 1.1А то не понятно какая где, ну я про себя сохраняю на компе не угадаешь какая версия. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 9 сентября, 2012 Автор Поделиться Опубликовано 9 сентября, 2012 В трейнми укажи (В заголовке окна) какая версия пример 1.1А то не понятно какая где, ну я про себя сохраняю на компе не угадаешь какая версия.В след. версиях сделаю.Так что ломайте эту версию, хочу уже патч сделать Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 9 сентября, 2012 Поделиться Опубликовано 9 сентября, 2012 Не знаю будет ли у тебя работать так как адрес взял не в TrainMe.exe+Но у меня работает [ENABLE]alloc(newmem,2048)label(returnhere)label(ZMR)registersymbol(ZMR)aobscan(aob_ZMR,89 41 14 C1 E8 10 25 FF 7F 00 00 C3 8B FF 55)newmem:inc eax//mov [ecx+14],eax//shr eax,10jmp returnhereaob_ZMR:ZMR:jmp newmemnopreturnhere:[DISABLE]ZMR:unregistersymbol(ZMR)mov [ecx+14],eaxshr eax,10dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 9 сентября, 2012 Автор Поделиться Опубликовано 9 сентября, 2012 Не знаю будет ли у тебя работать так как адрес взял не в TrainMe.exe+Но у меня работает [ENABLE]alloc(newmem,2048)label(returnhere)label(ZMR)registersymbol(ZMR)aobscan(aob_ZMR,89 41 14 C1 E8 10 25 FF 7F 00 00 C3 8B FF 55)newmem:inc eax//mov [ecx+14],eax//shr eax,10jmp returnhereaob_ZMR:ZMR:jmp newmemnopreturnhere:[DISABLE]ZMR:unregistersymbol(ZMR)mov [ecx+14],eaxshr eax,10dealloc(newmem)Чуть позже проверю. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 сентября, 2012 Поделиться Опубликовано 9 сентября, 2012 >> Не знаю будет ли у тебя работать так как адрес взял не в TrainMe.exe+Это ж в MSVCR100 инлайнпатч в рандом функции. Иными словами инжектнул в рандом-функцию из системной либы. Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 9 сентября, 2012 Поделиться Опубликовано 9 сентября, 2012 Andrey знаю .99 процентов уверен что скрипт будет работать и в других ОС (Win ХР,8).Тестил на Win7. Ссылка на комментарий Поделиться на другие сайты Поделиться
holy Опубликовано 15 июня, 2016 Поделиться Опубликовано 15 июня, 2016 Для версии d Скрытый текст [ENABLE] alloc(newmem,2048) label(returnhere) newmem: mov ecx, #5000 mov eax, 0 mov edx,[TrainME.exe+3394] jmp returnhere TrainME.exe+123D: // Защита от проверки целостности кода // Код в этой памяти делил на 0, что вызывало крэш программы // Теперь он не будет делить на ноль nop nop nop nop TrainME.exe+1260: // Тоже защита, сразу после предыдущей следует nop nop nop nop "TrainME.exe"+1350: // Инъекция для заморозки значения jmp newmem nop nop nop nop nop nop returnhere: [DISABLE] dealloc(newmem) "TrainME.exe"+1350: // Восстанавливаем после инъекции mov ecx,[ebp-04] mov edx,[TrainME.exe+3394] add ecx, eax TrainME.exe+123D: // Восстанавливаем деление на 0 mov al, 0 div al TrainME.exe+1260: mov al, 0 div al Хотя самое простое решение это убить 2 созданных потока (кроме главного) и патчить в главном потоке основной код сколько влезет. В данном случае я просто убрал деление на 0, которое происходило когда код обнаруживался модифицированным. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 июня, 2016 Поделиться Опубликовано 15 июня, 2016 holy, перед выкладыванием скриптов, посмотри/прочти это. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения