原理:编译时混淆字符串,运行时还原。
作用:该方式的主要目的是增加逆向工程的难度,防止敏感字符串在二进制文件中以明文形式出现。
实现步骤
在代码编译阶段,不直接写明文字符串,而是用一个混淆后的数据表示(字节数组),并提供一个解密函数在运行时还原。
混淆的方式很多 这里先使用异或(XOR) 操作,因为它简单且可逆
使用python脚本作为混淆工具
def xor_obfuscate_advanced(text, key_str):
text_bytes = text.encode('utf-8')
key_bytes = key_str.encode('utf-8')
return [
text_bytes[i] ^ key_bytes[i % len(key_bytes)]
for i in range(len(text_bytes))
]
if __name__ == '__main__':
secret = "免费版" // 需要混淆的字符串
key_phrase = "0x22" // 选择一个单字节密钥(0-255之间)
obfuscated = xor_obfuscate_advanced(secret, key_phrase)
print(f"{obfuscated}")
print出 [213, 253, 191, 218, 132, 193, 213, 187, 184] 的结果就是我们混淆后的字节数组
在项目中使用混淆后的字节数组(以Swift为例)
func deobfuscateAdvanced(_ array: [UInt8]) -> String {
// 这里的单字节密钥 ("0x22")要与python混淆是的一致
guard let keyData = "0x22".data(using: .utf8) else {
fatalError("无法转换密钥为UTF-8数据")
}
let keyBytes = [UInt8](keyData)
let decrypted = array.enumerated().map { index, byte in
byte ^ keyBytes[index % keyBytes.count]
}
guard let string = String(data: Data(decrypted), encoding: .utf8) else {
fatalError("无法将数据解码为UTF-8字符串")
}
return string
}
在需要加载字符串的地方直接调用deobfuscateAdvanced() 方法并把混淆后的字节数组添加进去即可。