/*
 代码模拟点击home键,黑屏模式指纹解锁第一步,嘿嘿!!
 
 这个功能不好测试,所以我hook了音量调整按钮来验证
 
 测试方法:
 先将设备黑屏,再按音量键,屏幕亮了说明home模拟成功!!
 
 http://www.chinapyg.com
 http://www.dllhook.com
 
 code by piaoyun
*/

#include <mach/mach_time.h>
// 记住把 IOKit.framework 从iOS设备中拖出来,然后导入
#include <UIKit/UIkit.h>

extern "C"{
    typedef uint32_t IOHIDEventOptionBits;
    typedef struct __IOHIDEvent *IOHIDEventRef;
    
    IOHIDEventRef IOHIDEventCreateKeyboardEvent(CFAllocatorRef allocator, AbsoluteTime timeStamp, uint16_t usagePage, uint16_t usage, Boolean down, IOHIDEventOptionBits flags);
}

@interface SpringBoard: UIApplication

- (void)_menuButtonDown:(struct __IOHIDEvent *)arg1;
- (void)_menuButtonUp:(struct __IOHIDEvent *)arg1;

@end


%hook SpringBoard

// 利用音量按钮来测试
- (_Bool)_volumeChanged:(struct __IOHIDEvent *)arg1
{
    NSLog(@"[++++]_volumeChanged");
    %log;
    
    SpringBoard *springboard = (SpringBoard *)[%c(SpringBoard) sharedApplication];
    uint64_t abTime = mach_absolute_time();
    IOHIDEventRef event = IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault, *(AbsoluteTime *)&abTime, 0xC, 0x40, YES, 0);
    [springboard _menuButtonDown:event];
    CFRelease(event);
    event = IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault, *(AbsoluteTime *)&abTime, 0xC, 0x40, YES, 0);
    [springboard _menuButtonUp:event];
    CFRelease(event);
    
    return %orig;
}

%end

%ctor
{
    NSLog(@"[++++]inject SpringBoard success!!!");
    %init;
}


你可能感兴趣的文章

评论区

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。