script.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # coding:utf8
  2. __author__ = 'dong'
  3. import os
  4. import logging
  5. import xml.dom.minidom
  6. import re
  7. import shutil
  8. import glob
  9. from xml.etree.ElementTree import ElementTree, Element
  10. import distutils.dir_util
  11. from xml.etree import ElementTree as ET
  12. ANDROID_NS = 'http://schemas.android.com/apk/res/android'
  13. def script_last(workspace_sdk_dir, extract_dir, channel_sdk_info, new_game_channel_info, game_info):
  14. handle_smali(extract_dir)
  15. # fix_coolyun_application_getinstance_null_bug(extract_dir)
  16. return
  17. def handle_smali(decompile_dir_path):
  18. for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
  19. if 'com\\youzu\\gamexy' in dirpath and 'Game.smali' in filenames:
  20. smali_path = os.path.join(dirpath, 'Game.smali')
  21. print(smali_path)
  22. f = open(smali_path, 'r')
  23. smali_str_arr = f.readlines()
  24. f.close()
  25. for line in smali_str_arr:
  26. if 'invoke-static {p0}, Lcom/youzu/gamexy/Game;->Init(Landroid/content/Context;)V' in line:
  27. logging.info("script脚本执行成功gamexy")
  28. smali_str_arr[smali_str_arr.index(
  29. line)] = '\t#invoke-static {p0}, Lcom/youzu/gamexy/Game;->Init(Landroid/content/Context;)V\n'
  30. f = open(smali_path, 'w')
  31. f.write(''.join(smali_str_arr))
  32. f.close()
  33. def fix_coolyun_application_getinstance_null_bug(decompile_dir):
  34. insert_str_list = [
  35. '\n\t.locals 1\n\n',
  36. '\tsget-object v0, Lcom/coolyun/framework/CoolYunApplication;->application:Landroid/content/Context;\n\n',
  37. '\tcheck-cast v0, Lcom/coolyun/framework/CoolYunApplication;\n\n',
  38. '\treturn-object v0\n\n']
  39. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  40. if r'com\coolyun\framework' in dirpath and 'CoolYunApplication.smali' in filenames:
  41. smali_path = os.path.join(dirpath, 'CoolYunApplication.smali')
  42. with open(smali_path, 'r') as f:
  43. smali_str_arr = f.readlines()
  44. index_str = '.method public static getInstance()Lcom/coolyun/framework/CoolYunApplication;'
  45. end_method_str = '.end method'
  46. insert_str = ''.join(insert_str_list)
  47. on_create_index = 0
  48. insert_index = 0
  49. for line in smali_str_arr:
  50. if index_str in line:
  51. on_create_index = smali_str_arr.index(line)
  52. print('on_create_index', on_create_index, line)
  53. break
  54. for index, value in enumerate(smali_str_arr):
  55. if index > on_create_index and end_method_str in value:
  56. insert_index = index
  57. print('insert_index', index)
  58. break
  59. print(on_create_index, insert_index)
  60. del smali_str_arr[on_create_index + 1:insert_index]
  61. smali_str_arr.insert(on_create_index + 1, insert_str)
  62. with open(smali_path, 'w') as f:
  63. f.write(''.join(smali_str_arr))
  64. break
  65. if __name__ == '__main__':
  66. d="D:/work/autopack3/tool/workspace/quanminpaopaochaorenkp/120/extract"
  67. handle_smali(d)
  68. # replace_super_application("D:\work\wzdq")
  69. # modify_manifest("E:\\apk\\youhua\\youhua.zip.out", "requestLegacyExternalStorage")