script.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  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" or sdk_id=="597":
  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_classes3
  47. s1 = os.path.join(extract_dir, "smali_classes3")
  48. smali_classes2_dir = create_mutil_smali(extract_dir)
  49. s3 = os.path.join(smali_classes2_dir)
  50. list_package = ["androidx"]
  51. if not os.path.exists(s3):
  52. distutils.dir_util.mkpath(s3)
  53. move_package(s1, s3, list_package)
  54. # smali_classes4
  55. s1 = os.path.join(extract_dir, "smali_classes4", "com")
  56. smali_classes2_dir = create_mutil_smali(extract_dir)
  57. s3 = os.path.join(smali_classes2_dir, "com")
  58. list_package = ["dataeye", "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. s1 = os.path.join(extract_dir, "smali_classes4")
  63. smali_classes2_dir = create_mutil_smali(extract_dir)
  64. s3 = os.path.join(smali_classes2_dir)
  65. list_package = ["androidx"]
  66. if not os.path.exists(s3):
  67. distutils.dir_util.mkpath(s3)
  68. move_package(s1, s3, list_package)
  69. s1 = os.path.join(extract_dir, "smali_classes4", "com")
  70. smali_classes2_dir = create_mutil_smali(extract_dir)
  71. s3 = os.path.join(smali_classes2_dir, "com")
  72. list_package = ["netease" ]
  73. if not os.path.exists(s3):
  74. distutils.dir_util.mkpath(s3)
  75. move_package(s1, s3, list_package)
  76. # smali_classes5
  77. s1 = os.path.join(extract_dir, "smali_classes5", "com")
  78. smali_classes2_dir = create_mutil_smali(extract_dir)
  79. s3 = os.path.join(smali_classes2_dir, "com")
  80. list_package = ["dataeye", "dylanvann", "example", "facebook", "github", "hw", "itrabbit", "lmy"]
  81. if not os.path.exists(s3):
  82. distutils.dir_util.mkpath(s3)
  83. move_package(s1, s3, list_package)
  84. s1 = os.path.join(extract_dir, "smali_classes5", "com")
  85. smali_classes2_dir = create_mutil_smali(extract_dir)
  86. s3 = os.path.join(smali_classes2_dir, "com")
  87. list_package = ["netease" ]
  88. if not os.path.exists(s3):
  89. distutils.dir_util.mkpath(s3)
  90. move_package(s1, s3, list_package)
  91. s1 = os.path.join(extract_dir, "smali_classes5")
  92. smali_classes2_dir = create_mutil_smali(extract_dir)
  93. s3 = os.path.join(smali_classes2_dir)
  94. list_package = ["androidx"]
  95. if not os.path.exists(s3):
  96. distutils.dir_util.mkpath(s3)
  97. move_package(s1, s3, list_package)
  98. # smali_classes6
  99. s1 = os.path.join(extract_dir, "smali_classes6", "com")
  100. smali_classes2_dir = create_mutil_smali(extract_dir)
  101. s3 = os.path.join(smali_classes2_dir, "com")
  102. list_package = ["dylanvann", "example", "facebook", "github", "hw", "itrabbit", "lmy"]
  103. if not os.path.exists(s3):
  104. distutils.dir_util.mkpath(s3)
  105. move_package(s1, s3, list_package)
  106. # smali_classes2
  107. s1 = os.path.join(extract_dir, "smali_classes2", "com")
  108. smali_classes2_dir = create_mutil_smali(extract_dir)
  109. s3 = os.path.join(smali_classes2_dir, "com")
  110. list_package = ["airbnb", "coremedia", "google", "JavaWebsocket", "netease", "reactnativecommunity",
  111. "shahenlibrary", "tencent", "yulong", "baidu", "facebook", " googlecode", "mp4parser",
  112. "reactnative", "scwang"]
  113. if not os.path.exists(s3):
  114. distutils.dir_util.mkpath(s3)
  115. move_package(s1, s3, list_package)
  116. # smali_classes3-11
  117. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  118. smali_classes2_dir = create_mutil_smali(extract_dir)
  119. s3 = os.path.join(smali_classes2_dir, "com")
  120. list_package = ["airbnb", "android", "bumptech", "CCMsgSdk", "coremedia"]
  121. if not os.path.exists(s3):
  122. distutils.dir_util.mkpath(s3)
  123. move_package(s1, s3, list_package)
  124. # smali_classes3-12
  125. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  126. smali_classes2_dir = create_mutil_smali(extract_dir)
  127. s3 = os.path.join(smali_classes2_dir, "com")
  128. list_package = ["mojang", "mp4parser", "netease", "random", "reactnativecommunity", "RNFetchBlob"]
  129. if not os.path.exists(s3):
  130. distutils.dir_util.mkpath(s3)
  131. move_package(s1, s3, list_package)
  132. # smali_classes3-13
  133. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  134. smali_classes2_dir = create_mutil_smali(extract_dir)
  135. s3 = os.path.join(smali_classes2_dir, "com")
  136. list_package = ["example", "facebook"]
  137. if not os.path.exists(s3):
  138. distutils.dir_util.mkpath(s3)
  139. move_package(s1, s3, list_package)
  140. # smali_classes3-14
  141. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  142. smali_classes2_dir = create_mutil_smali(extract_dir)
  143. s3 = os.path.join(smali_classes2_dir, "com")
  144. list_package = ["hw", "itrabbit", "JavaWebsocket", "lmy"]
  145. if not os.path.exists(s3):
  146. distutils.dir_util.mkpath(s3)
  147. move_package(s1, s3, list_package)
  148. # smali_classes3-15
  149. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  150. smali_classes2_dir = create_mutil_smali(extract_dir)
  151. s3 = os.path.join(smali_classes2_dir, "com")
  152. list_package = ["github", "google", "googlecode"]
  153. if not os.path.exists(s3):
  154. distutils.dir_util.mkpath(s3)
  155. move_package(s1, s3, list_package)
  156. # smali_classes3-16
  157. s1 = os.path.join(extract_dir, "smali_classes3", "com")
  158. smali_classes2_dir = create_mutil_smali(extract_dir)
  159. s3 = os.path.join(smali_classes2_dir, "com")
  160. list_package = ["scwang", "sensors", "shahenlibrary", "sina", "swmansion", "tencent", "yalantis", "yqritc",
  161. "yulong", "zmxv"]
  162. if not os.path.exists(s3):
  163. distutils.dir_util.mkpath(s3)
  164. move_package(s1, s3, list_package)
  165. # smali_classes3-17
  166. s1 = os.path.join(extract_dir, "smali_classes3")
  167. smali_classes2_dir = create_mutil_smali(extract_dir)
  168. s3 = smali_classes2_dir
  169. list_package = ["android", "androidx/legacy", "androidx/lifecycle", "androidx/loader",
  170. "androidx/localbroadcastmanager", "androidx/media", "androidx/print", "androidx/savedstate",
  171. "androidx/slidingpanelayout",
  172. "androidx/swiperefreshlayout", "androidx/vectordrawable", "androidx/versionedparcelable"]
  173. if not os.path.exists(s3):
  174. distutils.dir_util.mkpath(s3)
  175. move_package(s1, s3, list_package)
  176. # smali_classes3-18
  177. s1 = os.path.join(extract_dir, "smali_classes3")
  178. smali_classes2_dir = create_mutil_smali(extract_dir)
  179. s3 = smali_classes2_dir
  180. list_package = ["androidx/activity", "androidx/annotation", "androidx/appcompat", "androidx/arch",
  181. "androidx/asynclayoutinflater", "androidx/core", "androidx/cursoradapter",
  182. "androidx/customview", "androidx/documentfile", "androidx/drawerlayout", "androidx/interpolator"]
  183. if not os.path.exists(s3):
  184. distutils.dir_util.mkpath(s3)
  185. move_package(s1, s3, list_package)
  186. # smali_classes5-19
  187. s1 = os.path.join(extract_dir, "smali_classes5", "androidx")
  188. smali_classes2_dir = create_mutil_smali(extract_dir)
  189. s3 = os.path.join(smali_classes2_dir, "androidx")
  190. list_package = ["fragment", "media", "transition", "vectordrawable", "viewpager"]
  191. if not os.path.exists(s3):
  192. distutils.dir_util.mkpath(s3)
  193. move_package(s1, s3, list_package)
  194. # smali_classes8-20
  195. s1 = os.path.join(extract_dir, "smali_classes8", "com")
  196. smali_classes2_dir = create_mutil_smali(extract_dir)
  197. s3 = os.path.join(smali_classes2_dir, "com")
  198. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  199. if not os.path.exists(s3):
  200. distutils.dir_util.mkpath(s3)
  201. move_package(s1, s3, list_package)
  202. # smali_classes9-21
  203. s1 = os.path.join(extract_dir, "smali_classes9", "com")
  204. smali_classes2_dir = create_mutil_smali(extract_dir)
  205. s3 = os.path.join(smali_classes2_dir, "com")
  206. list_package = ["mojang", "netease"]
  207. if not os.path.exists(s3):
  208. distutils.dir_util.mkpath(s3)
  209. move_package(s1, s3, list_package)
  210. # smali_classes20-22
  211. s1 = os.path.join(extract_dir, "smali_classes20", "com")
  212. smali_classes2_dir = create_mutil_smali(extract_dir)
  213. s3 = os.path.join(smali_classes2_dir, "com")
  214. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  215. if not os.path.exists(s3):
  216. distutils.dir_util.mkpath(s3)
  217. move_package(s1, s3, list_package)
  218. # smali_classes21-23
  219. s1 = os.path.join(extract_dir, "smali_classes21", "com")
  220. smali_classes2_dir = create_mutil_smali(extract_dir)
  221. s3 = os.path.join(smali_classes2_dir, "com")
  222. list_package = ["mojang", "netease"]
  223. if not os.path.exists(s3):
  224. distutils.dir_util.mkpath(s3)
  225. move_package(s1, s3, list_package)
  226. # smali_classes22-24
  227. s1 = os.path.join(extract_dir, "smali_classes22", "com")
  228. smali_classes2_dir = create_mutil_smali(extract_dir)
  229. s3 = os.path.join(smali_classes2_dir, "com")
  230. list_package = ["dataeye", "dylanvann", "facebook", "horcrux"]
  231. if not os.path.exists(s3):
  232. distutils.dir_util.mkpath(s3)
  233. move_package(s1, s3, list_package)
  234. # smali_classes23-24
  235. s1 = os.path.join(extract_dir, "smali_classes23", "com")
  236. smali_classes2_dir = create_mutil_smali(extract_dir)
  237. s3 = os.path.join(smali_classes2_dir, "com")
  238. list_package = ["hw", "masteratul"]
  239. if not os.path.exists(s3):
  240. distutils.dir_util.mkpath(s3)
  241. move_package(s1, s3, list_package)
  242. # smali_classes24-26
  243. s1 = os.path.join(extract_dir, "smali_classes24", "com")
  244. smali_classes2_dir = create_mutil_smali(extract_dir)
  245. s3 = os.path.join(smali_classes2_dir, "com")
  246. list_package = ["airbnb", "bumptech", "coolcloud", "dataeye"]
  247. if not os.path.exists(s3):
  248. distutils.dir_util.mkpath(s3)
  249. move_package(s1, s3, list_package)
  250. # smali_classes25-27
  251. s1 = os.path.join(extract_dir, "smali_classes25", "com")
  252. smali_classes2_dir = create_mutil_smali(extract_dir)
  253. s3 = os.path.join(smali_classes2_dir, "com")
  254. list_package = ["mojang", "netease"]
  255. if not os.path.exists(s3):
  256. distutils.dir_util.mkpath(s3)
  257. move_package(s1, s3, list_package)
  258. # smali_classes4
  259. s1 = os.path.join(extract_dir, "smali_classes4", "com")
  260. smali_classes2_dir = create_mutil_smali(extract_dir)
  261. s3 = os.path.join(smali_classes2_dir, "com")
  262. list_package = ["scwang", "sensors", "shahenlibrary", "sina", "swmansion", "tencent", "yalantis", "yqritc",
  263. "yulong", "zmxv"]
  264. if not os.path.exists(s3):
  265. distutils.dir_util.mkpath(s3)
  266. move_package(s1, s3, list_package)
  267. # smali_classes17
  268. s1 = os.path.join(extract_dir, "smali_classes17", "androidx")
  269. smali_classes2_dir = create_mutil_smali(extract_dir)
  270. s3 = os.path.join(smali_classes2_dir, "androidx")
  271. list_package = ["drawerlayout", "loader", "multidex", "slidingpanelayout", "swiperefreshlayout", "versionedparcelable", "viewpager2"]
  272. if not os.path.exists(s3):
  273. distutils.dir_util.mkpath(s3)
  274. move_package(s1, s3, list_package)
  275. # smali_classes18
  276. s1 = os.path.join(extract_dir, "smali_classes18", "com","facebook")
  277. smali_classes2_dir = create_mutil_smali(extract_dir)
  278. s3 = os.path.join(smali_classes2_dir, "com","facebook")
  279. list_package = ["imageformat","imagepipeline","imagepipelinebase","imageutils","infer","jni","nativefilters","nativeimagetranscoder",
  280. "perftest","proguard","react","soloader","systrace","webpsupport","widget"]
  281. if not os.path.exists(s3):
  282. distutils.dir_util.mkpath(s3)
  283. move_package(s1, s3, list_package)
  284. # smali_classes5
  285. s1 = os.path.join(extract_dir, "smali_classes5", "com")
  286. smali_classes2_dir = create_mutil_smali(extract_dir)
  287. s3 = os.path.join(smali_classes2_dir, "com")
  288. list_package = ["masteratul","mp4parser","noah","oblador","reactnativecommunity"]
  289. if not os.path.exists(s3):
  290. distutils.dir_util.mkpath(s3)
  291. move_package(s1, s3, list_package)
  292. # smali_classes5
  293. s1 = os.path.join(extract_dir, "smali_classes5", "com")
  294. smali_classes2_dir = create_mutil_smali(extract_dir)
  295. s3 = os.path.join(smali_classes2_dir, "com")
  296. list_package = ["scwang", "sensors", "shahenlibrary", "sina", "swmansion", "tencent", "yalantis", "yqritc",
  297. "yulong", "zmxv"]
  298. if not os.path.exists(s3):
  299. distutils.dir_util.mkpath(s3)
  300. move_package(s1, s3, list_package)
  301. # smali_classes6
  302. s1 = os.path.join(extract_dir, "smali_classes6", "androidx")
  303. smali_classes2_dir = create_mutil_smali(extract_dir)
  304. s3 = os.path.join(smali_classes2_dir, "androidx")
  305. list_package = ["activity","annotation","appcompat","arch","asynclayoutinflater","autofill","core","cursoradapter","customview","documentfile"]
  306. if not os.path.exists(s3):
  307. distutils.dir_util.mkpath(s3)
  308. move_package(s1, s3, list_package)
  309. # smali_classes6
  310. s1 = os.path.join(extract_dir, "smali_classes6", "androidx")
  311. smali_classes2_dir = create_mutil_smali(extract_dir)
  312. s3 = os.path.join(smali_classes2_dir, "androidx")
  313. list_package = ["interpolator","legacy","lifecycle","loader","localbroadcastmanager","media","print"]
  314. if not os.path.exists(s3):
  315. distutils.dir_util.mkpath(s3)
  316. move_package(s1, s3, list_package)
  317. # smali_classes6
  318. s1 = os.path.join(extract_dir, "smali_classes6", "androidx")
  319. smali_classes2_dir = create_mutil_smali(extract_dir)
  320. s3 = os.path.join(smali_classes2_dir, "androidx")
  321. list_package = ["savedstate","tracing","vectordrawable","viewpager2"]
  322. if not os.path.exists(s3):
  323. distutils.dir_util.mkpath(s3)
  324. move_package(s1, s3, list_package)
  325. # smali_classes7
  326. s1 = os.path.join(extract_dir, "smali_classes7", "com")
  327. smali_classes2_dir = create_mutil_smali(extract_dir)
  328. s3 = os.path.join(smali_classes2_dir, "com")
  329. list_package = ["facebook"]
  330. if not os.path.exists(s3):
  331. distutils.dir_util.mkpath(s3)
  332. move_package(s1, s3, list_package)
  333. # smali_classes8
  334. s1 = os.path.join(extract_dir, "smali_classes8", "com","netease","ntunisdk")
  335. smali_classes2_dir = create_mutil_smali(extract_dir)
  336. s3 = os.path.join(smali_classes2_dir, "com","netease","ntunisdk")
  337. list_package = ["application","base","coolpad_sdk","external","langutil","ngpush","ngshare"]
  338. if not os.path.exists(s3):
  339. distutils.dir_util.mkpath(s3)
  340. move_package(s1, s3, list_package)
  341. def move_package(s1, s3, list_package):
  342. for d in list_package:
  343. src = os.path.join(s1, d)
  344. if os.path.exists(src):
  345. dst = os.path.join(s3, d)
  346. distutils.dir_util.copy_tree(src, dst)
  347. distutils.dir_util.remove_tree(src)
  348. def create_mutil_smali(decompileDir):
  349. f_idx = 2
  350. while True:
  351. tmp = gw_file_system.get_full_path(os.path.join(decompileDir, 'smali_classes%d' % f_idx))
  352. tmp = tmp.replace('\\', '/')
  353. tmp = re.sub('/+', '/', tmp)
  354. if os.path.exists(tmp):
  355. files = os.listdir(tmp)
  356. if len(files) == 0:
  357. smali_classes2_dir = tmp
  358. break
  359. f_idx += 1
  360. else:
  361. smali_classes2_dir = tmp
  362. break
  363. # endwhile
  364. if not os.path.exists(smali_classes2_dir):
  365. os.mkdir(smali_classes2_dir)
  366. return smali_classes2_dir
  367. if __name__ == '__main__':
  368. extract_dir = 'C:/Users/Administrator/Desktop/apk/qmqjbd_8226_bb_2.3.0'
  369. channel_sdk_info = {'packNameSuffix': "new.package.name"}
  370. handle_same_package(extract_dir, channel_sdk_info)