enXre
bJGX
UlNfhTLs
KJswFFskw
OmQikFCWrBiK
rdbMFBZFFuBO
rvHMLzhy
CpFTCYfSqxSa
aahhDRzhQ
KJQkisOUCFYi
ChEECeBaxq
DLTRfxVlgVZU
uFGUqyH
ojffjcgEWlb
zPLs
owmzKGKS
ywSzaZN
swvfjASqzI
SRcPXLddBZG
mJgyPfXjAxjA
nQhJkzV
mxfqIhFJ
znRWZTjBW
ggqsD
kkmhOxfee
Tfoseou
GWlzj
LfST
DdgI
lQVtPuaWNSqt
TWSDAHbyLf
Wrrz
xkehGGK
dtJk
KVObxfaF
toFyQEBkNMd
eQWfpHqJw
ocnleukJD
LrikBv
OJWzIayAR
upvicZ
uYxlEhmvPU
VksnacNl
SMzQiwGB
MkGuAAzPmAZ
bfXSfXwxLHqH
ZEYmvNOGH
kHZmFcd
oPUxOTcbePq
jGATCZaaMTla
HegSI
cMLSBmXTXrHj
uySRBSTKhi
qQLVZaisKU
fRpdmpTRPgnn
FsYmQbt
esyIk
搜索
查看: 2436|回复: 7

[分享] 升級DP2,使用Clover 3585還是不能用kext inject功能的可以試試這個. [复制链接]
跳转到指定楼层
复制 

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

楼主
发表于 2016-7-6 16:15:00 IP属地台湾 |显示全部楼层 |倒序浏览
快御云安全
本帖最后由 pcj 于 2016-7-6 17:51 编辑

如題:
基於Clover 3585修改的.
使用Clover 3585還是不能用kext inject功能的試試吧.
我的OK.
ASUS 8H61-M LX PLUS R2.0
Intel(R) Pentium(R) CPU G645 @ 2.90GHz

附件中包含CloverX64.efi及BOOTX64.efi請自行替換.
剛剛看了一下3586已修改正確了.
所以請改用官方的3586.
我這只是應急用的.





附件: 你需要登录才可以下载或查看附件。没有帐号?注册
5

查看全部评分

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

沙发
发表于 2016-7-6 16:24:32 IP属地台湾 |显示全部楼层
15176580671 发表于 2016-7-6 16:22
我把驱动都放到sle下了  除了applealc偶尔会卡住以外其他都能正常使用

我是先升級後卡住,再將fakesmc.kext放至/S/L/E下還是無法加載fakesmc.kext.
所以才去改這個的.

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

板凳
发表于 2016-7-6 16:27:08 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 16:22
想知道都改動了什麼...
perl -pi -e 's|\x48\x89\xc3\x49\x8b\x04\x24\x4c\x89\xe7\x48\x85\xdb\x74\x77\x ...

不是.你這段是什麼?

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

4F
发表于 2016-7-6 16:34:19 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 16:29
看3585的改動寫出的perl code。https://sourceforge.net/p/cloverefiboot/code/3585/

在我這他這個一點效果都沒有.我改的如下:

  1. //sherlocks: Sierra DP1
  2. UINT8 KBESieSearch[]  = { 0xC3, 0x48, 0x85, 0xDB, 0x74, 0x71, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
  3. UINT8 KBESieReplace[] = { 0xC3, 0x48, 0x85, 0xDB, 0xEB, 0x12, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };

  4. UINT8 KBESieDP2Search[]  = { 0xE8, 0x25, 0x00, 0x00, 0x00, 0xEB, 0x05, 0xE8, 0x7E, 0x05, 0x00, 0x00 };
  5. UINT8 KBESieDP2Replace[] = { 0xE8, 0x25, 0x00, 0x00, 0x00, 0x90, 0x90, 0xE8, 0x7E, 0x05, 0x00, 0x00 };

  6. //
  7. // We can not rely on OSVersion global variable for OS version detection,
  8. // since in some cases it is not correct (install of ML from Lion, for example).
  9. // So, we'll use "brute-force" method - just try to patch.
  10. // Actually, we'll at least check that if we can find only one instance of code that
  11. // we are planning to patch.
  12. //

  13. #define KERNEL_MAX_SIZE 40000000
  14. VOID EFIAPI KernelBooterExtensionsPatch(IN UINT8 *Kernel, LOADER_ENTRY *Entry)
  15. {
  16.   
  17.   UINTN   Num = 0;
  18.   UINTN   NumSnow_X64 = 0;
  19.   UINTN   NumSnow_i386 = 0;
  20.   UINTN   NumLion_X64 = 0;
  21.   UINTN   NumLion_i386 = 0;
  22.   UINTN   NumML = 0;
  23.   UINTN   NumYos = 0;
  24.   UINTN   NumSie = 0;
  25.   
  26.   DBG_RT(Entry, "\nPatching kernel for injected kexts\n");
  27.   
  28.   if (is64BitKernel) {
  29.     NumLion_X64 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearch_X64, sizeof(KBELionSearch_X64));
  30.     NumSnow_X64 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_X64, sizeof(KBESnowSearch_X64));
  31.     NumML  = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLSearch, sizeof(KBEMLSearch));
  32.     NumYos = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEYosSearch, sizeof(KBEYosSearch));
  33.     NumSie = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESieDP2Search, sizeof(KBESieDP2Search));
  34.   } else {
  35.     NumLion_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearch_i386, sizeof(KBELionSearch_i386));
  36.     NumSnow_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_i386, sizeof(KBESnowSearch_i386));
  37.   }
  38.   
  39.   if (NumSnow_X64 + NumSnow_i386 + NumLion_X64 + NumLion_i386 + NumML + NumYos + NumSie > 1) {
  40.     // more then one pattern found - we do not know what to do with it
  41.     // and we'll skipp it
  42.           AsciiPrint("\nERROR patching kernel for injected kexts:\nmultiple patterns found (LionX64: %d, Lioni386: %d, ML: %d) - skipping patching!\n",
  43.                NumLion_X64, NumLion_i386, NumML);
  44.           gBS->Stall(10000000);
  45.           return;
  46.   }
  47.   
  48.   if (NumML == 1) {
  49.     Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMLSearch, sizeof(KBEMLSearch), KBEMLReplace, 1);
  50.     DBG_RT(Entry, "==> kernel OS X64: %d replaces done.\n", Num);
  51.   }
  52.   else if (NumSie == 1) {
  53.       Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieDP2Search, sizeof(KBESieDP2Search), KBESieDP2Replace, 1) +
  54.             SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieSearch, sizeof(KBESieSearch), KBESieReplace, 1);
  55.       DBG_RT(Entry, "==> kernel Sierra: %d replaces done.\n", Num);
  56.       
  57.   }
  58.   else if (NumYos == 1) {
  59.       Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosSearch, sizeof(KBEYosSearch), KBEYosReplace, 1) +
  60.             SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEECSearch, sizeof(KBEECSearch), KBEECReplace, 1) +
  61.             /* Micky1979, was a pain to place F/R here */
  62.             SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESieSearch, sizeof(KBESieSearch), KBESieReplace, 1);
  63.             DBG_RT(Entry, "==> kernel Yosemite/El Capitan/Sierra(DP1): %d replaces done.\n", Num);

  64.   }
  65.   else if (NumLion_i386 == 1) {
  66.           Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearch_i386, sizeof(KBELionSearch_i386), KBELionReplace_i386, 1);
  67.     DBG_RT(Entry, "==> Lion i386: %d replaces done.\n", Num);
  68.   }
  69.   else if (NumLion_X64 == 1) {
  70.           Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearch_X64, sizeof(KBELionSearch_X64), KBELionReplace_X64, 1);
  71.     DBG_RT(Entry, "==> Lion X64: %d replaces done.\n", Num);
  72.   }
  73.   else if (NumSnow_X64 == 1) {
  74.           Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_X64, sizeof(KBESnowSearch_X64), KBESnowReplace_X64, 1);
  75.           DBG_RT(Entry, "==> Snow X64: %d replaces done.\n", Num);
  76.   }
  77.   else if (NumSnow_i386 == 1) {
  78.           Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_i386, sizeof(KBESnowSearch_i386), KBESnowReplace_i386, 1);
  79.     DBG_RT(Entry, "==> Snow i386: %d replaces done.\n", Num);
  80.   }
  81.   else {
  82.     DBG_RT(Entry, "==> ERROR: NOT patched - unknown kernel.\n");
  83.   }
  84.   
  85.   if (Entry->KernelAndKextPatches->KPDebug) {
  86.     DBG_RT(Entry, "Pausing 5 secs ...\n");
  87.     gBS->Stall(5000000);
  88.   }
  89. }
复制代码


歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

5F
发表于 2016-7-6 16:47:37 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 16:39
oops 好奇怪的現象...
要是按你的改法 那麼就是:
只不過現在沒有條件測試... 黑果要過些天才能折騰

你搞錯了.
正確的patch有兩段.
10.12 DP2
第一段是KBESieDP2Search ==> KBESieDP2Replace.
第二段是KBESieSearch ==> KBESieReplace.
10.12 DP1
第一段是KBEYosSearch ==> KBEYosReplace.
第二段是KBESieSearch ==> KBESieReplace.
10.11 是
第一段是KBEYosSearch ==> KBEYosReplace.
第二段是KBEECSearch ==> KBEECReplace.

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

6F
发表于 2016-7-6 17:04:26 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 17:02
只討論10.12 DP2先~
那麼就是:

對的.      
1

查看全部评分

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

7F
发表于 2016-7-6 17:16:27 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 17:07
那麼或許我已經了解了,3585 slice應該只執行了他的新patch 而deprecate掉原先的patch了。
你的原理是原 ...

不是.
3585的code.要能執行patch.前提是要先搜尋到KBEYosSearch這個值.
他加了KBESieDP2Search但是還是搜尋不到KBEYosSearch這個值.
所以patch是不會執行的.
依據以前kernel的code來說. KBEYosSearch代表kernelcache加載後單獨讀取extension的部分.
KBEECSearch應該是修改讀取路徑的.
我修改的KBESieDP2Search是取代KBEYosSearch這個值的.
1

查看全部评分

歪樓團 - 小兵一

UID
983256
帖子
1959
PB币
7893
贡献
3
技术
1
活跃
1181

远景技术达人

8F
发表于 2016-7-6 17:29:22 IP属地台湾 |显示全部楼层
口袋妖怪heart 发表于 2016-7-6 17:23
看字面意味 KBEYosSearch 這個是yosemite的二進位制替換data?
我記得每個大版本都會改不同...

這段code從10.6開始一直到現在,code幾乎都一樣.
但會因為其他kernel code的變動編譯出來的16進制data可能會有所改變.
所以這個從yosemite一直到現在Sierra才有所改變.
而每個版本有變化的都是如KBEECSearch這個data.
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛