script.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # coding:utf8
  2. __author__ = '灌篮高手酷派'
  3. import os
  4. import gw_apk_tool
  5. def script_init(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  6. # 删除渠道的so,为保留游戏的so
  7. list_so = ["libentryexpro.so", "libplugin_phone.so", "libuptsmaddon.so", "libuptsmaddonmi.so"]
  8. for so in list_so:
  9. so = os.path.join(SDK, channelSdkInfo["SDKName"], "ForLibs", "armeabi-v7a", so)
  10. if os.path.exists(so):
  11. os.remove(so)
  12. def script_second(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  13. handle_same_name_package(decompileDir)
  14. def script_last(SDK, decompileDir, channelSdkInfo, new_game_channel_info, gameInfo):
  15. fix_coolyun_application_getinstance_null_bug(decompileDir)
  16. # replace_application_verify_rose_bug(decompileDir)
  17. def fix_coolyun_application_getinstance_null_bug(decompile_dir):
  18. insert_str_list = [
  19. '\n\t.locals 1\n\n',
  20. '\tsget-object v0, Lcom/coolyun/framework/CoolYunApplication;->application:Landroid/content/Context;\n\n',
  21. '\tcheck-cast v0, Lcom/coolyun/framework/CoolYunApplication;\n\n',
  22. '\treturn-object v0\n\n']
  23. for dirpath, dirnames, filenames in os.walk(decompile_dir):
  24. if r'com\coolyun\framework' in dirpath and 'CoolYunApplication.smali' in filenames:
  25. smali_path = os.path.join(dirpath, 'CoolYunApplication.smali')
  26. with open(smali_path, 'r') as f:
  27. smali_str_arr = f.readlines()
  28. index_str = '.method public static getInstance()Lcom/coolyun/framework/CoolYunApplication;'
  29. end_method_str = '.end method'
  30. insert_str = ''.join(insert_str_list)
  31. on_create_index = 0
  32. insert_index = 0
  33. for line in smali_str_arr:
  34. if index_str in line:
  35. on_create_index = smali_str_arr.index(line)
  36. print('on_create_index', on_create_index, line)
  37. break
  38. for index, value in enumerate(smali_str_arr):
  39. if index > on_create_index and end_method_str in value:
  40. insert_index = index
  41. print('insert_index', index)
  42. break
  43. print(on_create_index, insert_index)
  44. del smali_str_arr[on_create_index + 1:insert_index]
  45. smali_str_arr.insert(on_create_index + 1, insert_str)
  46. with open(smali_path, 'w') as f:
  47. f.write(''.join(smali_str_arr))
  48. break
  49. def handle_same_name_package(decompileDir):
  50. gf_1_path = os.path.join(decompileDir, "smali", "com", "gf.1")
  51. if not os.path.exists(gf_1_path):
  52. return
  53. # 把同名的GF包移走
  54. new_smali_path = gw_apk_tool.create_mutil_smali(decompileDir)
  55. source = os.path.join(decompileDir, "smali", "com")
  56. target = os.path.join(new_smali_path, "com")
  57. GF_path = os.path.join(source, "GF")
  58. if os.path.exists(GF_path):
  59. gw_apk_tool.move_package(source, target, ["GF"])
  60. # 更改gf.1成gf
  61. # gf_1_path = os.path.join(decompileDir, "smali", "com", "gf.1")
  62. gf_path = os.path.join(decompileDir, "smali", "com", "gf")
  63. if os.path.exists(gf_1_path):
  64. os.renames(gf_1_path, gf_path)
  65. if __name__ == '__main__':
  66. ""