hulu

package
v1.10.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 16, 2025 License: OSL-3.0 Imports: 9 Imported by: 0

README

Hulu

  1. hulu.com
  2. change plan to Hulu
  3. with ads has free trial, but I think no ads has more UHD
  4. email
    • mailsac.com
  5. password
  6. name
  7. birthdate
  8. gender
  9. agree & continue
  10. name on card
  11. card number
  12. expiration
  13. cvc
  14. zip code
  15. agree & subscribe

Android

Create Android 6 device. Install user certificate. after entering password, if you click LOG IN you get this:

Hmm. Something’s up. Please check your internet settings and try again. If all’s fine on your end, visit our Help Center.

system certificate? same result. if we disable proxy? it works. next:

https://github.com/httptoolkit/frida-interception-and-unpinning

pip install frida-tools

download and extract server:

https://github.com/frida/frida/releases

for example:

frida-server-16.1.4-android-x86.xz

install app, then push server:

adb root
adb push frida-server-16.1.5-android-x86 /data/app/frida-server
adb shell chmod +x /data/app/frida-server
adb shell /data/app/frida-server

then:

frida -U `
-l config.js `
-l android/android-certificate-unpinning.js `
-f com.hulu.plus

this worked a couple of times:

+++ b/android/android-certificate-unpinning.js
@@ -223,7 +223,7 @@ const PINNING_FIXES = {

     'okhttp3.CertificatePinner': [
         {
-            methodName: 'check',
+            methodName: 'a',
             overload: ['java.lang.String', 'java.util.List'],
             replacement: () => NO_OP
         },

but it seems to be a race condition or something, as it only works sometimes. like it might fail the first time, but then if I restart the app it will work. not sure.

https://github.com/httptoolkit/frida-interception-and-unpinning/issues/55

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Transport = http.Transport{
	Proxy: func(req *http.Request) (*url.URL, error) {
		if path.Ext(req.URL.Path) != ".mp4" {
			log.Println(req.Method, req.URL)
		}
		return http.ProxyFromEnvironment(req)
	},
}

Functions

func Id added in v1.10.6

func Id(rawUrl string) (string, error)

hulu.com/movie/05e76ad8-c3dd-4c3e-bab9-df3cf71c6871 hulu.com/movie/alien-romulus-05e76ad8-c3dd-4c3e-bab9-df3cf71c6871

Types

type DeepLink struct {
	EabId   string `json:"eab_id"`
	Message string
}

type Playlist

type Playlist struct {
	DashPrServer string `json:"dash_pr_server"`
	WvServer     string `json:"wv_server"`
	Message      string
	StreamUrl    string `json:"stream_url"` // MPD
}

func (*Playlist) PlayReady added in v1.10.6

func (p *Playlist) PlayReady(data []byte) ([]byte, error)

func (*Playlist) Widevine added in v1.10.1

func (p *Playlist) Widevine(data []byte) ([]byte, error)

type Session added in v1.10.6

type Session struct {
	DeviceToken string `json:"device_token"`
	UserToken   string `json:"user_token"`
}
func (s *Session) DeepLink(id string) (*DeepLink, error)

func (*Session) Playlist added in v1.10.6

func (s *Session) Playlist(deep *DeepLink) (*Playlist, error)

1080p (FHD) L3, SL2000 1440p (QHD) L1, SL3000 2160p (UHD) L1, SL3000

func (*Session) Refresh added in v1.10.6

func (s *Session) Refresh() error

returns user_token only

func (*Session) Unmarshal added in v1.10.6

func (s *Session) Unmarshal(data SessionData) error

type SessionData added in v1.10.6

type SessionData []byte

func FetchSession added in v1.10.6

func FetchSession(email, password string) (SessionData, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL