The Gold Network: Soyworld | SNCApedia | SoyPlace

vichan

From SNCApedia, the shit nobody cares about encyclopedia
Revision as of 01:03, 5 April 2026 by 181.160.253.48 (talk) (more helpful information on pearl.js the datamining script on the shemmy, chinny and karachan)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search
Vichan is a gem.
The logo.

vichan, also known as vichan-devel, is the most popular imageboard software within the soysphere, and other places.. It is a free light-weight, fast, highly configurable and user-friendly imageboard software package and it is a fork of another imageboard software named TinyIB. It is written in PHP and has few dependencies.

It is less technologically advanced compared to LynxChan but is easier to fork/modify.

The official github repository and installation guides can be found at https://github.com/vichan-devel/vichan

Fork's of vichan

[edit | edit source]
  • VinnyFork

Vinluv's fork of vichan used on sidson.city; the biggest change about it is the sidebar and deletion of a homepage its the hardest to use as it runs on a very old version of vichan.

  • RuFork

Yoot’s fork of vichan made for his 1 PPD website Ruzly, also known as Garty, or Frog Pond[Marge...]. It has a topbar and layout more similar to JSchan, however.

  • Kikemin's fork

based off the shemmy code, used on the chinny and binny[ev&doe it's just a frontend], Referred to as "gigglegrid"

  • Kuz's fork

the current fork used on soyjak.party, is the most notable and best designed and is mainly why Kuz was formerly considered one of the coders of vichan because of xis coding skills.

  • Shemmy Fork

used on the Shemmy, basically a mix of Kuz's fork, Kara's fork and Kikemin's fork

  • Kara's Fork

used on the old and new version of the Gacky, this one actually has a public source release but because it was made by a failtroll pedonigger and is rumored to contain malicious code it should not be used.

Karachan/Shemmy/Chinny datamining

[edit | edit source]

The rangeban and datamining code from Karachan are utilized on the Shemmy and Chinny, with the rangeban blocking Australia, the UK, Kuwait, and India by default, at nginx level (It will show a false 418 error "You are not allowed to access this site."), the datamining script "pearl.js" is a obsfucated script that uses obsfucator.io with debugger protection to freeze your browser if you attempt to debug it.

The script tracks your screen resolution, if you are on a mobile device (Android or iOS), if you are using a VPN and have WebRTC leaks, and scans your ports for Tuxler and Discord respectively, it also stores data to your localstorage and cookies to store a "tainted session" that persists between browser resets (use incognito to get around this), and sends a string for validation such as "karachan" (or "shemmy" in the case of the Shemmy). Most of these measures can be avoided by using incognito mode and a VPN and changing your screen resolution and window size. Do note it can also detect if you are using incognito too.

The unobsfucated source code for the datamining is here.

(async()=>{ const results = { mobile: 0, //looks totally normal. dsc: 0, txl: 0, vpn: 0, cg: 0, wm: 0, hm: 0, wi: 0, hi: 0, vv: 'karachan', kp: }

// Screen resolution check (if unpassable sets wm to -1) // This is fucking evil. try { results.wm = screen.width; results.hm = screen.height; results.wi = window.innerWidth; results.hi = window.innerHeight; } catch(e) { results.wm = -1 }

// Mobile check try { mobile = /Mobi|Android|iPhone|iPad/i.test(navigator.userAgent) ? 1 : 0; } catch(e) { mobile = 0; }

// Kekpass (Yes, this is also evil. You don't know you're pozzed) try { results.kp = localStorage.getItem("kekpass") || ; } catch(e) { results.kp = ; }

// Incognito check (chrome only, still sketchy) try { const fs = window.RequestFileSystem || window.webkitRequestFileSystem if(fs){ fs(window.TEMPORARY, 100, ()=>{}, ()=>{ results.cg = 1 }) } } catch(e){ results.cg = 1 }

function trySocket(url, onSuccess){ return new Promise((resolve)=>{ let ws try { ws = new WebSocket(url) ws.onopen = ()=>{ ws.close() onSuccess() resolve() } ws.onerror = ()=>resolve() } catch(e){ resolve() } }) }

// WebSocket checks await trySocket("ws://127.0.0.1:6463/?v=1", ()=>{ results.dsc = 1 }) await trySocket("ws://127.0.0.1:1701/tuxler", ()=>{ results.txl = 1 }) await trySocket("ws://127.0.0.1:1700/tuxler", ()=>{ results.txl = 1 })

// WebRTC leak check await new Promise((resolve)=>{ let ips = new Set()

let pc = new RTCPeerConnection({ iceServers: [{urls: "stun:stun.l.google.com:19302"}] })

pc.createDataChannel("check")

pc.onicecandidate = (event)=>{ if(event.candidate){ let ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3})/g let match = event.candidate.candidate.match(ipRegex) if(match){ match.forEach(ip=>ips.add(ip)) } } else { pc.close()

// bruh logic: if we get any private IPs, it's likely local let hasLocal = false ips.forEach(ip=>{ if(/^10\./.test(ip) || /^192\.168\./.test(ip) || /^172\.(1[6-9]|2[0-9]|3[0-1])\./.test(ip)){ hasLocal = true } })

results.vpn = hasLocal ? 0 : 1 resolve() } }

pc.createOffer().then(offer=>pc.setLocalDescription(offer)) })

// send it fetch('/kcindex.php', {method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: new URLSearchParams(results)}) })()

How to install

[edit | edit source]

Follow this tutorial from JewTube, you can also follow this one aswell.