iOS 審核 4.3a【二進制加固】

我們應該知道,面對iOS 上架 遇到4.3a的問題或者制作馬甲包.最基礎的操作就是混淆代碼

尤其是我們專業做上架的,需要對各種語言的編譯模式,產物,以及ipa構成都需要非常了解, 每種語言開發的App的編譯產物不同,針對不同的編譯產物做不同的處理方式

有一些經驗的開發者, 應該知道 目前的混淆方式大概可以分為是三種


1: 源代碼混淆

顧名思義, 就是通過處理源代碼,讓代碼達到翻新的效果, 比如修改一些靜態特征,代碼結構

難度: ?低

優點: 效率高,限制低

缺點:

1: 難以維護最難級別, ?源代碼改動之后,難以辨別, 對維護多個項目造成非常大的工作量

2: 需要針對各種語言分別開發,比如當前開發iOS的app 的語言有iOS , swift, c++, 需要針對各種不同的語言開發不同的混淆工具, 這個工作量太大, 能夠開發iOS的app 的語言高達十幾種, 制作十幾種語言的混淆工具 根本不現實

2: 編譯器混淆

這種混淆方式不需要處理源代碼, 直接通過xcode在編譯時混淆,也就是在xcode將源代碼編譯成.o的時機接入混淆,替換符號

難度: 中

優點: 不需要改動源代碼, 不涉及到維護難度,不區分語言, 可混淆各種語言的代碼

缺點:

1: 處理范圍小, 只能對一些符號進行替換, 比如你想改變一些代碼結構, 這個基本無法實現.
2: 能力有限,比如一些靜態庫在xcode編譯前就已經被編譯好, 所有靜態庫無法替換符號 ,也就是說他只能處理編譯列表的文件

3: 替換符號可能會造成閃退,因為有些訪問是通過kvc來完成的,如果符號被替換了, kvc還是使用原來的字符串去訪問就會造成閃退或者功能異常

3: 直接修改二進制-加固

你是否聽到了熟悉的詞語-"加固", 我們這行把直接修改二進制的方法喜歡叫成" 加固", 直接修改二進制,達到混淆的效果,也就是說我們直接最終編譯的ipa中的可執行文件

舉個例子, 比如我們正在考試.

1: 修改源代碼的方式相當于,你勤勤懇懇的學習,然后提交試卷后,等待老師審查
2: 編譯器的方式相當于, 你在考試的提交試卷的時候替換了別人的考卷,等到老師審查

3: iOS加固的方式相當于, 直接修改考試分數

我們簡單的了解加固的概念后,進入正題:

難度指數:滿級

優點:非常多,不需要關注源代碼,不需要打開xcode, 你只需要給我一個ipa, 我返回給你一個ipa

我們先簡單了解什么是二級制:?

我們通過拆解ipa, 你往往會看到一個黑色的小盒子, 這就是一個可執行文件 ,我們簡稱二進制,當然這個文件不能直接打開或者雙擊執行


這個可執行文件的大小, 往往取決于你的代碼量, 代碼量越大, 這個文件越大,這個里面是什么東西呢??


機器碼

沒錯這個二進制里面全是機器碼,我們使用xxd命令查看最原始的內容

沒錯這個就是二進制的最原始的內容,但是這種機器碼我們根本無法閱讀,?

匯編代碼

這些原始的機器碼(十六進制字節)正是由匯編代碼(Assembly Code)轉換(“匯編”)而來的。這個轉換過程由匯編器(Assembler)?完成。

我們使用otool -tV 命令進行反匯編查看內容


是不是發現了一些帶語義的符號了? ?但是仍然難以閱讀, 我們來翻編譯更高級的語言


高級語言

反編譯的目標是將機器碼/匯編代碼轉換回更抽象、可讀性更高的偽代碼, 還需要一個解析的過程,不同語言所在二進制的位置不同, ?解析方式也不同,這里不過多介紹, 我們直接來看解析后的結果

這個是不是就是你最熟悉的oc代碼了??

它們的層級關系是:


高級語言 (C/C++/Swift) -> 編譯器 -> 匯編代碼 (Assembly) -> 匯編器 -> 機器碼 (Machine Code)

我們繼續關注二進制里面的結構,看看它內部是怎么劃分的, 我們使用size-m 查看二進制的概覽情況

我們發現內容非常多, 非常亂, 不過像我看多了就習慣了, 大致就是分為幾個段, 段里面又被分成了各種小的節

三大段

1:?__LINKEDIT (符號表主要存放位置)

2:?__TEXT (代碼主要存放位置)

3:?__DATA (靜態變量主要存放位置)

我們發現text段中的text節 占據了主要的體積 , 沒錯, 這就是你的源代碼主要存放的位置, 我們加固重點就是處理這個text節?

了解了以上之后你對iOS加固應該有了一個簡單的了解, 我們下片文章正式開始進行加固?

下片文章 : 嘗試直接修改text段,的 text節


遇到4.3a就找到我

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94951.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Python腳本執行Git命令

說明:本文介紹如何使用Python腳本在某個目錄下執行Git命令 編碼 直接上代碼 import os import subprocessdef open_git_bash_and_run_command(folder_path, git_command):# 檢查文件夾路徑是否存在if not os.path.exists(folder_path):print(f"錯誤&#xff1a…

2025docker快速部署Nginx UI可視化管理平臺

1、nginx-ui簡介 Nginx UI 是一個開源項目,旨在為著名的 Web 服務器和反向代理軟件 Nginx 提供一個基于網頁的圖形化用戶界面(GUI)。它的核心目標是讓 Nginx 的配置和管理變得可視化、簡單化和自動化,從而降低其使用門檻&#xf…

數據防泄與最小可見:ABP 統一封裝行級安全(RLS)+ 列級脫敏

數據防泄與最小可見:ABP 統一封裝行級安全(RLS) 列級脫敏 TL;DR:把“誰能看到哪些行、字段可見到哪一位”下沉到數據庫強制層(PostgreSQL:RLS 安全視圖;SQL Server:RLS DDM&#x…

網絡編程 04:TCP連接,客戶端與服務器的區別,實現 TCP 聊天及文件上傳,Tomcat 的簡單使用

一、概述 記錄時間 [2025-08-29] 前置文章: 網絡編程 01:計算機網絡概述,網絡的作用,網絡通信的要素,以及網絡通信協議與分層模型 網絡編程 02:IP 地址,IP 地址的作用、分類,通過 …

最小生成樹——Kruskal

標題什么是生成樹? 對于一張無向圖,由nnn個頂點和n?1n-1n?1條邊構成地聯通子圖,叫做這個無向圖 生成樹 最小生成樹就是指邊權之和最小的生成樹 如何求最小生成樹? Kruskal 介紹: 存圖時只存每條邊地起點、終點,…

ADFS 和 OAuth 的區別

ADFS 和 OAuth 的區別 ADFS(Active Directory Federation Services)和 OAuth 都是身份認證與授權領域的技術,但它們的設計目標、應用場景和實現方式有顯著區別。以下從核心定義、技術特性、應用場景等方面詳細對比: 核心定義與設計目標 技術 核心定義 設計目標 ADFS 微軟…

神經網絡參數量計算詳解

1. 神經網絡參數量計算基本原理 1.1 什么是神經網絡參數 神經網絡的參數主要包括: 權重(Weights):連接不同神經元之間的權重矩陣偏置(Bias):每個神經元的偏置項批歸一化參數:BatchNo…

手寫鏈路追蹤

1. 什么是鏈路追蹤 鏈路追蹤是指在分布式系統中,將一次請求的處理過程進行記錄并聚合展示的一種方法。目的是將一次分布式請求的調用情況集中在一處展示,如各個服務節點上的耗時、請求具體到達哪臺機器上、每個服務節點的請求狀態等。這樣就可以輕松了解…

從零開始的python學習——常量與變量

? ? ? ? ? づ?ど 🎉 歡迎點贊支持🎉 個人主頁:勵志不掉頭發的內向程序員; 專欄主頁:python學習專欄; 文章目錄 前言 一、常量和表達式 二、變量類型 2.1、什么是變量 2.2、變量語法 (1&a…

基于51單片機環境監測設計 光照 PM2.5粉塵 溫濕度 2.4G無線通信

1 系統功能介紹 本設計是一套 基于51單片機的環境監測系統,能夠實時采集環境光照、PM2.5、溫濕度等參數,并通過 2.4G無線模塊 NRF24L01 實現數據傳輸。系統具備本地顯示與報警功能,可通過按鍵設置各類閾值和時間,方便用戶進行環境…

【Flask】測試平臺開發,產品管理實現添加功能-第五篇

概述在前面的幾篇開發文章中,我們只是讓數據在界面上進行了展示,但是沒有添加按鈕的功能,接下來我們需要開發一個添加的按鈕,用戶產品功能的創建和添加抽公共數據鏈接方法添加接口掌握post實現和請求數據處理前端掌握Button\Dilog…

循環高級(2)

6.練習3 打印九九乘法表7.練習3 制表符詳解對齊不了原因:name補到8zhangsan本身就是8,補完就變成16解決辦法:1.去掉zhangsan\t,這樣前后都是82.name后面加2個\t加一個\t,name\t就是占8個,再加一個\t,就變成…

盒馬生鮮 小程序 逆向分析

聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向分析 部分python代碼 params {&…

【Linux系統】線程控制

1. POSIX線程庫 (pthreads)POSIX線程(通常稱為pthreads)是IEEE制定的操作系統線程API標準。Linux系統通過glibc庫實現了這個標準,提供了創建和管理線程的一系列函數。核心特性命名約定:絕大多數函數都以 pthread_ 開頭&#xff0c…

【Spring Cloud Alibaba】前置知識

【Spring Cloud Alibaba】前置知識1. 微服務介紹1.1 系統架構的演變1.1.1 單體應用架構1.1.2 垂直應用架構1.1.3 分布式架構1.1.3.1 SOA架構1.1.4 微服務架構1. 微服務介紹 1.1 系統架構的演變 隨著互聯網的發展,網站應用的規模也在不斷的擴大,進而導致…

2025互聯網大廠Java面試1000道題目及參考答案

Java學到什么程度可以面試工作? 要達到能夠面試Java開發工作的水平,需要掌握以下幾個方面的知識和技能: 1. 基礎扎實:熟悉Java語法、面向對象編程概念、異常處理、I/O流等基礎知識。這是所有Java開發者必備的基礎,也…

記錄:HSD部署(未完成)

建數據庫 相關文檔:Confluence準備:CA文件和備份用的aws key。 CA文件:在namespace添加trust-injectionenabled的標簽,會自動生成。 aws key:生成cnpg-backup-creds的secret。安裝: 從git倉庫獲取values模…

【AI】提示詞與自然語言處理:從NLP視角看提示詞的作用機制

提示詞與自然語言處理:從 NLP 視角看提示詞的作用機制在人工智能快速發展的今天,大模型成為了人們關注的焦點。而要讓大模型更好地理解人類意圖、完成各種任務,提示詞扮演著關鍵角色。從自然語言處理(NLP)的角度來看&a…

2025.8.29機械臂實戰項目

好久沒給大家更新了,上周末大學大四開學,所以停更了幾天,回來后在做項目,接下來的幾篇文章,給大家帶來幾個項目,第一個介紹的是機械臂操作,說是機械臂操作,簡單來說,就是…

【機器學習基礎】機器學習的要素:任務T、性能度量P和經驗E

第一章 機器學習的本質與理論框架 機器學習作為人工智能領域的核心支柱,其理論基礎可以追溯到20世紀中葉的統計學習理論。Tom Mitchell在其1997年的經典著作《Machine Learning》中給出了一個至今仍被廣泛引用的學習定義:"對于某類任務T和性能度量P,一個計算機程序被認…