190321 逆向-花指令去除(脚本)

本文探讨了在Pizza的脚本中如何优化机器码处理,通过get_bytes和patch_bytes API进行数据读写。文章指出,虽然find方法在大量数据处理时效率较高,但逐字符匹配具有更强的可控性。作者尝试结合find和matchBytes来提升效率,并最终发现正则表达式的sub函数是理想的解决方案,能够有效避免大范围匹配的问题和通配符的限制。文中还提到了多选结构的匹配策略和潜在的漏解情况,建议在遇到特定情况时进行修正。
摘要由CSDN通过智能技术生成

Pizza的脚本中是通过get_bytes和patch_bytes两个API来将所有机器码读出然后再Patch回去的
中间匹配pattern的过程是构造字符串然后find来控制
在这里插入图片描述

这样操作的优点是find的效率奇高,对于大量数据的处理非常的快
而我们之前使用的逐字符匹配pattern的优点是可控性比较强,例如通配符的存在
然而缺点就是速度很慢,对于数量级较大时格外明显,因此试图修复

刚开始以为速度在于多次取Byte,改成python同样用get_bytes取出后再匹配,发现仍然很慢
于是想到了通过find来快速找到pattern开头非?的部分,然后再用原来的matchBytes匹配,发现能得到一定的效率提升,但还是有点问题

from ida_bytes import get_bytes, patch_bytes
addr = 0x401000
end = 0x4b9cd0
buf = "".join(["%02x"%ord(i) for i in get_bytes(addr,end-addr)]).lower()
def patch_at(p, ln):
    global buf
    buf = buf[:p] + "90" * ln + buf[p+ln:]


def matchBytes(s, Condition):
    l = len
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值