├── .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
--------------------------------------------------------------------------------