无法弄清楚我做错了什么或者python脚本是否有错误

时间:2013-10-16 17:54:50

标签: android python sed

我需要一些关于这个python脚本的帮助:

  #!/usr/bin/env python
    import os
    import sys
import zipfile
import zlib
import shutil
import errno
import distutils.dir_util
import re

apktool = "./apktool.jar"
smalidir = "./smali/"

def usage():
    print("usage : ./ssl-patch <apk file>")

def unzip_apk(infile, output):
    zfile = zipfile.ZipFile(infile, 'r')
    zfile.extractall(output)
    zfile.close()

def zip_to_apk(indir, output):
    outapk = zipfile.ZipFile(output, 'w')
    for (path, dirs, files) in os.walk(indir):
        zipath = path[len("./" + output):]
        for filename in files:
            outapk.write(os.path.join(path, filename), os.path.join(zipath, filename), zipfile.ZIP_DEFLATED)
    outapk.close()

def escape_dollar(string):
    return(re.sub('\$','\\$',string))

if (len(sys.argv) != 2):
    usage()
    exit()

apk = sys.argv[1]
outdir = "./" + apk + "-dir" 
zipdir = "./" + apk + "-zip" 

unzip_apk(apk, zipdir)

print("Decompression of " + apk + " done.")

os.system("java -jar " + apktool + " d " + apk + " " + outdir)
print("Decompilation of " + apk + " done.")

try:
    os.makedirs(outdir + "/smali/com/android")
except OSError as exc:
    if exc.errno == errno.EEXIST:
        pass
    else: raise

print("Patching smali files...")
for (path, dirs, files) in os.walk(outdir + "/smali/"):
    for smalifile in files:
        filename, ext = os.path.splitext(smalifile)
        if ext == ".smali":
            os.system("sed -i 's/org\/apache\/http\/impl\/client\/DefaultHttpClient/com\/android\/MyHttpClient/g' " + escape_dollar(os.path.join(path, smalifile)))
            os.system("sed -i 's/check-cast v\([0-9]\+\), Ljavax\/net\/ssl\/HttpsURLConnection;/invoke-static \{\}, Lcom\/android\/httpsurlbypass;->trustAllHosts()V\\n    &/g' " + escape_dollar(os.path.join(path, smalifile)))
            os.system("sed -i 's/check-cast v\([0-9]\+\), Ljavax\/net\/ssl\/HttpsURLConnection;/&\\n    invoke-static \{v\\1\}, Lcom\/android\/bypass;->httpsurlconnectionbypass(Ljavax\/net\/ssl\/HttpsURLConnection;)V/g' " + escape_dollar(os.path.join(path, smalifile)))
            os.system("sed -i 's/invoke-virtual {v\([0-9]\+\), v1}, Landroid\/webkit\/WebView;->loadUrl(Ljava\/lang\/String;)V/invoke-static \{v\\1\}, Lcom\/android\/bypass1;->webviewbypass(Landroid\/webkit\/WebView;)V\\n    &/g' " + escape_dollar(os.path.join(path, smalifile)))
print("All files patched.")

smalilist = os.listdir(smalidir)
for smalifile in smalilist:
    shutil.copy(smalidir + smalifile, outdir + "/smali/com/android/")
print("Smali code included.")

apkname, ext = os.path.splitext(apk)
newapk = apkname + "-new" + ext
os.system("java -jar " + apktool + " b " + outdir + " " + newapk)
print("Recompilation of " + newapk + " done.")

shutil.rmtree(outdir)

unzip_apk(newapk, outdir)

distutils.dir_util.copy_tree(zipdir + "/res/", outdir + "/res/")

shutil.rmtree(zipdir)
os.remove(newapk)

zip_to_apk(outdir, newapk)
print("Resources re-added, for compatibility.")

shutil.rmtree(outdir)

每次尝试使用脚本时都会出现以下错误:http://prntscr.com/1xq1hb

'sed'未被识别为内部或外部命令 该系统找不到指定的路径。 '/ g''不被识别为内部或外部命令

谢谢:)

0 个答案:

没有答案