| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import os
- import shutil
- import sys
- import zipfile
- import xml.etree.ElementTree as ET
- import zipfile
- import win32api
- import win32con
- import yaml
- print("三国杀名将传Y-朱雀")
- print(sys.argv)
- decompile_dir_path = sys.argv[1]
- game_dir = sys.argv[2]
- print(decompile_dir_path)
- def fix_install_fail_bug(decompile_dir_path):
- namespace = '{http://schemas.android.com/apk/res/android}'
- ET.register_namespace('android', 'http://schemas.android.com/apk/res/android')
- manifest_path = os.path.join(decompile_dir_path, 'AndroidManifest.xml')
- xml_tree = ET.parse(manifest_path)
- xml_root = xml_tree.getroot()
- application_node = xml_root.find('./application')
- etract_value = application_node.get(f'{namespace}extractNativeLibs')
- if etract_value is not None and etract_value == 'false':
- # 修改extractNativeLib
- application_node.set(f'{namespace}extractNativeLibs', 'true')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- yaml_path = os.path.join(decompile_dir_path, 'apktool.yml')
- file = open(yaml_path, 'r', encoding='utf-8')
- yaml_result = yaml.load(file, Loader=yaml.BaseLoader)
- sdk_info = yaml_result['sdkInfo']
- yaml_result['packageInfo']['renameManifestPackage'] = None
- print(sdk_info)
- if int(sdk_info['targetSdkVersion']) > 29:
- sdk_info['targetSdkVersion'] = '29'
- print(sdk_info)
- file.close()
- with open(yaml_path, 'w', encoding='utf-8') as f:
- yaml.dump(yaml_result, f)
- fix_install_fail_bug(decompile_dir_path)
- # 新版sdk取消登录调不起登录
- def modify_cancel_login_and_fubiao(decompile_dir):
- insert_str_list = [
- '\n\tinvoke-static {}, Lcom/yog/kothoth/YogSDK;->getInstance()Lcom/yog/kothoth/YogSDK;\n\n',
- '\tmove-result-object v0\n\n',
- '\tiget-object v1, p0, Lcom/yulong/sdk/promoter/PromoterGameAuthApi$4;->val$activity:Landroid/app/Activity;\n\n',
- '\tcheck-cast v1, Landroid/content/Context;\n\n',
- '\tinvoke-virtual {v0, v1}, Lcom/yog/kothoth/YogSDK;->login(Landroid/content/Context;)V\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\yulong\sdk\promoter' in dirpath and 'PromoterGameAuthApi$4.smali' in filenames:
- smali_path = os.path.join(dirpath, 'PromoterGameAuthApi$4.smali')
- print(smali_path)
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = r'sdk\u767b\u9646\u5931\u8d25:'
- end_method_str = 'Lcom/yulong/sdk/promoter/PromoterGameAuthApi;->showLog(Ljava/lang/String;)V'
- insert_str = ''.join(insert_str_list)
- on_create_index = 0
- insert_index = 0
- for line in smali_str_arr:
- if index_str in line:
- on_create_index = smali_str_arr.index(line)
- print('on_create_index', on_create_index, line)
- break
- for index, value in enumerate(smali_str_arr):
- if index > on_create_index and end_method_str in value:
- insert_index = index
- print('insert_index', index)
- break
- print(on_create_index, insert_index)
- smali_str_arr.insert(insert_index+1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- if r'com\yog\kothoth\floatwindow' in dirpath and 'YogFloatWindow.smali' in filenames:
- smali_path = os.path.join(dirpath, 'YogFloatWindow.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if '0x1f4' in line:
- smali_str_arr[smali_str_arr.index(line)] = line.replace('0x1f4', '0xa')
- break
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- if r'com\yog\kothoth\data\bean' in dirpath and 'UserResult.smali' in filenames:
- smali_path = os.path.join(dirpath, 'UserResult.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public constructor <init>(ZLjava/lang/String;)V'
- end_method_str = '.end method'
- on_create_index = 0
- insert_index = 0
- for line in smali_str_arr:
- if index_str in line:
- on_create_index = smali_str_arr.index(line)
- print('on_create_index', on_create_index, line)
- break
- for index, value in enumerate(smali_str_arr):
- if index > on_create_index and end_method_str in value:
- insert_index = index
- print('insert_index', index)
- break
- for index, value in enumerate(smali_str_arr):
- if on_create_index < index < insert_index:
- if '0x0' in value:
- print(value)
- smali_str_arr[index] = value.replace('0x0', '0x1')
- break
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- if r'com\yog\kothoth' in dirpath and 'YogSDKSelf.smali' in filenames:
- smali_path = os.path.join(dirpath, 'YogSDKSelf.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public static isFastDoubleClick(J)Z'
- end_method_str = '.end method'
- on_create_index = 0
- insert_index = 0
- for line in smali_str_arr:
- if index_str in line:
- on_create_index = smali_str_arr.index(line)
- print('on_create_index', on_create_index, line)
- break
- for index, value in enumerate(smali_str_arr):
- if index > on_create_index and end_method_str in value:
- insert_index = index
- print('insert_index', index)
- break
- for index, value in enumerate(smali_str_arr):
- if on_create_index < index < insert_index:
- if '0x1' in value:
- print(value)
- smali_str_arr[index] = value.replace('0x1', '0x0')
- break
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- # modify_cancel_login_and_fubiao(decompile_dir_path)
- def un_zip_and_copy_39285EFA(game_dir):
- game_name = ''
- for name in os.listdir(game_dir):
- if '小绵羊' not in name and '朱雀' not in name:
- game_name = name
- print(game_name)
- if game_name == '':
- raise Exception('让客服放入原包')
- file_name = os.path.join(game_dir, game_name)
- print(file_name)
- yb_unzip_path = r"D:\work\yb_files"
- zip_file = zipfile.ZipFile(file_name)
- if os.path.isdir(file_name + "_files"):
- pass
- else:
- print('Problem occurred during generating libdoc for', os.mkdir(yb_unzip_path))
- for names in zip_file.namelist():
- zip_file.extract(names, yb_unzip_path)
- zip_file.close()
- shutil.copy(os.path.join(yb_unzip_path, 'assets', '39285EFA.dex'), os.path.join(decompile_dir_path, 'assets'))
- shutil.rmtree(yb_unzip_path)
- # un_zip_and_copy_39285EFA(game_dir)
|