|
Aha! Como prometido, o henix
foi portado para linux e seu code em C foi
aberto para que voce possa fazer as mudancas e melhoras nele. Mas tambem
para facilitar a criacao de novos kernels para ele.
O henix voce encontra em struck.8m.com, tanto o para dos(pascal) qto
para linux(c).
Neste texto vou dar as dicas para fazer novos kernels e variantes.
Topicos
#######
1. Introducao
2. Editando diretorios
3. Editando Arquivos
4. Editando Usuarios
5. Editando Programas
6. Ultimas Palavras
Introducao
##########
Para alterar
kernels do henix, soh eh preciso editar os headers:
dir.h - Responsavel
pelos diretorios;
cat.h - Responsavel pelos arquivos;
kernel.h - Responsavel por comandos e contas;
Editando Diretorios
###################
Arquivo:
dir.h
Ha 3 coisas a serem editadas para criar novos diretorios:
1. Caminho+Nome do dir;
2. Conteudo;
3. Numero total de diretorios.
Vamos por
partes...
A estrutura q suporta os diretorios do henix eh:
struct henixdir
{
char *name;
char *count;
};
A estrutura
editada sera' dirs[]. Veja o exemplo:
{"/etc",
"/etc\n"
"-rw-r--r-- 1 root root 638 mar 10 05:38 passwd\n"
"-rw-r--r-- 1 root root 382 mar 10 05:37 group\n"
},
O Caminho+Nome
do diretorio eh a char *name "/etc". Sera para onde voce
direcionara o comando "cd" caso queira seguir para esse diretorio.
O Conteudo eh a char *count. Sera o que sera exibido com o comando ls.
Depois de compilado fikaria assim:
[struck@henix]$
cd /etc
[struck@henix]$ ls
/etc
-rw-r--r-- 1 root root 638 mar 10 05:38 passwd
-rw-r--r-- 1 root root 382 mar 10 05:37 group
[struck@henix]$
Barbada neh?
O numero total de diretorios deve ser mudado em "#define TOTAL_DIRS"
toda a vez que um diretorio for adicionado.
Nota1: C
por exemplo vc for criar um diretorio "/var/log", deve ser
criado antes o diretorio "/var". E o conteudo do "/",
"/var" e "/var/log"
devem ser alterados para indicar que o diretorio existe. Caso contrario
o
diretorio fikaria invisivel.
No conteudo de "/" deve estar indicado o "/var";
No conteudo de "/var" o "/var/log";
E no conteudo de "/var/log" o seu proprio conteudo.
Nota2: Na
versao atual do henix (qdo este texto foi escrito) ele nao
suporta "cd .." entao nao eh necessario que "." e
".." sejam adicionados
no conteudo dos diretorios.
Nota3: Caso
algum diretorio tenha permissao rwx------. A msg de erro
deve ser colocada no conteudo deste diretorio: "ls: Permission denied\n".
Editando
Arquivos
#################
Arquivo:
cat.h
A edicao de arquivos eh semelhante a de diretorios.
A estrutura de arquivos do henix eh:
struct henixfile
{
char *name;
char *count;
};
Veja o exemplo
de um arquivo:
{"/tmp/henix",
"sh: henix: Is a binary\n"
},
O nome do
arquivo fika no char *name. Eh o que sera usado pelo comando
"cat" para verificar c um arquivo existe ou nao.
O conteudo fika em char *count. Eh o que sera exibido pelo comando "cat"
caso o arquivo exista. Note que msgs de erro podem ser colocadas no
conteudo. Neste exemplo mostrei uma saida para qdo alguem quizer ler um
programa.
Por fim, altere o numero em "#define TOTAL_FILES" de acordo
com o
numero total de arquivos.
Nota: O arquivo
criado deve ser adicionado no conteudo do seu diretorio
para que ele nao fique invisivel.
Editando
Usuarios
#################
Arquivo:
kernel.h
O henix atual possui um limite para 3 usuarios. Entao voce nao podera
adicionar mais aos atuais, somente altera-los. Futuramente isso sera
corrigido.
A estrutura de usuarios eh:
struct users
{
int n;
char *name;
char *pass;
int id;
char *home;
};
Veja o exemplo
de uma conta padrao do henix:
{1,"struck","cheat",1337,"/home/struck"},
1 - Numero
q vai de 0 a 2 para mostrar a posicao da usuario;
"struck" - Nome do usuario;
"cheat" - Senha;
1337 - UID;
"/home/struck" - Diretorio home.
Barbada!!!
Editando Programas
##################
Arquivo:
kernel.h
Existe uma funcao especial criada para programas que podem variar de
kernel para kernel. A seguinte funcao:
int other_cmd(char
cmd[CMD_LEN], char pwd[CMD_LEN]);
Para editar
comandos, voce deve saber um minimo de programacao em C.
cmd eh a string onde o comando entrado e' gravado.
pwd eh o diretorio onde o comando foi executado.
Veja um exemplo
de programa:
if(!strcmp(cmd,"./test")
&& !strcmp(pwd,"/tmp")) {
printf("TESTE!TESTE!TESTE!\n");
}
Pow! Nao
vo fika dando aulas de C. Entao de uma estudada c vc nao
entendeu o code acima.
O pwd deve ser usado caso seja um programa fora dos diretorios "/bin"
e
"/sbin". Caso ele esteja nestes diretorios, a verificacao do
diretorio nao
precisa ser feita.
Nota: Nao
c esqueca de alterar o conteudo dos diretorios para exibir
que o programa existe.
Ultimas Palavras
################
Ok. Esse
texto foi feito apenas para introduzir a programacao de
kernels nas 1as versoes do henix for linux. Mas nao nos responsabilizemos
caso
voce venha a utilizar um kernel codeado por segundos e este esteja levando
um trojan ou backdoor ahi vc se fu... analize bem antes
|