script.py 19 KB

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