forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Нужна помощь! (http://forum.boolean.name/showthread.php?t=12291)

Nikopal 28.03.2010 22:30

Нужна помощь!
 
Недавно попробовал писать простие но полезные програмки на Мидлет Паскале, и у меня возник вопрос о защите програм
помогите, пришлите пример, фрагмент кода програмы какая бы проверяла введённый "код активации".
И как зделать чтобы передача "рабочей" програмы приводила к сбросу параметров, т.е. код активации нужно вводить ещё раз????
ПРЕЖДЕВРЕМЕННОЕ СПАСИБО

Roman_V 29.03.2010 09:54

Ответ: Нужна помощь!
 
Привет!
ну дело это творческое. Способов много разных. И придуманное тобой будет возможно даже лучше шаблонов. Но некоторые примеры далее.
Попробуй при запуске проги опросить возможности телефона, наличие той или иной периферии. Потом из этих данных можешь математическими или логическими функциями получить какое-то число. Это число и будет некой контрольной суммой или иди дальше и сделай хэш-функцию. Это число должно быть уникальным для конкретного телефона. Чтобы следующий раз твоя программа уже не спрашивала кода активации, то его надо записать на диск телефона. При первом запуске программа не найдет этот файл поэтому запросит код активации. Когда сформирует число или хэш и запишет его на диск, то при следующем запуске снова опросит периферию, сформирует хэш и сравнит его с записанным на диск ранее. Если совпало, то запускается. Если нет, то GoodBye. При переносе на другой телефон как мидлета так и хэш файла, данные проверки периферии не сойдутся и снова GoodBye.
Для формирования этого контрольного числа если сможешь получить что-либо с серийным номером, то проще. Иначе можно привязаться к размеру флэшки, наличия BT, COM портов и прочей периферии. Собственно если надо подробнее, то пиши.
Это один из способов.

Nikopal 29.03.2010 11:25

Ответ: Нужна помощь!
 
Приблезительно мысль понял, но как это зделать?

cherepets 29.03.2010 12:03

Ответ: Нужна помощь!
 
самый надежный способ - проверка ключа сервером.

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

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

Nikopal 29.03.2010 12:12

Ответ: Нужна помощь!
 
Цитата:

Сообщение от cherepets (Сообщение 143467)
телефон записывает свою активацию в рмс

как єто зделать???

Roman_V 29.03.2010 12:26

Ответ: Нужна помощь!
 
Как сделать...
для этого надо найти на этом форуме про то как посмотреть возможности конкретного телефона. Не помню как называется, но есть. Потом попробовать библиотеку работы с файлами. Поищи что нибудь по определению серийного номера телефона или СИМ карты. Допустим ты хочешь привязать свою программу к IMEI телефона. Тогда при запуске программы ты пытаешься найти на диске файл по пути с:\mydata\key.bin (ну это как пример). Если файла нет, то очевидно программа твоя запускается первый раз и в этом случае программа запросит код.
Немного про коды... Итак программа может выдать некий код, и запросит ответный. Тот код который выдала программа пользователь должен прислать тебе и ты сгенеруруешь ответный и вышлешь пользователю. Он его введет в программе и программа легально запустится. Это если код будет каждый раз разный. Если же ты хочешь приязывать к одному коду все копии программы, то выводить на экран не надо. Только поле для запроса.
Так вот самый простой случай когда при первом запуске программа выводи на экран IMEI телефона и просит ввести ответный. допустим IMEI 12345678. Я присылаю этот код тебе. Ты должен сгенерировать ответный код. Как ты это делаешь это твое творчество. Но например ты попарно сделаешь исключающее ИЛИ (XOR). То есть
a=1 xor 2
b=3 xor 4
c=5 xor 6
d=7 xor 8
тогда ответный код что ты мне пришлешь будет равен: abcd, а именно если проксоришь примеры выше, то 373F
Я ввожу 373F в программу и она у себя проделывает с IMEI своего телефона тоже самое. И получает эти числа. Если они совпадают, то я получил легальный код и программа может работать.
Теперь необходимо записать в с:\mydata\key.bin какие-то идентификационные данные. Что это за данные решать опять же тебе. Но к примеру мы запишем в него тот же IMEI, но не в чистом виде, а в измененном. Допустим по следующей формуле:
abcdefgh
где a-h это цифры IMEI телефона проксорены с обратной записью IMEI
Пример: IMEI телефона как и раньше равен 12345678. Тогда
a=1 xor 8 =9
b=2 xor 7 =5
c=3 xor 6 =5
d=4 xor 5 =1
e=5 xor 4 =1
f=6 xor 3 =5
g=7 xor 2 =5
h=8 xor 1 =9
То что запишем в файл с:\mydata\key.bin будет содержать: 95511559

При следующем запуске твоя программа посмотрит файл на с:\mydata\key.bin и сделает вычисления своего IMEI. Если результаты сойдутся, то значит программа легально уставнолена. Если же легальную программу перенесли на другой телефон то расчеты IMEI не сойдутся с тем что в файле. И программа не запустится, а выведет сообщение что КОСЯК!

Вообще на основе этого можно вычислять данные по любым твоим формулам. XOR это простейший пример. Можно брать добавлять к тому же IMEI кол-во COM портов, размер флэшки и прочее. Но эти данные не должны меняться в телефоне несмотря ни на что. А то программа перестанет работать.
Удачи!

Nikopal 29.03.2010 13:10

Ответ: Нужна помощь!
 
я думаю не стоит ещё генерацию сюда приписывать, код буду знать только я, придумаю несколько, і вводить сам буду, мне только нада придумать, как приввязать код к телефону телефону??

cherepets 29.03.2010 13:19

Ответ: Нужна помощь!
 
в хелпе читай хранилище записей

Nikopal 29.03.2010 19:51

Ответ: Нужна помощь!
 
как узнать IMEI для нокии, перепробовал варианти какие расматривались на форуме, неработают(((

Roman_V 29.03.2010 20:38

Ответ: Нужна помощь!
 
http://forum.boolean.name/showthread.php?t=7690

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

LIDERSERVIS 29.03.2010 20:48

Ответ: Нужна помощь!
 
что то похоже я уже искал http://forum.boolean.name/showthread.php?t=12068

odd 29.03.2010 20:53

Ответ: Нужна помощь!
 
В том то и проблема, что IMEI читается не на всех телефонах, но вот онлайн регистрация и хранение кода на удаленном сервере довольно надежный способ защиты.

Roman_V 29.03.2010 20:59

Ответ: Нужна помощь!
 
Это хорошо когда есть сервер и интернету не жалко и он подключен и прочее. Поэтому раз нет IMEI, то можно взять кучу других параметров...

GRAY_WOLF 29.03.2010 21:44

Ответ: Нужна помощь!
 
Цитата:

Сообщение от Nikopal (Сообщение 143526)
как узнать IMEI для нокии, перепробовал варианти какие расматривались на форуме, неработают(((

На S40 ни как. Возможно поможет только подписание мидлета сертификатом.

Nikopal 30.03.2010 14:58

Ответ: Нужна помощь!
 
к чему ещё можно привязать програму???

Roman_V 30.03.2010 19:37

Ответ: Нужна помощь!
 
Ну к чему угодно. я ж писал. Вот в ветке где ты искал про IMEI написали программу тестирования возможностей телефона. Вот что угодно из того набора хотя бы. Например разрешение экрана, кол-во цветов, кол-во портов, типы проигрываемых файлов, объем памяти, кол-во логических дисков и прочее. Вот эз этих данных как угодно получи какую-то сумму. Она, конечно, не серийный уникальный номер, но все же привязка. А уж если хочется привязки, то либо ищи как найти IMEI или еще какой-то уникательный номер, либо как ребята тебе предлагали с онлайн проверкой...

Nikopal 30.03.2010 23:50

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

cherepets 30.03.2010 23:55

Ответ: Нужна помощь!
 
одд недавно в разделе опен сорс про связь с пхп чет писал, почитай - мож поможет

Roman_V 31.03.2010 10:17

Ответ: Нужна помощь!
 
Зря сразу отказываешься от идеи ресурсов. Инет, как я писал, есть не всегда. И затраты лишние.
Для доступа к сети есть библиотека binsock.
http://www.forum.boolean.name/showthread.php?t=8960
Вообще бы неплохо изучить весь форум, библиотеки. Вопросы сами собой отпадут. Там ребята с примерами все выкладывают.
Сокет если надо обращаться не к 80 порту. Иначе другую библиотеку надо.
Мне кажется что программа не настолько заслуживает таких защит. Ты взвесь плюсы и минусы. Для тех пользователей кто вообще ноль, то им пофиг какую защиту ты сделаешь, они ее никогда и не будут пытаться взломать. А те кто шарит, то скорее всего ему будет проще написать такую же программу или если лень, то декомпильнуть и посмотреть что и как ты делаешь.
В основном всегда хочется быстро, дешево и навсегда, но получается что надо взвешивать затраты прежде чем реализовывать.
Удачи!

Nikopal 31.03.2010 12:52

Ответ: Нужна помощь!
 
я понемаю, что з ресурсами попроще, но я не могу ничего подобрать для нокии, я все параметры для гетпроперти перепробовал что виложеные на форуме и ничего не подошло(

Roman_V 31.03.2010 13:15

Ответ: Нужна помощь!
 
ты вот этот пример ставил на телефон?
http://forum.boolean.name/showthread.php?t=7690
Что нибудь показывает?
Если да, то пользуй эту библиотеку. не может быть что она ничего не показывает.

Nikopal 31.03.2010 13:30

Ответ: Нужна помощь!
 
да ставил, показивает, но как это витянуть от туда???

GRAY_WOLF 31.03.2010 13:54

Ответ: Нужна помощь!
 
Цитата:

Сообщение от Nikopal (Сообщение 143738)
да ставил, показивает, но как это витянуть от туда???

Нужен исходник? Пиши в личные сообщения, а вось сойдемся по сходной цене :-D.

Nikopal 10.04.2010 04:47

Ответ: Нужна помощь!
 
у меня опять вопрос по защите с помощью сервера, прочитал статтю одда, возникли проблемы со скриптом, посмотрите или правильно зделано, скрипт должен удалять код который введён с телефона, но как прислать сообщение на телефон, и как записать код в рмс??
PHP код:

<?

$host = ""; 
$user = ""; 
$pass = ""; 
$base = ""; 

$conn = mysql_connect($host, $user, $pass) or die("Could not connect"); 
 mysql_select_db($base) or die("Can't select database.");
delete from scores
from username
where username=p;
?>


odd 10.04.2010 14:57

Ответ: Нужна помощь!
 
Удалять нужно лучше по ID номеру, а то у некоторых пользователей может быть и одинаковое имя. Тогда и всех тезок удалит тоже. Но если хочешь удалить по имени, то делай так:
PHP код:

if ($action == "delete")
{
    
$conn mysql_connect($host$user$pass) or die("Could not connect"); // Попытка соединиться с MySQL сервером
    
mysql_select_db($base) or die("Can't select database."); // Выбираем нашу базу данных
    
$p $_GET['p'];
    
$result mysql_db_query($base"DELETE FROM `scores` WHERE `username` = ".$p.";"); // Делаем запрос на удаление


Запрос тогда нужно делать вида

PHP код:

http://site.ru/script.php?action=delete&p=user 


Nikopal 10.04.2010 17:00

Ответ: Нужна помощь!
 
Цитата:

Сообщение от cherepets (Сообщение 143467)
юзер вводит в текстбокс ключ и отсылает скрипту который проверяет на достоверность, после чего телефон записывает свою активацию в рмс (подделать трудно - никто возиться не станет) и ключ с серва удаляется.

а как записать активацию в РМС???

Nikopal 12.04.2010 22:30

Ответ: Нужна помощь!
 
перечитал много статей по РМС нашол только для Java, а для MP ничего, помогите пожалуйста

cherepets 12.04.2010 23:55

Ответ: Нужна помощь!
 
см в проге хелп

Nikopal 13.04.2010 00:22

Ответ: Нужна помощь!
 
ааа, я та думал...
я не могу понять, как должна работать защита, рмс файл очищаетса при перемещении??

NetBuilding 08.06.2010 10:58

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

Код:

var
        i,t,p,r: integer;
                h,w: integer;
                x, y,xmode,ymode      : integer;
    img1,nb,MR      : image; 
   
    cx,cy  : integer;
    img: array [0..9] of image;
                x2,y2,cx2,cy2,b: array [0..9] of integer;
       
                k, kk,kkmode,speed: integer;
                score : integer;
                s: string;
                konec: integer; // 0-ничего, 1-гамеоверб 2-победа
       
  cont,clik : command;
    quote : string;
       
  v, o,o2, wi, hi, key, ch, cw, c, c_color, c_pos, c_c, c_pos_c, timer: integer;
 
        m: array [0..7] of string;
        x1, y1: array [0..100] of integer;



procedure game;
        begin
        x:=w div 2-10;
        y:=h-25;
        xmode:=3;
        ymode:=3;
        score:=0;
        s:='';
        konec:=0;
kkmode:=10;
k:=1;


        // возвращает метеориты назад при рестарте
        for i:=0 to 9 do begin
                x2[i]:=0;
                y2[i]:=0;
                cx2[i]:=0;
                cy2[i]:=0;
        end;       
        //////////////////////////////////////////
        k:=0;
        kk:=0;// определяет когда появиться следующему метеориту
        kkmode:=10;// растояние между метеоритами
        speed:=3;

        t:=1;
repeat

skore;
////////просчет метеоритов\\\\\\\\\\
        if kk>=kkmode then begin
                x2[k]:=random(w-16)+8;
                y2[k]:=0;
                kk:=0;
                score:=score+1;
                if k<9 then k:=k+1 else k:=0;
        end;
        else kk:=kk+1;       
        for i:=0 to 9 do begin
                if y2[i]<h+23 then y2[i]:=y2[i]+speed;       
                cx2[i]:=x2[i]+12;
                cy2[i]:=y2[i]+12;
        end;
                /////////////\\\\\\\\\\\
        t:=random(9);
               
        img[k]:=loadimage('/m'+t+'.png');
       
                {столкновение}
       
for i:=0 to 9 do
begin
if (x+15>x2[i]) and (x+5<x2[i]+25) and (y+2>y2[i]) and (y+2<y2[i]+25) then
 begin
 drawimage(loadimage('/v1.png'), x-2,y-2);
 repaint;
 konec:=1;
 end
end;
               
               
               
               
        s:=integertostring(score);
       
shatlkeys;
       
        {рисование}
        SetColor(0,0,0);
  FillRect(0, 0, w, h);
  Stars;
 
  for i:=0 to 9 do DrawImage(img[k], x2[i], y2[i]);
  DrawImage(img1, x, y);
  SetColor(255, 255, 255);
  SetFont(FONT_FACE_SYSTEM, FONT_STYLE_BOLD,FONT_SIZE_SMALL);
  drawtext('счет: '+s,0,0);
 
  Repaint;
  Delay(50);
until konec>0;


NetBuilding 26.07.2010 16:49

Ответ: Нужна помощь!
 
дайте плиз FAQ по lib_keys.

Trazzy 27.07.2010 02:07

Ответ: Нужна помощь!
 
У меня только такое:
Цитата:

Lib_keys - Библиотека для определения одновременно нажатых клавиш
get_key_states; - с-но сама функция

cherepets 27.07.2010 12:15

Ответ: Нужна помощь!
 
это всем и так известно. а как правильно узнавать потом из каких кодов результат состоит? я делаю так:

сравниваю результат с кодами в порядке убывания.
если результат больше - код в массив пишем, а от результата его отнимаем.
когда результат станет равен 0, то все коды будут у нас в массиве.

cHeRsAnYa 27.07.2010 14:39

Ответ: Нужна помощь!
 
В яве это делается примерно так (цитата из доков):
Код:

      // Check user input and update positions if necessary
      int keyState = getKeyStates();
      if ((keyState & LEFT_PRESSED) != 0) {
          sprite.move(-1, 0);
      }
      else if ((keyState & RIGHT_PRESSED) != 0) {
          sprite.move(1, 0);
      }

Если в паскале есть битовые операции, то можно и в нём аналогично. Значения констант:
Код:

javax.microedition.lcdui.game.GameCanvas
public static final int        DOWN_PRESSED        64
public static final int        FIRE_PRESSED        256
public static final int        GAME_A_PRESSED        512
public static final int        GAME_B_PRESSED        1024
public static final int        GAME_C_PRESSED        2048
public static final int        GAME_D_PRESSED        4096
public static final int        LEFT_PRESSED        4
public static final int        RIGHT_PRESSED        32
public static final int        UP_PRESSED        2


psih1 27.07.2010 18:57

Ответ: Нужна помощь!
 
Вот для тебя пример сделал
PHP код:

Program keys;

uses
   keys
;
   
const
   
UP_PRESSED 2;
   
DOWN_PRESSED 64;
   
LEFT_PRESSED 4;
   
RIGHT_PRESSED 32;
   
FIRE_PRESSED 256;
   
GAME_A_PRESSED 512;
   
GAME_B_PRESSED 1024;
   
GAME_C_PRESSED 2048;
   
GAME_D_PRESSED 4096;
   
var
   
imgimage;
   
keyinteger;
   
x,yinteger;

procedure cls;
begin
   setcolor
(255,255,255);
   
fillrect(0,0,getwidth,getheight);
end;

procedure init;
begin
   img
:=loadimage('/icon.png');
   
x:=20;
   
y:=20;
   
keys.init;
   
keys.show;
end;

Begin
   init
;
   
repeat
      key
:=keys.get_key_states;
      if 
keys.get_bit(keyLEFT_PRESSED)<>0 then
         x
:=x-5;
      if 
keys.get_bit(keyRIGHT_PRESSED)<>0 then
         x
:=x+5;
      if 
keys.get_bit(keyUP_PRESSED)<>0 then
         y
:=y-5;
      if 
keys.get_bit(keyDOWN_PRESSED)<>0 then
         y
:=y+5;
      
cls;
      
drawimage(img,x,y);
      
keys.refresh;
      
delay(50);
   
until keys.get_bit(keyFIRE_PRESSED)<>0;
End


NetBuilding 27.07.2010 22:04

Ответ: Нужна помощь!
 
чето у меня библа какя-то косячная чтоли, ошибки сыплются на примере от psih1
брал здесь: http://forum.boolean.name/showthread.php?t=7438

psih1 27.07.2010 22:09

Ответ: Нужна помощь!
 
у меня все робит без проблем

NetBuilding 27.07.2010 23:24

Ответ: Нужна помощь!
 
у меня ни одну функцию не признает
psih1 кинь плиз свою lib_keys

psih1 28.07.2010 10:01

Ответ: Нужна помощь!
 
Вложений: 1
Вот либа и пример

NetBuilding 28.07.2010 18:56

Ответ: Нужна помощь!
 
psih1 благодарю теперь рубит :)
только для моего проекта не катит, неприятные глюки от keys.refresh :(

psih1 29.07.2010 21:07

Ответ: Нужна помощь!
 
как реализовать графическую форму при нажатии на которую вводится текс в обычной форме showTextBox и при нажатии ок выводится в канавасе
(drawText)

cherepets 29.07.2010 22:04

Ответ: Нужна помощь!
 
алармы в КАНАВАСЕ наступают!
а в чем проблема то? если в переносах, то lib_text в помощь. если в коммандах, то хелп->туториал->работа с формами

psih1 29.07.2010 22:47

Ответ: Нужна помощь!
 
мне теорию я сам сделаю хотябы переход между конвасом в форму и наоборот


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

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