Progeras - Вы шутник однако, Вы просите исходники со сменой точки входа, при том что Вы ничего не сделали для людей сидящих здесь? Вы думаете такой исход ник на дельфинчике стоит 50-100 рублей? Мне кажется это слишком самонадеянно. Ну а если по теме то в PE-файлах описывается специальное поле в PE-заголовке, в котором лежит RVA-(относительный виртуальный адрес) EP, с которого как бы и начинается выполнение. но мы то знаем, что Entry Point) выполняется не первой, а последней. До нее система загружает все статик библиотеки и выходят на испо лнение через Dllmain. TLS-k’и также получают управление до выполнения EP, кот орую Вы собираетесть сменить, только не понятно какой именно участок вашего ко да потеряет управление и EP будет некому вызывать, так как она будет указывать неизвестно на какой код. Вот только Вы не уточняете кто у Вас этот "Маша расте ряша", толи Dllmain или может быть TLS-callback. #************************************************* #define PE_off 0x3C // PE magic word raw offset #define EP_off 0x28 // relative Entry Point filed offset BYTE* GetEP() { static BYTE* base_x, *ep_adr; static DWORD pe_off, ep_off; char buf [_MAX_PATH]; // obtain exe base address GetModuleFileName(0, buf, _MAX_PATH); base_x = (BYTE*) GetModuleHandle(buf); pe_off = *((DWORD*)(base_x + PE_off)); ep_off = *((DWORD*)(base_x + pe_off + EP_off)); ep_adr = base_x + ep_off; // RVA to VA return ep_adr; } #************************************************* Это простейший пример GetEP(), но только боевая функция чуть чуть посерьезнее, так как осуществляет такую огромную кучу всяких проверок. Но концепция приведе нная выше правильная. И конечно же в данном случае Вы спрячете много чего от отладчика, но бряк на ntdll, несработает, нет, нет, и еще раз нет, он пойдет лесом, так как адрес EP у нас совершенно другой. Да да, самый яркий пример, это когда парень в воскресенье подрывается с кровати и говорит, что емуу надо сроч но на работу, а потом не звонит. если быть подробнее, то ОС никак не информиру ет отладчик о передаче управления на EP и отладчик должен париться над этим сам остоятельно, а не просить об этом на форуме, но так как отладчик идет лесом, я и пишу свой обоснованный ответ, почему он туда пошел. Дизасемблирование тут то же мало поможет так как они(дизассемблеры) сразу начинают с ЕР. а вот тут-то без определения реальной ЕР не куда! Некоторые вири используют довольно хитрый трюк, они как акробаты в цирке прыгают jump из TLS-callback’а, то есть, на сам ом то деле они выполняют TLS-callback но без возврата управления. И в итоге на ша любимая, красивая, оригинальная(это я про себя) ЕР идет к бабушке с пирожка ми лесом и могут эти пиражки содержать что угодно (это я про ЕР). НО!!! НО!!!! Начиная с XP, системный загрузчик выполняет ряд проверок (дабы не дать мистеру смиту заразить матрицу)- и файлы, с точкой останова которые вылетают за преде лы страничного образа, он просто поылат и не грузит в память. Хотя тут все ут рированно, даже если бы он их грузил,то любой более менее нормальный авер, за- рычал бы на вашу безобидную антиотладочную систему, так как такая ЕР уж очень косо на него смотрит. Ну и какой смысл безобидную программу выдавать за вирус? Тогда конечно же лучше всего закинуть ЕР в безобидный код, а из TLS-callback’а совершить переход на тело. #************************************************* EntryPoint: XOR EAX, EAX PUSH EAX CALL d, ds:[ExitProcess] … PassowrdBody: … … … TLS_Callback1: ADD d, ds:[ESP+magic_offset], offset VirusBody — offset EntryPoint RETN 0Ch #************************************************* А вот после такого в США выбирают в президенты наштх афроамериканских друзей. Я не рассистка конечно же, но просто в первом случае мы бы имели позорный jump из TLS-callback’а. который бы потом пришлось маскировать с помощью математичес ких преобразований, но целевой адрес перехода декодируется однозначно и палит. А во втором случае TLS-callback добавляет какое-то значение к некоторой ячейке памяти, лежащей в области стека, и возвращает управление системе. Человек с от ладчиком чисто теоретически может трассировать миллионы тонн машинных инструк ций, ответственных за инициализацию файла. Он может даже дождаться момента пе редачи управления на точку входа или хотя бы область памяти, не принадлежащую системе, а находящуюся в границах PE-файла или одной из динамических библиотек. И тогда товарищ с удивлением обнаружит, что точка входа каким-то магическим об разом ушла в запой! Вот только трассировать придется долго. А Аверы ничего на скажут вашей маленькой приблуде, так как они не могут трассировать на живой ОС. Откуда им знать, что именно находится в данной конкретной ячейке памяти? А что, собственно говоря, там находится и как оно туда попадает? Только стоить это будет не 50 и не 100 рублей.
легко. В разделе uses пишешь название юнита, содержащего эту форму. Например, если она находится в Unit1 пишешь uses Unit1.dcu; вот и всё=)
2 Progeras там шутк 50 строк кода на асме для заражения шелкодом. И еще дохера строк шелкода который будет спрашивать пароль. ибо гемор с созданием формамы на API большой. При том что код должен быть позиционно независимый. Добавление новой секции не всегда правильный код. При сливании секций при компиле в Си бывает получается что места нету под вставку новой таблицы для своей секции. (пример - калькулятор) Кисто инфектор - как раз и будет стоить копейки, там нет ничего сложного, а вот сам шелкод - никто ипаться не будет из-за этого, т.к. возьни много.
у DBGrid не появляется горихонтальный скролбар.. хотя даные не все на экране... как его "включить" ? )
в FormCreate попробуй установить свойство показа скрол бара. SetScrollRange(DBGrid1.Handle,SB_HORZ,0,100,true);
PASCAL PASCALВот задание:Билет называют «счастливым», если в его номере сумма первых трех цифр равна сумме последних трех. Подсчитать число тех «счастливых» билетов, у которых сумма трех цифр равна 13. Номер билета может быть от 000000 до 999999. Вот что я пока написал: Code: program tt; const a=001;b=009; var m:array[a..b] of integer;i,c:integer; begin for i:=a to b do m[i]:=i; for i:=a to b do write(m[i]); end. Всё, сам берёт и заполняет массив и выводит его. Но как зделать чтобы число 001 не преабразовывалось просто в однёрку ?
если я не ошибаюсь и правильно понял задачу (посчитать кол-во счастливых билетов, у которых сумма первых трёх цифр равна сумме последних трёх цифр и равна 13), то ответ это.. а нет. ошибаюсь. ща поправлю ((C из 15 по 2) - 3*(С из 4 по 1 + C_3 по 1 + C_2 по 1 +C_1 по 1))^2 = 75^2 вот так правильно )
Ты ппц спросил.... Для начала, тебе надо научиться работать с треем), ну а далее затолкать функцию/код (сворачивания в трей) в какое нить событие. Ответ на уровне твоего вопроса
юзай гугл!!!!!!! Delphi World (5005 статей по Delphi) статья "Иконка на TrayBar - пример" Там скрытие в трей(HideItemClick(Self)) делается при сворачивании формы. Сделай ты еще глобальную переменную. типа flag=false; и при событии OnPaint если flag=false пряч форму HideItemClick(Self); и делай flag=true; Это сделает так чтобы при первой прорисовке прожка скрылась. Хотя можно помудрить и в dpr файле чтобы форма не показывалась с самого начала и при OnCreate вставляешь HideItemClick(Self) но нужно тогда убрать скрытие формы
2 Zitt попробуй переопределить методы этого компонента с созданием нового но с обработкой onpaint где будет показываться скролбар. Code: type TScrollBarDBGrid = class(TDBGrid) protected procedure Paint; override; end; procedure register; implementation procedure register; begin RegisterComponents('Samples', [TScrollBarDBGrid]); end; procedure TScrollBarDBGrid.Paint; begin SetScrollRange(Handle, SB_VERT, 0, 100, false); SetScrollRange(Handle, SB_HORZ 0, 100, false); или ShowScrollBar(Handle, SB_HORZ, true); ShowScrollBar(Handle, SB_VERT, true); inherited; end; как вариант попробуй код, но не уверен что будет пахать Code: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids; type TForm1 = class(TForm) DBGrid1: TDBGrid; Button1: TButton; procedure FormCreate(Sender: TObject); private FDBGridWndProc: TWndMethod; procedure DBGridWndProc(var Msg: TMessage); { Private declarations } public FShowHoriz: Boolean; FShowVert: Boolean; { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure Tform1.DBGridWndProc(var Msg: TMessage); begin ShowScrollBar(DBGrid1.Handle, SB_HORZ, FShowHoriz); ShowScrollBar(DBGrid1.Handle, SB_VERT, FShowVert); FDBGridWndProc(Msg); end; procedure TForm1.FormCreate(Sender: TObject); begin FShowHoriz:=True; FShowVert:=True; FDBGridWndProc:=DBGrid1.WindowProc; DBGrid1.WindowProc:=FDBGridWndProc; end; end. протестить не могу т.к. под рукой нет никакой БД
Скажите пожалуйста как в Pascal можно сравнить 2 даты (формат дд-мм-гггг)? Нашёл в гугле что в Delphi за это отвечает модуль DateUtils, но в Pascal его нет =(
ммм... а как именно сравнить?! что получить надо? Разницу в кол-ве дней, месяцев, лет или чего?! или просто сравнить true or false?!
2 s.p.a.m - последовательносять команд InternetOpen InternetConnect FtpPutFile InternetCloseHandle описание и пример работы каждой функции есть в 5005 статей по делфи (Delphi World)
2 Kuzya так открой в делфи этот модуль и погляди как сделано это там. Там в основном это примитивные функции которые можно свести к паскелевским довольно просто.