• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

inginheiiro

ZwamePAP

52 mensagens neste tópico

Titulo do Projecto: ZwamePap

Líder do Projecto: inginheiiro

Descrição

Surgiu como um desafio proposto no site Zwame. O Objectivo seria através de código aceder ao site Zwame (VBulletin), autenticando-se e extraindo paginas como um user autenticado.

Basicamente criei uma data de metodos que permite :

a) Entrar no Zwame e no Portugal-a-Programar (SMF) como um utilizador

:thumbsup: Já autenticado, descarregar qq url de um dos sites, convertendo esse mesmo html para SGML para posterior parser.

c) Existem ainda alguns metodos adicionais (Wrappers) para o site Zwame, que permitem extrair conteudo tais como:

[*]Obter as Mensagens Privada enviadas/recebidas

[*]Obter a lista de foruns

[*]Obter a lista de subscrições

Objectivo do post:

Decidi colocar aqui a DLL (protegida) caso alguém com credebilidade queira fazer algo útil com a mesma.

Eu simplesmente a desenvolvi como desafio mental para tentar contornar o sistema de autenticação/protecção do SMF e VBulletin.

DLL:http://www.megaupload.com/?d=ETIEMC28

Requesitos: Framework 3.5

Uso Zwame:




ZwameLogin l = new ZwameLogin ("eu", "querias tu saber");
using (ZwameWebRequest wr = new ZwameWebRequest(l))
{
            /* Retorna para um DataSet todas as mensagens privadas. */
            DataSet ds = wr.LoadZwamePrivateMessages();

/* Retorna uma pagina . */
XmlDocument doc = SgmlLoadZwameUrl("http://forum.zwame.pt/")
}

Uso Portugal-a-Programar:




PapLogin p = new PaP.PapLogin("eu", "querias tu saber");
using (PapWebRequest wr = new PapWebRequest(p))
{
/* Retorna todos os posts novos do PaP . */
XmlDocument document = wr.SgmlLoadPaPUrl("http://www.portugal-a-programar.org/forum/index.php?action=unread");               
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Eu simplesmente a desenvolvi como desafio mental para tentar contornar o sistema de autenticação/protecção do SMF e VBulletin.

Ok, mas se calhar seria interessante ter uma coisa destas genérica para qualquer fórum, talvez suportando vários (os que fosse possível e que valesse a pena) scripts. Mas tudo bem, fizeste isto só com um objectivo que já está a cumprido, é só uma ideia.

E já agora, que "sistema de autenticação/protecção" é que estamos a falar? Estou curioso...

E a DLL está protegida em que sentido, ofuscada ou alguma cena do género? Só para saber mesmo, não faço intenções de tentar quebrar nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E já agora, que "sistema de autenticação/protecção" é que estamos a falar? Estou curioso...

E a DLL está protegida em que sentido, ofuscada ou alguma cena do género? Só para saber mesmo, não faço intenções de tentar quebrar nada.

basicamente é fazer o bypass da autenticação com um utilizador registado num dos foruns.

os sistemas de autenticação do SMF e Vbulletin são diferentes, mas ambos se baseiam em Cookies e hash's criptograficas.

A dll está obfuscada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes explicar melhor o que queres dizer com o "contornar" do sistema de autenticação?

Pelo que vi no código tens um local para inserir um utilizador e uma password, por isso de que maneira é que isto contorna esses mecanismos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes explicar melhor o que queres dizer com o "contornar" do sistema de autenticação?

Pelo que vi no código tens um local para inserir um utilizador e uma password, por isso de que maneira é que isto contorna esses mecanismos?

tenta através de código (Python | C | perl |Vb | etc) extrair (HTML) dum link do pap .

tenta obter as tuas mensagens privadas p.ex.

Forneçendo um login/password, a dll cria um cookie de autenticação que permite posteriormente, já autenticado, obter qq link dos sites.

O desafio é mesmo isto.

Se pesquisares um pouco (google) verás que não existem soluções de SSO para o Vbulletin ou SMF , para interligar com outros sistemas. Esta dll pode ser usada para isso p.ex.

/ing

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porquê converter o html para SGML para posterior parser?!?

O HTML já é um sub conjunto do SGML, e como tal é totalmente "parsável"...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Html, como sabes , é um "subconjunto" de SGML.

o objectivo principal é HTML->SGML->XML.

Este processo vai eliminar bad format tags do HTML, e garantir que um documento XML é sempre realizado.

resumindo

1)obtenho o HTML de um url

2)"Converto-o" para SGML.

3)Converto-o de SGML para XML e retorno um XMLDocument.

assim posso fazer o parse ao HTML como XML usando XLINQ p.ex.

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso dava para fazer umas aplicações bem porreiras a partir daí!

Bem fixe!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tá porreiro, sim senhor!

Bom trabalho.

thanks

Isso dava para fazer umas aplicações bem porreiras a partir daí!

Bem fixe!

pois dava.

Se alguém (com alguma credebilidade) estiver interessado num projecto para o PAP usando isto eu abro o código !

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenta através de código (Python | C | perl |Vb | etc) extrair (HTML) dum link do pap .

tenta obter as tuas mensagens privadas p.ex.

Não quero desvalorizar o trabalho até porque aparentemente está bem feito e bem estruturado.

Mas qual é a dificuldade ? O login nem tem Captcha :\ Por acaso nunca fiz para SMF nem para Vbulletin mas já fiz por exemplo para o email da minha Univ que até trabalha em HTTPS. Basta trabalhar o protocolo HTTP, no fundo é fazer o que o nosso browser faria caso o estivéssemos a usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...Basta trabalhar o protocolo HTTP, no fundo é fazer o que o nosso browser faria caso o estivéssemos a usar...

sim, é, numa analise imediata ao problema é isso que necessitamos de fazer...

na prática encontram-se alguns obstaculos interessantes.  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Html, como sabes , é um "subconjunto" de SGML.

o objectivo principal é HTML->SGML->XML.

Este processo vai eliminar bad format tags do HTML, e garantir que um documento XML é sempre realizado.

resumindo

1)obtenho o HTML de um url

2)"Converto-o" para SGML.

3)Converto-o de SGML para XML e retorno um XMLDocument.

assim posso fazer o parse ao HTML como XML usando XLINQ p.ex.

cumps

Bem, o HTML é também ele um sub-conjunto do XML...

Sinceramente, não vejo o que o SGML está ai a fazer, dado que podes fazer esse passo directamente para XML.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, o HTML é também ele um sub-conjunto do XML...

Sinceramente, não vejo o que o SGML está ai a fazer, dado que podes fazer esse passo directamente para XML.

se o HTML tiver tags mal formadas não consegues passar para XML. O Processo descrito "normaliza" bad HTML para posterior passagem para XML...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu compreendo o que o processo faz, mas se estás a normalizar HTML, podes muito bem assumir que o HTML é XML não normalizado e aplicas as correcções. No final tens XML e não passaste pelo SGML.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu compreendo o que o processo faz, mas se estás a normalizar HTML, podes muito bem assumir que o HTML é XML não normalizado e aplicas as correcções. No final tens XML e não passaste pelo SGML.

era mais trabalhoso procurar/aplicar correcções no HTML do que usar o processo/lógica implementado.

http://code.msdn.microsoft.com/SgmlReader

Como deves perceber, uma validação de um DTD feita de raíz é algo trabalhosa, embora existam soluções já orientadas para HTML Parsing http://www.majestic12.co.uk/projects/html_parser.php, embora algo (lenta) em comparação com a adoptada!

/cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pergunto aos moderadores:

Seria interessante (e dentro das regras) lançar um desafio do tipo :

Efectuar um bot automatico para o PAP, para descarregar novas mensagens recebidas.

que acham ?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mensagens privadas?

Visto que isso funciona com autenticação, por mim é na boa ;) Tu até és um utilizador conhecido da comunidade, eu confiava num programa feito por ti mesmo que me pedisse password, não iria suspeitar de ter algum "bicharoco" lá para dentro ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Visto que isso funciona com autenticação, por mim é na boa ;) ...de ter algum "bicharoco" lá para dentro ;)

lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só realças a parte má, e a parte em que digo que confio? ;)

Mas agora fora de brincadeiras, qual é o objectivo? Mostrar todas as mensagens? Mensagens privadas? Funcionar como leitor de feeds com acesso mas como tem login ter acesso às zonas ocultas a guests?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

achei piada ao bicharoco.

fazer uma api que faculte a possibilidade de desenvolver interfaces proprios para o PAP.

não é um rss feeds já que esses têm um protocolo bem definido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

http://www.megaupload.com/?d=Z8MU0MXS

Actualização.

-Faz o Parse à (Ver novas respostas aos meus tópicos.)

-Faz o Parse à (Mostrar tópicos não lidos desde a última visita.)

PaP.PapLogin p = new PaP.PapLogin("x", "xxx");
using (PaP.PapWebRequest wr = new PaP.PapWebRequest(p))
{
   foreach (PaP.PapThread t in  wr.LoadPaPNewThreads()){
	   Console.WriteLine(t.Assunto);
	   Console.WriteLine(t.Url);
	   Console.WriteLine(t.User);
   }                             
}

using (PaP.PapWebRequest wr = new PaP.LoadPaPUnreadSubscriptions(p))
{
   foreach (PaP.PapThread t in  wr.LoadPaPNewThreads()){
	   Console.WriteLine(t.Assunto);
	   Console.WriteLine(t.Url);
	   Console.WriteLine(t.User);
   }                             
}		

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

-Faz o Parse à (Ver novas respostas aos meus tópicos.)

-Faz o Parse à (Mostrar tópicos não lidos desde a última visita.)

Thanks!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra coisa interessante seria puder ver os tópicos não lidos, mas por quadro (acho que já se falou disso por aqui).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Outra coisa interessante seria puder ver os tópicos não lidos, mas por quadro (acho que já se falou disso por aqui).

suponho que queiras isso no SMF não?

terão que criar um plugin paro o mesmo que faça isso.

ou referes-te ao ZwamePap ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora