好友
阅读权限 30
听众
最后登录 1970-1-1
楼主
小骚
发表于 2019-8-7 12:29
本帖最后由 小骚 于 2019-8-8 21:07 编辑
看了别人的操作和我那个另类破解 方法差不多,想能不能省略那么麻烦的步骤,灵感来源: https://forum.xda-developers.com/galaxy-s2/themes-apps/how-to-manually-deodex-odex-t1208320
引用百度百科:什么是ODEX文件?
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·odex文件单独存放,原apk文件中的classes.dex文件可以保留,也可以删除。 这样做可以加快软件的 启动速度 ,预先提取,减少对 RAM 的占用,因为没有 odex 的话,系统要从 apk 包中提取dex再运行。
前提:
1.需要Root
2.可能用到幸运破解器
3.一个5.0以上8.0以下的手机,虚拟机 还没试(应该没问题)。
4.一个破解完成的apk(有没有修复没关系,360加固的添加个classes2一样用)
ps:为何需要5.0以上,因为我写软件的时候没考虑过还有4.4的手机。为何8.0以下,因为8.0之后是有vdex的,此方法暂时对8.0以上无用
原理大概就是把软件里面的dex转换成odex再替换apk目录下的odex实现破解 具体思路看我另一个帖子: https://www.52pojie.cn/thread-935810-1-1.html . 也可以开源
演示视频地址:http://www.bilibili.com/video/av62548161
核心代码:[mw_shl_code=java,true]public class OdexPatchActivity extends Activity implements View.OnClickListener, FileSelectDialog.IFileSelection {
private EditText apkPathEt;
private String apkPath;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_odex_patch);
initView();
}
private void initView() {
this.apkPathEt = (EditText) findViewById(R.id.et_apkpath);
Button selectBtn = (Button) findViewById(R.id.btn_select_apkpath);
selectBtn.setOnClickListener(this);
Button applyBtn = (Button) findViewById(R.id.btn_apply_patch);
applyBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btn_select_apkpath) {
FileSelectDialog dlg = new FileSelectDialog(this, this, ".apk", "", null);
dlg.show();
} else if (id == R.id.btn_apply_patch) {
this.apkPath = apkPathEt.getText().toString();
ProcessingDialog dlg = new ProcessingDialog(this, new PatchProcessor(), -1);
dlg.show();
}
}
////////////////////////////////////////////////////////////////////////////////
// Processing Dialog
class PatchProcessor implements ProcessingDialog.ProcessingInterface {
private String errMessage;
private String odexPath;
@Override
public void process() throws Exception {
ApkInfoParser parser = new ApkInfoParser();
ApkInfoParser.AppInfo info = parser.parse(OdexPatchActivity.this, apkPath);
if (info == null) {
return;
}
String packageName = info.packageName;
OdexPatcher patcher = new OdexPatcher(packageName);
patcher.applyPatch(OdexPatchActivity.this, apkPath);
odexPath = patcher.targetOdex;
if (patcher.errMessage != null) {
this.errMessage = patcher.errMessage;
throw new Exception(errMessage);
}
}
@Override
public void afterProcess() {
if (errMessage == null) {
Toast.makeText(OdexPatchActivity.this, "修补到 " + odexPath, Toast.LENGTH_LONG).show();
}
}
}
////////////////////////////////////////////////////////////////////////////////
// File selection
@Override
public void fileSelectedInDialog(String filePath,String extraStr,boolean openFile){
apkPathEt.setText(filePath);
}
@Override
public boolean isInterestedFile(String filename,String extraStr){
return filename.endsWith(“。apk”);
}
@Override
public String getConfirmMessage(String filePath,String extraStr){
return null;
}
///////////////////////////////////////////////// ///////////////////////////////
} [/ mw_shl_code]
截图
后续可能会有更多功能,比如可以hook植入classes2.dex什么的,梦想总是要有的 万一实现了呢
忘了放下载地址:http://t.cn/AiTitrUH
免费评分
查看全部评分
本帖被以下淘专辑推荐:
· 安卓及破解案例 | 主题: 378, 订阅: 335
· 好帖 | 主题: 549, 订阅: 87
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。