ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

24.05.2007, 12:49
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Delphi. Простая, но очень полезная функция (при написании игр, искусственных интеллектов, эмуляторов игровых автоматов и т.д.). Функция идентична random: boolean, только с параметром percent, (0 <= percent <= 100) - вероятностью истинного результата. Например, probrandom(80) вернет true с вероятностью 80%.
Код:
function probrandom(percent: integer): boolean;
begin
result := random(100) < percent;
end;
З.Ы. Не забываем инициализировать генератор случайных чисел (randomize)
Последний раз редактировалось _Great_; 26.05.2007 в 20:03..
Причина: Кнопку "Редактировать" придумали не для вас, наверное
|
|
|

31.05.2007, 22:16
|
|
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме: 4172659
Репутация:
646
|
|
Код:
const
alf = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function power(x,y: integer): int64;
begin
if x = 0 then
result := 0
else
result := trunc(exp(ln(x)*y));
end;
function fromdec(d: int64; s: integer): string;
begin
if (d < s) then
result := alf[d + 1]
else
result := fromdec(d div s,s) + alf[d mod s + 1];
end;
function todec(d: string; s: integer): int64;
begin
if length(d) = 1 then
result := pos(d,alf) - 1
else
result := (pos(d[1],alf) - 1) * power(s, length(d)-1) + todec(copy(d,2,length(d)-1),s);
end;
Delphi. Системы счисления. 2 <= s <= 36
З.Ы. Рекурсия рулит
|
|
|

31.05.2007, 23:40
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
И все-таки, как написано в 1 посте, "Не стоит превращать тему в свалку исходников, выбирайте наиболее интересные и полезные участки кода."
Выбирайте действительно ИНТЕРЕСНЫЙ и НЕОБЫЧНЫЙ код, какието нестандартные приемы там и прочее. Банальщина типа реализации CopyFile не очень нужна.
|
|
|

22.06.2007, 03:36
|
|
Познавший АНТИЧАТ
Регистрация: 09.06.2006
Сообщений: 1,359
Провел на форуме: 5301021
Репутация:
1879
|
|
Выводит содержимое файла в шестнадцатиричном формате и в виде ASCII кодов.
Код:
#include <iostream>
#include <fstream>
#include <cctype>
#include <iomanip>
using namespase std;
int main(int argc, char *argv[])
{
if(!argc=2) {
cout << "USAGE: Display"
rerutn 1;
}
ifstream in(argv[1], ios::in | ios::binary);
if(!in) {
cout << "Cannot open input file.\n";
return 1;
}
register int i, j;
int count = 0;
char c[16];
cout.setf(ios::uppercase);
while(!in.eof()){
for(i=0; i<16 && !in.eof(); i++) {
in.get(c[i]);
}
if(i<16) i--;
for(j=0; j<i; j++)
cout << setw(3) << hex << (int) c[j];
for(; j<16; j++) cout << " ";
cout << "\t";
for(j=0; j<i; j++)
if(isprint(c[j])) cout << c[j];
else cout << ".";
cout endl;
count++;
if(count=16) {
count=0;
cout << "Press ENTER to continue: "'
cin.get();
cout << endl;
}
}
in.close();
return 0;
}
|
|
|

23.06.2007, 19:15
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
штука наверняка не новая, но новичкам может быть пригодится: если возникает трудность с использованием модульности (дополнительных длл-плагинов) в своей программе, а именно в обработке плагином, например, своего объекта (так как по-хорошему мы не знаем как он представляется в памяти и видимо не должны знать по причине того, что плагин может быть написан абсолютно на чем угодно), то можно написать свою дополнительную длл, которая имеет набор функций по созданию\обработке обьекта (да хоть переменной какой-то структуры) в пространстве процесса из которого происходила загрузка сего и ее использовать как плагинной так и основной частью программы.
|
|
|

23.06.2007, 19:56
|
|
Leaders of Antichat
Регистрация: 25.01.2007
Сообщений: 341
Провел на форуме: 3372120
Репутация:
2565
|
|
Функция-шаблон считывания из потока n байт.
Написал специально для удобства работы с различными потоками в stl. Так, например, нет стандартного метода считывания n байт из объекта ifstream в string в stl.
Код:
template
<
typename InputIterator,
typename OutputIterator
>
void readn(InputIterator begin, InputIterator end, int n, OutputIterator out)
{
for(;n > 0 && begin != end;--n, ++begin, ++out)
{
*out = *begin;
}
}
|
|
|

24.06.2007, 14:29
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
Будь-то программирование на winapi, будь-то программирование на posix при создании многопоточного приложения одинаково часто возникает неудобство выраженное в виде невозможности стандартным образом передать своей функции через CreateThread/pthread_create более одного аргумента. Пример двух используемых функций по вин thread.c:
Код:
/*
thread.c by ZaCo
*/
#include <windows.h>
//вспомогательная функция-поток из которой вызываем запрашиваемую функцию
void * Thread(int * temp)
{
void * func=(void *)(*temp);//вызываемая функция
temp++; //переходим к следующему адресу
int num=*(int *)temp; //кол-во аргументов
int i;
temp+=num; //сдвигаемся просто до конца тк аргументы нужно передавать задом-наперед ;)
for(i=num-1;i>=0;i--,temp--)
{
int * param=*(int **)temp;//каждый раз получаем нужный адрес
_asm push param;
}
delete [2+num] (temp-1); //освобождаем память выделенную в NewThread
_asm call func; //вызываем функцию
return NULL;
}
//функция создания потока: func - функция, num - кол-во аргументов-указателей после num
void * NewThread(void * func, unsigned int num, ...)
{
int * temp=new int[2+num]; //temp - массив адресов которые в итоге нужно передать функции-потоку
memcpy(temp,&func,(2+num)*sizeof(void*));
CloseHandle(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,temp,0,NULL));
}
//
Работа в основной программе:
Код:
#include <stdio.h>
void * NewThread(void *, unsigned int, ...);
void * Thread(int *);
#include "thread.c"
void * func(int * a,char * b,int * c, char * s)
{
printf("%d+%d+%d+%s\n",*a,*b,*c,s);
return NULL;
}
int main(int argc, char* argv[])
{
int a=5,b=7,g=4;
char s[]="it's xek!";
NewThread(func,4,&a,&b,&g,&s[0]);
Sleep(1000);
return 0;
}
|
|
|

27.06.2007, 15:15
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Для Microsoft Visual Studio 7 (она же 2003 .NET):
Если нет желания таскать за собой рантайм в том или ином виде, а при его отключении линкер орёт на неразрешенные ссылки на __chkstk, ___securitycookie и @__security_check_cookie@4, можно обойтись следующей реализацией этого (писал сам  )
Код:
// будем тока выделять место в стеке под переменные
extern "C" __declspec(naked) void _chkstk()
{
__asm
{
// Enter: EAX = size
xor ebx, ebx
xchg [esp], ebx // запоминаем адрес возврата
add esp, 4 // удаляем его
sub esp, eax // выделяем место
push ebx // кладем адрес возврата на место и возвращаемся
retn
}
}
// любое число, в принципе, но чтобы оно было "случайное", а не вида 00010000.
// хороший вариант - 19237845 или BACBBAFD или что-нибудь в этом роде
extern "C" DWORD_PTR __security_cookie = 0x5F8E34B0;
// проверка на переполнение буфера
extern "C" void _fastcall __security_check_cookie(DWORD_PTR cookie)
{
if(__security_cookie != cookie) // можно добавить ченить более умное при ошибке
__asm int 3;
}
Последний раз редактировалось _Great_; 27.06.2007 в 15:18..
|
|
|

15.08.2007, 11:58
|
|
Leaders of Antichat
Регистрация: 25.01.2007
Сообщений: 341
Провел на форуме: 3372120
Репутация:
2565
|
|
Stl/c++
Преобразование из string в int с контролем целостности
Код:
bool to_number(char const* beg, int sz, int& num)
{
char* end = 0;
int tmp_num = ::strtol(beg, &end, 10);
if(end != beg + sz)
{
return false;
}
num = tmp_num;
return true;
}
use:
Код:
std::string value;
int num;
if (!to_number(value.c_str(), value.size(), num))
return false;
|
|
|

07.09.2007, 01:00
|
|
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме: 5128756
Репутация:
2032
|
|
что правильнее при написании malware и почему: сначала полностью писать тулзу, а потом править ее так, чтобы не детектилась ав или брать хелло ворлд и добавлять к нему по одной функции на каждом шаге проверяя, что наша прога не палится?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|