Décoder un site Web pour le fun
Publié : lun. 04/mars/2019 23:54
Bonsoir a tous,
Je me suis amusé a décoder un site Web pour m'amuser.
J'ai développé une petite application dont voici une copie écran de l'interface:
Les sources et les exécutables sont téléchargeables ici
Menus gauche/Mes projets purebasic/zone privée 2
Login: pure / basic
Mais ce qui m’amène ce soir, c'est un petit challenge pour décoder du Javasript contenu dans les pages Web et codé avec une fonction eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};....
Voici ce a quoi je suis arrivé, et je me demandai si cela vous amuserez de tenter de décoder la dite fonction et de partager vos solution.
Je vous laisse découvrir le contenu du site et ceux qui maitrisent l'anglais pourrons y trouver leur compte.
CAGE
Je me suis amusé a décoder un site Web pour m'amuser.
J'ai développé une petite application dont voici une copie écran de l'interface:
Les sources et les exécutables sont téléchargeables ici
Menus gauche/Mes projets purebasic/zone privée 2
Login: pure / basic
Mais ce qui m’amène ce soir, c'est un petit challenge pour décoder du Javasript contenu dans les pages Web et codé avec une fonction eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};....
Voici ce a quoi je suis arrivé, et je me demandai si cela vous amuserez de tenter de décoder la dite fonction et de partager vos solution.
Code : Tout sélectionner
EnableExplicit
Global urlHomePage$ = "https://"+"www"+".arconaitv"+".us"
Global html.s, page.s
Procedure.s obtenir_page_html(page.s)
; page.s doit contenir l'url complète de la page
; html.s contiendra le contenu complet de la page (index, guide, ...)
Protected URL$ = page.s ;;: Debug ">>>>> URL="+URL$
Protected HTML.s = #Null$
If URL$ = #Null$
ProcedureReturn #Null$
EndIf
Protected host$, prot$, site$
prot$ = Trim(StringField(URL$,1,"/")) : Debug ">>>>> PROT = " + prot$
host$ = Trim(StringField(URL$,3,"/")) : Debug ">>>>> HOST = " + host$
site$ = prot$ + "//" + host$ + "/" : Debug ">>>>> SITE = " + site$
Protected agent$, cookie$, lang$, type$
agent$ = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393"
cookie$ = ""
lang$ = "fr-FR"
type$ = "text/html"
Protected HttpRequest
If InitNetwork()
NewMap Header$()
;Header$("Accept") = type$
;Header$("Accept-Language") = lang$
Header$("Cache-Control") = "no-cache"
;Header$("Cookie") = cookie$
;Header$("Connection") = "keep-alive"
;Header$("Content-Type") = type$
;Header$("Host") = host$
;Header$("Referer") = site$
Header$("User-Agent") = agent$
HttpRequest = HTTPRequest(#PB_HTTP_Get, page.s, "", 0, Header$())
If HttpRequest
HTML.s = HTTPInfo(HTTPRequest, #PB_HTTP_Response)
;: Debug "Response: " + HTML.s
FinishHTTP(HTTPRequest)
Else ; ............................. If HttpRequest
Debug "Request creation failed"
ProcedureReturn #Null$
EndIf ; ............................ If HttpRequest
Else ; ............................... If InitNetwork()
ProcedureReturn #Null$
EndIf ; .............................. If InitNetwork()
ProcedureReturn HTML.s
EndProcedure
Procedure.s decoder_m3u8(id)
;;https://beautifier.io/
;;http://dean.edwards.name/unpacker/
Protected I, L, N, N$, A$, codage$, radix$, wordc$, hachage$, foo$, chaine$
Protected M3U8.s
Protected line.s, LIGNE
NewList CODES.s()
: Debug ">>>>> DECODE"
PAGE.s = urlHomePage$ + "/stream.php?id=" + Str(id)
: Debug ">>>>> PAGE="+page
HTML.s = obtenir_page_html(page.s)
;: Debug HTML
NewMap LCODE.s()
NewMap PCODE.s()
For LIGNE = 1 To 999
line.s = StringField(HTML.s, LIGNE, #LF$)
;: Debug LINE.s
If FindString(line.s, "m3u8", 1, #PB_String_NoCase)
line.s = ReplaceString(line.s, #TAB$, " ")
: Debug ">>>>> M3U8 trouvé"
ClearClipboard()
L = CountString(line.s, ";") + 1 : Debug "Nombre de lignes de code = " + Str(L)
For N = 1 To L
N$ = Str(N)
LCODE(N$) = Trim(StringField(line.s, N, ";"))
Debug "ligne " + N$ + "= " + LCODE(N$)
Next
: Debug ""
line.s = StringField(LCODE(Str(L)), 1, ".split")
line.s = ReplaceString(line.s, "'", "")
: Debug "line="+line
I = CountString(line.s, ",") : Debug "count , = " + Str(I)
radix$ = StringField(line.s, 2, ",") : Debug "radix="+radix$
wordc$ = StringField(line.s, 3, ",") : Debug "wordc="+wordc$
chaine$ = StringField(line.s, 4, ",") : Debug "Chaine = "+chaine$
codage$ = LCODE(Str(L-2)) : Debug "codage="+codage$
codage$ = StringField(codage$, 2, "\'") : Debug "codage="+codage$
codage$ = UCase(codage$) : Debug "codage="+codage$
; création du tableau des éléments de chaine$
I = CountString(chaine$, "|")
For N = 0 To I
Select N
Case 0 To 9 : A$ = Str(N)
Default : A$ = UCase(Chr(87+N))
EndSelect
PCODE(A$) = StringField(chaine$, N+1, "|")
Next
ForEach PCODE()
Debug "Array["+MapKey(PCODE())+"] = "+PCODE()
Next
: Debug "Longueur codage=" + Len(codage$)
foo$ = #Null$
For I = 1 To Len(codage$)
A$ = Mid(codage$, I, 1)
Select A$
Case "/", ":", ".", "-" : foo$+A$
Case "0","1","2","3","4","5","6","7","8","9"
foo$+PCODE(A$)
Case "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
foo$+PCODE(A$)
Default : foo$+A$
EndSelect
Next
Debug "Lien vidéo: " + foo$
EndIf
Next
SetClipboardText(foo$)
ProcedureReturn foo$
EndProcedure
decoder_m3u8(173)
; Debug obtenir_page_html(urlHomePage$ + "/stream.php?id=173")
CAGE