Advertisement
Guest User

interface2.py

a guest
Jan 22nd, 2020
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.36 KB | None | 0 0
  1. #coding=utf-8
  2. import sys
  3. import subprocess
  4. import time
  5. import datetime
  6. import os
  7. import pyadb3
  8. import hashlib
  9. import logging
  10. from PyQt5.QtWidgets import *
  11. from PyQt5.QtCore import *
  12. from PyQt5 import QtGui, QtCore, QtWidgets
  13.  
  14.  
  15. class rootHp(QThread):
  16.  
  17. def run(self):
  18. shellRoot = pyadb3.ADB()
  19. shellRoot.run_shell_cmd("adb -d 'su'")
  20.  
  21.  
  22. class ShellHpInt(QThread):
  23.  
  24. def run(self):
  25. shellInt = pyadb3.ADB()
  26. shellInt.run_shell_cmd("dd if=/dev/block/mmcblk0 | busybox nc -l -p 8888")
  27.  
  28.  
  29. class ShellHpExt(QThread):
  30.  
  31. def run(self):
  32. shellExt = pyadb3.ADB()
  33. shellExt.run_shell_cmd("dd if=/dev/block/mmcblk1 | busybox nc -l -p 8888")
  34.  
  35.  
  36. class NetcatInt(QThread):
  37. def run(self):
  38. ncDetail = App2.textDetailGlobal
  39. ncOutFile = App2.outFileGlobal
  40. ncNameFileLog = App2.lineFileGlobal
  41. ncDirect = App2.devPath
  42. ncExam = App2.globalExa
  43.  
  44. ncNameFileInt = ncNameFileLog+ "_Int"
  45. fullNameFile = ncNameFileInt + ".dd"
  46. bDirect = "/" + fullNameFile
  47. allDirect = ncDirect + bDirect
  48.  
  49. ncLog = ncNameFileLog+ ".log"
  50. ncOutLog = ncDirect + "/" + ncLog
  51.  
  52. klikMulaiInt = App2.klikMulai
  53.  
  54. logging.basicConfig(filename=ncOutLog, level=logging.INFO, format='%(levelname)s:%(message)s')
  55.  
  56. subprocess.getoutput('nc 127.0.0.1 8888 > ' + ncOutFile + '/' + fullNameFile)
  57.  
  58.  
  59. if commentNcInt == '':
  60. selesaiAkusisiInt = datetime.datetime.today().strftime("%d %B %Y, %H:%M:%S")
  61. ncDetail.append("---- The Process of Acquisition Internal Storage has been Completed ----")
  62. ncDetail.append("Start Acquistion\t: " + klikMulaiInt)
  63. ncDetail.append("End Acquistion\t: " + selesaiAkusisiInt)
  64. ncDetail.append("\t\t----- Calculate Hashing Internal -----")
  65.  
  66. block_size = 2 ** 20
  67. md5a = hashlib.md5()
  68. with open(allDirect, 'rb') as fileCloning:
  69. while True:
  70. readCloning = fileCloning.read(block_size)
  71. if not readCloning:
  72. break
  73. md5a.update(readCloning)
  74.  
  75. hasilCloningInt = md5a.hexdigest()
  76.  
  77. adbHashInt = pyadb3.ADB()
  78. coHashInt = adbHashInt.run_shell_cmd("md5sum /dev/block/mmcblk0")
  79. splitHashInt = "{coHashInt}".format(coHashInt=coHashInt)
  80. hasilHashInt = splitHashInt[2:34]
  81.  
  82. ncDetail.append("File Name\t\t: " + fullNameFile)
  83. ncDetail.append("Directory\t\t: " + allDirect)
  84. ncDetail.append("Md5 Source\t\t: " + hasilHashInt)
  85. ncDetail.append("Md5 Cloning\t\t: " + hasilCloningInt)
  86.  
  87. logging.info("Examiner\t\t: {}\n".format(ncExam))
  88. logging.info("---- The Results of an Internal Image File ----")
  89. logging.info("Storage\t\t: Internal")
  90. logging.info("Source Directory\t: /dev/block/mmcblk0\n")
  91. logging.info("Start Acquistion\t: {}".format(klikMulaiInt))
  92. logging.info("End Acquistion\t: {}\n".format(selesaiAkusisiInt))
  93. logging.info("File Name\t\t: {}".format(fullNameFile))
  94. logging.info("Directory\t\t: {}".format(allDirect))
  95. logging.info("Source MD5 Hash\t: {}".format(hasilHashInt))
  96. logging.info("Cloning MD5 Hash\t: {}".format(hasilCloningInt))
  97.  
  98. if hasilHashInt == hasilCloningInt:
  99. ncDetail.append("Md5 Hash Matched\n")
  100. logging.info("MD5 Hash Matched\n")
  101. else:
  102. ncDetail.append("Md5 Hash Not Matched\n")
  103. logging.info("MD5 Hash Not Matched\n")
  104.  
  105. class NetcatExt(QThread):
  106. def run(self):
  107. ncDetail = App2.textDetailGlobal
  108. ncOutFile = App2.outFileGlobal
  109. ncNameFileLog = App2.lineFileGlobal
  110. ncDirect = App2.devPath
  111. ncExam = App2.globalExa
  112.  
  113. ncNameFileExt = ncNameFileLog+ "_Ext"
  114. fullNameFile = ncNameFileExt + ".dd"
  115. bDirect = "/" + fullNameFile
  116. allDirect = ncDirect + bDirect
  117.  
  118. ncLog = ncNameFileLog+ ".log"
  119. ncOutLog = ncDirect + "/" + ncLog
  120.  
  121. klikMulaiExt = App2.klikMulai
  122.  
  123. logging.basicConfig(filename=ncOutLog, level=logging.INFO, format='%(levelname)s:%(message)s')
  124.  
  125. commentNcExt = subprocess.getoutput('nc 127.0.0.1 8888 > ' + ncOutFile + '/' + fullNameFile)
  126.  
  127.  
  128. if commentNcExt == '':
  129. selesaiAkusisiExt = datetime.datetime.today().strftime("%d %B %Y, %H:%M:%S")
  130. ncDetail.append("---- The Process of Acquisition External Storage has been Completed ----")
  131. ncDetail.append("Start Acquisition\t: " + klikMulaiExt)
  132. ncDetail.append("End Acquisition\t: " + selesaiAkusisiExt)
  133. ncDetail.append("\t\t----- Calculate Hashing External -----")
  134.  
  135. block_size = 2 ** 20
  136. md5b = hashlib.md5()
  137. with open(allDirect, 'rb') as fileCloning:
  138. while True:
  139. readCloning = fileCloning.read(block_size)
  140. if not readCloning:
  141. break
  142. md5b.update(readCloning)
  143.  
  144. hasilCloningExt = md5b.hexdigest()
  145.  
  146. adbHashExt = pyadb3.ADB()
  147. coHashExt = adbHashExt.run_shell_cmd("md5sum /dev/block/mmcblk1")
  148. splitHashExt = "{coHashExt}".format(coHashExt=coHashExt)
  149. hasilHashExt = splitHashExt[2:34]
  150.  
  151. ncDetail.append("File Name\t\t: " +fullNameFile)
  152. ncDetail.append("Directory\t\t: " +allDirect)
  153. ncDetail.append("Md5 Source\t\t: " + hasilHashExt)
  154. ncDetail.append("Md5 Cloning\t\t: " +hasilCloningExt)
  155.  
  156. logging.info("Examiner\t\t: {}\n".format(ncExam))
  157. logging.info("---- The Results of an External Image File ----")
  158. logging.info("Storage\t\t: External")
  159. logging.info("Source Directory\t: /dev/block/mmcblk1\n")
  160. logging.info("Start Acquisition\t: {}".format(klikMulaiExt))
  161. logging.info("End Acquisition\t: {}\n".format(selesaiAkusisiExt))
  162. logging.info("File Name\t\t: {}".format(fullNameFile))
  163. logging.info("Directory\t\t: {}".format(allDirect))
  164. logging.info("Source MD5 Hash\t: {}".format(hasilHashExt))
  165. logging.info("Cloning MD5 Hash\t: {}".format(hasilCloningExt))
  166.  
  167. if hasilHashExt == hasilCloningExt:
  168. ncDetail.append("Md5 Hash Matched\n")
  169. logging.info("MD5 Hash Matched\n")
  170. else:
  171. ncDetail.append("Md5 Hash Not Matched\n")
  172. logging.info("MD5 Hash Not Matched\n")
  173.  
  174.  
  175. TIME_LIMIT = 1000000000
  176.  
  177. class ProgressBarInt(QThread):
  178.  
  179. countChangedInt = pyqtSignal(int)
  180.  
  181. def run(self):
  182. count = 0
  183. pbNameFile = App2.lineFileGlobal+ "_Int"
  184. PbOutFileInt = App2.outFileGlobal
  185. PbNameFileInt = pbNameFile +".dd"
  186. PbAll = PbOutFileInt+"/"+PbNameFileInt
  187. PbAllReplace = PbAll.replace("/","//")
  188.  
  189. while count < TIME_LIMIT:
  190. count +=1
  191. time.sleep(1)
  192. size=0
  193. try:
  194. size = os.path.getsize(PbAllReplace)
  195. size = size / 1024
  196.  
  197. except:
  198. print("File Belum ada")
  199.  
  200. self.countChangedInt.emit(size)
  201. if (size >= App2.sizePbInt):
  202. break
  203.  
  204. TIME_LIMIT2 = 1000000000
  205. class ProgressBarExt(QThread):
  206.  
  207. countChangedExt = pyqtSignal(int)
  208.  
  209. def run(self):
  210. count = 0
  211. pbNameFile = App2.lineFileGlobal+ "_Ext"
  212. PbOutFileExt = App2.outFileGlobal
  213. PbNameFileExt = pbNameFile + ".dd"
  214. PbAll = PbOutFileExt + "/" + PbNameFileExt
  215. PbAllReplace = PbAll.replace("/", "//")
  216.  
  217. while count < TIME_LIMIT2:
  218. count += 1
  219. time.sleep(1)
  220. size = 0
  221. try:
  222. size = os.path.getsize(PbAllReplace)
  223. size = size / 1024
  224.  
  225. except:
  226. print("File Belum ada")
  227.  
  228. self.countChangedExt.emit(size)
  229. if (size >= App2.sizePbExt):
  230. break
  231.  
  232.  
  233. class App2(QMainWindow):
  234. sizePbInt=0
  235. sizePbExt=0
  236.  
  237. def __init__(self):
  238. super().__init__()
  239. self.window1 = self
  240. self.directBack = False
  241. self.interface()
  242.  
  243.  
  244. def interface(self):
  245. self.resize(640, 480)
  246. self.setWindowTitle('Disk Imaging Applications on Android Phone Using TWRP')
  247. # self.setWindowIcon(QtGui.QIcon("C:/Users/Waldy/Desktop/Skripsi/icon/icon 3.png"))
  248.  
  249. menubar = self.menuBar().addMenu('File')
  250. actionExit = menubar.addAction('Exit')
  251. actionExit.triggered.connect(self.clk_Exit)
  252. menuAbout = self.menuBar().addMenu('About')
  253. actionAbout = menuAbout.addAction('About')
  254. actionAbout.triggered.connect(self.clk_about)
  255.  
  256. self.groupBox = QGroupBox("Destination File :", self)
  257. self.groupBox.setGeometry(40, 25, 540, 165)
  258. font = QtGui.QFont()
  259. font.setFamily("Times New Roman")
  260. font.setPointSize(13)
  261. self.groupBox.setFont(font)
  262.  
  263. self.textFileInt = QLabel('File Name : ', self.groupBox)
  264. self.textFileInt.setGeometry(30, 25, 130, 25)
  265. font = QtGui.QFont()
  266. font.setPointSize(11)
  267. self.textFileInt.setFont(font)
  268.  
  269. self.lineFile = QLineEdit(self.groupBox)
  270. self.lineFile.setGeometry(130, 25, 320, 25)
  271.  
  272. self.textImage = QLabel('Image Type :', self.groupBox)
  273. self.textImage.setGeometry(30, 55, 81, 25)
  274. font = QtGui.QFont()
  275. font.setPointSize(11)
  276. self.textImage.setFont(font)
  277.  
  278. self.checkDD = QRadioButton('Raw (.dd)', self.groupBox)
  279. self.checkDD.setGeometry(130, 60, 81, 20)
  280. font = QtGui.QFont()
  281. font.setPointSize(10)
  282. self.checkDD.setFont(font)
  283.  
  284. self.textStorage = QLabel('Storage :', self.groupBox)
  285. self.textStorage.setGeometry(290, 55, 81, 25)
  286. font = QtGui.QFont()
  287. font.setPointSize(11)
  288. self.textStorage.setFont(font)
  289.  
  290. self.radioExternal = QCheckBox('External', self.groupBox)
  291. self.radioExternal.setGeometry(370, 70, 81, 20)
  292. self.radioExternal.toggled.connect(self.radio_toggled)
  293. font = QtGui.QFont()
  294. font.setPointSize(10)
  295. self.radioExternal.setFont(font)
  296.  
  297. self.radioInternal = QCheckBox('Internal', self.groupBox)
  298. self.radioInternal.setGeometry(370, 55, 81, 20)
  299. self.radioInternal.toggled.connect(self.radio_toggled)
  300. font = QtGui.QFont()
  301. font.setPointSize(10)
  302. self.radioInternal.setFont(font)
  303.  
  304. self.textExa = QLabel('Examiner :', self.groupBox)
  305. self.textExa.setGeometry(30, 95, 82, 25)
  306. font = QtGui.QFont()
  307. font.setPointSize(11)
  308. self.textExa.setFont(font)
  309.  
  310. self.lineExa = QLineEdit(self.groupBox)
  311. self.lineExa.setGeometry(130, 95, 320, 25)
  312.  
  313. self.textOut = QLabel('Output Location :', self.groupBox)
  314. self.textOut.setGeometry(30, 130, 121, 25)
  315. font = QtGui.QFont()
  316. font.setPointSize(10)
  317. self.textOut.setFont(font)
  318.  
  319. self.lineOut = QLineEdit(self.groupBox)
  320. self.lineOut.setGeometry(130, 130, 320, 25)
  321. self.lineOut.setDisabled(True)
  322.  
  323. self.toolFolder = QToolButton(self.groupBox)
  324. self.toolFolder.setGeometry(455, 130, 31, 25)
  325. self.toolFolder.setText("")
  326. icon = QtGui.QIcon()
  327. self.toolFolder.setIcon(icon)
  328. self.toolFolder.setIconSize(QtCore.QSize(20, 20))
  329.  
  330. self.textProgressInt = QLabel('Acquisition Progress : Int :', self)
  331. self.textProgressInt.setGeometry(20, 200, 155, 25)
  332. font = QtGui.QFont()
  333. font.setPointSize(10)
  334. self.textProgressInt.setFont(font)
  335.  
  336. self.progressBar = QProgressBar(self)
  337. self.progressBar.setGeometry(180, 200, 400, 25)
  338. self.progressBar.setProperty("value", 0)
  339.  
  340. self.textProgressExt = QLabel('Ext :', self)
  341. self.textProgressExt.setGeometry(145, 230, 155, 25)
  342. font = QtGui.QFont()
  343. font.setPointSize(10)
  344. self.textProgressExt.setFont(font)
  345.  
  346. self.progressBarExt = QProgressBar(self)
  347. self.progressBarExt.setGeometry(180, 230, 400, 25)
  348. self.progressBarExt.setProperty("value", 0)
  349.  
  350. self.groupBox2 = QGroupBox('Detail :', self)
  351. self.groupBox2.setGeometry(40, 255, 540, 160)
  352. font = QtGui.QFont()
  353. font.setPointSize(11)
  354. font.setWeight(50)
  355. self.groupBox2.setFont(font)
  356.  
  357. self.textBrowser = QTextBrowser(self.groupBox2)
  358. self.textBrowser.setGeometry(10, 20, 520, 130)
  359.  
  360. self.pushBack = QPushButton('Back', self)
  361. self.pushBack.setGeometry(440, 425, 81, 35)
  362. self.pushBack.setLayoutDirection(QtCore.Qt.LeftToRight)
  363. icon1 = QtGui.QIcon()
  364. self.pushBack.setIcon(icon1)
  365. self.pushBack.setIconSize(QtCore.QSize(18, 18))
  366.  
  367. self.pushExtract = QPushButton('Extract', self)
  368. self.pushExtract.setGeometry(530, 425, 81, 35)
  369. self.pushExtract.setLayoutDirection(QtCore.Qt.LeftToRight)
  370. icon1 = QtGui.QIcon()
  371. self.pushExtract.setIcon(icon1)
  372. self.pushExtract.setIconSize(QtCore.QSize(18, 20))
  373.  
  374. self.show()
  375.  
  376. self.pushExtract.setDisabled(True)
  377.  
  378. self.lineFile.textChanged.connect(self.disableExtract)
  379. self.lineOut.textChanged.connect(self.disableExtract)
  380. self.lineExa.textChanged.connect(self.disableExtract)
  381. self.checkDD.toggled.connect(self.disableExtract)
  382. self.radioInternal.toggled.connect(self.disableExtract)
  383. self.radioExternal.toggled.connect(self.disableExtract)
  384.  
  385. self.toolFolder.clicked.connect(self.clk_fold)
  386. self.pushExtract.clicked.connect(self.clk_extr)
  387. self.pushBack.clicked.connect(self.clk_back)
  388.  
  389. def disableExtract(self):
  390.  
  391. if self.checkDD.isChecked() and self.radioInternal.isChecked() and len(self.lineFile.text() and self.lineExa.text() and self.lineOut.text()) > 0:
  392. self.pushExtract.setDisabled(False)
  393. if self.radioExternal.isChecked():
  394. self.pushExtract.setDisabled(False)
  395.  
  396. elif self.checkDD.isChecked() and self.radioExternal.isChecked() and len(self.lineFile.text() and self.lineExa.text() and self.lineOut.text()) > 0:
  397. self.pushExtract.setDisabled(False)
  398. if self.radioInternal.isChecked():
  399. self.pushExtract.setDisabled(False)
  400.  
  401. else:
  402. self.pushExtract.setDisabled(True)
  403.  
  404. def onCountChangedInt(self, value):
  405. self.progressBar.setValue(value)
  406.  
  407. def onCountChangedExt(self, value):
  408. self.progressBarExt.setValue(value)
  409.  
  410.  
  411. def clk_fold(self):
  412. self.folderPath = QFileDialog.getExistingDirectory(self, 'Select Folder')
  413. self.lineOut.setText(self.folderPath)
  414.  
  415. def clk_Exit(self):
  416. reply = QMessageBox.question(self, "Caution",
  417. "Γ„re you sure to exit?", QMessageBox.No | QMessageBox.Yes)
  418.  
  419. if reply == QMessageBox.Yes:
  420. subprocess.call('adb kill-server')
  421. QApplication.quit()
  422. else:
  423. pass
  424.  
  425. def clk_back(self):
  426. self.directBack = True
  427. self.window1.show()
  428. self.destroy()
  429. self.close()
  430.  
  431.  
  432. def closeEvent(self, eventQCloseEvent):
  433. if self.directBack == True:
  434. eventQCloseEvent.accept()
  435. else:
  436. reply = QMessageBox.question(self, "Caution",
  437. "All running processes will be canceled \nAre you sure to exit",
  438. QMessageBox.Yes | QMessageBox.No)
  439. if reply == QMessageBox.Yes:
  440. subprocess.call('adb kill-server')
  441. eventQCloseEvent.accept()
  442. else:
  443. eventQCloseEvent.ignore()
  444.  
  445.  
  446. def clk_extr(self):
  447. App2.outFileGlobal = self.lineOut.text()
  448. App2.lineFileGlobal = self.lineFile.text()
  449. App2.textDetailGlobal = self.textBrowser
  450. App2.globalExa = self.lineExa.text()
  451. App2.devPath = self.folderPath
  452. App2.klikMulai = datetime.datetime.today().strftime("%d %B %Y, %H:%M:%S")
  453. checkint = self.radioInternal.isChecked()
  454. checkExt = self.radioExternal.isChecked()
  455.  
  456. self.textBrowser.setPlainText("Examiner\t : " +App2.globalExa)
  457.  
  458. if checkint and checkExt:
  459. self.textBrowser.setPlainText("Storage\t\t: Internal")
  460. self.textBrowser.append("Source Directory Int\t: /dev/block/mmcblk0")
  461.  
  462. adbSize = pyadb3.ADB()
  463. adbSizeOut = adbSize.run_shell_cmd("cat /proc/partitions | grep mmcblk0")
  464. sizeSplitInt = adbSizeOut.split()[2]
  465. sizeReplace = "{sizeSplitInt}".format(sizeSplitInt=sizeSplitInt).replace("b", "").replace("'", "")
  466. sizeforInt = int(sizeReplace)/1024/1024
  467. self.progressBar.setMaximum(int(sizeReplace))
  468. App2.sizePbInt = int(sizeReplace)
  469. self.textBrowser.append("Size Storage Int\t:" +str(sizeforInt) +" GB\n")
  470.  
  471. self.textBrowser.append("Storage\t\t: External")
  472. self.textBrowser.append("Source Directory Ext\t: /dev/block/mmcblk1")
  473.  
  474. adbSize2 = pyadb3.ADB()
  475. adbSizeOut2 = adbSize2.run_shell_cmd("cat /proc/partitions | grep mmcblk1")
  476. sizeSplitExt = adbSizeOut2.split()[2]
  477. sizeReplace2 = "{sizeSplitExt}".format(sizeSplitExt=sizeSplitExt).replace("b", "").replace("'", "")
  478. sizeforExt = int(sizeReplace2)/1024/1024
  479. self.progressBarExt.setMaximum(int(sizeReplace2))
  480. App2.sizePbExt = int(sizeReplace2)
  481. self.textBrowser.append("Size Storage Ext\t:" +str(sizeforExt) +" GB\n")
  482.  
  483. self.forShellRoot = RootHp()
  484. self.forShellRoot.start()
  485.  
  486. time.sleep(5)
  487.  
  488. self.forShellInt = ShellHpInt()
  489. self.forShellInt.start()
  490.  
  491. time.sleep(5)
  492.  
  493. self.forNcInt = NetcatInt()
  494. self.forNcInt.start()
  495. self.bar1 = ProgressBarInt()
  496. self.bar1.countChangedInt.connect(self, self.onCountChangedInt)
  497. self.bar1.start()
  498.  
  499. time.sleep(5)
  500.  
  501. self.forShellExt = ShellHpExt()
  502. self.forShellExt.start()
  503.  
  504. time.sleep(5)
  505.  
  506. self.forNcExt = NetcatExt()
  507. self.forNcExt.start()
  508. self.bar2 = ProgressBarExt()
  509. self.bar2.countChangedExt.connect(self, self.onCountChangedExt)
  510. self.bar2.start()
  511.  
  512.  
  513. elif self.radioInternal.isChecked():
  514. self.textBrowser.setPlainText("Storage\t\t: Internal")
  515. self.textBrowser.append("Source Directory Int\t: /dev/block/mmcblk0")
  516.  
  517. adbSize = pyadb3.ADB()
  518. adbSizeOut = adbSize.run_shell_cmd("cat /proc/partitions | grep mmcblk0")
  519. sizeSplitInt = adbSizeOut.split()[2]
  520. sizeReplace = "{sizeSplitInt}".format(sizeSplitInt=sizeSplitInt).replace("b", "").replace("'", "")
  521. sizeforInt = int(sizeReplace) /1024/1024
  522. self.progressBar.setMaximum(int(sizeReplace))
  523. App2.sizePbInt = int(sizeReplace)
  524. self.textBrowser.append("Size Storage Int\t:" +str(sizeforInt) +" GB\n")
  525.  
  526. self.forShellRoot = rootHp()
  527. self.forShellRoot.start()
  528.  
  529. time.sleep(5)
  530.  
  531. self.forShellInt = ShellHpInt()
  532. self.forShellInt.start()
  533.  
  534. time.sleep(5)
  535.  
  536. self.forNcInt = NetcatInt()
  537. self.forNcInt.start()
  538. self.bar1 = ProgressBarInt()
  539. self.bar1.countChangedInt.connect(self.onCountChangedInt)
  540. self.bar1.start()
  541.  
  542. elif self.radioExternal.isChecked():
  543. self.textBrowser.append("Storage\t\t: External")
  544. self.textBrowser.append("Source Directory Ext\t: /dev/block/mmcblk1")
  545.  
  546. adbSize2 = pyadb3.ADB()
  547. adbSizeOut2 = adbSize2.run_shell_cmd("cat /proc/partitions | grep mmcblk1")
  548. sizeSplitExt = adbSizeOut2.split()[2]
  549. sizeReplace2 = "{sizeSplitExt}".format(sizeSplitExt=sizeSplitExt).replace("b", "").replace("'", "")
  550. sizeforExt = int(sizeReplace2) /1024/1024
  551. self.progressBarExt.setMaximum(int(sizeReplace2))
  552. App2.sizePbExt = int(sizeReplace2)
  553. self.textBrowser.append("Size Storage Ext\t:" +str(sizeforExt) +" GB\n")
  554.  
  555. self.forShellRoot = rootHp()
  556. self.forShellRoot.start
  557.  
  558. time.sleep(5)
  559.  
  560. self.forShellExt = ShellHpExt()
  561. self.forShellExt.start()
  562.  
  563. time.sleep(5)
  564.  
  565. self.forNcExt = NetcatExt()
  566. self.forNcExt.start()
  567. self.bar2 = ProgressBarExt()
  568. self.bar2.countChangedExt.connect(self, self.onCountChangedExt)
  569. self.bar2.start()
  570.  
  571. else:
  572. self.textBrowser.setPlainText("no choice")
  573.  
  574.  
  575. def radio_toggled(self):
  576.  
  577. App2.radioExt = self.radioExternal.isChecked()
  578. App2.radioInt = self.radioInternal.isChecked()
  579.  
  580. if App2.radioInt and App2.radioExt:
  581. self.textBrowser.setPlainText("Storage\t\t: Internal")
  582. self.textBrowser.append("Source Directory Int\t: /dev/block/mmcblk0")
  583. self.textBrowser.append("Storage\t\t: External")
  584. self.textBrowser.append("Source Directory Ext\t: /dev/block/mmcblk1")
  585.  
  586. elif self.radioInternal.isChecked():
  587. self.textBrowser.setPlainText("Storage\t\t: Internal")
  588. self.textBrowser.append("Source Directory Int\t: /dev/block/mmcblk0")
  589.  
  590. elif self.radioExternal.isChecked():
  591. cekStatusExt = pyadb3.ADB()
  592. statusExt = cekStatusExt.run_shell_cmd("cat /proc/partitions | grep mmcblk1")
  593. cekExt = "{statusExt}".format(statusExt=statusExt).replace("b", "").replace("'", "")
  594. self.textBrowser.append(str("adakek" + cekExt))
  595. if cekExt == '':
  596. self.textBrowser.append("external storage not found")
  597. self.radioExternal.setCheckState(False)
  598. self.radioExternal.setDisabled(True)
  599. else:
  600. self.textBrowser.setPlainText("Storage\t\t: External")
  601. self.textBrowser.append("Source Directory Ext\t: /dev/block/mmcblk1")
  602.  
  603.  
  604. def clk_about(self):
  605. QMessageBox.about(self, "About", "This Application is built with the Python programing language"
  606. "\n\nThis Application is to acquire Android storage with recovery mode/TWRP based on Windows platform"
  607. "\n\nThe Application can be run if the Android phone in recovery mode/TWRP designed to maintain the integrity of a files that will be generated"
  608. "\n\nFor install TWRP can be visited on the site: https://twrp.me/Devices/ or https://www.xda-developers.com/how-to-install-twrp/"
  609. "\n\nCopyright (C) 2018 - Waldy Nur Hamzah")
  610.  
  611.  
  612. if __name__ == '__main__':
  613. app = QApplication(sys.argv)
  614. ex2 = App2()
  615. ext.show
  616. sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement