010 Editor编写脚本修复DEX

在修改DEX文件后,需要更新其DexHeader的checksum和signature字段。本文介绍如何通过编写脚本来实现这一修复过程。

修改完DEX文件后,DexHeader 头部的 checksum 和 signature 字段是错的,需要修正。
未修正的dex:
在这里插入图片描述
修正后的:
在这里插入图片描述
所以我们需要编写脚本进行修正:
在这里插入图片描述
代码如下:

int endian = ReadInt(0x28);     // endian_flag
if (endian == 0x12345678) {
   
   
    LittleEndian();
}
else {
   
   
    BigEndian();
}

uchar sha1[20]<
010 Editor支持高级脚本编写模板匹配功能,能帮助用户高效地解析操作二进制文件,其使用脚本模板的相关信息如下: ### 使用脚本的方法 以编写脚本修复DEX文件为例,修改完DEX文件后,DexHeader头部的checksumsignature字段是错误的,需要编写脚本来修正。示例代码如下: ```python int endian = ReadInt(0x28); // endian_flag if (endian == 0x12345678) { LittleEndian(); } else { BigEndian(); } uchar sha1[20]; ReadBytes(sha1, 0xc, 20); Printf("src sha1: "); uint i = 0; for (i = 0; i < 20; i++) { Printf("%02x", sha1[i]); } Printf("\n"); uchar checksum[20]; ChecksumAlgBytes(CHECKSUM_SHA1, checksum, 0x20); Printf("calced sha1: "); for (i = 0; i < 20; i++) { Printf("%02x", checksum[i]); } Printf("\n"); int adler32 = ReadInt(0x8); if (Memcmp(checksum, sha1, 20) != 0) { WriteBytes(checksum, 0xc, 20); } else { Printf("same sha1\n"); } int adler32_ = Checksum(CHECKSUM_ADLER32, 0xc); Printf("src adler32: %x\n", adler32); Printf("calced adler32:%x\n", adler32_); if (adler32_ != adler32) { WriteInt(0x8, adler32_); } else { Printf("same adler32\n"); } Printf("Done.\n"); ``` 此脚本通过读取文件中的字节、计算校验、比较并写入修正后的值,完成对DEX文件的修复 [^4]。 ### 使用模板的方法 010 Editor完全支持二进制模板系统,软件内置了强大的模块、脚本操作。用户只需将一个类型的二进制文件进行定义模块,之后在编辑相同类型文件时,即可调用以前的模块自动进行分析。不过引用中未给出具体使用模板的详细步骤 [^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值