| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464 |
- # 这是一个示例 Python 脚本。
- # 按 Shift+F10 执行或将其替换为您的代码。
- # 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
- import glob
- import json
- import logging
- import os
- import re
- import shutil
- import subprocess
- import threading
- import xml.etree.ElementTree as ET
- import zipfile
- import win32api
- import win32con
- import yaml
- import requests
- test_dir = "D:\\work\\llfz_60027_朱雀2_2"
- game_path = r"\\10.8.230.114\public\测试组\20230228\三国战纪2Y\jskc_60031_zhuq2_1.0.5.apk"
- work_path = "D:\\work"
- def list_file():
- smali_list = [i for i in os.listdir(test_dir) if 'smali' in i]
- print(smali_list)
- for dirpath, dirnames, filenames in os.walk(test_dir):
- # print('dirpath:', dirpath)
- # print('dirnames:', dirnames)
- if 'smali' in dirpath and 'gson' in dirnames:
- print(dirpath, dirnames)
- new_smali_dir = os.path.join(test_dir, f'smali_classes{len(smali_list) + 1}', 'com\\google')
- os.makedirs(new_smali_dir)
- shutil.move(os.path.join(dirpath, 'gson'), new_smali_dir)
- break
- def move_game_apk_to_work():
- cmd_move_str = f'copy {game_path} {work_path}'
- print(cmd_move_str)
- result = subprocess.getoutput(cmd_move_str)
- print(result)
- def isNeedReplaceApplicationLine(line):
- return '.super Landroid/app/Application;' in line \
- or 'invoke-direct {p0}, Landroid/app/Application;-><init>()V' in line \
- or 'invoke-super {p0, p1}, Landroid/app/Application;->attachBaseContext(Landroid/content/Context;)V' in line \
- or 'invoke-super {p0, p1}, Landroid/app/Application;->onConfigurationChanged(Landroid/content/res/Configuration;)V' in line \
- or 'invoke-super {p0}, Landroid/app/Application;->onLowMemory()V' in line \
- or 'invoke-super {p0}, Landroid/app/Application;->onTerminate()V' in line \
- or 'invoke-super {p0, p1}, Landroid/app/Application;->onTrimMemory(I)V' in line \
- or 'invoke-super {p0}, Landroid/app/Application;->onCreate()V' in line
- def is_kf_replace_application(line):
- return '.super Lcom/kf/framework/KFApplication;' in line \
- or 'invoke-direct {p0}, Lcom/kf/framework/KFApplication;-><init>()V' in line \
- or 'invoke-super {p0, p1}, Lcom/kf/framework/KFApplication;->attachBaseContext(Landroid/content/Context;)V' in line \
- or 'invoke-super {p0, p1}, Lcom/kf/framework/KFApplication;->onConfigurationChanged(Landroid/content/res/Configuration;)V' in line \
- or 'invoke-super {p0}, Lcom/kf/framework/KFApplication;->onLowMemory()V' in line \
- or 'invoke-super {p0}, Lcom/kf/framework/KFApplication;->onTerminate()V' in line \
- or 'invoke-super {p0, p1}, Lcom/kf/framework/KFApplication;->onTrimMemory(I)V' in line \
- or 'invoke-super {p0}, Lcom/kf/framework/KFApplication;->onCreate()V' in line
- def replace_application_verify_xmy_bug(decompile_dir):
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\oasis\android' in dirpath and 'OasisApplication.smali' in filenames:
- application_path = os.path.join(dirpath, "OasisApplication.smali")
- print(application_path)
- with open(application_path, "r") as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if not is_kf_replace_application(line) and 'Lcom/kf/framework/KFApplication' in line:
- smali_str_arr[smali_str_arr.index(line)] = line.replace('Lcom/kf/framework/KFApplication',
- 'Landroid/app/Application')
- if isNeedReplaceApplicationLine(line):
- smali_str_arr[smali_str_arr.index(line)] = line.replace('Landroid/app/Application',
- 'Lcom/kf/framework/KFApplication')
- with open(application_path, "w") as f:
- f.write(''.join(smali_str_arr))
- def is_rose_replace_application(line):
- return '.super Lcom/ydzs/framework/YDZSApplication;' in line \
- or 'invoke-direct {p0}, Lcom/ydzs/framework/YDZSApplication;-><init>()V' in line \
- or 'invoke-super {p0, p1}, Lcom/ydzs/framework/YDZSApplication;->attachBaseContext(Landroid/content/Context;)V' in line \
- or 'invoke-super {p0, p1}, Lcom/ydzs/framework/YDZSApplication;->onConfigurationChanged(Landroid/content/res/Configuration;)V' in line \
- or 'invoke-super {p0}, Lcom/ydzs/framework/YDZSApplication;->onLowMemory()V' in line \
- or 'invoke-super {p0}, Lcom/ydzs/framework/YDZSApplication;->onTerminate()V' in line \
- or 'invoke-super {p0, p1}, Lcom/ydzs/framework/YDZSApplication;->onTrimMemory(I)V' in line \
- or 'invoke-super {p0}, Lcom/ydzs/framework/YDZSApplication;->onCreate()V' in line
- def replace_application_verify_rose_bug(decompile_dir):
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\oasis\android' in dirpath and 'OasisApplication.smali' in filenames:
- application_path = os.path.join(dirpath, "OasisApplication.smali")
- print(application_path)
- with open(application_path, "r") as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if not is_rose_replace_application(line) and 'Lcom/ydzs/framework/YDZSApplication' in line:
- smali_str_arr[smali_str_arr.index(line)] = line.replace('Lcom/ydzs/framework/YDZSApplication',
- 'Landroid/app/Application')
- if isNeedReplaceApplicationLine(line):
- smali_str_arr[smali_str_arr.index(line)] = line.replace('Landroid/app/Application',
- 'Lcom/ydzs/framework/YDZSApplication')
- with open(application_path, "w") as f:
- f.write(''.join(smali_str_arr))
- r_regex_str = r'sget[^\n]*R\$layout[^\n]*I|sget[^\n]*R\$id[^\n]*I|sget[^\n]*R\$drawable[^\n]*I|sget[^\n]*R\$string[^\n]*I|sget[^\n]*R\$array[^\n]*I|sget[^\n]*R\$bool[^\n]*I|sget[^\n]*R\$integer[^\n]*I'
- def find_kf_resource_and_replace(smali_file_path, regex_str):
- with open(smali_file_path, 'r') as f:
- smali_str = f.read()
- pattern = re.compile(regex_str)
- resource_arr = pattern.findall(smali_str)
- for r_str in resource_arr:
- virtual_name = r_str[r_str.index(' ') + 1:r_str.index(',')]
- print(virtual_name)
- resource_type = r_str[r_str.index('R$') + 2:r_str.index(';')].capitalize()
- print(resource_type)
- resource_name = r_str[r_str.index('->') + 2:r_str.index(':')]
- print(resource_name)
- new_r_str = "const-string %s, \"%s\"\n\n\tinvoke-static {%s}, Lcom/kf/framework/MommyUtils;->get%sId(Ljava/lang/String;)I\n\n\tmove-result %s" % (
- virtual_name, resource_name, virtual_name, resource_type, virtual_name)
- print(new_r_str)
- smali_str = smali_str.replace(r_str, new_r_str)
- with open(smali_file_path, 'w') as f:
- f.write(smali_str)
- def find_rose_resource_and_replace(smali_file_path, regex_str):
- with open(smali_file_path, 'r') as f:
- smali_str = f.read()
- pattern = re.compile(regex_str)
- resource_arr = pattern.findall(smali_str)
- for r_str in resource_arr:
- virtual_name = r_str[r_str.index(' ') + 1:r_str.index(',')]
- print(virtual_name)
- resource_type = r_str[r_str.index('R$') + 2:r_str.index(';')].capitalize()
- print(resource_type)
- resource_name = r_str[r_str.index('->') + 2:r_str.index(':')]
- print(resource_name)
- new_r_str = "const-string %s, \"%s\"\n\n\tinvoke-static {%s}, Lcom/ydzs/framework/MommyUtils;->get%sId(Ljava/lang/String;)I\n\n\tmove-result %s" % (
- virtual_name, resource_name, virtual_name, resource_type, virtual_name)
- print(new_r_str)
- smali_str = smali_str.replace(r_str, new_r_str)
- with open(smali_file_path, 'w') as f:
- f.write(smali_str)
- def replaceRoseResource(d_dir):
- for dirpath, dirnames, filenames in os.walk(d_dir):
- if r'com\wm\shh\zx' in dirpath:
- for smali_file in filenames:
- smali_file_path = os.path.join(dirpath, smali_file)
- print(smali_file_path)
- find_rose_resource_and_replace(smali_file_path, r_regex_str)
- def meta_constructor(loader, node):
- value = loader.construct_mapping(node)
- return value
- def modifyYaml(yaml_path):
- yaml.add_constructor(u'tag:yaml.org,2002:brut.androlib.meta.MetaInfo', meta_constructor)
- file = open(yaml_path, 'r', encoding='utf-8')
- yaml_result = yaml.load(file)
- print(yaml_result)
- # print(yaml_result)
- def modify_json(json_path):
- with open(json_path, 'r+', encoding='utf-8') as jsonFile:
- data = json.load(jsonFile)
- data['app']['is_need_privacy_protection'] = False
- jsonFile.seek(0)
- json.dump(data, jsonFile, ensure_ascii=False)
- jsonFile.truncate()
- def unZipAndCopyCl(game_dir):
- game_name = ''
- for name in os.listdir(game_dir):
- if '小绵羊' not in name and '朱雀' not in name and '九狐' not in name:
- game_name = name
- print(game_name)
- 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()
- os.rename(os.path.join(yb_unzip_path, 'classes.dex'), os.path.join(yb_unzip_path, 'cl'))
- shutil.copy(os.path.join(yb_unzip_path, 'cl'), r'D:\special_problem\破天一剑')
- shutil.rmtree(yb_unzip_path)
- # 解决酷派新sdk在android6.0闪退问题
- def fix_kupai_android6_crash(decompile_dir):
- insert_str_list = [
- '\n\t.locals 0\n\n',
- '\tinvoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale;\n\n',
- '\tmove-result-object p0\n\n',
- '\treturn-object p0\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\yulong\appdata\a' in dirpath and 'e.smali' in filenames:
- smali_path = os.path.join(dirpath, 'e.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public static d(Landroid/content/Context;)Ljava/util/Locale;'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def fix_old_kupai_recharge_phone_permission_crash(decompile_dir):
- insert_str_list = [
- '\n\t.locals 1\n\n',
- '\tconst-string v0, ""\n\n',
- '\treturn-object v0\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\yulong\android\paysdk\base\b\c' in dirpath and 'e.smali' in filenames:
- smali_path = os.path.join(dirpath, 'e.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public static b(Landroid/content/Context;)Ljava/lang/String;'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def fix_android8_bug_xmy(decompile_dir):
- style_xml_path = os.path.join(decompile_dir, 'res', 'values', 'styles.xml')
- xml_tree = ET.parse(style_xml_path)
- xml_root = xml_tree.getroot()
- style_roots = xml_root.findall('./style')
- for style_root in style_roots:
- if style_root.get('name') == 'kf_splash_translucent':
- items = style_root.findall('./item')
- for item in items:
- print('item name', item.get('name'))
- print(item.findtext('.'))
- if item.get('name') == 'android:windowIsTranslucent':
- item.text = 'false'
- xml_tree.write(style_xml_path, encoding='utf-8', xml_declaration=True)
- break
- 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, 'AndroidManifest.xml')
- xml_tree = ET.parse(manifest_path)
- xml_root = xml_tree.getroot()
- act_list = xml_root.findall('.//activity')
- for act in act_list:
- act_name = act.get(f'{namespace}name')
- print(act_name)
- if 'com.yog.kothoth.view.activity.SSShoppingMallActivity' == act_name or 'com.yog.kothoth.view.activity.SSRechargeActivity' == act_name:
- act_theme = act.get(f'{namespace}theme')
- print('act_theme', act_theme)
- act.set(f'{namespace}theme', '@style/kf_splash_translucent')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_android8_bug_rose(decompile_dir):
- style_xml_path = os.path.join(decompile_dir, 'res', 'values', 'styles.xml')
- xml_tree = ET.parse(style_xml_path)
- xml_root = xml_tree.getroot()
- style_roots = xml_root.findall('./style')
- for style_root in style_roots:
- if style_root.get('name') == 'ydzs_splash_translucent':
- items = style_root.findall('./item')
- for item in items:
- print('item name', item.get('name'))
- print(item.findtext('.'))
- if item.get('name') == 'android:windowIsTranslucent':
- item.text = 'false'
- xml_tree.write(style_xml_path, encoding='utf-8', xml_declaration=True)
- break
- 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, 'AndroidManifest.xml')
- xml_tree = ET.parse(manifest_path)
- xml_root = xml_tree.getroot()
- act_list = xml_root.findall('.//activity')
- for act in act_list:
- act_name = act.get(f'{namespace}name')
- print(act_name)
- if 'com.wanwu.sdkkit.gameplatform.activity.RechargeActivity' == act_name:
- act_theme = act.get(f'{namespace}theme')
- print('act_theme', act_theme)
- act.set(f'{namespace}theme', '@style/ydzs_splash_translucent')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- # # 新版sdk取消登录调不起登录,并且关闭了新增
- # def modify_cancel_login_and_fubiao_and_close_login(decompile_dir):
- # insert_str_list = [
- # '\n\tconst-string v0, "\\u670d\\u52a1\\u5668\\u8fd4\\u56de\\u9519\\u8bef"\n\n',
- # '\tinvoke-virtual {p2, v0}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z\n\n',
- # '\tmove-result v0\n\n',
- # '\tif-nez v0, :cond_1\n\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',
- # '\t:cond_1\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))
- #
- # # 新版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))
- # 老板sdk取消登录调不起登录并且不需要延迟初始化
- def fix_old_cancel_login_bug_no_post_delay_login(decompile_dir_path):
- 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/coolcloud/uac/android/api/Coolcloud$3;->val$appctx: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_path):
- if r'com\coolcloud\uac\android\api' in dirpath and 'Coolcloud$3.smali' in filenames:
- smali_path = os.path.join(dirpath, 'Coolcloud$3.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/coolcloud/uac/android/api/Coolcloud;->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))
- # 老板sdk取消登录调不起登录并且需要延迟初始化
- def fix_old_cancel_login_bug_has_post_delay_login(decompile_dir_path):
- 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/coolcloud/uac/android/api/Coolcloud$4;->val$appctx: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_path):
- if r'com\coolcloud\uac\android\api' in dirpath and 'Coolcloud$4.smali' in filenames:
- smali_path = os.path.join(dirpath, 'Coolcloud$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/coolcloud/uac/android/api/Coolcloud;->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))
- def add_lifecycle_method_for_rose_fubiao(decompile_dir):
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\cy\xngame' in dirpath and 'XNGameNativeActivity.smali' in filenames:
- smali_path = os.path.join(dirpath, 'XNGameNativeActivity.smali')
- print(smali_path)
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- resume_index_str = r'.method public onResume()V'
- resume_protected_index_str = r'.method protected onResume()V'
- resume_insert_str = '\n\tinvoke-static {}, Lcom/ydzs/framework/SDKPluginWrapper;->onResume()V\n\n'
- pause_insert_str = '\n\tinvoke-static {}, Lcom/ydzs/framework/SDKPluginWrapper;->onPause()V\n\n'
- pause_index_str = r'.method public onPause()V'
- pause_protected_index_str = r'.method protected onPause()V'
- for index, value in enumerate(smali_str_arr):
- if resume_index_str in value or resume_protected_index_str in value:
- smali_str_arr.insert(index+2, resume_insert_str)
- if pause_index_str in value or pause_protected_index_str in value:
- smali_str_arr.insert(index+2, pause_insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- def add_lifecycle_method_for_xmy_fubiao(decompile_dir):
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\cy\xngame' in dirpath and 'XNGameNativeActivity.smali' in filenames:
- smali_path = os.path.join(dirpath, 'XNGameNativeActivity.smali')
- print(smali_path)
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- resume_index_str = r'.method public onResume()V'
- resume_protected_index_str = r'.method protected onResume()V'
- resume_insert_str = '\n\tinvoke-static {}, Lcom/kf/framework/SDKPluginWrapper;->onResume()V\n\n'
- pause_insert_str = '\n\tinvoke-static {}, Lcom/kf/framework/SDKPluginWrapper;->onPause()V\n\n'
- pause_index_str = r'.method public onPause()V'
- pause_protected_index_str = r'.method protected onPause()V'
- for index, value in enumerate(smali_str_arr):
- if resume_index_str in value or resume_protected_index_str in value:
- smali_str_arr.insert(index+2, resume_insert_str)
- if pause_index_str in value or pause_protected_index_str in value:
- smali_str_arr.insert(index+2, pause_insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- def fix_kf_application_getinstance_null_bug(decompile_dir):
- insert_str_list = [
- '\n\t.locals 1\n\n',
- '\tsget-object v0, Lcom/kf/framework/KFApplication;->application:Landroid/content/Context;\n\n',
- '\tcheck-cast v0, Lcom/kf/framework/KFApplication;\n\n',
- '\treturn-object v0\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\kf\framework' in dirpath and 'KFApplication.smali' in filenames:
- smali_path = os.path.join(dirpath, 'KFApplication.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public static getInstance()Lcom/kf/framework/KFApplication;'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def fix_ydzs_application_getinstance_null_bug(decompile_dir):
- insert_str_list = [
- '\n\t.locals 1\n\n',
- '\tsget-object v0, Lcom/ydzs/framework/YDZSApplication;->application:Landroid/content/Context;\n\n',
- '\tcheck-cast v0, Lcom/ydzs/framework/YDZSApplication;\n\n',
- '\treturn-object v0\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\ydzs\framework' in dirpath and 'YDZSApplication.smali' in filenames:
- smali_path = os.path.join(dirpath, 'YDZSApplication.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public static getInstance()Lcom/ydzs/framework/YDZSApplication;'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def hook_signature(decompile_dir_path):
- # 加固情况并且脱不了壳的情况下,使用{apktool d -s xxx.apk -f -o xxx解包后}先用此方法hook签名看能带壳跑不,能带壳跑可以使用插件形式解决
- sign_char_str = '3082036f30820257a00302010202046d8fe9e1300d06092a864886f70d01010b05003067310b300906035504061302434e3110300e060355040813076265696a696e673110300e060355040713076265696a696e673110300e060355040a13076e6578746a6f793110300e060355040b13076e6578746a6f793110300e060355040313076e6578746a6f793020170d3137303832343038353833315a180f32313137303733313038353833315a3067310b300906035504061302434e3110300e060355040813076265696a696e673110300e060355040713076265696a696e673110300e060355040a13076e6578746a6f793110300e060355040b13076e6578746a6f793110300e060355040313076e6578746a6f7930820122300d06092a864886f70d01010105000382010f003082010a0282010100ac8b3f6bfae5f922c6b58aa74d1b43d1ce249c218da159b9cda0b588105972bd5c3c62eed75c1f42f21c0da220a9ad8f0b95a93217a054d39b24ef01c991229823766dc31dc6788c8bfbb5c332ec803ac44b55782832d043734cb877925a055f9e9ab3e5e6922b16347fa09c1fd405a8de27dcc569558de5eea9ee4b88af2bb3eea250a11793c06be31d66e439c42c11d572284a018f89117a6ffcf8c087d63548b69f41e24a99b89868325e9b8812a16d2331656a0083b8f7926e342a557fb3341180f1906977ba077c53fafb62697aef2138c0413fe3a582ee39798fbe64248d22a55d58427f63ca9487663e755bda7df3dee4139ac7561a0f212d120a15610203010001a321301f301d0603551d0e04160414830df07605e2e34eb47704be53f3b727bfcc8f6e300d06092a864886f70d01010b05000382010100009d636543987810cc66d97ed42353d02c802c181bbd1ae13f98b92341c7aebd4ce77b2aa34c5fa77c8ddf718b0d0afb258bcd38474e2672f7217ee863a30f1f186208596df006b6e1b0f53a3577ab2b47fae46074f58a167617f167a06513a09084a4ba4bce31e93dfa87587422c72ad65941b18b500d71fd517783cec79919e05b19da6b37b5058ac5cca0a7023675f1cf4118c19da7d31fb4a3d39c8e2472fccd50277aa20cf809197e4e506440d6d1a775e3abb5e17daac2830b42454673346525c195b345f6268325798855cbc579c14b6e18ca98adc648c245f9b1f344c7ba4af73fbf86928e2e97abb1b2fa63b14e3947639dfc076d4fc5d396ad8332'
- hook_sign_path = r'D:\special_problem\hook签名不带so'
- # 拷贝smali文件
- print(os.listdir(decompile_dir_path))
- smali_list = [i for i in os.listdir(decompile_dir_path) if 'smali' in i]
- print(smali_list)
- if len(smali_list) == 0:
- smali_list = [i for i in os.listdir(decompile_dir_path) if 'classes' in i]
- # 修改hook签名中的smali文件夹名称
- old_smali_path = os.path.join(hook_sign_path, 'smali_classes')
- new_smali_path = os.path.join(hook_sign_path, f'smali_classes{len(smali_list) + 1}')
- print(new_smali_path)
- os.rename(old_smali_path, new_smali_path)
- shutil.copytree(new_smali_path, os.path.join(decompile_dir_path, f'smali_classes{len(smali_list) + 1}'))
- os.rename(new_smali_path, old_smali_path)
- # 拷贝签名到拷贝签名到xpatch_asset
- sign_info_path = os.path.join(hook_sign_path, 'xpatch_asset', 'original_signature_info.ini')
- print(sign_info_path)
- with open(sign_info_path, 'w') as f:
- f.write(sign_char_str)
- # 找出application拷贝到拷贝签名到xpatch_asset
- application_path = os.path.join(hook_sign_path, 'xpatch_asset', 'original_application_name.ini')
- 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')
- print(application_node)
- application_name = application_node.get(f'{namespace}name')
- print(application_name)
- with open(application_path, 'w') as f:
- f.write(application_name)
- # 拷贝xpatch_asset
- shutil.copytree(os.path.join(hook_sign_path, 'xpatch_asset'),
- os.path.join(decompile_dir_path, 'assets', 'xpatch_asset'))
- # 写入hook application
- application_node.set(f'{namespace}name', 'com.wind.xpatch.proxy.XpatchProxyApplication')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- # 老版本酷派sdk初始化未完成就调登录
- def del_old_coolcloud_fix_login_fail(decompile_dir_path):
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- # print(dirnames)
- for dirname in dirnames:
- if dirname == 'coolcloud':
- coolcloud_path = os.path.join(dirpath,dirname)
- print(coolcloud_path)
- shutil.rmtree(coolcloud_path)
- shutil.copytree(r'D:\special_problem\老版本酷派快发初始化未完成就登录\coolcloud', coolcloud_path)
- def add_resource_method_in_mommy_util(decompile_dir_path,resource_type):
- 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/coolcloud/uac/android/api/Coolcloud$4;->val$appctx: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_path):
- if r'com\coolcloud\uac\android\api' in dirpath and 'Coolcloud$4.smali' in filenames:
- smali_path = os.path.join(dirpath, 'Coolcloud$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/coolcloud/uac/android/api/Coolcloud;->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))
- def fix_2_launch_icon_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()
- act_list = xml_root.findall('.//activity')
- act_alias_list = xml_root.findall('.//activity-alias')
- for act in act_list:
- act_name = act.get(f'{namespace}name')
- if 'com.ydzssdk.wake.SplashYDZSActivity' != act_name and 'com.kfsdk.wake.SplashKFActivity' != act_name:
- intent_nodes = act.findall('./intent-filter')
- if intent_nodes is not None:
- for intent_node in intent_nodes:
- action_node = intent_node.find('./action')
- category_node = intent_node.find('./category')
- if action_node is not None and category_node is not None:
- action_name = action_node.get(f'{namespace}name')
- category_name = category_node.get(f'{namespace}name')
- if action_name == 'android.intent.action.MAIN' and category_name == 'android.intent.category.LAUNCHER':
- print('act_name', act_name)
- act.remove(intent_node)
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- for act in act_alias_list:
- act_name = act.get(f'{namespace}name')
- if 'com.ydzssdk.wake.SplashYDZSActivity' != act_name and 'com.kfsdk.wake.SplashKFActivity' != act_name:
- intent_nodes = act.findall('./intent-filter')
- if intent_nodes is not None:
- for intent_node in intent_nodes:
- action_node = intent_node.find('./action')
- category_node = intent_node.find('./category')
- if action_node is not None and category_node is not None:
- action_name = action_node.get(f'{namespace}name')
- category_name = category_node.get(f'{namespace}name')
- if action_name == 'android.intent.action.MAIN' and category_name == 'android.intent.category.LAUNCHER':
- print('act_name', act_name)
- act.remove(intent_node)
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- def fix_game(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()
- act_list = xml_root.findall('.//activity')
- for act in act_list:
- act_name = act.get(f'{namespace}name')
- if 'com.ydzssdk.wake.SplashYDZSActivity' != act_name and 'com.kfsdk.wake.SplashKFActivity' != act_name:
- intent_nodes = act.findall('./intent-filter')
- if intent_nodes is not None:
- for intent_node in intent_nodes:
- action_node = intent_node.find('./action')
- category_node = intent_node.find('./category')
- if action_node is not None and category_node is not None:
- action_name = action_node.get(f'{namespace}name')
- category_name = category_node.get(f'{namespace}name')
- if action_name == 'android.intent.action.MAIN' and category_name == 'android.intent.category.LAUNCHER':
- print('act_name', act_name)
- act.remove(intent_node)
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- def fix_coolpad_version_3_method_name_change_bug(decompile_dir):
- is_version_3_sdk = False
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if r'com\yulong\sdk\promoter' in dirpath and 'OnGameAuthListener.smali' in filenames:
- auth_listener_path = os.path.join(dirpath, 'OnGameAuthListener.smali')
- with open(auth_listener_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.read()
- if 'onSuccess' in smali_str_arr:
- is_version_3_sdk = True
- break
- for dirpath, dirnames, filenames in os.walk(decompile_dir):
- if is_version_3_sdk and r'com\yulong\sdk\promoter' in dirpath and 'PromoterGameAuthApi$1.smali' in filenames:
- smali_path = os.path.join(dirpath, 'PromoterGameAuthApi$1.smali')
- print(smali_path)
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = r'onResult'
- for line in smali_str_arr:
- if index_str in line:
- print(line)
- index = smali_str_arr.index(line)
- smali_str_arr[index] = line.replace(index_str, 'onSuccess')
- print(smali_str_arr[index])
- break
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- 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)
- def fix_xmy_recharge_screen_orientation(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.yog.kothoth.view.activity.SSRechargeActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'landscape')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_xmy_recharge_screen_orientation_portrait(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.yog.kothoth.view.activity.SSRechargeActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'portrait')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_rose_recharge_screen_orientation(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.wanwu.sdkkit.gameplatform.activity.RechargeActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'landscape')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_rose_recharge_screen_orientation_portrait(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.wanwu.sdkkit.gameplatform.activity.RechargeActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'portrait')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_fake_recharge_screen_orientation(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.wanwu.sdkkit.gameplatform.paysdk.view.activity.CoolPaySDKActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'landscape')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_fake_recharge_screen_orientation_portrait(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()
- activity_nodes = xml_root.findall('.//activity')
- print(activity_nodes)
- for activity_node in activity_nodes:
- print(activity_node.attrib)
- activity_name = activity_node.get(f'{namespace}name')
- print(activity_name)
- if 'com.wanwu.sdkkit.gameplatform.paysdk.view.activity.CoolPaySDKActivity' == activity_name:
- activity_node.set(f'{namespace}screenOrientation', 'portrait')
- xml_tree.write(manifest_path, encoding='utf-8', xml_declaration=True)
- break
- def fix_kf_not_show_fubiao_permission(decompile_dir_path):
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\kfsdk\wake' in dirpath and 'SplashKFActivity.smali' in filenames:
- htprotect_dir_path = dirpath
- print(htprotect_dir_path)
- shutil.copy(os.path.join(r'D:\special_problem\首次安装未获取悬浮窗权限问题\xmy', 'SplashKFActivity.smali'),
- htprotect_dir_path)
- if r'com\kfsdk\wake' in dirpath and 'SplashKFActivity$1.smali' in filenames:
- htprotect_dir_path = dirpath
- print(htprotect_dir_path)
- shutil.copy(os.path.join(r'D:\special_problem\首次安装未获取悬浮窗权限问题\xmy', 'SplashKFActivity$1.smali'),
- htprotect_dir_path)
- def fix_ydzs_not_show_fubiao_permission(decompile_dir_path):
- for dirpath,dirnames,filenames in os.walk(decompile_dir_path):
- # 拷贝HTProtect.smali
- if r'com\ydzssdk\wake' in dirpath and 'SplashYDZSActivity.smali' in filenames:
- htprotect_dir_path = dirpath
- print(htprotect_dir_path)
- shutil.copy(os.path.join(r'D:\special_problem\首次安装未获取悬浮窗权限问题\rose', 'SplashYDZSActivity.smali'),
- htprotect_dir_path)
- if r'com\ydzssdk\wake' in dirpath and 'SplashYDZSActivity$1.smali' in filenames:
- htprotect_dir_path = dirpath
- print(htprotect_dir_path)
- shutil.copy(os.path.join(r'D:\special_problem\首次安装未获取悬浮窗权限问题\rose', 'SplashYDZSActivity$1.smali'),
- htprotect_dir_path)
- def fix_coolpad_version_3_login_fail_bug(decompile_dir_path):
- insert_str_list = [
- '\n\t.locals 0\n\n',
- '\treturn-void\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\yulong\account\auth' in dirpath and 'AuthCodeApiImpl.smali' in filenames:
- smali_path = os.path.join(dirpath, 'AuthCodeApiImpl.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method private returnAuthError(Lcom/yulong/account/common/info/ErrorInfo;)V'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def decode_yb_and_del_v4_and_copy_yb_res_and_modify_colors_v31(decompile_dir_path, yb_path):
- yb_decode_path = r'D:\work\game_yb'
- # aapt2_output_dir = r'D:\work\output'
- aapt2_output_dir = r'D:\work\wlxxkp_30181_朱雀2_1'
- # cmd_decode_yb = f'apktool d {yb_path} -f -o {yb_decode_path} --only-main-classes'
- # os.system(cmd_decode_yb)
- # 用原包中的abc_screen_simple、abc_screen_content_include、abc_action_menu_item_layout.xml替换小绵包中的
- shutil.copy(os.path.join(yb_decode_path, "res", 'layout', 'abc_screen_simple.xml'), os.path.join(decompile_dir_path, "res", 'layout'))
- shutil.copy(os.path.join(yb_decode_path, "res", 'layout', 'abc_screen_content_include.xml'), os.path.join(decompile_dir_path, "res", 'layout'))
- shutil.copy(os.path.join(yb_decode_path, "res", 'layout', 'abc_action_menu_item_layout.xml'), os.path.join(decompile_dir_path, "res", 'layout'))
- # # 将原包中的values-v31和color-v31拷贝到xmy\res目录下
- # shutil.copytree(os.path.join(yb_decode_path,'res','navigation'),os.path.join(decompile_dir_path,'res','navigation'))
- # #删除drawable-v4、mipmap-v4等含有v4的文件夹
- # for res_dir_name in os.listdir(os.path.join(decompile_dir_path, 'res')):
- # if 'v4' in res_dir_name and ('drawable' in res_dir_name or 'mipmap' in res_dir_name):
- # drawable_v4_path = os.path.join(decompile_dir_path, 'res', res_dir_name)
- # print('delete:', drawable_v4_path)
- # shutil.rmtree(drawable_v4_path)
- # # #
- # # colors_xml_path = os.path.join(decompile_dir_path, 'res', 'values-v31', 'colors.xml')
- # # xml_tree = ET.parse(colors_xml_path)
- # # xml_root = xml_tree.getroot()
- # # color_roots = xml_root.findall('./color')
- # # for style_root in color_roots:
- # # style_root.text = '@android:color/white'
- # # xml_tree.write(colors_xml_path, encoding='utf-8', xml_declaration=True)
- #
- # if not os.path.exists(aapt2_output_dir):
- # os.makedirs(aapt2_output_dir)
- # print("make dir:", aapt2_output_dir)
- # # aapt2不支持中文路径,拷贝渠道包res到output
- # shutil.copytree(os.path.join(decompile_dir_path, "res"), os.path.join(aapt2_output_dir, "res"))
- # # 重新编译资源
- # channel_apk_res_path = os.path.join(aapt2_output_dir, "res")
- # aapt2_res_zip_path = os.path.join(aapt2_output_dir, "res.zip")
- # cmd_aapt2_compile = rf'F:\Android\as_sdk\build-tools\30.0.2\aapt2.exe compile --dir {channel_apk_res_path} -o {aapt2_res_zip_path} -v'
- # print(cmd_aapt2_compile)
- # os.system(cmd_aapt2_compile)
- # aapt2_apk_path = os.path.join(aapt2_output_dir, "aapt.apk")
- # cmd_aapt2_link = rf'F:\Android\as_sdk\build-tools\30.0.2\aapt2.exe link {aapt2_res_zip_path} -I F:\Android\as_sdk\platforms\android-30\android.jar -o {aapt2_apk_path} --manifest {os.path.join(decompile_dir_path, "AndroidManifest.xml")} -v'
- # print(cmd_aapt2_link)
- # os.system(cmd_aapt2_link)
- # cmd_decode_output_apk = rf'apktool d {os.path.join(aapt2_output_dir, "aapt.apk")} -f -o {os.path.join(aapt2_output_dir, "aapt")} --only-main-classes'
- # print(cmd_decode_output_apk)
- # os.system(cmd_decode_output_apk)
- yb_public_path = os.path.join(yb_decode_path, "res", "values", "public.xml")
- # build_public_path = os.path.join(aapt2_output_dir, "aapt", "res", "values", "public.xml")
- build_public_path = os.path.join(aapt2_output_dir, "res", "values", "public.xml")
- apk_path = decompile_dir_path
- cmd_run_refresh_resource = rf'python F:\python_learn\day_1\learn\refresh_resource_wlxx.py {yb_public_path} {build_public_path} {apk_path}'
- print(cmd_run_refresh_resource)
- os.system(cmd_run_refresh_resource)
- cmd_build_apk = rf'apktool b {decompile_dir_path} -f -o D:\work\test.apk --only-main-classes'
- os.system(cmd_build_apk)
- cmd_sign_str = rf'ydzs_sign D:\work\test.apk'
- os.system(cmd_sign_str)
- cmd_install_str = r'adb install D:\work\test.apk'
- os.system(cmd_install_str)
- # shutil.copy(build_public_path, os.path.join(decompile_dir_path, "res", "values"))
- # shutil.rmtree(aapt2_output_dir)
- # shutil.rmtree(yb_decode_path)
- def change_old_kupai_loginNew_to_logout(decompile_dir_path):
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\coolcloud\uac\android\api' in dirpath and 'Coolcloud.smali' in filenames:
- smali_path = os.path.join(dirpath, 'Coolcloud.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method public loginNew('
- end_method_str = '.end method'
- # 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 != 0 and 'login(' in value:
- print('index =', index, 'value=', value)
- smali_str_arr[index] = smali_str_arr[index].replace('login', 'logout')
- print('after replace value=', value)
- break
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- def fix_xmy_webview_recharge_bug(decompile_dir_path):
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\yog\kothoth\view\activity' in dirpath and 'SSRechargeActivity.smali' in filenames:
- smali_path = os.path.join(dirpath, 'SSRechargeActivity.smali')
- print(smali_path)
- with open(smali_path, 'r') as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if 'invoke-virtual {v0}, Lcom/yog/kothoth/view/widget/AdvancedWebView;->onPause()V' in line:
- smali_str_arr[smali_str_arr.index(
- line)] = '\t#invoke-virtual {v0}, Lcom/yog/kothoth/view/widget/AdvancedWebView;->onPause()V\n'
- with open(smali_path, 'w') as f:
- f.write(''.join(smali_str_arr))
- if r'com\yog\kothoth\view\activity' in dirpath and 'SSUserCenterActivity.smali' in filenames:
- smali_path = os.path.join(dirpath, 'SSUserCenterActivity.smali')
- print(smali_path)
- with open(smali_path, 'r') as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if 'invoke-virtual {v0}, Lcom/yog/kothoth/view/widget/AdvancedWebView;->onPause()V' in line:
- smali_str_arr[smali_str_arr.index(
- line)] = '\t#invoke-virtual {v0}, Lcom/yog/kothoth/view/widget/AdvancedWebView;->onPause()V\n'
- with open(smali_path, 'w') as f:
- f.write(''.join(smali_str_arr))
- def close_xmy_realname(decompile_dir_path):
- developer_path = os.path.join(decompile_dir_path, 'assets', 'developer.properties')
- print(developer_path)
- with open(developer_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if 'isRealname' in line:
- smali_str_arr[smali_str_arr.index(line)] = line.replace('0', '1')
- break
- with open(developer_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- def open_xmy_realname(decompile_dir_path):
- developer_path = os.path.join(decompile_dir_path, 'assets', 'developer.properties')
- print(developer_path)
- with open(developer_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- for line in smali_str_arr:
- if 'isRealname' in line:
- smali_str_arr[smali_str_arr.index(line)] = line.replace('1', '0')
- break
- with open(developer_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- def find_top_application_path(decompile_dir,application_path):
- super_application_regex = re.compile(r'.*?\.super\s+(.*?);.*?')
- # .super Lcom/wf/sdk/WFApplication;
- top_application_path = ''
- super_application_name = ''
- with open(application_path, 'r') as f:
- str = f.read()
- super_application_name = re.findall(super_application_regex, str)[0]
- print('super_application_name', super_application_name)
- super_application_name = super_application_name[1:] + '.smali'
- path_list = glob.glob(os.path.join(decompile_dir, 'smali*/%s' % super_application_name))
- if len(path_list) != 0:
- top_application_path = path_list[0]
- print('super_application_path', top_application_path)
- if super_application_name == ' Landroid/support/multidex/MultiDexApplication':
- print('top_super_application_name', super_application_name)
- return top_application_path
- else:
- find_top_application_path(decompile_dir,top_application_path)
- def test(decompile_dir):
- 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, 'AndroidManifest.xml')
- xml_tree = ET.parse(manifest_path)
- xml_root = xml_tree.getroot()
- application_node = xml_root.find('./application')
- application_name = application_node.get('%sname' % namespace)
- application_name_split_list = application_name.split('.')
- print('application_name_split_list', application_name_split_list)
- application_path = '/'.join(application_name_split_list) + '.smali'
- application_path = glob.glob(os.path.join(decompile_dir, 'smali*/%s' % application_path))[0]
- print('application_path', application_path)
- print('application_name', application_name)
- top_application_path = find_top_application_path(decompile_dir, application_path)
- print('top_application_path',top_application_path)
- # for dirpath, dirnames, filenames in os.walk(decompile_dir):
- # if r'androidx\startup' in dirpath or r'androidx\work\impl' in dirpath or r'com\snyu\ddcr' in dirpath \
- # or r'com\kingsoft\shiyou\omnisdk\project\ui' in dirpath or r'com\sharry\lib\album' in dirpath:
- # for smali_file in filenames:
- # smali_file_path = os.path.join(dirpath, smali_file)
- # print(smali_file_path)
- # find_rose_resource_and_replace(smali_file_path, r_regex_str)
- # # attachBaseContext提前赋值
- def delete_bugly_init_method(decompile_dir_path):
- insert_str_list = [
- '\n\t.locals 0\n\n',
- '\treturn-void\n\n']
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\tencent\bugly\agent' in dirpath and 'GameAgent.smali' in filenames:
- smali_path = os.path.join(dirpath, 'GameAgent.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_str = '.method private static initCrashReport(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V'
- end_method_str = '.end method'
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- for dirpath, dirnames, filenames in os.walk(decompile_dir_path):
- if r'com\tencent\bugly\crashreport' in dirpath and 'CrashReport.smali' in filenames:
- smali_path = os.path.join(dirpath, 'CrashReport.smali')
- with open(smali_path, 'r', encoding='utf-8') as f:
- smali_str_arr = f.readlines()
- index_strs = ['.method public static initCrashReport(Landroid/content/Context;)V',
- '.method public static initCrashReport(Landroid/content/Context;Lcom/tencent/bugly/crashreport/CrashReport$UserStrategy;)V',
- '.method public static initCrashReport(Landroid/content/Context;Ljava/lang/String;Z)V',
- '.method public static initCrashReport(Landroid/content/Context;Ljava/lang/String;ZLcom/tencent/bugly/crashreport/CrashReport$UserStrategy;)V']
- end_method_str = '.end method'
- insert_str = ''.join(insert_str_list)
- for index_str in index_strs:
- 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)
- del smali_str_arr[on_create_index + 1:insert_index]
- smali_str_arr.insert(on_create_index + 1, insert_str)
- with open(smali_path, 'w', encoding='utf-8') as f:
- f.write(''.join(smali_str_arr))
- break
- # 按间距中的绿色按钮以运行脚本。
- if __name__ == '__main__':
- hook_signature(r'D:\work\yb')
- # 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助
|