script.py 17 KB

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