├── .gitignore ├── EXTRACTOR.PNG.png ├── Image.py ├── README.md ├── ext └── tools ├── Cygwin ├── ImgExtractor.exe ├── LOG ├── cyggcc_s-1.dll ├── cygwin1.dll ├── make_ext4fs.exe └── simg2img.exe ├── LOG └── UNI ├── LOG ├── SIGN_TOOLS ├── LOG ├── signapk.jar ├── testkey.pk8 └── testkey.x509.pem ├── sdat2img.py └── simg2img /.gitignore: -------------------------------------------------------------------------------- 1 | #OTA Packages: 2 | *.zip 3 | system_/ 4 | vendor_/ 5 | -------------------------------------------------------------------------------- /EXTRACTOR.PNG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/EXTRACTOR.PNG.png -------------------------------------------------------------------------------- /Image.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | 4 | import sys, os 5 | 6 | try: 7 | NEW_DATA_FILE = str(sys.argv[1]) 8 | except IndexError: 9 | print ("\nusage is: \n\n py cha cha \n\n") 10 | try: 11 | input = raw_input 12 | except NameError: pass 13 | input ("Press ENTER to exit...\n") 14 | sys.exit() 15 | def main(argv): 16 | 17 | new_data_file = open(NEW_DATA_FILE, 'rb') 18 | fmh = new_data_file.read(28) 19 | header = struct.unpack(". 18 | 19 | 20 | # ////////FUNCTIONS///////// 21 | EXT_CHECK() { 22 | if [ ! -e tools ] 23 | then 24 | clear 25 | echo 26 | echo " Folder 'tools' not found , the extractor won't " 27 | echo " work , unless you place it in right place " 28 | exit 0 29 | fi 30 | 31 | if [ ! -e ext ] 32 | then 33 | clear 34 | echo 35 | echo " Don't modify or reaname script ext , it is associated " 36 | echo " with all functions/folders , so just do ./ext don't REN" 37 | exit 0 38 | fi 39 | 40 | #Check for python - installed OR NOT 41 | #PYTHON IS REQUIRED FOR DAT, SO ITS A MAJOR ISSUE IF NOT PYTHON 42 | CHK=`python --version 2>/dev/null` 43 | if [ $? == 127 ] 44 | then 45 | clear 46 | echo 47 | echo 48 | cecho R " Programe " "Python" " is not installed , please install python" 49 | echo 50 | echo " otherwise extractor will not work properly " 51 | echo 52 | echo " TRY : apt-get install python or your friend GOOGLE" 53 | echo 54 | echo 55 | exit 1 56 | fi 57 | 58 | #JAVA , EXT. WILL WORK BUT ZIP SIGN WON'T --MINOR ISSUE 59 | CHK=`java -version 2>/dev/null` 60 | if [ $? == 127 ] 61 | then 62 | clear 63 | echo 64 | echo 65 | echo " JAVA SDK is not installed , please install JAVA" 66 | echo 67 | echo " DEVELOPMENT KIT , it is required to SIGN FILES " 68 | echo 69 | read -p " Ignore and continue (y/n) : " OPTN 70 | if [ $OPTN == y ] 71 | then 72 | L_JAVA=0 73 | EXT_MAIN 74 | else 75 | exit 1 76 | fi 77 | fi 78 | 79 | 80 | 81 | } 82 | 83 | #COLOR 84 | #USAGE: cecho TYPE=R|G|Y|B|P|C|W "msg1" "color_msg2" "msg3" 85 | cecho () 86 | { 87 | #Case didn't work out for me in cygwin 88 | if [ "$1" == "R" ] 89 | then 90 | echo -e "$2""\033[0;91m$3\033[0m""$4" # Red 91 | elif [ "$1" == "G" ] 92 | then 93 | echo -e "$2""\033[0;92m$3\033[0m""$4" # Green 94 | elif [ "$1" == "Y" ] 95 | then 96 | echo -e "$2""\033[0;93m$3\033[0m""$4" # Yellow 97 | elif [ "$1" == "B" ] 98 | then 99 | echo -e "$2""\033[0;94m$3\033[0m""$4" # Blue 100 | elif [ "$1" == "P" ] 101 | then 102 | echo -e "$2""\033[0;95m$3\033[0m""$4" # Purple 103 | elif [ "$1" == "C" ] 104 | then 105 | echo -e "$2""\033[0;96m$3\033[0m""$4" # Cyan 106 | elif [ "$1" == "W" ] 107 | then 108 | echo -e "$2""\033[0;97m$3\033[0m""$4" # White 109 | fi 110 | } 111 | 112 | #PAUSE -like batch 113 | WAIT() { 114 | echo 115 | read -p "$1Press enter key to continue . . ." 116 | echo 117 | } 118 | 119 | #Extract DAT 120 | E_DAT() { 121 | 122 | unset DATE_STR 123 | DATE_STR=`date '+%m-%d-%a_%H-%M-%S'` 124 | #For not conflicting with previous extracted files 125 | #Based on dxdia's kitchen 126 | extract=extract_$DATE_STR 127 | mkdir $extract 128 | clear 129 | echo 130 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 131 | echo ":: ::" 132 | echo -e ":: Copy " "\033[0;92msystem.new.dat\033[0m"" , ""\033[0;92msystem.transfer.list\033[0m"" ::" 133 | echo ":: ::" 134 | echo -e "::" " to ""\033[0;97m$extract\033[0m"" folder. ::" 135 | echo ":: ::" 136 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 137 | echo 138 | WAIT "" 139 | 140 | clear 141 | if [ ! -f $extract/system.new.dat ] 142 | then 143 | echo 144 | cecho R " File" " system.new.dat " "does not exist! " 145 | echo 146 | cecho P " in " "$extract " "folder , try again by " 147 | echo 148 | echo " placing system.new.dat in mentioned folder " 149 | rm -rf $extract 150 | WAIT " " 151 | EXT_MAIN 152 | fi 153 | if [ ! -f $extract/system.transfer.list ] 154 | then 155 | echo 156 | cecho R " File" " system.transfer.list " "does not exist!" 157 | echo 158 | cecho P " in " "$extract " "folder , try again by " 159 | echo 160 | echo " placing system.transfer.list in mentioned folder " 161 | rm -rf $extract 162 | WAIT " " 163 | EXT_MAIN 164 | fi 165 | 166 | #Script tesded on Ubuntu 167 | #Modified on 10/16/2016 168 | cd $extract 169 | 170 | echo 171 | echo " Found system.new.dat & system.transfer.list" 172 | echo 173 | sleep 0.5 174 | echo " converting system.new.dat to system.img " 175 | cp ../tools/UNI/sdat2img.py . 176 | python sdat2img.py system.transfer.list system.new.dat system.img 177 | echo 178 | if [ -f system.img ] #IF-2 179 | then 180 | rm -f system.new.dat 181 | rm -f system.transfer.list 182 | rm -f sdat2img.py 183 | echo " Successfully Converted into System.img" 184 | sleep 1 185 | 186 | if [ `uname | grep Linux` ] #IF-1 187 | then 188 | echo 189 | cecho W "" " Mounting system.img to output folder" 190 | echo 191 | read -p " Hit Enter to continue to mount" 192 | echo 193 | if [ ! -e output ] 194 | then 195 | mkdir output 196 | fi 197 | #IN Ubuntu mount worked but in other OS 198 | #IDK it will or will not work 199 | sudo mount -t ext4 -o loop system.img output/ 200 | if [ $? == 0 ] 201 | then 202 | echo 203 | echo " DONE! Mounted system.img in output folder" 204 | echo 205 | cd .. 206 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 207 | EXT_MAIN 208 | else 209 | echo 210 | echo " Mount Failed Please try another method!" 211 | echo 212 | cd .. 213 | WAIT " " 214 | EXT_MAIN 215 | fi 216 | elif [ `uname | grep CYGWIN` ] 217 | then 218 | cp ../tools/Cygwin/ImgExtractor.exe . 219 | echo 220 | cecho W "" " Converting system.img to system_ folder" 221 | sleep 2 222 | ./ImgExtractor.exe system.img -i 223 | if [ -e system_ ] 224 | then 225 | rm -f ImgExtractor.exe 226 | echo 227 | echo " Extracted system.img to system_ folder" 228 | echo 229 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 230 | echo 231 | echo 232 | cd .. 233 | EXT_MAIN 234 | fi 235 | fi #FI-1 236 | fi #FI-2 237 | 238 | } 239 | 240 | #Extract OREO: DAT.BR +VENDOR 241 | E_OREO() { 242 | 243 | unset DATE_STR 244 | DATE_STR=`date '+%m-%d-%a_%H-%M-%S'` 245 | #For not conflicting with previous extracted files 246 | #Based on dxdia's kitchen 247 | extract=extract_$DATE_STR 248 | mkdir $extract 249 | clear 250 | echo 251 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 252 | echo ":: ::" 253 | echo -e ":: Copy " "\033[0;92msystem.new.dat.br\033[0m"" , ""\033[0;92msystem.transfer.list\033[0m"" ::" 254 | echo -e ":: (and " "\033[0;92mvendor.new.dat.br\033[0m"" , ""\033[0;92mvendor.transfer.list\033[0m"") ::" 255 | echo ":: ::" 256 | echo -e "::" " to ""\033[0;97m$extract\033[0m"" folder. ::" 257 | echo ":: ::" 258 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 259 | echo 260 | WAIT "" 261 | 262 | clear 263 | if [ ! -f $extract/system.new.dat.br ] 264 | then 265 | echo 266 | cecho R " File" " system.new.dat.br " "does not exist! " 267 | echo 268 | cecho P " in " "$extract " "folder , try again by " 269 | echo 270 | echo " placing system.new.dat.br in mentioned folder " 271 | rm -rf $extract 272 | WAIT " " 273 | EXT_MAIN 274 | fi 275 | if [ ! -f $extract/system.transfer.list ] 276 | then 277 | echo 278 | cecho R " File" " system.transfer.list " "does not exist!" 279 | echo 280 | cecho P " in " "$extract " "folder , try again by " 281 | echo 282 | echo " placing system.transfer.list in mentioned folder " 283 | rm -rf $extract 284 | WAIT " " 285 | EXT_MAIN 286 | fi 287 | 288 | if [ -f $extract/vendor.new.dat.br ] && [ ! -f $extract/vendor.transfer.list ] 289 | then 290 | echo 291 | cecho R " File" " vendor.transfer.list " "is missing!" 292 | echo 293 | cecho P " Remember to also put it into " "$extract" "folder" 294 | rm -rf $extract 295 | WAIT " " 296 | EXT_MAIN 297 | fi 298 | 299 | #Script tested on Ubuntu 300 | #Modified on 10/16/2016 301 | cd $extract 302 | 303 | if [ -f vendor.new.dat.br ] 304 | then 305 | echo "Vendor image detected. Decompressing with Brotli..." 306 | brotli -jd -o system.new.dat system.new.dat.br & \ 307 | brotli -jd -o vendor.new.dat vendor.new.dat.br 308 | else 309 | echo "Decompressing System with Brotli..." 310 | brotli -jd -o system.new.dat system.new.dat.br 311 | fi 312 | 313 | if [ -f vendor.new.dat.br ] && [ ! -s vendor.new.dat ] 314 | then sleep 15 #still unpacking? 315 | fi 316 | echo 317 | if [ -f vendor.new.dat ] 318 | then echo " Found vendor.new.dat & vendor.transfer.list" 319 | fi 320 | echo " Found system.new.dat & system.transfer.list" 321 | echo 322 | sleep 0.5 323 | if [ -f vendor.new.dat ] 324 | then 325 | echo " converting vendor.new.dat to vendor.img " 326 | python2 ../tools/UNI/sdat2img.py vendor.transfer.list vendor.new.dat vendor.img 327 | if e2fsck -nv vendor.img 328 | then 329 | rm vendor.new.dat 330 | echo " Successfully Converted into Vendor.img" 331 | sleep 1 332 | 333 | if [ $(uname | grep Linux) ] 334 | then 335 | echo 336 | cecho W "" " Mounting vendor.img to vendor_ folder" 337 | echo 338 | read -p " Hit Enter to continue to mount" 339 | echo 340 | if [ ! -e vendor_ ] 341 | then mkdir vendor_ 342 | fi 343 | #TODO: This requires user input( 344 | sudo mount -t ext4 -o loop vendor.img vendor_/ 345 | if [ $? == 0 ] 346 | then 347 | echo 348 | echo " Half done! Mounted vendor.img to vendor_!" 349 | echo 350 | else 351 | echo 352 | echo " Vendor mount failed! Try it yourself. " 353 | echo " ex: udisksctl loop-setup -f vendor.img" 354 | echo 355 | fi 356 | fi 357 | 358 | fi 359 | fi 360 | echo " converting system.new.dat to system.img " 361 | cp ../tools/UNI/sdat2img.py . 362 | python sdat2img.py system.transfer.list system.new.dat system.img 363 | echo 364 | if [ -f system.img ] #IF-2 365 | then 366 | rm -f system.new.dat 367 | rm -f sdat2img.py 368 | echo " Successfully Converted into System.img" 369 | sleep 1 370 | 371 | if [ `uname | grep Linux` ] #IF-1 372 | then 373 | echo 374 | cecho W "" " Mounting system.img to system_ folder" 375 | echo 376 | read -p " Hit Enter to continue to mount" 377 | echo 378 | if [ ! -e system_ ] 379 | then 380 | mkdir system_ 381 | fi 382 | #IN Ubuntu mount worked but in other OS 383 | #IDK it will or will not work 384 | sudo mount -t ext4 -o loop system.img system_/ 385 | if [ $? == 0 ] 386 | then 387 | echo 388 | echo " DONE! Mounted system.img in system_ folder" 389 | echo 390 | cd .. 391 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 392 | EXT_MAIN 393 | else 394 | echo 395 | echo " Mount Failed Please try another method!" 396 | echo 397 | cd .. 398 | WAIT " " 399 | EXT_MAIN 400 | fi 401 | elif [ `uname | grep CYGWIN` ] 402 | then 403 | cp ../tools/Cygwin/ImgExtractor.exe . 404 | echo 405 | cecho W "" " Converting system.img to system_ folder" 406 | sleep 2 407 | ./ImgExtractor.exe system.img -i 408 | if [ -e system_ ] 409 | then 410 | rm -f ImgExtractor.exe 411 | echo 412 | echo " Extracted system.img to system_ folder" 413 | echo 414 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 415 | echo 416 | echo 417 | cd .. 418 | EXT_MAIN 419 | fi 420 | fi #FI-1 421 | fi #FI-2 422 | 423 | } 424 | 425 | #Unmount output - mounted while extracting DAT 426 | UN_MNT() { 427 | clear 428 | echo 429 | echo " This section is for Unmounting output folder " 430 | echo 431 | echo " which is mounted during extraction of DAT" 432 | echo 433 | read -p " Hit enter to continue" 434 | if [ -e "$extract/output" ] 435 | then 436 | clear 437 | cd $extract 438 | echo " Trying to Unmount system.img IF MOUNTED in output folder" 439 | echo 440 | read -p " Hit enter to try " 441 | echo 442 | #ROOT IS REQUIRED 443 | sudo umount output/ 444 | echo 445 | echo " DONE " 446 | echo 447 | read enter 448 | cd .. 449 | EXT_MAIN 450 | fi 451 | } 452 | 453 | #Repack DAT to system 454 | R_DAT() { 455 | 456 | echo "UNDER CONST." 457 | clear 458 | unset DATE_STR 459 | DATE_STR=`date '+%m-%d-%a_%H-%M-%S'` 460 | #For not conflicting with previous extracted files 461 | #Based on dxdia's kitchen 462 | ROM=ROM_$DATE_STR 463 | mkdir $ROM 464 | echo 465 | echo 466 | cecho G " Creating folder" " `pwd`/$ROM" 467 | echo 468 | cecho C " Place your" " system " "folder into the $ROM " "folder" 469 | echo 470 | WAIT " " 471 | cd $ROM 472 | if [ -e system/app ] 473 | then 474 | echo 475 | read -p " Enter size in MB :" M_BYTE 476 | #1MB == 1048576 477 | SIZE="$(($M_BYTE*1048576))" 478 | echo $SIZE bytes 479 | ./make_ext4fs -T 0 -S file_contexts -l $SIZE -a system system_new.img output/ 480 | 481 | 482 | fi 483 | 484 | 485 | 486 | FILENAME=`find *.* 2>/dev/null` 487 | SIZE=$(du -sb $FILENAME | awk '{print $1}') 488 | 489 | } 490 | 491 | #IMAGE MENU MOUNT, UNMOUNT etc 492 | IMG() { 493 | 494 | echo "UNDER CONST." 495 | } 496 | 497 | #ROM - ZIP SIGN 498 | SIGN_ZIP() { 499 | if [ "$L_JAVA" == "0" ] 500 | then 501 | clear 502 | echo 503 | echo 504 | echo " JAVA IS NOT INSTALLED , So zip signing will " 505 | echo 506 | echo " not work unless you install JAVA SE DEVLOPMENT" 507 | echo 508 | echo " -KIT 7 or higher, on your current OS/platform " 509 | echo 510 | read -p "" 511 | EXT_MAIN 512 | fi 513 | 514 | #Script Starts here 515 | clear 516 | echo 517 | unset DATE_STR 518 | DATE_STR=`date '+%m-%d-%a_%H-%M-%S'` 519 | sign_files=sign_$DATE_STR 520 | #This sign_-->"date"<-- is for not conflicting with previously 521 | #created folder 522 | mkdir $sign_files 523 | echo 524 | echo " This section is only for ZIP sign of ROM or any other" 525 | echo 526 | echo " ZIP which contain META-INF folder NOT for apk signing" 527 | echo 528 | echo " Also one zip at a time, don't place multiple zips " 529 | echo 530 | cecho W "" " ZIP FILE MUST NOT CONTAIN SPACE" 531 | sleep 1 532 | echo 533 | cecho G " Creating folder" " `pwd`/$sign_files" 534 | echo 535 | cecho C " Copy your ZIP file into the" " $sign_files " "folder" 536 | WAIT 537 | 538 | cd $sign_files 539 | ZIP_N=`find *.zip 2>/dev/null` 540 | if [ $? == 0 ] 541 | then 542 | clear 543 | cp ../tools/UNI/SIGN_TOOLS/testkey.* . 544 | cp ../tools/UNI/SIGN_TOOLS/signapk.jar . 545 | echo 546 | echo 547 | echo " Signing $ZIP_N .... " 548 | ZIP_F="signed_$ZIP_N" 549 | java -jar signapk.jar testkey.x509.pem testkey.pk8 $ZIP_N $ZIP_F 550 | if [ $? == 0 ] 551 | then 552 | rm -f testkey.* 553 | rm -f signapk.jar 554 | rm -f $ZIP_N 555 | echo 556 | echo 557 | echo " SIGNED $ZIP_F " 558 | echo 559 | cecho G "" " Found in `pwd`/$sign_files" " folder" 560 | cd .. 561 | WAIT 562 | EXT_MAIN 563 | else 564 | clear 565 | echo 566 | cecho R "" " Signing failed " 567 | echo 568 | echo " Possible reasons :" 569 | echo 570 | echo " 1) Java not installed properly , PATH to java" 571 | echo " is not set, try typing java in terminal " 572 | echo 573 | echo " 2) Zip file does not contain META-INF folder " 574 | echo 575 | echo " 3) Corrupted ZIP file " 576 | echo 577 | echo " That's all , try again" 578 | cd .. 579 | rm -rf $sign_files 580 | WAIT 581 | EXT_MAIN 582 | fi 583 | elif [ $? == 1 ] 584 | then 585 | clear 586 | echo 587 | echo 588 | cecho R " NO " "ZIP" " FILE FOUND" 589 | rm -rf $sign_files 590 | WAIT 591 | EXT_MAIN 592 | else 593 | clear 594 | echo 595 | cecho R "" " UNKNOWN REASON " 596 | echo 597 | echo " Either copy your zip file to sign_folder " 598 | echo 599 | echo " or Use a different zip file " 600 | WAIT 601 | EXT_MAIN 602 | fi 603 | } 604 | 605 | #START - HOME 606 | EXT_START() { 607 | clear 608 | echo 609 | echo 610 | cecho W "" " Marshmallow/Lollipop " 611 | cecho W "" " System extractor & repack " 612 | cecho G " (" "by matrix" ")" 613 | cecho C "" " $DATE_STR" 614 | echo 615 | cecho W "" " Menu" 616 | echo 617 | cecho C " 1 - " "Unpack" " system.new.dat.br (and vendor.new.dat.br)" 618 | echo 619 | cecho C " 2 - " "Unpack" " system.new.dat" 620 | echo 621 | cecho C " 3 - " "Repack" " system.new.dat" 622 | echo 623 | cecho C " 4 - " "Unpack" " system.img" 624 | echo 625 | cecho C " 5 - " "Sign" " ZIP files" 626 | echo 627 | cecho C " u - " "Unmount" " output" 628 | echo 629 | cecho C " x - " "Exit" 630 | echo 631 | echo 632 | } 633 | 634 | E_SYS() { 635 | 636 | unset DATE_STR 637 | DATE_STR=`date '+%m-%d-%a_%H-%M-%S'` 638 | #For not conflicting with previous extracted files 639 | #Based on dxdia's kitchen 640 | extract=extract_$DATE_STR 641 | mkdir $extract 642 | clear 643 | echo 644 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 645 | echo ":: ::" 646 | echo -e ":: Copy " "\033[0;92msystem.img\033[0m"" ::" 647 | echo ":: ::" 648 | echo -e "::" " to ""\033[0;97m$extract\033[0m"" folder. ::" 649 | echo ":: ::" 650 | echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::" 651 | echo 652 | WAIT "" 653 | 654 | clear 655 | if [ ! -f $extract/system.img ] 656 | then 657 | echo 658 | cecho R " File" " system.img " "does not exist! " 659 | echo 660 | cecho P " in " "$extract " "folder , try again by " 661 | echo 662 | echo " placing system.img in mentioned folder " 663 | rm -rf $extract 664 | WAIT " " 665 | EXT_MAIN 666 | fi 667 | cd $extract 668 | 669 | echo 670 | echo " Found system.img" 671 | echo 672 | sleep 0.5 673 | echo " converting system.img to system.raw.img " 674 | if [ `uname | grep Linux` ] #IF-1 675 | then 676 | cp ../tools/UNI/simg2img . 677 | ./simg2img system.img system.raw.img 678 | elif [ `uname | grep CYGWIN` ] 679 | then 680 | cp ../tools/Cygwin/simg2img.exe . 681 | ./simg2img.exe system.img system.raw.img 682 | fi 683 | echo 684 | if [ -f system.raw.img ] #IF-2 685 | then 686 | rm -f system.img 687 | rm -f simg2img simg2img.exe 688 | echo " Successfully Converted into System.raw.img" 689 | sleep 1 690 | 691 | if [ `uname | grep Linux` ] #IF-1 692 | then 693 | echo 694 | cecho W "" " Mounting system.raw.img to output folder" 695 | echo 696 | read -p " Hit Enter to continue to mount" 697 | echo 698 | if [ ! -e output ] 699 | then 700 | mkdir output 701 | fi 702 | #IN Ubuntu mount worked but in other OS 703 | #IDK it will or will not work 704 | sudo mount -t ext4 -o loop system.raw.img output/ 705 | if [ $? == 0 ] 706 | then 707 | echo 708 | echo " DONE! Mounted system.raw.img in output folder" 709 | echo 710 | cd .. 711 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 712 | EXT_MAIN 713 | else 714 | echo 715 | echo " Mount Failed Please try another method!" 716 | echo 717 | cd .. 718 | WAIT " " 719 | EXT_MAIN 720 | fi 721 | elif [ `uname | grep CYGWIN` ] 722 | then 723 | cp ../tools/Cygwin/ImgExtractor.exe . 724 | echo 725 | cecho W "" " Converting system.raw.img to system_ folder" 726 | sleep 2 727 | ./ImgExtractor.exe system.raw.img -i 728 | if [ -e system_ ] 729 | then 730 | rm -f ImgExtractor.exe 731 | echo 732 | echo " Extracted system.raw.img to system_ folder" 733 | echo 734 | read -p " ALL DONE HIT ENTER TO CONTINUE TO MENU" 735 | echo 736 | echo 737 | cd .. 738 | EXT_MAIN 739 | fi 740 | fi 741 | fi 742 | 743 | } 744 | 745 | 746 | #MENU 747 | EXT_MAIN() { 748 | while : 749 | do 750 | 751 | clear 752 | unset DATE_STR 753 | DATE_STR=`date '+%m-%d-%y'` 754 | EXT_START 755 | read -p "Enter option: " CHOICE 756 | case "$CHOICE" in 757 | 1) E_OREO ;; #CONTRIB 758 | 2) E_DAT ;; #DONE 759 | 3) clear ; echo NOT YET DONE ; exit ;; 760 | 4) E_SYS ;; 761 | 5) SIGN_ZIP ;; #DONE 762 | u|U) UN_MNT ;; #DONE 763 | X|x) clear; echo; echo "Thanks for using."; echo; exit 1;; 764 | *) cecho R "" " Invalid option"; sleep 0.3; continue;; 765 | esac 766 | 767 | done 768 | } 769 | 770 | #DEPLOYING function 771 | EXT_CHECK 772 | EXT_MAIN 773 | -------------------------------------------------------------------------------- /tools/Cygwin/ImgExtractor.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/Cygwin/ImgExtractor.exe -------------------------------------------------------------------------------- /tools/Cygwin/LOG: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tools/Cygwin/cyggcc_s-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/Cygwin/cyggcc_s-1.dll -------------------------------------------------------------------------------- /tools/Cygwin/cygwin1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/Cygwin/cygwin1.dll -------------------------------------------------------------------------------- /tools/Cygwin/make_ext4fs.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/Cygwin/make_ext4fs.exe -------------------------------------------------------------------------------- /tools/Cygwin/simg2img.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/Cygwin/simg2img.exe -------------------------------------------------------------------------------- /tools/LOG: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tools/UNI/LOG: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tools/UNI/SIGN_TOOLS/LOG: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /tools/UNI/SIGN_TOOLS/signapk.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/UNI/SIGN_TOOLS/signapk.jar -------------------------------------------------------------------------------- /tools/UNI/SIGN_TOOLS/testkey.pk8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/UNI/SIGN_TOOLS/testkey.pk8 -------------------------------------------------------------------------------- /tools/UNI/SIGN_TOOLS/testkey.x509.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIEqDCCA5CgAwIBAgIJAJNurL4H8gHfMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD 3 | VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4g 4 | VmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UE 5 | AxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAe 6 | Fw0wODAyMjkwMTMzNDZaFw0zNTA3MTcwMTMzNDZaMIGUMQswCQYDVQQGEwJVUzET 7 | MBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4G 8 | A1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9p 9 | ZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZI 10 | hvcNAQEBBQADggENADCCAQgCggEBANaTGQTexgskse3HYuDZ2CU+Ps1s6x3i/waM 11 | qOi8qM1r03hupwqnbOYOuw+ZNVn/2T53qUPn6D1LZLjk/qLT5lbx4meoG7+yMLV4 12 | wgRDvkxyGLhG9SEVhvA4oU6Jwr44f46+z4/Kw9oe4zDJ6pPQp8PcSvNQIg1QCAcy 13 | 4ICXF+5qBTNZ5qaU7Cyz8oSgpGbIepTYOzEJOmc3Li9kEsBubULxWBjf/gOBzAzU 14 | RNps3cO4JFgZSAGzJWQTT7/emMkod0jb9WdqVA2BVMi7yge54kdVMxHEa5r3b97s 15 | zI5p58ii0I54JiCUP5lyfTwE/nKZHZnfm644oLIXf6MdW2r+6R8CAQOjgfwwgfkw 16 | HQYDVR0OBBYEFEhZAFY9JyxGrhGGBaR0GawJyowRMIHJBgNVHSMEgcEwgb6AFEhZ 17 | AFY9JyxGrhGGBaR0GawJyowRoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UE 18 | CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMH 19 | QW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAG 20 | CSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJAJNurL4H8gHfMAwGA1Ud 21 | EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHqvlozrUMRBBVEY0NqrrwFbinZa 22 | J6cVosK0TyIUFf/azgMJWr+kLfcHCHJsIGnlw27drgQAvilFLAhLwn62oX6snb4Y 23 | LCBOsVMR9FXYJLZW2+TcIkCRLXWG/oiVHQGo/rWuWkJgU134NDEFJCJGjDbiLCpe 24 | +ZTWHdcwauTJ9pUbo8EvHRkU3cYfGmLaLfgn9gP+pWA7LFQNvXwBnDa6sppCccEX 25 | 31I828XzgXpJ4O+mDL1/dBd+ek8ZPUP0IgdyZm5MTYPhvVqGCHzzTy3sIeJFymwr 26 | sBbmg2OAUNLEMO6nwmocSdN2ClirfxqCzJOLSDE4QyS9BAH6EhY6UFcOaE0= 27 | -----END CERTIFICATE----- 28 | -------------------------------------------------------------------------------- /tools/UNI/sdat2img.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | #==================================================== 4 | # FILE: sdat2img.py 5 | # AUTHORS: xpirt - luxi78 - howellzhu 6 | # DATE: 2018-05-25 10:49:35 CEST 7 | #==================================================== 8 | 9 | import sys, os, errno 10 | 11 | def main(TRANSFER_LIST_FILE, NEW_DATA_FILE, OUTPUT_IMAGE_FILE): 12 | __version__ = '1.1' 13 | 14 | if sys.hexversion < 0x02070000: 15 | print >> sys.stderr, "Python 2.7 or newer is required." 16 | try: 17 | input = raw_input 18 | except NameError: pass 19 | input('Press ENTER to exit...') 20 | sys.exit(1) 21 | else: 22 | print('sdat2img binary - version: %s\n' % __version__) 23 | 24 | def rangeset(src): 25 | src_set = src.split(',') 26 | num_set = [int(item) for item in src_set] 27 | if len(num_set) != num_set[0]+1: 28 | print('Error on parsing following data to rangeset:\n%s' % src) 29 | sys.exit(1) 30 | 31 | return tuple ([ (num_set[i], num_set[i+1]) for i in range(1, len(num_set), 2) ]) 32 | 33 | def parse_transfer_list_file(path): 34 | trans_list = open(TRANSFER_LIST_FILE, 'r') 35 | 36 | # First line in transfer list is the version number 37 | version = int(trans_list.readline()) 38 | 39 | # Second line in transfer list is the total number of blocks we expect to write 40 | new_blocks = int(trans_list.readline()) 41 | 42 | if version >= 2: 43 | # Third line is how many stash entries are needed simultaneously 44 | trans_list.readline() 45 | # Fourth line is the maximum number of blocks that will be stashed simultaneously 46 | trans_list.readline() 47 | 48 | # Subsequent lines are all individual transfer commands 49 | commands = [] 50 | for line in trans_list: 51 | line = line.split(' ') 52 | cmd = line[0] 53 | if cmd in ['erase', 'new', 'zero']: 54 | commands.append([cmd, rangeset(line[1])]) 55 | else: 56 | # Skip lines starting with numbers, they are not commands anyway 57 | if not cmd[0].isdigit(): 58 | print('Command "%s" is not valid.' % cmd) 59 | trans_list.close() 60 | sys.exit(1) 61 | 62 | trans_list.close() 63 | return version, new_blocks, commands 64 | 65 | BLOCK_SIZE = 4096 66 | 67 | version, new_blocks, commands = parse_transfer_list_file(TRANSFER_LIST_FILE) 68 | 69 | if version == 1: 70 | print('Android Lollipop 5.0 detected!\n') 71 | elif version == 2: 72 | print('Android Lollipop 5.1 detected!\n') 73 | elif version == 3: 74 | print('Android Marshmallow 6.x detected!\n') 75 | elif version == 4: 76 | print('Android Nougat 7.x / Oreo 8.x detected!\n') 77 | else: 78 | print('Unknown Android version!\n') 79 | 80 | # Don't clobber existing files to avoid accidental data loss 81 | try: 82 | output_img = open(OUTPUT_IMAGE_FILE, 'wb') 83 | except IOError as e: 84 | if e.errno == errno.EEXIST: 85 | print('Error: the output file "{}" already exists'.format(e.filename)) 86 | print('Remove it, rename it, or choose a different file name.') 87 | sys.exit(e.errno) 88 | else: 89 | raise 90 | 91 | new_data_file = open(NEW_DATA_FILE, 'rb') 92 | all_block_sets = [i for command in commands for i in command[1]] 93 | max_file_size = max(pair[1] for pair in all_block_sets)*BLOCK_SIZE 94 | 95 | for command in commands: 96 | if command[0] == 'new': 97 | for block in command[1]: 98 | begin = block[0] 99 | end = block[1] 100 | block_count = end - begin 101 | print('Copying {} blocks into position {}...'.format(block_count, begin)) 102 | 103 | # Position output file 104 | output_img.seek(begin*BLOCK_SIZE) 105 | 106 | # Copy one block at a time 107 | while(block_count > 0): 108 | output_img.write(new_data_file.read(BLOCK_SIZE)) 109 | block_count -= 1 110 | else: 111 | print('Skipping command %s...' % command[0]) 112 | 113 | # Make file larger if necessary 114 | if(output_img.tell() < max_file_size): 115 | output_img.truncate(max_file_size) 116 | 117 | output_img.close() 118 | new_data_file.close() 119 | print('Done! Output image: %s' % os.path.realpath(output_img.name)) 120 | 121 | if __name__ == '__main__': 122 | try: 123 | TRANSFER_LIST_FILE = str(sys.argv[1]) 124 | NEW_DATA_FILE = str(sys.argv[2]) 125 | except IndexError: 126 | print('\nUsage: sdat2img.py [system_img]\n') 127 | print(' : transfer list file') 128 | print(' : system new dat file') 129 | print(' [system_img]: output system image\n\n') 130 | print('Visit xda thread for more information.\n') 131 | try: 132 | input = raw_input 133 | except NameError: pass 134 | input('Press ENTER to exit...') 135 | sys.exit() 136 | 137 | try: 138 | OUTPUT_IMAGE_FILE = str(sys.argv[3]) 139 | except IndexError: 140 | OUTPUT_IMAGE_FILE = 'system.img' 141 | 142 | main(TRANSFER_LIST_FILE, NEW_DATA_FILE, OUTPUT_IMAGE_FILE) 143 | -------------------------------------------------------------------------------- /tools/UNI/simg2img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/matriex/System_Extractor-Linux/a499f8489f813415fc3e3a0adac6fbe3a5213e0e/tools/UNI/simg2img --------------------------------------------------------------------------------