PDA

Просмотр полной версии : сложнопонимаемый алгоритм



psb
11.04.2006, 15:51
есть задача: написать простую программу так, чтоб при ковырянии в ней было ооочень сложно понять, что она делает.

например, ксорка. если её записать в обычном своем виде, то мы запросто увидим, что она и как делает (это ж просто цикл!). если вытворять хитрости с кодом, типа, скажем, чтоб прыгала с адреса на адрес (используя стек), то это тоже не эффективно: достаточно посидеть и можно понять, что делается.

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

может, кто-нить знает, как можно еще затруднить чтение алгоритма? может, 2 виртуальных процессора?;)

Titus
11.04.2006, 16:18
А для чего такие извраты?
Все равно крекнут :v2_wink2: (если надо будет)

Sinus
11.04.2006, 16:30
достаточно просто:
пишешь свой ассемблер, который каждую комманду может отассемблировать в разных вариациях.

допустим: LD HL,100



PUSH DE
PUSH BC
EX AF,AF'
PUSH AF
LD B,15
LD HL,85
L0 ADD A,(HL)
SUB B
INC HL
DJNZ L0
POP AF
EX AF,AF'
POP BC
POP DE


и так по 4-8 вариантов на каждую комманду.
тормозить будет и объём кода вырастет, но разбираться в нём надо будет ооочень долго ;)

psb
11.04.2006, 16:41
А для чего такие извраты?
Все равно крекнут (если надо будет)

не, конечно крекнут, если прям НАДО:) но надо чтоб желание КРЕКАТЬ пропало;)

psb
11.04.2006, 16:43
пишешь свой ассемблер...
во, а это даже интересно!:))) блин, классно придумано:)) практически то, что надо:)

Titus
11.04.2006, 16:59
не, конечно крекнут, если прям НАДО:) но надо чтоб желание КРЕКАТЬ пропало;)

Вряд ли пропадет, из принципа крекнут :)

Хотя зачем крекать, если сейчас в любом эмуляторе программу останови и все готово.

James DiGreze
11.04.2006, 17:10
Помнится еще в школе написал програмку типа хитрого скроллера, фишка была в оптимизации по памяти, т.е. требовалось запихать в минимальный объем, в качестве оптимайзера были применены куча условных и безусловных переходов. Когда друган сел разбирать ее "на запчасти" чтобы посмотреть как это работает, черз день выдал фразу: "работать недолжно, ибо бред, но РАБОТАЕТ"... ;)
О какой либо защите я тогда даже не задумывался...

Jukov
11.04.2006, 17:11
Не тратьте время на ерунду. Время, когда на Спектруме можно было защитить программу было и ушло. Более менее надёжный вариант защиты кода программы, это использование аппаратного ключа типа тех, что вставляют в LPT на IBMках. Но и здесь найдутся умельцы, правда уже в меньшем количестве, которые его взломают.
Кстати, а что защищать-то собрался? Объект-то хоть стоящий?

newart
11.04.2006, 19:18
Не тратьте время на ерунду. Время, когда на Спектруме можно было защитить программу было и ушло. Более менее надёжный вариант защиты кода программы, это использование аппаратного ключа типа тех, что вставляют в LPT на IBMках. Но и здесь найдутся умельцы, правда уже в меньшем количестве, которые его взломают.
Кстати, а что защищать-то собрался? Объект-то хоть стоящий?
Про спектрум вроде никто и не говорил...

Vladimir Kladov
11.04.2006, 19:46
Пишешь свой ассемблер... Для таких извратов существуют МАКРОСЫ и DEFINE's. В нормальных ассемблерах, по крайней мере.

captain cobalt
11.04.2006, 19:56
Чеpнов - Об одном методе маскиpовки программ
http:/www.citforum.ru/security/articles/mask/

SMT
11.04.2006, 20:11
Пишешь свой ассемблер... Для таких извратов существуют МАКРОСЫ и DEFINE's. В нормальных ассемблерах, по крайней мере.не поможет. как он будет выбирать разные варианты одного макроса.. и хакер быстро составит таблицу соответсвий кусков кода и изначальных макросов, т.е. потратит времени меньше, чем создатель защиты. вообще-то, в вирмейкерских журналах всяких движков мутирования кода - тонны

Orionsoft
11.04.2006, 20:41
но надо чтоб желание КРЕКАТЬ пропало
это неистребимо !

Электрик
12.04.2006, 08:43
На PC есть вполне ходовой софт для которого нет кряков. Никто не спорит, что в принципе взломать можно всё, но можно причинить при этом такой геморрой что ломающий помучается и решит "ну его нафиг".

Sinus
12.04.2006, 11:19
не замучаешься.
просто такой софт никому не нужен (читать не нужен тем, кто может сломать)

psb
12.04.2006, 13:46
ну.. вообще говоря, мне это нуна применительно к спектруму.. и не для ЗАЩИТЫ программ.. это-то конечно, те времена уже прошли.. и я учитываю эмуляторы. так вот в том и хрень, что даже имея эмулятор, одуренные возможности для отладки, кряканья и т.п., было сложно понять, что же там и как вычисляется..
чтобы проще было _догадаться_ о сути происходящего, чем влезть в код и понять.

пока не скажу, зачем именно, но мож когда сделаю;)

Sinus
12.04.2006, 14:17
ну вот тебе нормальный вариант: наклепая макросов тонну или асм напиши, который будет делать тоже, только ещё и по рандому выбирать.
а если ещё и левые куски кода (особо ничего не делающие) такой асм вставлять будет, то цены б ему на было.
правда сам потом заколебёшся отлаживать свой же код ;)

psb
12.04.2006, 15:16
в общем, примерно я прикинул, что можно сделать:)
всем спасибо:)

Jukov
12.04.2006, 16:51
На любой эмулятор найдётся проруха. Не такие они идеальные, я знаю одну феньку, которая прокатит на любом реале, но на UNREALE не сработает.

Sinus
12.04.2006, 17:48
в этой версии не сработает, сработает в следующей.
я тоже знаю одну забавную феньку которую не проглотит 90% процентов эмулей, ну и что с этого?

Robus
12.04.2006, 19:24
есть задача: написать простую программу так, чтоб при ковырянии в ней было ооочень сложно понять, что она делает.

например, ксорка. если её записать в обычном своем виде, то мы запросто увидим, что она и как делает (это ж просто цикл!). если вытворять хитрости с кодом, типа, скажем, чтоб прыгала с адреса на адрес (используя стек), то это тоже не эффективно: достаточно посидеть и можно понять, что делается.

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

может, кто-нить знает, как можно еще затруднить чтение алгоритма? может, 2 виртуальных процессора?;)


Когда-то я такое очень любил ... И сделал две свои защиты ... первая была в программе http://zxaaa.narod.ru/DEMO/ZXCLUB.ZIP она простая , а вот вторая была основана именно на безумно запутанном коде http://www.entire.nm.ru/speccy/PITON.SCL ... В итоге в игре 9 килобайт занимает сама игра, а 10 килобайт занимает защита. Эта игра была спором с моим другом Fine Soft'ом, я написал на него "фак" а он его должен был убрать ... Так это и не свершилось ...

Vladimir Kladov
12.04.2006, 19:29
не поможет. как он будет выбирать разные варианты одного макроса.. и хакер быстро составит таблицу соответсвий кусков кода и изначальных макросов, т.е. потратит времени меньше, чем создатель защиты. вообще-то, в вирмейкерских журналах всяких движков мутирования кода - тонны
Я чего-то не понял. В макрос можно включить между прочим, генерацию следующего случайного числа (вложенный макрос вызвать), и на основании этого числа выбрать любую ветку из реализованных. Остается только для билда задать начальное число в псевдо-случайной последовательности.

Titus
13.04.2006, 00:42
в этой версии не сработает, сработает в следующей.
я тоже знаю одну забавную феньку которую не проглотит 90% процентов эмулей, ну и что с этого?

Ну-ка, ну-ка, поделись про 90% :v2_wink2:

Sinus
13.04.2006, 10:49
Titus

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

unreal не проходит.
zemu пока не тестил (хотя по идее должно работать)

зы. возможно будут работать старые досовские эмули.
зыы. возможны глюки на реале если мышка с контроллером.



ORG #8000

LD BC,#FADF
LD H,0

LOOP HALT
LD DE,1000

IN A,(C)
AND 7
OUT (#FE),A
LD L,A

LOOP0 IN A,(C)
AND 7
OUT (#FE),A

DEC DE
LD A,D
OR E
JP NZ,LOOP0

IN A,(C)
AND 7
SUB L

OR H
LD H,A
OUT (#FE),A

XOR A
IN A,(#FE)
OR #E0
INC A
JP Z,LOOP

RET


зыыы. это ещё не все забавные феньки

Jukov
13.04.2006, 14:40
в этой версии не сработает, сработает в следующей.
я тоже знаю одну забавную феньку которую не проглотит 90% процентов эмулей, ну и что с этого?
Зато у авторов эмуляторов будет повод довести свои творения до совершенства (в смысле чистоты эмуляции).

Titus
13.04.2006, 16:13
зыыы. это ещё не все забавные феньки

С таким же успехом можно и на клавку нажимать, и, если опрос периферии сделан только между фреймами, естественно изменений состояний внешних устройств не произойдет.

Но это не совсем относится к точности эмуляции, совершенно справедливо, что какой-нить реальный контроллер клавы или мыши может работать точно также.

Vladimir Kladov
13.04.2006, 19:17
Элементарный трюк (не смотрел этот, возможно, это оно и есть): в реале на/отжатие клавы происходит в любой момент времени, а не только на границе кадров, и еще есть дребезг контактов. А оно надо? По-моему, так совсем ни к чему.

Titus
13.04.2006, 23:21
Элементарный трюк (не смотрел этот, возможно, это оно и есть): в реале на/отжатие клавы происходит в любой момент времени, а не только на границе кадров, и еще есть дребезг контактов. А оно надо? По-моему, так совсем ни к чему.

А чего смотреть, и так видно, что это оно и есть :v2_smile:

Sinus
14.04.2006, 10:58
конечно это никому не надо.
просто я отвечал товарищу Жукову, что фишек которые не эмулируют эмуляторы есть тонны, причём самые элементарные.
сэмулировать можно всё со 100% точностью для софта который будет работать на эмулируемой машине (не факт что 100% будет для зрителя ;) ).
только вот действительно, а оно надо?

зы. если кому действительно охота погонять эмули на предмет опроса УВВ, то вот более правильный вариант


ORG #8000

LD BC,#FADF
LD H,0

LOOP HALT
LD DE,800

IN A,(C)
AND 7
OUT (#FE),A
LD L,A

LOOP0 IN A,(C)
AND 7
OUT (#FE),A

SUB L
OR H
LD H,A

DEC DE
LD A,D
OR E
JP NZ,LOOP0

LD A,H
OUT (#FE),A

XOR A
IN A,(#FE)
OR #E0
INC A
JP Z,LOOP

RET

Titus
14.04.2006, 13:28
конечно это никому не надо.
просто я отвечал товарищу Жукову, что фишек которые не эмулируют эмуляторы есть тонны, причём самые элементарные.

Так поделись тоннами. Про фреймовый опрос периферии все понятно, а кроме него что-нить стоящее есть? :v2_wink2:

Robus
14.04.2006, 19:31
У меня такой вопрос, а если я выложу свой эмулятор, то вы согласитесь его протестировать ? У меня где-то глюк, но опознать я его не могу ... Я прикреплю игры, которые не работают на нём. Или вы сами в TRD добавити ваши работы, которые не заработают и вы сможете определить лажу. Поскольку я уже сотню раз проходил команду за командой, но так и не нашёл изъяна. Он работает под ХР, но видео-режим выбирает 51 герц, других вариантов я не делал, поскольку это не соответствует настоящему Speccy. Ну что, согласитесь потратить свё время на выявление ошибок ?

Titus
14.04.2006, 21:47
Ну что, согласитесь потратить свё время на выявление ошибок ?

A zxall попробовать не судьба? :v2_blush:

Robus
14.04.2006, 22:16
A zxall попробовать не судьба?

Не понял ... Что имелось в виду ??? zxall это какой-то эмуль ? програма ?

Titus
15.04.2006, 00:16
Не понял ... Что имелось в виду ??? zxall это какой-то эмуль ? програма ?

zexall (http://www.mdfsnet.f9.co.uk/Software/Z80/Exerciser/Spectrum/)
А так же читать документ emuls-z80test.zip в теме 'команда bit n,(hl)'

goblinish
26.05.2006, 09:28
Эта игра была спором с моим другом Fine Soft'ом, я написал на него "фак"

знакомая история...мне подбросили защищенный файл, который нужно было сломать без Shadow RAM, насколько помню там было два вложенных цикла ксорки (всего около 56000 проходов) с регистром R...но еще был IM2, обработчик которого считал контрольную сумму основной проги...и кажется использовал её в качестве параметра ксорки. Я пропыхтел пять часов, но в итоге честно хакнул её, впарив некоторое подобие трояна. Круче защиты не видел, нуднее - да, старый Alcatraz...

jerri
26.05.2006, 23:42
это разное... это не сложнопонимаемыо - это лажа... у робуса круче