Que es lo que hace esta funcion es:
Primero descarga el codigo fuente de una url y lo almacena en la variable "data"
Luego obtiene el valor que esta entre "ysmm = '" y "'"
por ejemplo si fuese el resultado asi: "HoOmLoAc"
recorremos cada letra saltando de 2 en dos comenzado con la H,O,L,A
y luego lo hacemos de manera inversa comenzamos del final hasta la penultima letra c,o,m,o
y luego el resultado es H,O,L,A,c,o,m,o->HOLAcomo
y luego lo decodificamos en base64 (el resultado real que obtenemos será de la forma 64http://sitiooriginal.com/blal.html )
omitimos las 2 primeras letras y Listo URL Decodificada.
Ahora respecto a tus dudas:
Al principio Inicializamos una nueva instancia de la clase System.Text.StringBuilder.
Dim sb as New StringBuilder
Con el For recorremos cada letra desde 0 hasta la longitud de la cadena que obtuvimos aumentado de dos en dos.
y con el sb.Append(s(i)) lo que hace es: Anexar a sb la representación en forma de cadena del carácter Unicode especificado.
tomando el ejemplo anterior: comienza con H luego le anexa la siguiente que seria O es decir HO->HOL y asi sucesivamente hasta llegar a :"HOLA"
y luego lo hacemos de manera inversa del final a el inicio primero "c" luego "co"->"com"->"como" seguimos anexando a la misma instancia que inicializamos.
con respecto a : Encoding.ASCII.GetString(bytes() As Byte), que mejor que la definicion que nos da:
' Resumen:
' Cuando se reemplaza en una clase derivada, descodifica todos los bytes de la
' matriz de bytes especificada en una cadena.
'
' Parámetros:
' bytes:
' Matriz de bytes que contiene la secuencia de bytes que se va a descodificar(en este caso la que obtendremos de Convert.FromBase64String(sb.ToString())).
'
' Devuelve:
' Cadena que contiene el resultado de la descodificación de la secuencia de bytes
' especificada.
Y Substring(2)
Lo que hace es empezar en una posición de caracteres especificada(en este caso 2, será la Posición inicial.) y continúa hasta el final de la cadena.