www.ejtag.ru

Форум поддержки программ "Tiny Tools" (CPLD/USB-S/USB-F/USB-SPI EJTAG Tiny Tools)


Расширенный поиск
Текущее время: 05 дек 2016, 19:31

Часовой пояс: UTC + 7 часов




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 18 дек 2015, 17:30 
Не в сети

Зарегистрирован: 18 ноя 2011, 05:15
Сообщения: 28
Страна: Ukraine (ua)
Благодарил (а): 20 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Новичек
Спасибо автору за программатор. Пользуюсь ими(SPI и NAND\NOR) давно.
В данных программаторах для визуально осмотра и редактирования дампа используется компонентик KHexEditor
(http://www.tkweb.eu/en/delphicomp/khexeditor.html) но расширять его возможности это уже
другая программа со всеми вытекающими глюками и проблемами тем более если есть другие "нормальные" HEX редакторы.
Но с другой стороны можно автоматизировать некоторые однотипные действия путем добавление внешний dll(plugin).
Плюсы в том что не нужно постоянно дергать автора для добавления тех или иных возможностей а делать плагин самому.

Сделать это относительно просто. Прошу Вас ув. sergiuss в окне HEX редактора добавить кнопочку а в ней:

Код:
uses
   dynlibs; // Для либы
....
type
    KHexEditor1: TKHexEditor;

   
procedure TForm1.ToolButton2Click(Sender: TObject);
type
  OrigDump = TMemoryStream;
  PMemoryStream = ^TMemoryStream;

  // типы используемые в DLL
  FuncGetPChar = function : PChar; stdcall;
  ProcOnly = procedure(App : TApplication; Data : PMemoryStream ); stdcall;
var
  MyOrigStream: OrigDump;
  lib: TLibHandle;
  myGetName : FuncGetPChar;
  myGetVer  : FuncGetPChar;
  myShowExt : ProcOnly;

  Nam : String;
  Ver : String;
begin
  MyOrigStream:= OrigDump.Create;
  KHexEditor1.SaveToStream(MyOrigStream);

  lib := LoadLibrary('project2.dll');

  Pointer(myGetName) := GetProcedureAddress(lib, 'GetExtentionName');
  Pointer(myGetVer)  := GetProcedureAddress(lib, 'GetExtentionVersion');
  Pointer(myShowExt) := GetProcedureAddress(lib, 'RunExtention');

  If Assigned(myGetName) Then
     Nam := myGetName();

  If Assigned(myGetVer) Then
     Ver := myGetVer();
  //Application.MessageBox(PChar('Name=='+Nam + #13#10'Ver == '+Ver),
  //                       'Result from DLL call');

  myShowExt(Application, Addr(MyOrigStream));

  MyOrigStream.Position:=0;
  KHexEditor1.LoadFromStream(MyOrigStream);// правленый дамп

  FreeLibrary(lib);
  MyOrigStream.Free;
end;



Код проекта dll
Код:
library project2;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Classes, Forms, Unit2
  { you can add units after this };

{$R *.res}

exports
  GetExtentionName name 'GetExtentionName',
  GetExtentionVersion name 'GetExtentionVersion',
  RunExtention name 'RunExtention';

begin
  Application.Initialize; ////////
end.

и так сказать демо пример:
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, ComCtrls;

type

  { TMyDllForm }
  PMemoryStream = ^TMemoryStream;

  TMyDllForm = class(TForm)
    Button_save: TButton;
    Button_read: TButton;
    Edit_MAC: TEdit;
    Edit_PIN: TEdit;
    Label_PIN: TLabel;
    Label_MAC: TLabel;
    PageControl1: TPageControl;
    TabSheet_tplink: TTabSheet;

    procedure Button_readClick(Sender: TObject);
    procedure Button_saveClick(Sender: TObject);

  private
    { private declarations }
    Mem : PMemoryStream;
  public
    { public declarations }
  end;

function GetExtentionName: PChar; stdcall;
function GetExtentionVersion: PChar; stdcall;
procedure RunExtention (App : TApplication; Data : PMemoryStream ); stdcall;

var
  ExtData : PMemoryStream;
  ExtDllForm : TMyDllForm;

implementation

{$R *.lfm}
var
  origmac: array[0..5] of Byte;
  origpin: array[0..7] of Byte;

function GetExtentionName: PChar; stdcall;
begin
  Result := PChar('Test extention for HexEditor');
end;

function GetExtentionVersion: PChar; stdcall;
begin
  Result := PChar('1.0.0.0');
end;

procedure RunExtention (App : TApplication; Data : PMemoryStream ); stdcall;
begin
 // Application := App;
  ExtDllForm := TMyDllForm.Create(App.MainForm);
  ExtDllForm.Mem := Data;
  ExtDllForm.ShowModal;
  ExtDllForm.Free;
end;

{ TMyDllForm }

procedure TMyDllForm.Button_readClick(Sender: TObject);
var
  i : Integer;
begin
  Mem^.Position:=$1FC00;
  MEM^.ReadBuffer(origmac,6);
  Mem^.Position:=$1FE00;
  MEM^.ReadBuffer(origpin,8);

  for i:=0 to 5 do ExtDllForm.Edit_MAC.Text:=ExtDllForm.Edit_MAC.Text+IntToHex(origmac[i],2);
  for i:=0 to 7 do ExtDllForm.Edit_PIN.Text:=ExtDllForm.Edit_PIN.Text+Char(origpin[i]);
end;

procedure TMyDllForm.Button_saveClick(Sender: TObject);
var
  i:Integer;
  function HexToInt(HexNum: string): LongInt;
  begin
    Result:=StrToInt('$' + HexNum) ;
  end;
begin
  origmac[0]:=HexToInt(ExtDllForm.Edit_MAC.Text[1]+ ExtDllForm.Edit_MAC.Text[2]);
  origmac[1]:=HexToInt(ExtDllForm.Edit_MAC.Text[3]+ ExtDllForm.Edit_MAC.Text[4]);
  origmac[2]:=HexToInt(ExtDllForm.Edit_MAC.Text[5]+ ExtDllForm.Edit_MAC.Text[6]);
  origmac[3]:=HexToInt(ExtDllForm.Edit_MAC.Text[7]+ ExtDllForm.Edit_MAC.Text[8]);
  origmac[4]:=HexToInt(ExtDllForm.Edit_MAC.Text[9]+ ExtDllForm.Edit_MAC.Text[10]);
  origmac[5]:=HexToInt(ExtDllForm.Edit_MAC.Text[11]+ ExtDllForm.Edit_MAC.Text[12]);

  Mem^.Position:=$1FC00;
  Mem^.WriteBuffer(origmac,6);

  for i:=0 to 7 do origpin[i]:= Ord(ExtDllForm.Edit_PIN.Text[i+1]);

  Mem^.Position:=$1FE00;
  Mem^.WriteBuffer(origpin,8);
end;

end.



P.S. Приложил архив с исходниками длл


У вас нет необходимых прав для просмотра вложений в этом сообщении.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 дек 2015, 18:27 
В сети
Администратор
Аватара пользователя

Зарегистрирован: 15 окт 2011, 14:15
Сообщения: 4127
Фото: 64
Откуда: Красноярск
Страна: Russia (ru)
Благодарил (а): 180 раз.
Поблагодарили: 3855 раз.
Пункты репутации: 287
СвойСвойСвой
1. Сначала нужно написать/придумать обработчик ошибок. (ошибка в длл рушит всю программу).
2. Размеры дампа в редакторе тоже надо учитывать. (в примере без открытия файла - крах).
3. Плагин придётся как-то идентифицировать в ПО и проверять его надёжность (myShowExt(Application, Addr(MyOrigStream)); = делай с приложением все, что угодно).

Так что тут еще работы валом.



За это сообщение автора sergiuss поблагодарил: hacjka (18 дек 2015, 19:49)
  Рейтинг: 3.45%
Вернуться к началу
 Профиль Фотоальбом  
 
СообщениеДобавлено: 18 дек 2015, 19:16 
Не в сети

Зарегистрирован: 18 ноя 2011, 05:15
Сообщения: 28
Страна: Ukraine (ua)
Благодарил (а): 20 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Новичек
Я привел пример, понятное дело что код без защиты от дурака.
Мне сам вердикт интересный. Да\нет?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 дек 2015, 19:31 
В сети
Администратор
Аватара пользователя

Зарегистрирован: 15 окт 2011, 14:15
Сообщения: 4127
Фото: 64
Откуда: Красноярск
Страна: Russia (ru)
Благодарил (а): 180 раз.
Поблагодарили: 3855 раз.
Пункты репутации: 287
СвойСвойСвой
Каждый плагин нужно будет проверять самому и шифровать его, такую дыру оставлять нельзя неприкрытой.



За это сообщение автора sergiuss поблагодарил: hacjka (18 дек 2015, 19:49)
  Рейтинг: 3.45%
Вернуться к началу
 Профиль Фотоальбом  
 
СообщениеДобавлено: 20 дек 2015, 08:01 
Не в сети

Зарегистрирован: 18 ноя 2011, 05:15
Сообщения: 28
Страна: Ukraine (ua)
Благодарил (а): 20 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Новичек
Что и требовалось доказать. Нет что-бы просто сказать нет.
sergiuss писал(а):
Каждый плагин нужно будет проверять самому и шифровать его, такую дыру оставлять нельзя неприкрытой.

Смысл тогда в плагине\наг если я не смогу без вас добавить или изменить .... ?
Тему можно закрывать. Единомышленников я тут не найду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 дек 2015, 10:27 
В сети
Администратор
Аватара пользователя

Зарегистрирован: 15 окт 2011, 14:15
Сообщения: 4127
Фото: 64
Откуда: Красноярск
Страна: Russia (ru)
Благодарил (а): 180 раз.
Поблагодарили: 3855 раз.
Пункты репутации: 287
СвойСвойСвой
Так Вы просто не хотите никому свои плагины показывать? Тогда тема действительно закрыта.


Вернуться к началу
 Профиль Фотоальбом  
 
СообщениеДобавлено: 20 дек 2015, 23:34 
Не в сети

Зарегистрирован: 25 авг 2013, 04:33
Сообщения: 149
Страна: Russia (ru)
Благодарил (а): 6 раз.
Поблагодарили: 26 раз.
Пункты репутации: 6
Пользователь
Он на них(плагинах) думал сказочно разбогатеть!
Очевидно либо человек реально далек от защиты программ, либо по детски наивен(что вряд ли), либо хитрит.
Вообще - поддержка программаторов - это не игра в одни ворота! вы помогаете автору - он помогает вам! Совершенно ничего(кроме личного жлобства) не мешает вам связаться в личке с автором программатора,предложить имеющиеся данные и помощь в проверке тестовой версии. И вам хорошо, и ему. Если что-то сильно прибыльное - то можно и договориться чтобы человек какое то время не добавлял это в публичную версию. А начинать требовать чтобы вам дали и код (был тут один такой пассажир) и еще схему с печаткой( такие пассажиры были в другом изделии) это уже наглость.

Хотите сделать свое - делайте. Только сами и с нуля. Иначе или работайте пополам на пополам с данными и тестами , либо не просите ничего вообще, а смиренно ждите - когда это появится в поддержке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 дек 2015, 13:55 
Не в сети

Зарегистрирован: 18 ноя 2011, 05:15
Сообщения: 28
Страна: Ukraine (ua)
Благодарил (а): 20 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Новичек
balu_dark, Вы, для начала, хоть бы почитали что такое плагины. Это во первых. Во вторых речь о каких то "сказочных богатствах" вообще не идет. И самое главное, где Вы увидели что я просил какието исходные коды ? Повторюсь специально для вас,- то что я предлагаю это расширение возможности отдельного компонента программатора !!! Вы думаете я не просил автора о не публичной версии ? Просил конечно. Но Вы с какогото перепугу перевели все в денежный вопрос.

sergiuss писал(а):
Так Вы просто не хотите никому свои плагины показывать? Тогда тема действительно закрыта.

Стоп. Погодите. Пока и нечего показывать.
Мое виденье этой темы было таким:
1. Сделать опрос какие действия можно\нужно\хотелось бы автоматизировать в хекс редакторе.
2. Кто может "сделать" сам предлагает свои версии и.д.

Безопасность ... я за. И где собственно я писал что против ? Прошу вас помочь как правильно и безопасно передать указатель на дамп хекседитора в dll ? При этом оставив возможность добавлять что-то свое. Если это не возможно тогда да. Можно зарывать тему.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 дек 2015, 14:12 
В сети
Администратор
Аватара пользователя

Зарегистрирован: 15 окт 2011, 14:15
Сообщения: 4127
Фото: 64
Откуда: Красноярск
Страна: Russia (ru)
Благодарил (а): 180 раз.
Поблагодарили: 3855 раз.
Пункты репутации: 287
СвойСвойСвой
Цитата:
Смысл тогда в плагине\наг если я не смогу без вас добавить или изменить .... ?

На этом все и закончится.


Вернуться к началу
 Профиль Фотоальбом  
 
СообщениеДобавлено: 21 дек 2015, 15:01 
Не в сети

Зарегистрирован: 18 ноя 2011, 05:15
Сообщения: 28
Страна: Ukraine (ua)
Благодарил (а): 20 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Новичек
Понятно. Спасибо. Так бы сразу и написали.
P.S. С наступающими новогодними.
P.S.2 Добавьте возможность топикстартеру на форуме закрывать тему.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 7 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group (блог о phpBB)
Русская поддержка phpBB
phpBB Shop