forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   BlitzHack (http://forum.boolean.name/showthread.php?t=4213)

impersonalis 05.01.2010 22:24

Ответ: BlitzHack
 
Цитата:

Потестил - не смог поменять тип граф режима (хотел с 3Д на 2Д поменять - нельзя, хоте вроде и не предусмотрено)
с 3д на 2д менять нельзя - поползёт весь файл, из-за разных объёмов дефиниций, занимаемых той и другой командой в теле ехе. Буду думать.
Цитата:

Даёшь возможность вместо var пихать константы.
проблема таже что и выше (константый аргумент занимает места 4 байта, в то время как запись со ссылкой на перменную - на 2 байта больше). Буду думать.
Цитата:

Ну и много ложных стрингов.
Угу - буду думать

ABTOMAT 05.01.2010 22:34

Ответ: BlitzHack
 
Цитата:

с 3д на 2д менять нельзя - поползёт весь файл
Ну в принципе это особо и не надо :) т.к. даже если поменял Graphics3D на 2D то тогда получим мав при попытке загрузки чего-то-там без 3Д-режима.
Так что лучше забей на это, толку в нём нет.
А вот менять переменную на константу было бы очень круто :(

Alex.D. 25.01.2010 00:01

Ответ: BlitzHack
 
Цитата:

Сообщение от impersonalis (Сообщение 132280)
с 3д на 2д менять нельзя - поползёт весь файл, из-за разных объёмов дефиниций, занимаемых той и другой командой в теле ехе. Буду думать.

Та таблица (в ресурсном файле с программой) содержит имена функций и после них смещение от сигнатуры SVWU (4ый байт от начала) до адреса инструкции вызова (call) который изначально инвалидный (FCFFFFFF) и правится при загрузке программы. После названия функции (вида _f...) идет 5 байт, 4 из которых на смещение и один (нуль) отделяет следующее название. В большинстве случаев прийдется переделывать эту таблицу, но в некоторых (как смена 3д на 2д) можно попробывать просто сменить имя (_fgraphics3d на _fgraphics, а лишние 2 байта тоже занулить)

Цитата:

Сообщение от impersonalis (Сообщение 132280)
проблема таже что и выше (константый аргумент занимает места 4 байта, в то время как запись со ссылкой на перменную - на 2 байта больше). Буду думать.

Компилятор блица не использует инструкцию push, вместо этого он сдвигает стек и записывает в него по смещению
Соответственно запись в стек
по смещению:
*константы - 8 байт
*локальной переменной - 7 байт
*глобальной переменной - 10 байт
без смещения (первый параметр функции):
*константы - 7 байт
*локальной переменной - 6 байт
*глобальной переменной - 9 байт
В случае с глобальной переменной, замена на константу безболезненна, оставшиеся 2-3 байта можно затереть NOPами
В случае с локальной переменной, выход для некоторых функций - записывать одинарное слово (mov word [esp], const \ mov word[esp+offset], const) что укладывается в нужные 6\7 байт.

impersonalis 25.01.2010 00:31

Ответ: BlitzHack
 
Цитата:

Та таблица (в ресурсном файле с программой) содержит имена функций и после них смещение от сигнатуры SVWU (4ый байт от начала) до адреса инструкции вызова (call) который изначально инвалидный (FCFFFFFF) и правится при загрузке программы. После названия функции (вида _f...) идет 5 байт, 4 из которых на смещение и один (нуль) отделяет следующее название. В большинстве случаев прийдется переделывать эту таблицу, но в некоторых (как смена 3д на 2д) можно попробывать просто сменить имя (_fgraphics3d на _fgraphics, а лишние 2 байта тоже занулить)
Это, разумеется, я вычислил - иначе бы не смог сделать текущий функционал. 3д на 2д менять чревато ошибками в логике программы, а обратное - в смещениях асм-кода.
Пока особо нет времени и интереса к программе (как оказалось, ресурс внутри ехе - чистый асм, а его трактовка не представялет из себя особого интереса: наилучший результата здесь даст дизасм и его разбор, а софт для этого есть и лучше чем мой; т.о. мой софт по-прежнему - простенький вьювер, заточенный под б3д).

Harter 07.09.2012 14:38

Ответ: BlitzHack
 
Простите за некроманство, но если кому-нибудь когда-нибудь понадобится скрыть свой код бесплатно без регистрации от BlitzHack - ASPack вам в помощь! Он не просто уменьшает размер *.exe, а и еще, как выяснилось, выступает в роли обфускатора. По крайней мере для Blitz3D.

SBJoker 07.09.2012 15:34

Ответ: BlitzHack
 
И даже после распаковки?

Platon 07.09.2012 17:14

Ответ: BlitzHack
 
Цитата:

Сообщение от Harter (Сообщение 238016)
Простите за некроманство, но если кому-нибудь когда-нибудь понадобится скрыть свой код бесплатно без регистрации от BlitzHack - ASPack вам в помощь! Он не просто уменьшает размер *.exe, а и еще, как выяснилось, выступает в роли обфускатора. По крайней мере для Blitz3D.

ASPack, как и другие "детские" упаковщики снимается легко ( естественно при наличии соответствующих навыков или автораспаковщиков ). Все они сыпятся как минимум в одном месте, на которое намекает SBJoker - после запуска, в памяти будет дешифрованый ехешник, который можно сдампить и восстановить оригинал.
А более сложные протекторы не гарантируют стабильную работу.

ЗЫ
Кстати, где-то в сети видел транслятор x86 в llvm с возможной последующей оптимизацией. Это я к тому что было бы круто иметь в блице хотя бы такой низкоуровневый оптимизатор.

Harter 08.09.2012 13:43

Ответ: BlitzHack
 
Да, пардон, поспешил с выводами. Достаточно было взглянуть хотя бы на статью в википедии.


Часовой пояс GMT +4, время: 23:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot