script.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. # coding:utf8
  2. import os
  3. import logging
  4. import shutil
  5. from xml.etree import ElementTree as ET
  6. import traceback
  7. import distutils.dir_util
  8. import re
  9. import gw_report_tool
  10. import gw_data_center
  11. import gw_file_system
  12. import gw_apk_tool
  13. ANDROID_NS = 'http://schemas.android.com/apk/res/android'
  14. def script_second(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  15. # split(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info)
  16. return
  17. def script_pre(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  18. # handle_same_package(extract_dir, channel_sdk_info)
  19. return
  20. def script(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  21. # smali_classes2
  22. # split(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info)
  23. return
  24. def script_last(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  25. # smali_classes2
  26. sdk_id = channel_sdk_info['id']
  27. if sdk_id == "512":
  28. split(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info)
  29. if sdk_id == "549":
  30. # smali_classes6
  31. s1 = os.path.join(extract_dir, "smali_classes6", "com")
  32. smali_classes2_dir = create_mutil_smali(extract_dir)
  33. s3 = os.path.join(smali_classes2_dir, "com")
  34. list_package = ["JavaWebsocket", "mp4parser", "reactnative", "reactnativecommunity"]
  35. if not os.path.exists(s3):
  36. distutils.dir_util.mkpath(s3)
  37. move_package(s1, s3, list_package)
  38. def split(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  39. s1 = os.path.join(extract_dir, "smali_classes2")
  40. smali_classes2_dir = create_mutil_smali(extract_dir)
  41. s3 = smali_classes2_dir
  42. list_package = ["androidx"]
  43. if not os.path.exists(s3):
  44. distutils.dir_util.mkpath(s3)
  45. move_package(s1, s3, list_package)
  46. # smali_classes4
  47. s1 = os.path.join(extract_dir, "smali_classes4", "com")
  48. smali_classes2_dir = create_mutil_smali(extract_dir)
  49. s3 = os.path.join(smali_classes2_dir, "com")
  50. list_package = ["dataeye", "dylanvann", "example", "facebook", "github", "hw", "itrabbit", "lmy"]
  51. if not os.path.exists(s3):
  52. distutils.dir_util.mkpath(s3)
  53. move_package(s1, s3, list_package)
  54. # smali_classes6
  55. s1 = os.path.join(extract_dir, "smali_classes6", "com")
  56. smali_classes2_dir = create_mutil_smali(extract_dir)
  57. s3 = os.path.join(smali_classes2_dir, "com")
  58. list_package = ["dylanvann", "example", "facebook", "github", "hw", "itrabbit", "lmy"]
  59. if not os.path.exists(s3):
  60. distutils.dir_util.mkpath(s3)
  61. move_package(s1, s3, list_package)
  62. # smali_classes2
  63. s1 = os.path.join(extract_dir, "smali_classes2", "com")
  64. smali_classes2_dir = create_mutil_smali(extract_dir)
  65. s3 = os.path.join(smali_classes2_dir, "com")
  66. list_package = ["airbnb", "coremedia", "google", "JavaWebsocket", "netease", "reactnativecommunity",
  67. "shahenlibrary", "tencent", "yulong", "baidu", "facebook", " googlecode", "mp4parser",
  68. "reactnative", "scwang"]
  69. if not os.path.exists(s3):
  70. distutils.dir_util.mkpath(s3)
  71. move_package(s1, s3, list_package)
  72. # smali_classes3-11
  73. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  74. smali_classes2_dir = create_mutil_smali(extract_dir)
  75. s3 = os.path.join(smali_classes2_dir, "com")
  76. list_package = ["airbnb", "android", "bumptech", "CCMsgSdk", "coremedia"]
  77. if not os.path.exists(s3):
  78. distutils.dir_util.mkpath(s3)
  79. move_package(s1, s3, list_package)
  80. # smali_classes3-12
  81. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  82. smali_classes2_dir = create_mutil_smali(extract_dir)
  83. s3 = os.path.join(smali_classes2_dir, "com")
  84. list_package = ["mojang", "mp4parser", "netease", "random", "reactnativecommunity", "RNFetchBlob"]
  85. if not os.path.exists(s3):
  86. distutils.dir_util.mkpath(s3)
  87. move_package(s1, s3, list_package)
  88. # smali_classes3-13
  89. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  90. smali_classes2_dir = create_mutil_smali(extract_dir)
  91. s3 = os.path.join(smali_classes2_dir, "com")
  92. list_package = ["example", "facebook"]
  93. if not os.path.exists(s3):
  94. distutils.dir_util.mkpath(s3)
  95. move_package(s1, s3, list_package)
  96. # smali_classes3-14
  97. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  98. smali_classes2_dir = create_mutil_smali(extract_dir)
  99. s3 = os.path.join(smali_classes2_dir, "com")
  100. list_package = ["hw", "itrabbit", "JavaWebsocket", "lmy"]
  101. if not os.path.exists(s3):
  102. distutils.dir_util.mkpath(s3)
  103. move_package(s1, s3, list_package)
  104. # smali_classes3-15
  105. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  106. smali_classes2_dir = create_mutil_smali(extract_dir)
  107. s3 = os.path.join(smali_classes2_dir, "com")
  108. list_package = ["github", "google", "googlecode"]
  109. if not os.path.exists(s3):
  110. distutils.dir_util.mkpath(s3)
  111. move_package(s1, s3, list_package)
  112. # smali_classes3-16
  113. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  114. smali_classes2_dir = create_mutil_smali(extract_dir)
  115. s3 = os.path.join(smali_classes2_dir, "com")
  116. list_package = ["scwang", "sensors", "shahenlibrary", "sina", "swmansion", "tencent", "yalantis", "yqritc",
  117. "yulong", "zmxv"]
  118. if not os.path.exists(s3):
  119. distutils.dir_util.mkpath(s3)
  120. move_package(s1, s3, list_package)
  121. # smali_classes3-17
  122. s1 = os.path.join(extract_dir, "smali_classes3")
  123. smali_classes2_dir = create_mutil_smali(extract_dir)
  124. s3 = smali_classes2_dir
  125. list_package = ["android", "androidx/legacy", "androidx/lifecycle", "androidx/loader",
  126. "androidx/localbroadcastmanager", "androidx/media", "androidx/print", "androidx/savedstate",
  127. "androidx/slidingpanelayout",
  128. "androidx/swiperefreshlayout", "androidx/vectordrawable", "androidx/versionedparcelable"]
  129. if not os.path.exists(s3):
  130. distutils.dir_util.mkpath(s3)
  131. move_package(s1, s3, list_package)
  132. # smali_classes3-18
  133. s1 = os.path.join(extract_dir, "smali_classes3")
  134. smali_classes2_dir = create_mutil_smali(extract_dir)
  135. s3 = smali_classes2_dir
  136. list_package = ["androidx/activity", "androidx/annotation", "androidx/appcompat", "androidx/arch",
  137. "androidx/asynclayoutinflater", "androidx/core", "androidx/cursoradapter",
  138. "androidx/customview", "androidx/documentfile", "androidx/drawerlayout", "androidx/interpolator"]
  139. if not os.path.exists(s3):
  140. distutils.dir_util.mkpath(s3)
  141. move_package(s1, s3, list_package)
  142. # smali_classes5-19
  143. s1 = os.path.join(extract_dir, "smali_classes5", "androidx")
  144. smali_classes2_dir = create_mutil_smali(extract_dir)
  145. s3 = os.path.join(smali_classes2_dir, "androidx")
  146. list_package = ["fragment", "media", "transition", "vectordrawable", "viewpager"]
  147. if not os.path.exists(s3):
  148. distutils.dir_util.mkpath(s3)
  149. move_package(s1, s3, list_package)
  150. # smali_classes8-20
  151. s1 = os.path.join(extract_dir, "smali_classes8", "com")
  152. smali_classes2_dir = create_mutil_smali(extract_dir)
  153. s3 = os.path.join(smali_classes2_dir, "com")
  154. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  155. if not os.path.exists(s3):
  156. distutils.dir_util.mkpath(s3)
  157. move_package(s1, s3, list_package)
  158. # smali_classes9-21
  159. s1 = os.path.join(extract_dir, "smali_classes9", "com")
  160. smali_classes2_dir = create_mutil_smali(extract_dir)
  161. s3 = os.path.join(smali_classes2_dir, "com")
  162. list_package = ["mojang", "netease"]
  163. if not os.path.exists(s3):
  164. distutils.dir_util.mkpath(s3)
  165. move_package(s1, s3, list_package)
  166. # smali_classes20-22
  167. s1 = os.path.join(extract_dir, "smali_classes20", "com")
  168. smali_classes2_dir = create_mutil_smali(extract_dir)
  169. s3 = os.path.join(smali_classes2_dir, "com")
  170. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  171. if not os.path.exists(s3):
  172. distutils.dir_util.mkpath(s3)
  173. move_package(s1, s3, list_package)
  174. # smali_classes21-23
  175. s1 = os.path.join(extract_dir, "smali_classes21", "com")
  176. smali_classes2_dir = create_mutil_smali(extract_dir)
  177. s3 = os.path.join(smali_classes2_dir, "com")
  178. list_package = ["mojang", "netease"]
  179. if not os.path.exists(s3):
  180. distutils.dir_util.mkpath(s3)
  181. move_package(s1, s3, list_package)
  182. # smali_classes22-24
  183. s1 = os.path.join(extract_dir, "smali_classes22", "com")
  184. smali_classes2_dir = create_mutil_smali(extract_dir)
  185. s3 = os.path.join(smali_classes2_dir, "com")
  186. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  187. if not os.path.exists(s3):
  188. distutils.dir_util.mkpath(s3)
  189. move_package(s1, s3, list_package)
  190. # smali_classes23-24
  191. s1 = os.path.join(extract_dir, "smali_classes23", "com")
  192. smali_classes2_dir = create_mutil_smali(extract_dir)
  193. s3 = os.path.join(smali_classes2_dir, "com")
  194. list_package = ["hw", "masteratul"]
  195. if not os.path.exists(s3):
  196. distutils.dir_util.mkpath(s3)
  197. move_package(s1, s3, list_package)
  198. # smali_classes24-26
  199. s1 = os.path.join(extract_dir, "smali_classes24", "com")
  200. smali_classes2_dir = create_mutil_smali(extract_dir)
  201. s3 = os.path.join(smali_classes2_dir, "com")
  202. list_package = ["airbnb", "bumptech", "coolcloud", "dataeye"]
  203. if not os.path.exists(s3):
  204. distutils.dir_util.mkpath(s3)
  205. move_package(s1, s3, list_package)
  206. # smali_classes25-27
  207. s1 = os.path.join(extract_dir, "smali_classes25", "com")
  208. smali_classes2_dir = create_mutil_smali(extract_dir)
  209. s3 = os.path.join(smali_classes2_dir, "com")
  210. list_package = ["mojang", "netease"]
  211. if not os.path.exists(s3):
  212. distutils.dir_util.mkpath(s3)
  213. move_package(s1, s3, list_package)
  214. def move_package(s1, s3, list_package):
  215. for d in list_package:
  216. src = os.path.join(s1, d)
  217. if os.path.exists(src):
  218. dst = os.path.join(s3, d)
  219. distutils.dir_util.copy_tree(src, dst)
  220. distutils.dir_util.remove_tree(src)
  221. def create_mutil_smali(decompileDir):
  222. f_idx = 2
  223. while True:
  224. tmp = gw_file_system.get_full_path(os.path.join(decompileDir, 'smali_classes%d' % f_idx))
  225. tmp = tmp.replace('\\', '/')
  226. tmp = re.sub('/+', '/', tmp)
  227. if os.path.exists(tmp):
  228. files = os.listdir(tmp)
  229. if len(files) == 0:
  230. smali_classes2_dir = tmp
  231. break
  232. f_idx += 1
  233. else:
  234. smali_classes2_dir = tmp
  235. break
  236. # endwhile
  237. if not os.path.exists(smali_classes2_dir):
  238. os.mkdir(smali_classes2_dir)
  239. return smali_classes2_dir
  240. if __name__ == '__main__':
  241. extract_dir = 'C:/Users/Administrator/Desktop/apk/qmqjbd_8226_bb_2.3.0'
  242. channel_sdk_info = {'packNameSuffix': "new.package.name"}
  243. handle_same_package(extract_dir, channel_sdk_info)