綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資料] Kali Nethunter 核心編譯範例

[複製連結] 查看: 37320|回覆: 2|好評: 0
跳轉到指定樓層
樓主
djpvd | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2019-9-12 08:00

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 djpvd 於 2019-9-16 20:18 編輯

範例 Samsung Galaxy Note 5

## 下載原始碼
http://opensource.samsung.com/reception/receptionSub.do?method=sub&sub=T&menu_item=mobile&classification1=mobile_phone
搜尋 SM-N9208 下載
下載後解壓縮
  1. unzip SM-N9208_TW_NN_Opensource.zip
  2. cd SM-N9208_TW_NN_Opensource

  3. mkdir Kernel && cd Kernel
  4. tar zxvf ../Kernel.tar.gz
  5. cd ..
複製代碼


## 下載編譯工具
  1. git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-X86/aarch64/aarch64-linux-android-4.9 PLATFORM/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 -b nougat-release --depth=1
複製代碼


## 指定編譯器
修改 Makefile 檔案
  1. CROSS_COMPILE   ?= ../PLATFORM/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
複製代碼


## 核心配置
  1. cd Kernel

  2. make ARCH=arm64 noblelte_tw_defconfig

  3. make ARCH=arm64 menuconfig
複製代碼


以下驅動選擇自己需要的,不必全選,因為模塊太多,容量可能會不夠。
MAC80211 要使用外接USB無線網卡是必備的。

<*> 是將驅動編進核心
<M> 是將驅動編成模塊  XXX.ko

# MAC80211 網路驅動
模塊 mac80211.ko
  1. Networking support > Wireless
  2.     <M> Generic IEEE 802.11 Networking Stack (mac80211)
複製代碼


# USB Modem & USB ATAPI 驅動
這是外接 USB Modem 跟 USB光碟機的驅動
模塊 cdc-acm.ko、ums-freecom.ko
  1. Device Drivers > USB support
  2.     <M> USB Modem (CDC ACM) support
  3.     <M> Freecom USB/ATAPI Bridge support
複製代碼


# USB 無線網卡驅動
Device Drivers > Network device support > Wireless LAN
選擇需要的驅動
範例: Atheros 晶片無線網卡
  1. <*> Atheros Wireless Cards  --->
  2.     <M>   Atheros 802.11n wireless cards support (Atheros ath9k)
  3.     <M>   Atheros HTC based wireless cards support (Atheros ath9k HTC)
  4.     <M>   Linux Community AR9170 802.11n USB support

  5.     <M>   Atheros mobile chipsets support
  6.     <M>   Atheros ath6kl SDIO support
  7.     <M>   Atheros ath6kl USB support

  8.     <M>   Atheros AR5523 wireless driver support

  9.     <M>   Atheros 802.11ac wireless cards support (Atheros ath10k)
  10.     <M>   Qualcomm Atheros WCN3660/3680 support
複製代碼


# USB 藍芽驅動
  1. Networking support > Bluetooth subsystem support > Bluetooth device drivers
  2. <M> HCI USB driver
  3. <M> HCI UART driver
  4. <M> HCI BCM203x USB driver
  5. <M> HCI BPA10x USB driver
  6. <M> HCI BlueFRITZ! USB driver
複製代碼


# USB 網卡驅動
  1. Device Drivers > Network device support > USB Network Adapters
  2. <M> USB Pegasus/Pegasus-II based ethernet device support
  3. <M> USB RTL8150 based ethernet device support
  4. <M> Realtek RTL8152 Based USB 2.0 Ethernet Adapters
複製代碼


# mac80211 注入 Patch
  1. wget https://raw.githubusercontent.com/Mint-Fans/linux-package/kali/mac80211.patch
  2. patch -p0 -i mac80211.patch
複製代碼


## 編譯 Kernel
  1. make -j$(nproc) ARCH=arm64

  2. export INSTALL_PATH=$(pwd)/out
  3. export INSTALL_MOD_PATH=$(pwd)/out

  4. make -j$(nproc) ARCH=arm64 modules_install
  5. make -j$(nproc) ARCH=arm64 install
複製代碼


編譯完成後檔案在 out 目錄下


「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
 樓主| djpvd | 收聽TA | 只看該作者
發表於 2019-9-15 06:48
本帖最後由 djpvd 於 2019-9-18 10:21 編輯

三星機種 TIMA 模塊認證繞過補釘

修改目標:核心原始碼

三星要繞過 TIMA 模塊認証,二進位補釘幾乎沒辦法,只能重編核心。

menuconfig 核心配置好之後

* 刪除 .config 裡面的 _TIMA 項目
  1. CONFIG_TIMA=y
  2. CONFIG_TIMA_LKMAUTH=y
  3. CONFIG_TIMA_RKP=y
  4. CONFIG_TIMA_LOG=y
  5. CONFIG_SEC_DEBUG_TIMA_LOG=y
複製代碼



sed 指令刪除:
  1. sed -i "/_TIMA/d" .config
複製代碼


* 替換 module.c
到Linux 官方下載 Linux 核心原始碼 (對應手機核心版本下載)
取出Linux原始碼的 kernel/module.c 替換掉三星原始碼的 kernel/module.c

* 刪除  Makefile 裡面 CONFIG_TIMA 編譯配置
  1. ifeq ($(CONFIG_TIMA_LKMAUTH),y)
  2. ifeq ($(CONFIG_TIMA),y)
  3.     KBUILD_CFLAGS += -DTIMA_LKM_AUTH_ENABLED -Idrivers/gud/gud-exynos7420/MobiCoreKernelApi/include/
  4.     KBUILD_AFLAGS += -DTIMA_LKM_AUTH_ENABLED
  5. endif
  6. endif
複製代碼



這是三星機種獨有的,好在三星核心有開放原始碼。

刷進重編的核心之後,手機會不斷提出安全性警告,把 SecurityLogAgent 凍結或刪除即可。
APK 位置:/system/app/SecurityLogAgent/SecurityLogAgent.apk



用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| djpvd | 收聽TA | 只看該作者
發表於 2019-9-15 07:04
本帖最後由 djpvd 於 2019-9-18 10:13 編輯

模塊 vermagic 繞過補釘

kernel/module.c

* 找到函數 check_version
  1. static int check_version(Elf_Shdr *sechdrs,
  2.                          unsigned int versindex,
  3.                          const char *symname,
  4.                          struct module *mod,
  5.                          const unsigned long *crc,
  6.                          const struct module *crc_owner)
  7. {
  8.         unsigned int i, num_versions;
  9.         struct modversion_info *versions;

  10.         /* Exporting module didn"t supply crcs?  OK, we"re already tainted. */
  11.         if (!crc)
  12.                 return 1;

  13.         /* No versions at all?  modprobe --force does this. */
  14.         if (versindex == 0)
  15.                 return try_to_force_load(mod, symname) == 0;

  16.         versions = (void *) sechdrs[versindex].sh_addr;
  17.         num_versions = sechdrs[versindex].sh_size
  18.                 / sizeof(struct modversion_info);

  19.         for (i = 0; i < num_versions; i++) {
  20.                 if (strcmp(versions[i].name, symname) != 0)
  21.                         continue;

  22.                 if (versions[i].crc == maybe_relocated(*crc, crc_owner))
  23.                         return 1;
  24.                 pr_debug("Found checksum %lX vs module %lX
  25. ",
  26.                        maybe_relocated(*crc, crc_owner), versions[i].crc);
  27.                 goto bad_version;
  28.         }

  29.         printk(KERN_WARNING "%s: no symbol version for %s
  30. ",
  31.                mod->name, symname);
  32.         return 0;

  33. bad_version:
  34.         printk("%s: disagrees about version of symbol %s
  35. ",
  36.                mod->name, symname);
  37.         return 0;
  38. }
複製代碼


改成

  1. static int check_version(Elf_Shdr *sechdrs,
  2.                          unsigned int versindex,
  3.                          const char *symname,
  4.                          struct module *mod,
  5.                          const unsigned long *crc,
  6.                          const struct module *crc_owner)
  7. {
  8.         return 1;
  9. }
複製代碼


* 找到函數 check_modstruct_version
  1. static inline int check_modstruct_version(Elf_Shdr *sechdrs,
  2.                                           unsigned int versindex,
  3.                                           struct module *mod)
  4. {
  5.         const unsigned long *crc;

  6.         /* Since this should be found in kernel (which can"t be removed),
  7.          * no locking is necessary. */
  8.         if (!find_symbol(VMLINUX_SYMBOL_STR(module_layout), NULL,
  9.                          &crc, true, false))
  10.                 BUG();
  11.         return check_version(sechdrs, versindex,
  12.                              VMLINUX_SYMBOL_STR(module_layout), mod, crc,
  13.                              NULL);
  14. }
複製代碼


改成

  1. static inline int check_modstruct_version(Elf_Shdr *sechdrs,
  2.                                           unsigned int versindex,
  3.                                           struct module *mod)
  4. {
  5.         return 1;
  6. }
複製代碼



* 找到函數 check_modinfo
static int check_modinfo

將以下內容刪除或註解掉
  1.         int err;

  2.         /* This is allowed: modprobe --force will invalidate it. */
  3.         if (!modmagic) {
  4.                 err = try_to_force_load(mod, "bad vermagic");
  5.                 if (err)
  6.                         return err;
  7.         } else if (!same_magic(modmagic, vermagic, info->index.vers)) {
  8.                 printk(KERN_ERR "%s: version magic "%s" should be "%s"
  9. ",
  10.                        mod->name, modmagic, vermagic);
  11.                 return -ENOEXEC;
  12.         }
複製代碼


* 找到函數 try_to_force_load
整段刪除或註解掉。

  1. static int try_to_force_load(struct module *mod, const char *reason)
  2. {
  3. #ifdef CONFIG_MODULE_FORCE_LOAD
  4.         if (!test_taint(TAINT_FORCED_MODULE))
  5.                 printk(KERN_WARNING "%s: %s: kernel tainted.
  6. ",
  7.                        mod->name, reason);
  8.         add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_NOW_UNRELIABLE);
  9.         return 0;
  10. #else
  11.         return -ENOEXEC;
  12. #endif
  13. }
複製代碼



這樣一來才能自由添加驅動模塊。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則