script.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # coding:utf8
  2. __author__ = '极无双'
  3. import os
  4. import logging
  5. import xml.dom.minidom
  6. import re
  7. import shutil
  8. import glob
  9. ANDROID_NS = 'http://schemas.android.com/apk/res/android'
  10. from xml.etree import ElementTree as ET
  11. def script_last(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  12. # decompile_dir_path = os.path.join(decompileDir )
  13. fix_coolyun_application_getinstance_null_bug(decompileDir)
  14. def modify_manifest(decompileDir, serviceName, key):
  15. ET.register_namespace('android', ANDROID_NS)
  16. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  17. root_node = ET.parse(xmlparse)
  18. root = root_node.getroot()
  19. name = '{' + ANDROID_NS + '}name'
  20. authorities = '{' + ANDROID_NS + '}' + key
  21. package_name = root.attrib.get('package')
  22. if package_name == None:
  23. return
  24. providers = root.findall('./application/service')
  25. if providers != None:
  26. for provider in providers:
  27. providerName = provider.attrib.get(name)
  28. if serviceName == providerName:
  29. try:
  30. del provider.attrib[authorities]
  31. # del provider.attrib[authoritiesTwo]
  32. except:
  33. ""
  34. root_node.write(xmlparse, 'utf-8')
  35. def modify_manifest_common(decompileDir, removeKey):
  36. ET.register_namespace('android', ANDROID_NS)
  37. xmlparse = os.path.join(decompileDir, 'AndroidManifest.xml')
  38. logging.info(xmlparse)
  39. root_node = ET.parse(xmlparse)
  40. root = root_node.getroot()
  41. name = '{' + ANDROID_NS + '}name'
  42. authorities = '{' + ANDROID_NS + '}' + removeKey
  43. package_name = root.attrib.get('package')
  44. if package_name == None:
  45. return
  46. providers = root.findall('./application')
  47. if providers != None:
  48. for provider in providers:
  49. try:
  50. del provider.attrib[authorities]
  51. except:
  52. ""
  53. root_node.write(xmlparse, 'utf-8')
  54. def fix_coolyun_application_getinstance_null_bug(decompile_dir):
  55. insert_str_list = [
  56. '\n\t.locals 1\n\n',
  57. '\tsget-object v0, Lcom/coolyun/framework/CoolYunApplication;->application:Landroid/content/Context;\n\n',
  58. '\tcheck-cast v0, Lcom/coolyun/framework/CoolYunApplication;\n\n',
  59. '\treturn-object v0\n\n']
  60. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  61. if r'com\coolyun\framework' in dirpath and 'CoolYunApplication.smali' in filenames:
  62. smali_path = os.path.join(dirpath, 'CoolYunApplication.smali')
  63. with open(smali_path, 'r') as f:
  64. smali_str_arr = f.readlines()
  65. index_str = '.method public static getInstance()Lcom/coolyun/framework/CoolYunApplication;'
  66. end_method_str = '.end method'
  67. insert_str = ''.join(insert_str_list)
  68. on_create_index = 0
  69. insert_index = 0
  70. for line in smali_str_arr:
  71. if index_str in line:
  72. on_create_index = smali_str_arr.index(line)
  73. print('on_create_index', on_create_index, line)
  74. break
  75. for index, value in enumerate(smali_str_arr):
  76. if index > on_create_index and end_method_str in value:
  77. insert_index = index
  78. print('insert_index', index)
  79. break
  80. print(on_create_index, insert_index)
  81. del smali_str_arr[on_create_index + 1:insert_index]
  82. smali_str_arr.insert(on_create_index + 1, insert_str)
  83. with open(smali_path, 'w') as f:
  84. f.write(''.join(smali_str_arr))
  85. break
  86. if __name__ == '__main__':
  87. ""