Ted's iOS Mod Menu的食用方法


特征:
可定制的用戶界面
可定制的菜單和按鈕圖像圖標(biāo)
4 種類型的開關(guān):
偏移補(bǔ)丁開關(guān)
空開關(guān)
文本修改
滑塊開關(guān)
后端偏移補(bǔ)丁程序基于?KittyMemory
不需要原始字節(jié)
支持 MSHookMemory
將無(wú)限字節(jié)寫入偏移量
編譯時(shí)字符串加密
開源菜單

安裝:
您可以在此處下載模板:https://github.com/joeyjurjens/iOS-Mod-Menu-Template-for-Theos/tree/master
Mobile設(shè)備:
在makefile第?22 行中,必須設(shè)置 SDK 的路徑。此菜單已使用來(lái)自theos/sdks的“iPhoneOS11.2.sdk”SDK進(jìn)行了測(cè)試
我在這個(gè)項(xiàng)目中使用了initializer_list,iOS 版本沒(méi)有包含它。您可以在此處下載(raw.githubusercontent.com/joeyjurjens/iOS-Mod-Menu-Template-for-Theos/977e9ff2c626d6b1308eed7e17f1daf0a610e8e9/template/KittyMemory/initializer_list),將其另存為“initializer_list”并將文件復(fù)制到:“$THEOS/sdks/iPhoneOS11.2.sdk/usr/include/c++/4.2.1/”
iMac:
安裝 xCode(如果尚未安裝)。
在項(xiàng)目的makefile文件中,將“MOBILE_THEOS=1”更改為“MOBILE_THEOS=0”

菜單設(shè)置:
更改菜單圖像在Tweak.xm中,您將在“setupMenu”功能下設(shè)置菜單。 在這里,您將在菜單下看到兩個(gè)選項(xiàng):menuIcon和menuButton,它們需要base64圖像字符串。 為了從圖像中獲取base64字符串,請(qǐng)?jiān)诖颂庌D(zhuǎn)換圖像:https://www.browserling.com/tools/image-to-base64
建議使用50x50的圖像,您可以通過(guò)復(fù)制標(biāo)準(zhǔn)(在tweak.xm中)base64字符串來(lái)獲取我的圖像樣本,并使用此網(wǎng)站顯示圖片:https://base64.guru/converter/decode/image

設(shè)置要被修改的FrameworkName文件您可以在 Tweak.xm 中的函數(shù) setupMenu() 中進(jìn)行設(shè)置。
[menu setFrameworkName:"FrameworkName"];
比如我想修改TestFile.dylib則修改成
[menu setFrameworkName:"TestFile.dylib"];

菜單用法(Demo):
Offsets(基址):
ENCRYPTOFFSET("0x10047FD90")
Hexes(補(bǔ)丁):
ENCRYPTHEX("0x00F0271E0008201EC0035FD6")
C-strings:
ENCRYPT("I am a c-string")
NSStrings:
NSSENCRYPT("Copperplate-Bold")
無(wú)開關(guān)自動(dòng)Patch基址(菜單加載后自動(dòng)修改):
patchOffset(ENCRYPTOFFSET("0x1002DB3C8"), ENCRYPTHEX("0xC0035FD6"));
patchOffset(ENCRYPTOFFSET("0x10020D2D4"), ENCRYPTHEX("0x00008052C0035FD6"));
// You can write as many bytes as you want to an offset
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("0x00F0271E0008201EC0035FD6"));
// or??
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("00F0271E0008201EC0035FD6"));
// spaces are fine too
patchOffset(ENCRYPTOFFSET("0x10020D3A8"), ENCRYPTHEX("00 F0 27 1E 00 08 20 1E C0 03 5F D6"));
基址修改開關(guān):
?[switches addOffsetSwitch:NSSENCRYPT("One Hit Kill")
? ? description:NSSENCRYPT("Enemy will die instantly")
? ? offsets: {
? ? ? ENCRYPTOFFSET("0x1001BB2C0"),
? ? ? ENCRYPTOFFSET("0x1002CB3B0"),
? ? ? ENCRYPTOFFSET("0x1002CB3B8")
? ? }
? ? bytes: {
? ? ? ENCRYPTHEX("0x00E0BF12C0035FD6"),
? ? ? ENCRYPTHEX("0xC0035FD6"),
? ? ? ENCRYPTHEX("0x00F0271E0008201EC0035FD6")
? ? }
? ];

空開關(guān)(沒(méi)有任何功能的開關(guān)):
[switches addSwitch:NSSENCRYPT("Masskill")
? description:NSSENCRYPT("Teleport all enemies to you without them knowing")
]

文本開關(guān):
[switches addTextfieldSwitch:NSSENCRYPT("Custom Gold")
? description:NSSENCRYPT("Here you can enter your own gold amount")
? inputBorderColor:UIColorFromHex(0xBD0000)
];

滑塊開關(guān):
[switches addSliderSwitch:NSSENCRYPT("Custom Move Speed")
? description:NSSENCRYPT("Set your custom move speed")
? minimumValue:0
? maximumValue:10
? sliderColor:UIColorFromHex(0xBD0000)
];

檢測(cè)開關(guān)是否開啟:
bool isOn = [switches isSwitchOn:NSSENCRYPT("Switch Name Goes Here")];
if(isOn) {
? //Do stuff
}
//Or check directly:
if([switches isSwitchOn:NSSENCRYPT("Switch Name Goes Here")]) {
? ? // Do stuff
}
進(jìn)階用法搭配空開關(guān)HOOK函數(shù)
在? ?void setup() {? ?前插入HOOK代碼和檢測(cè)開關(guān)代碼
%hook SKPaymentTransaction
? -(long long)transactionState {
? ? if([switches isSwitchOn:NSSENCRYPT("In Purchase Crack")]) {
? ? ? return 1;
? ? }
? ? return %orig;
? }
%end
空開關(guān)代碼
[switches addSwitch:NSSENCRYPT("In Purchase Crack")
? description:NSSENCRYPT("Use To Buy Full DLC")
];
}
獲取滑塊或文本開關(guān)內(nèi)容:
int userValue = [[switches getValueFromSwitch:NSSENCRYPT("Switch Name Goes Here")] intValue];
float userValue2 = [[switches getValueFromSwitch:NSSENCRYPT("Switch Name Goes Here")] floatValue];
