前面我们已经将环境都安装好了,现在我们就开始搭建一个项目来做反编译啦!首先我们说一下我这边项目的一个目录结构:config(配置文件目录),res(反编译目录资源),util(工具目录),test(测试代码目录)
1.config目录:主要房租一些配置文件全局的获取部分需要的设置
2.res目录:apk文件目录(apk_dir);class文件目录(class_dir);java文件目录(java_dir);smali文件目录(smali_dir)
3.util目录:配置文件读取类(config),常规文件读写类(fileds),数据库操作类(sqlTool) 等
4.test:放置主要核心代码文件
如图:
至于一些工具了我们这里就不进行详细的说明了(我之前的文章中都有进行说明),主要重点将放在核心代码实现上。
一。我们要获取到常规反编译文件(Smali)
先定义几个目录文件方便我们放置不同类型的文件
def __init__(self, apkName):
"""相当于java的初始化过程"""
self.apk_dir = Config("apk").get("apk_dir") + apkName + ".apk"
self.class_dir = Config("apk").get("class_dir") + apkName
self.java_dir = Config("apk").get("java_dir") + apkName
self.smali_dir = Config("apk").get("smali_dir") + apkName
之后就是通过调用工具对apk进行反编译了
def decompileSmali(self):
"""反编译获取Smali 文件"""
if not os.path.exists(self.smali_dir):
os.makedirs(self.smali_dir)
else:
shutil.rmtree(self.smali_dir)
os.makedirs(self.smali_dir)
os.system("apktool d -f " + self.apk_dir + " -o " + self.smali_dir)
return self.smali_dir
之后我们进行调试一下看看结果(目标apk:cartoonchild.apk)
if __name__ == '__main__':
decompile = apkDecompile("app_3.0.4_updateA_release")
decompile.decompileSmali()
稍等一会我们就可以看到控制台及文件目录中已包含相关文件
到这里Smali文件就反编译完成了,是不是特别简单。。。。。