Шифрование процедури(или куска памяти)

Тема в разделе "WASM.BEGINNERS", создана пользователем XshStasX, 24 окт 2008.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    есть такая прога:
    var
    m:array[byte] of char;

    procedure Hash(P:pointer;Size:cardinal);
    var
    p1:^byte;
    begin
    p1:=p;
    For Size:=Size Downto 1 do
    begin
    p1^:=p1^ xor 77
    inc(p1)
    end;
    end;
    function my(a,b:cardinal):cardinal;
    var
    t:cardinal;
    begin
    t:=a+b;
    result:=t;
    end;
    begin
    hash(@m,Sizeof(m));(*здесь все норм*)
    Hash(@my,3);{хочу зашифровать 3 байта процедуры,но здесь будет ошибка}
    end;
    теперь вопрос как можна зашифровать процедуру??? а как мона узнать ее размер(тоесть скоко она занимает байт в программе)?
     
  2. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Код (Text):
    1. Procedure Func_To_Crypt_Start;
    2. begin
    3. end;
    4.  
    5. Procedure Function_To_Crypt;
    6. begin
    7.   ShowMessage('123');
    8. end;
    9.  
    10. Procedure Func_To_Crypt_End;
    11. begin
    12. end;
    13.  
    14. Procedure Crypt(p:Pointer; size:DWORD);
    15. var i : Integer;
    16. begin
    17.   for i := DWORD(p) to DWORD(p) + Size do
    18.     begin
    19.       PBYTE(i)^ := PBYTE(i)^ xor $25;
    20.     end;
    21. end;
    22.  
    23. procedure TForm1.Button1Click(Sender: TObject);
    24. begin
    25.   Crypt(@Function_To_Crypt, DWORD(@Func_To_Crypt_End) - DWORD(@Func_To_Crypt_Start));
    26. end;
    Чтото в этом роде...
    Не забывай только добавить права на запись по адресу "@Function_To_Crypt"
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    или как можна настроить стек, чтоб когда я туда помещаю свои дание они помещались по адресу моей процедури???
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    XshStasX
    Вообще это Вам не асм, чтобы "шифровать процедуры". Вы бы ещё процедуры на JAVA шифровали.
    В общем случае никак. Неизвестно, что компилятор с ней навытворяет.
    Разумеется ошибка. По умолчанию в секцию кода нет доступа на запись.
     
  5. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    XshStasX уу, вам сначала нужно азы изучить а потом уже что то кодить.

    Секция кода в делфи не доступна на запись. Используйте VirtualProtect или руками разрешайте запись через PETools например. Узнать размер просто

    Код (Text):
    1. var
    2. p1:^byte;
    3. begin
    4. p1:=p;
    5. For Size:=Size Downto 1 do
    6. begin
    7. p1^:=p1^ xor 77
    8. inc(p1)
    9. end;
    10. end;
    11. function my(a,b:cardinal):cardinal;
    12. var
    13.   t:cardinal;
    14. begin
    15.   t:=a+b;
    16.   result:=t;
    17. end;
    18. procedure my_end;
    19. begin
    20. end;
    21.  
    22. begin
    23.   Hash(@my,DWORD(@my_end)-DWORD(@my));
    24. end;
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    PE_Kill
    Откуда стопроцентная уверенность, что компилятор процедуру не покромсает и не раскидает кусками по коду? В общем случае сам вызов
    может находиться между метками my и my_end.
     
  7. PE_Kill

    PE_Kill New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    107
    l_inc странный вопрос. Подебажте пару лет делфи проги и сам поймете. Это вам не оптимизация Си, кде код может быть похож на нехилый конверт. Ну отъявленые параноики могут отключить оптимизацию для этих 2х процедур.
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    а надо ее шифровать? Если она будет на том же месте расшифровываться, то ценность шифровки пропадет. Не проще накидать пару сотен мелких процов/функов (все равно делфя не элиминирует) и нужную вызывать по вычисляемой ссылке или автомат с расчетами следующей точки на основе пароля и затраченных тактов на предыдущую.
     
  9. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    да надо...процедура потом зашифруется в нех редакторе....а мне надо узнать каким образом ее моан разшифровать/шифровать
     
  10. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    ну ладненько всем спс за ответи...я вроде так разобрался в чем дело))...дальше сам буду думать как и что по єтому поводу...так что тему можна закрить....
     
  11. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    XshStasX
    Когда брякнется по паролю, она будет уже расшифрована. Адрес точки станет точно известен и вы низачто не сможете както функу свою в дальнейшем морфировать, тк у вас жесткий лимит по месту. Потом можно вычислить ваш пароль или пропатчить и сдампить на диск или найти ващ декриптор или.. Спрашивается, зачем мучиться? Если все равно и надо хоть чтото для виду, то просто поксорьте строки.