作者论坛账号:QiuChenly
/Applications/Microsoft Excel.app/Contents/Resources/setupui_bundle.bundle/Contents/Resources/zh_CN.lproj/LocalizableGemini.strings
经历一番寻找竟然藏身于此,此子隐匿手段恐怖如斯,楼主当即便倒吸一口冷气!Excel见楼主霎时间便已查出他的下落,脸上闪过一丝慌张,嘴上却硬道:"即便是你找出我的下落,尔不过区区筑基期修为,老夫今日哪怕是法力尽失,却也是堂堂金丹期修为,尔若识趣速速滚开,否则待我法务团队跨国上门执法,必教你there is no place to die!"复制代码 隐藏代码 [ 22] 0x000000011012b000 /Applications/Microsoft Excel.app/Contents/Frameworks/mso20.framework/Versions/A/mso20
[ 23] 0x000000010f25d000 /Applications/Microsoft Excel.app/Contents/Frameworks/mso30.framework/Versions/A/mso30
[ 24] 0x0000000111bc5000 /Applications/Microsoft Excel.app/Contents/Frameworks/mso40ui.framework/Versions/A/mso40ui
[ 25] 0x000000011258d000 /Applications/Microsoft Excel.app/Contents/Frameworks/mso99.framework/Versions/A/mso99
_objc_msgSend(v8, "setLicenseType:", a2);
显然就是设置授权类型了,那么我们再往上找到a2传入参数的地方:复制代码 隐藏代码 frame #10: 0x00000001018b0b51 Microsoft Excel`___lldb_unnamed_symbol123578 + 89
复制代码 隐藏代码 void *sub_1010FA3A6()
{
return objc_msgSend(qword_1036063C0, "copyLicenseType");
}
v0 = (void *)sub_1777251();
楼主连忙进入此函数看细节:复制代码 隐藏代码 id sub_1777251()
{
void *v0; // rax
id v1; // rax
void ***v2; // rax
void *v3; // rbx
void *v4; // rax
id v5; // r14if ( (unsigned __int8)sub_1762768() ) // Is2021
{
v0 = (void *)sub_17772D5();
v1 = objc_retainAutoreleasedReturnValue(v0);
}
else
{
if ( (unsigned __int8)sub_82C8C() ) // 默认走这里
v2 = off_22C17E0; // StatusStrings/SubscriptionLicense
else
v2 = off_22C1820; // StatusStrings/NoLicense
v1 = objc_retain(*v2);
}
v3 = v1;
v4 = (void *)sub_1771816(v1);
v5 = objc_retainAutoreleasedReturnValue(v4);
_objc_release(v3);
return objc_autoreleaseReturnValue(v5);
}
复制代码 隐藏代码 __int64 sub_82C8C()
{
return Mso::Licensing::Category::IsSubscription(0LL);
}
复制代码 隐藏代码 // attributes: thunk
__int64 __fastcall Mso::Licensing::Category::IsSubscription(__int64 a1)
{
return __imp___ZN3Mso9Licensing8Category14IsSubscriptionENSt3__18optionalINS1_15LicenseCategoryEEE(a1);
}
复制代码 隐藏代码 __stubs:00000000019D9BCE __ZN3Mso9Licensing8Category14IsSubscriptionENSt3__18optionalINS1_15LicenseCategoryEEE proc near
__stubs:00000000019D9BCE ; CODE XREF: sub_812E0+19↑j
__stubs:00000000019D9BCE ; sub_82C8C+7↑j ...
__stubs:00000000019D9BCE jmp cs:__ZN3Mso9Licensing8Category14IsSubscriptionENSt3__18optionalINS1_15LicenseCategoryEEE_ptr ; Mso::Licensing::Category::IsSubscription(std::__1::optional<Mso::Licensing::Category::LicenseCategory>)
__stubs:00000000019D9BCE __ZN3Mso9Licensing8Category14IsSubscriptionENSt3__18optionalINS1_15LicenseCategoryEEE endp
复制代码 隐藏代码 (lldb) br s -a 0x110AB0BCE
Breakpoint 3: where = mso99`symbol stub for: Mso::Licensing::Category::IsSubscription(std::__1::optional<Mso::Licensing::Category::LicenseCategory>), address = 0x0000000110ab0bce
(lldb)
复制代码 隐藏代码 [ 22] /Applications/Microsoft Excel.app/Contents/Frameworks/mso20.framework/Versions/A/mso20 0x0000000107e71000
[ 23] /Applications/Microsoft Excel.app/Contents/Frameworks/mso30.framework/Versions/A/mso30 0x0000000106fa3000
[ 24] /Applications/Microsoft Excel.app/Contents/Frameworks/mso40ui.framework/Versions/A/mso40ui 0x000000010990b000
[ 25] /Applications/Microsoft Excel.app/Contents/Frameworks/mso99.framework/Versions/A/mso99 0x000000010f0d7000
复制代码 隐藏代码 __int64 __usercall Mso::Licensing::Category::[email protected]<rax>(unsigned int [email protected]<edi>, __int64 [email protected]<rax>, unsigned int [email protected]<edx>)
{
__int64 v3; // rbx
unsigned int v4; // er14
__int64 v6; // [rsp+8h] [rbp-18h]v3 = sub_81B76(a2, a3, sub_81C28);
v6 = v3;
v4 = sub_81BB8(v3, a1, &v6);
if ( v3 )
{
v6 = 0LL;
(*(*v3 + 16LL))(v3);
}
return v4;
}
复制代码 隐藏代码 (lldb) br s -a 0x10F2E2958
Breakpoint 4: where = mso99`SetupUI_CreateLocalizedRFMMessageBarStrings + 830, address = 0x000000010f2e2958
(lldb)
复制代码 隐藏代码 HookApp("mso30", (hook, getPointer, getClass, appBaseAddr, tools) => {
hook(getPointer(0x81b0f), (ths, ret) => {
ret.replace(ptr(1));
});
});
复制代码 隐藏代码 void __cdecl -[DocsUILicensing handleActivationStateChange:](DocsUILicensing *self, SEL a2, id a3)
{
void ***v3; // rax
id v4; // rbxif ( _objc_msgSend(self, "isActivated", a3) )
{
v3 = off_20DFFC0;
}
else if ( _objc_msgSend(self, "canRenew") )
{
v3 = off_20DFFC8;
}
else
{
v3 = &off_20DFFD0;
}
v4 = objc_retain(*v3);
_objc_msgSend(&OBJC_CLASS___DocsUIBridgeNotifications, "sendNotification:object:", v4, self);
_objc_release(v4);
}
0000000001A3AD3F aDocsuibridgesu db 'DocsUIBridgeSubscriptionActivatedNotification',0
复制代码 隐藏代码 char __cdecl -[DocsUILicensing isActivated](DocsUILicensing *self, SEL a2)
{
__int64 LicensingAPI; // raxLicensingAPI = Mso::Licensing::GetLicensingAPI(self);
return (*(*LicensingAPI + 8LL))(LicensingAPI, 65421851LL);
}
复制代码 隐藏代码 (lldb) register read rcx
rcx = 0x000000011131e918 mso99`typeinfo for Mso::FontPicker::FontTypes::BaseFont + 116040
(lldb)
复制代码 隐藏代码 import { HookApp, log } from "./Utils.js"; HookApp("mso99", (hook, getPointer, getClass, appBaseAddr, tools) => {
hook(getPointer(0x5076), (ths, ret) => {
ret.replace(ptr(1));
});
hook(getPointer(0x20bf04), (ths, ret) => {
// ret.replace(ptr(2270));
});
});HookApp("mso30", (hook, getPointer, getClass, appBaseAddr, tools) => {
hook(getPointer(0x81b0f), (ths, ret) => {
ret.replace(ptr(1));
});
});
复制代码 隐藏代码 /**
* Office 全家桶 MAS版本破解
* 16.71 365订阅
*/
void Office(void){
if(checkSelfInject("com.microsoft.Excel")){
if (checkAppVersion("16.71")){
int32_t mso30 = getImageVMAddrSlideIndex("mso30");
int32_t mso99 = getImageVMAddrSlideIndex("mso99");
hookPtr(mso99, 0x5076, checkSignal, NULL);//破解激活逻辑 让Office开放激活全部可用功能
hookPtr(mso30, 0x81b0f, checkSignal, NULL);//修改关于面板的授权版本为365授权
}
}
}
复制代码 隐藏代码 /**
* 给定一个字符串 检查是否存在于app的framework中并返回index
*/
uint32_t getImageVMAddrSlideIndex(char* ModuleName){
int32_t size = _dyld_image_count();
for (int i =0; i<size; i++) {
const char* Name = _dyld_get_image_name(i);
NSString *nName = [NSString stringWithCString:Name encoding:NSUTF8StringEncoding];
NSString *nModuleName = [NSString stringWithCString:ModuleName encoding:NSUTF8StringEncoding];
if([nName rangeOfString:nModuleName].location != NSNotFound){
NSLog(@"找到模块 %s 序号是 %i",ModuleName,i);
return i;
}
}
return 0;
}
复制代码 隐藏代码 int checkSignal(void) {
return 1;
}
复制代码 隐藏代码 sudo insert_dylib /Users/qiuchenly/libInlineInjectPlugin.dylib /Applications/Microsoft\ Excel.app/Contents/Frameworks/FluentUI.framework/Versions/A/FluentUI的副本 /Applications/Microsoft\ Excel.app/Contents/Frameworks/FluentUI.framework/Versions/A/FluentUI
-官方论坛
www.52pojie.cn
--推荐给朋友
公众微信号:吾爱破解论坛
或搜微信号:pojie_52