В моем случае это выглядит так:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = CELL_ROUTE_IDENTIFIER;
RouteTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[RouteTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier];
}
if ([self.routes count] > 0) {
Route *route = [self.routes objectAtIndex:indexPath.row];
UITapGestureRecognizer *singleTapOwner = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(imageOwnerTapped:)];
singleTapOwner.numberOfTapsRequired = 1;
singleTapOwner.cancelsTouchesInView = YES;
[cell.ownerImageView setUserInteractionEnabled:YES];
[cell.ownerImageView addGestureRecognizer:singleTapOwner];
} else {
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
return cell;
}
И селектор:
- (void)imageOwnerTapped:(UISwipeGestureRecognizer *)gesture {
CGPoint location = [gesture locationInView:self.tableView];
NSIndexPath *tapedIndexPath = [self.tableView indexPathForRowAtPoint:location];
UITableViewCell *tapedCell = [self.tableView cellForRowAtIndexPath:tapedIndexPath];
NSIndexPath *indexPath = [self.tableView indexPathForCell:tapedCell];
NSUInteger index = [indexPath row];
Route *route = [self.routes objectAtIndex:index];
}
Существуют такие решения, как Safenet и HASP, которые утверждают, что шифруют двоичный файл, но защищены ли они от реверсирования при использовании с действующим ключом?
Нет. Специализированный реверс-инженер может его расшифровать, потому что операционная система должна иметь возможность расшифровать его, чтобы запустить его.
Лично я бы не стал беспокоиться. По общему признанию, я ничего не знаю о вашем бизнесе, но мне кажется, что обратное проектирование C ++ относительно сложно по сравнению с такими языками, как Java или .NET. Этого будет достаточно защиты, чтобы проводить всех, кроме самых решительных злоумышленников.
Однако решительный злоумышленник всегда сможет обойти все, что вы реализуете, потому что в какой-то момент это нужно превратить в кучу инструкций процессора и выполнен. Вы не можете помешать им прочитать это.
Но это ' sa много усилий для нетривиальной программы. Мне кажется гораздо более вероятным, что кто-то может просто создать конкурента, увидев вашу программу в действии (или даже просто из ваших маркетинговых материалов). Это, вероятно, проще, чем пытаться перепроектировать вашу, и избежать любых потенциальных юридических проблем. Это не то, что вы можете (или должны) предотвратить.
нанять некоторых людей, которых я работал с ними годами, они полностью запутают исходный код!
Здесь есть две основные области:
Практически невозможно по-настоящему запутать код таким образом, чтобы его невозможно было перепроектировать.
Если бы это было возможно, то компьютерный вирус было бы совершенно невозможно остановить, никто бы не стал уметь знать, как они работают и чем занимаются. Пока мы не сможем запустить зашифрованный код, шифрование в какой-то момент расшифровывается и «читается» (например, тот, кто может читать машинный код), прежде чем он может быть выполнен процессором.
Теперь, имея это в виду, вы Можно смело предположить, что дешевая защита отбьет дешевых хакеров. Читайте "дешево" как "не хорошо", это совершенно не связано с ценой, которую вы платите. Отличная защита отразит великих хакеров, но максимальной защиты не существует.
Обычно, чем более коммерчески ваше решение, тем более «хорошо известны» векторы атак.
Также обратите внимание, что такие вещи, как зашифрованные приложения, подразумевают дополнительные накладные расходы и раздражают пользователей. USB-ключи также раздражают пользователей, потому что им приходится носить их с собой, а их замена стоит целое состояние. Таким образом, это также становится компромиссом между тем, что вы счастливы, что вы защищены от горстки хакеров, и всеми вашими клиентами, которым придется нести препятствия, которые несет ваш метод защиты.
Конечно, вы можете пойти на все, чтобы попытаться обойти / задержать отладчики и обратное проектирование. Как говорили другие, вы не остановите решительного злоумышленника, точка ... и как только ваше приложение будет взломано, вы можете рассчитывать, что оно будет доступно бесплатно в Интернете.
Вы заявляете две цели желаемой схемы защиты:
1) Сделайте трудным обратный инжиниринг. 2) Сделайте очевидным, что кто-то вас обкрадывает.
Для №1 любая схема обфускатора / отладочного детектора / и т.д. будет иметь хоть какое-то влияние. Честно говоря, однако, сокращение процента инженеров, которые когда-либо копались в выводе компилятора, означает, что скомпилированный код C / C ++ для многих ЯВЛЯЕТСЯ запутанным кодом.
Для пункта 2, если у вас нет конкретного и юридически защищенного алгоритма / процесса, который вы вы пытаетесь защитить, как только приложение будет реконструировано, вы потеряны. Если это юридически защищено, вы уже опубликовали защищенные детали, так что вы пытаетесь получить?
В целом, я думаю, что это трудный способ «выиграть», и вам лучше исправить это на «бизнес-сторона» - то есть оформить свое приложение по подписке или взимать плату за обслуживание / поддержку ... но особенности, очевидно, зависят от ваших обстоятельств.
Вам необходимо установить предел того, насколько далеко вы зайдете, чтобы защитить свой код. Посмотрите на рынок и на то, что вы взимаете за свое решение. Вы никогда не обезопасите свой продукт на 100%, поэтому вам следует оценить, какой метод даст вам наилучшую защиту. В большинстве случаев простого лицензионного ключа и никакой обфускации будет достаточно.
Отсрочка обратного проектирования только «отсрочит» неизбежное. На чем вам нужно сосредоточиться, так это на сдерживании первоначальной попытки нарушения авторских прав / интеллектуальной собственности. Хорошее уведомление о юридических положениях и условиях на странице «О программе» или выделенное жирным шрифтом уведомление об авторских правах, предупреждающее о том, что любые попытки реконструировать код приведут к взлому через позвоночник ...
Большинство людей откажутся от попыток сорвите что-нибудь, если есть шанс, что им будет предъявлен судебный иск.
Мы используем SafeNet, и наши клиенты рассматривают его как «официальную» защиту. Это само по себе является хорошим сдерживающим фактором.