PS:在學(xué)習(xí)邏輯教育的防重簽視頻后,因項(xiàng)目需求把OC 代碼替換成swift代碼,如有侵權(quán),請(qǐng)聯(lián)系,刪除
具體代碼如下:
// Created by AliG on 2021/2/17.
// Copyright ? 2021 sccu. All rights reserved.
//
import Foundation
/// 署名IDの比較
/// - Parameter id: 署名ID(傳入預(yù)設(shè)好的正確的組織單位id)
func checkCodesign(id: String) {
let embeddedPath = Bundle.main.path(forResource: "embedded", ofType: "mobileprovision")!
let embeddedProvisioning = try? String.init(contentsOfFile: embeddedPath, encoding: String.Encoding.ascii)
let embeddedProvisioningLines = embeddedProvisioning?.components(separatedBy: .newlines)
for i in 0 ..< embeddedProvisioningLines!.count {
let emStr = embeddedProvisioningLines![i] as NSString
if emStr.range(of: "application-identifier").location != NSNotFound {
let positionStr = embeddedProvisioningLines![i + 1] as NSString
let fromPosition = positionStr.range(of: "<string>").location + 8
let toPosition = positionStr.range(of: "</string>").location
let range: NSRange = NSRange.init(location: fromPosition, length: toPosition - fromPosition)
let fullIdentifier = positionStr.substring(with: range)
let identifierComponents = fullIdentifier.components(separatedBy: ".") as Array
let appIdentifier = identifierComponents.first
if appIdentifier != id {
exit(0) // (1)
}
}
}
}
推薦在oc里面用匯編退出, swift調(diào)用就橋接一下,我這邊應(yīng)為需求,用的swift自帶的
//以下方法,寫一個(gè)oc 的方法 替換 上面代碼(1)ps: 不知道這樣子能不能被符號(hào)斷點(diǎn)斷住
//exit
asm(
"mov X0,#0\n"
"mov w16,#1\n"
"svc #0x80"
);
然后 直接在 AppDelegate 里面調(diào)用
checkCodesign(id: "xxxxx")
這里只是簡(jiǎn)單地明文校驗(yàn)組織id,防護(hù)等級(jí)不高.蠻容易被Hook.
- 可以用密文判斷,提高密文復(fù)雜程度,但用組織id來判斷是否重簽,還是相對(duì)簡(jiǎn)單
以上只是初步了解記錄的筆記,還在學(xué)習(xí)中,歡迎各位前輩,各位大佬,給予指導(dǎo)與批評(píng).
有學(xué)到會(huì)陸續(xù)更新.