是否可以从apk dalvik替换字符串(压缩)代码

时间:2013-04-17 21:45:54

标签: android python apk

我想从hex / dalvik apk代码替换单个字符串。我意识到这将需要找到字符串在从Android类项目转换为签名的apk文件时如何编码。

这可能吗?嗯,我知道在代码中,任何可能的事情......但是这里有人知道怎么做吗?我已经了解到可以在Windows平台上使用简单的zip存档(例如替换SystemUI.apk的图标)删除和添加.apk文件,而不会破坏apk ..但是如何以编程方式执行此操作?特别是在python中?

有没有人对如何做到这一点有任何想法?

我试过了:

import zipfile
zf=zipfile.ZipFile('APK.apk') # my zip file
for filename in ['classes.dex']: # zipped file content file
 data=zf.read(filename)
data=data.replace('mystring','newstring') #replace string within the content file
file=open('classes.dex','wb')
file.write(data) # write NEW content file to local disk
file.close()
zin=zipfile.ZipFile('APK.apk','r')       # create zip in and zip out
zout=zipfile.ZipFile('APK.apk','w')      # iterate through zipped contents and
for item in zin.infolist():              # copy all EXCEPT 'classes.dex' content file
  buffer=zin.read(item.filename)
  if (item.filename!='classes.dex'):
    zout.writestr(item,buffer)
zout.close()
zin.close()
zf=zipfile.ZipFile('APK.apk',mode='a')   # finally, add new content file from my local disk
zf.write('classes.dex',arcname='classes.dex')
zf.close()

这将获取原始APK.apk文件,并在其中一个压缩内容文件中重写一个字符串,然后将其重新打包回APK.apk。问题是: ORIGINAL APK.apk = 170 kb 新APK.apk = 399 kb并且不安装,apk被“破坏”,Android系统将无法安装apk。

1 个答案:

答案 0 :(得分:0)

您无法添加字符串比原始字符串更高的字符串。您必须使用相同大小的字符串替换特定大小的字符串。试试幸运的补丁。它仅替换Android中的字符串..无需将其带到您的电脑上。 : - )