python3对.net二进制文件进行资源替换

需求:

需要对 .net 编译的二进制文件中的资源中字符串进行替换。

环境:python3.6.5
核心代码:

f = open("C:\Program Files (x86)\xxx\xxx.exe","r+b")
s=f.read()
s=s.replace(b'hello', b'test1')
# 中文
s=s.replace('原来'.encode(), '目标'.encode())
f.write(s)
f.close()

如果直接使用上面替换可以发现,替换后的文件是无法启动的,因为被替换的字符串有可能说路径。
使用dnSpy去查看可以找到一些规律:
这里写图片描述

把找到的资源进行预处理下,最终结果如下:

f = open("C:\Program Files (x86)\xxx\xxx.exe","r+b")
s = f.read()
src = '中文三'.encode()
dst = '我测试'.encode()
print(type(s))

postions = []
for i in nextIndex(src, s):
    pre1_value = s[i-1]
    print('pre=>', pre1_value)
    # if pre1_value != 76 or pre1_value != 0 or pre1_value != 24:
    if pre1_value == 21 or pre1_value == 24 or pre1_value == 0:
        postions.append(i)

# exit()
for i in postions:
    f.seek(i)
    f.write(dst)
    print('result==>', (s[i-1]))
f.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值