{"id":27441852,"url":"https://github.com/3kh0/state-test","last_synced_at":"2026-01-31T15:01:51.470Z","repository":{"id":163049722,"uuid":"638481008","full_name":"3kh0/state-test","owner":"3kh0","description":"Ways to take state tests unrestricted","archived":false,"fork":false,"pushed_at":"2023-11-02T13:34:06.000Z","size":37,"stargazers_count":14,"open_issues_count":7,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-14T20:48:13.289Z","etag":null,"topics":["bypass","methods","school","state-test"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3kh0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-09T13:03:08.000Z","updated_at":"2025-04-19T22:48:50.000Z","dependencies_parsed_at":"2025-04-16T04:16:16.179Z","dependency_job_id":null,"html_url":"https://github.com/3kh0/state-test","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/3kh0/state-test","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3kh0%2Fstate-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3kh0%2Fstate-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3kh0%2Fstate-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3kh0%2Fstate-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3kh0","download_url":"https://codeload.github.com/3kh0/state-test/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3kh0%2Fstate-test/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28946058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T14:26:55.697Z","status":"ssl_error","status_checked_at":"2026-01-31T14:26:52.545Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bypass","methods","school","state-test"],"created_at":"2025-04-15T00:14:33.339Z","updated_at":"2026-01-31T15:01:51.455Z","avatar_url":"https://github.com/3kh0.png","language":null,"readme":"# State Testing Unrestricted\n**Ways to take state tests unrestricted.**\n\nWe are trying to get almost every state, if you have a different state, open a issue with the title of your state and provide AS MUCH DETAIL AS POSSIBLE about how you take your state tests.\n\n- [State Testing Unrestricted](#state-testing-unrestricted)\n  * [North Carolina](#north-carolina)\n    + [The easy method](#the-easy-method)\n    + [The hard method](#the-hard-method)\n  * [Wisconsin](#wisconsin)\n    + [Forward Exam](#forward-exam)\n    + [STAR test](#star-test)\n  * [California](#california)\n    + [CAASPP](#caaspp)\n  * [Georgia](#georgia)\n    + [Georgia Forward Exam](#georgia-forward-exam)\n  * [Minnesota](#minnesota)\n    + [MCA](#mca)\n\n\u003csmall\u003e\u003ci\u003e\u003ca href='http://github.com/3kh0/readme-toc/'\u003eTable of contents generated with readme-toc\u003c/a\u003e\u003c/i\u003e\u003c/small\u003e\n\n\n## North Carolina\n~~This is the first one bc I live in that state lol~~\n\nThe first thing you need to know is the way that the NCTest app was made was really stupid, it pretty much just iframes a existing page that you can search on google\n\n![Screenshot 2023-05-09 09 09 05](https://github.com/3kh0/state-test/assets/58097612/010fe95c-5fdf-4d24-86ec-55592810fe9e)\n\nThe link there in question is [data.ncsu.edu/nctest/Destination.html](https://data.ncsu.edu/nctest/Destination.html), but if you click on the NCTest login, you would be blocked from logging in with this message.\n\n![Screenshot 2023-05-09 09 12 59](https://github.com/3kh0/state-test/assets/58097612/dd341dc1-1d2d-4ab4-bbd1-f216d3858f8a)\n\nThank goodness the devs behind it for some reason added comments to their code, so we can exploit this. This function checks the user agent and deterimes if the test taker is in a \"secure\" testing environment. This only checks the first 6 characters of the user agent and if it is `NCTest`. Note this is a very simple way of how it works, so here are two ways to bypass and get this running.\n\n```js\n//check useragent for our custom chrome app string\nfunction onMessage(e) {\n\n    appWindow = e.source;\n    appOrigin = e.origin;\n    oldAgent = navigator.userAgent;\n\n    //customizing useragent due to sporadic issue of not being overwritten in chrome app\n    if ( navigator.userAgent.substring(0, 6) !== \"NCTest\" ) {\n        Object.defineProperty(navigator, 'userAgent', {\n            get: function () { return \"NCTest/1.0 ChromeApp \" + oldAgent; }\n        });\n    }\n    isChromeApp=true;\n}\n```\n*Source: [data.ncsu.edu/nctest/common.js](https://data.ncsu.edu/nctest/common.js) Archived: [pastebin.com/gVAUnkwW](https://pastebin.com/gVAUnkwW)*\n\n### The easy method\n\nThis is a much easy way without having to spoof useragents, this also depends if you can install the app on your device, this can work on Windows and Linux, but sometimes it does break, relaunching does seem to fix the issue of getting blocked.\n\n1. Get the [NCTest App](https://chrome.google.com/webstore/detail/nctest/gekbonallhcfalincpgmjcipmjehfhlh/) from the Chrome Web Store\n2. This step depends on your OS,\n\n**If you are on a Chromebook**\n1. Open the Launcher ![Screenshot 2023-05-09 09 29 18](https://github.com/3kh0/state-test/assets/58097612/31a98908-a306-474e-99b1-5ebf2d2d7bbd)\n2. Locate the NCTest App and click on it\n![Screenshot 2023-05-09 09 29 38](https://github.com/3kh0/state-test/assets/58097612/493073f5-373d-4a8e-854f-6efe8f056add)\n3. Click the NCTest login (or whatever you need the app for)\n4. Profit\n\n**If you are on Linux/Windows**\n1. Go to `chrome://apps`\n2. Click on the NCTest App\n3. Click the NCTest login (or whatever you need the app for)\n\n\u003e **Note**\n\u003e If it still shows the block scren, close the app and reopen it.\n\nIn this app, you can use keybinds suck as `alt`+`tab` to change windows while taking the test. I did not figure out how to resize the window, it seems it is locked to fill the screen.\n\n![Screenshot 2023-05-09 09 24 52](https://github.com/3kh0/state-test/assets/58097612/6709e882-dba4-4924-ac34-8f3e57fd2737)\n\n### The hard method\n\nThis is a little more tricky. It ininvoles getting your current useragent and spoofing it with a extension.\n\n1. Download a extension that can spoof your useragent.\n\nChrome: [User-Agent Switcher for Chrome](https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg)\n\nFirefox: [User-Agent Switcher and Manager](https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/)\n\nMore ways to change: [How to Change User Agents in Chrome, Edge, Safari \u0026 Firefox](https://www.searchenginejournal.com/change-user-agent/368448/)\n\n2. Get your current useragent, you can just use google to look it up\n\n![image](https://github.com/3kh0/state-test/assets/58097612/49b803d1-ed7b-48d0-829f-b93a4ea7ee8a)\n\n3. Add `\"NCTest/1.0 ChromeApp` to the start of it.\n\nSo if your useragent is\n```\nYeetOS/5.0 (X11; AmongOS x86_64; rv:109.0) Gecko/20100101 Firefox/114.0\n```\nyou would change it to\n```\nNCTest/1.0 ChromeApp YourMom/5.0 (X11; AmongOS x86_64; rv:109.0) Gecko/20100101 Firefox/114.0\n```\n4. Access the login page for the test at [data.ncsu.edu/nctest/Destination.html](https://data.ncsu.edu/nctest/Destination.html)\n\nFurther Reading:\n- https://defcon.social/@3kh0/110293819888798643\n\n## Wisconsin\n\nHere is how to bypass the exams for wisconsin.\n\n### Forward Exam\n\nForward Exams are provided through DRC Insight, which can be accessed [here](https://wbte.drcedirect.com/WI/portals/wi). However, it hides the test sign-in option if the client is not in the designated kiosk. However, this is done on the client-side, and as any developer knows, you should never trust the client side. Looking through the code, the following line immediately jumps out:\n\n```html\n\u003ca href=\"/WI/?adminId=553270\u0026amp;index=1#portal/wi/553270/exam\" id=\"testLink1\" index=\"1\" class=\"hide-link\"\u003eTest Sign In\u003c/a\u003e\n```\n\nRight there, see it? `class=\"hide-link\"`. I threw together a little script to remove the class, and it ended up looking like this:\n\n```js\nvar a = document.getElementsByClassName(\"hide-link\"); for(b in a){if(b\u003c=a.length)\ndocument.getElementsByClassName(\"hide-link\")[b].className=document.getElementsByClassName(\"hide-link\")[b].className.replace(\"hide-link\",\"\")}\n```\n\nIn bookmarklet form:\n\n```js\njavascript:(function()%7Bvar a %3D document.getElementsByClassName(\"hide-link\")%3B for(b in a)%7Bif(b\u003c%3Da.length)%0Adocument.getElementsByClassName(\"hide-link\")%5Bb%5D.className%3Ddocument.getElementsByClassName(\"hide-link\")%5Bb%5D.className.replace(\"hide-link\"%2C\"\")%7D%7D)()%3B\n```\n\nJust run the script and the hidden options will show up. Enjoy!\n\n### STAR test\n\nSTAR tests are handled through Renaissance Learning, which doesn't have any browser restrictions. Access it [here](https://global-zone08.renaissance-go.com/studentportal/) and sign in with your normal credentials. If a monitor password is needed to start the test, enter `admin` (very secure, I know).\n\n## California\nAll state assesments done in Californian public schools are done with California Assessment of Student Performance and Progress (CAASPP) secure test browser. This \"secure\" browser acts like every other test browser, limiting the use of the system.\n\n### CAASPP\nLuckily, you literally don't even need to use the secure browser! The login page is available [here](https://ca.cambiumtds.com/student), and from my understanding, you are able to access everything you normally would on the test browser, without restrictions.\n\n## Georgia\nBypassing in Georgia.\n\n### Georgia Forward Exam\n\nForward Exams are provided through DRC Insight, which can be accessed [here](https://wbte.drcedirect.com/GA/portals/ga). However, it hides the test sign-in option if the client is not in the designated kiosk. However, this is done on the client-side, and as any developer knows, you should never trust the client side. Looking through the code, the following line immediately jumps out:\n\n```html\n\u003ca href=\"/GA/?adminId=553270\u0026amp;index=1#portal/ga/553270/exam\" id=\"testLink1\" index=\"1\" class=\"hide-link\"\u003eTest Sign In\u003c/a\u003e\n```\n\nRight there, see it? `class=\"hide-link\"`. I threw together a little script to remove the class (using jquery), and it ended up looking like this:\n\n```js\nArray.from($('.hide-link')).forEach(t =\u003e $(t).removeClass('hide-link'));\n```\n\nIn bookmarklet form:\n\n```js\njavascript:(function()%7BArray.from(%24('.hide-link')).forEach(t%20%3D%3E%20%24(t).removeClass('hide-link'))%3B%7D)()%3B\n```\n\nJust run the script and the hidden options will show up. Enjoy!\n\n## Minnesota\nJust like California, you can easily access everything with no restrictions.\n\n### MCA\nThere are no checks, unlike most other test programs. You can just go to TestNav [here](https://home.testnav.com/) and then select Minnesota. As far as I know, there are no restrictions when using the website whatsoever.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3kh0%2Fstate-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3kh0%2Fstate-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3kh0%2Fstate-test/lists"}