offsetfinder.mm 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // offsetfinder.mm
  3. // Meridian
  4. //
  5. // Created by Ben Sparkes on 08/03/2018.
  6. // Copyright © 2018 Ben Sparkes. All rights reserved.
  7. //
  8. #include "v0rtex.h"
  9. #include "liboffsetfinder64.hpp"
  10. #include "ViewController.h"
  11. #import <Foundation/Foundation.h>
  12. static bool DidInit = false;
  13. static offsets_t off;
  14. extern "C" offsets_t *get_offsets() {
  15. if (DidInit) {
  16. return &off;
  17. }
  18. try {
  19. NSLog(@"[OFFSET] initializing offsetfinder...");
  20. tihmstar::offsetfinder64 fi("/System/Library/Caches/com.apple.kernelcaches/kernelcache");
  21. NSLog(@"[OFFSET] initialized offsetfinder");
  22. off.base = 0xfffffff007004000;
  23. NSLog(@"[OFFSET] begginning offset finding...");
  24. off.sizeof_task = (kptr_t)fi.find_sizeof_task();
  25. off.task_itk_self = (kptr_t)fi.find_task_itk_self();
  26. off.task_itk_registered = (kptr_t)fi.find_task_itk_registered();
  27. off.task_bsd_info = (kptr_t)fi.find_task_bsd_info();
  28. off.proc_ucred = (kptr_t)fi.find_proc_ucred();
  29. off.vm_map_hdr = (kptr_t)fi.find_vm_map_hdr();
  30. off.ipc_space_is_task = (kptr_t)fi.find_ipc_space_is_task();
  31. off.realhost_special = 0x10;
  32. off.iouserclient_ipc = (kptr_t)fi.find_iouserclient_ipc();
  33. off.vtab_get_retain_count = (kptr_t)fi.find_vtab_get_retain_count();
  34. off.vtab_get_external_trap_for_index = (kptr_t)fi.find_vtab_get_external_trap_for_index();
  35. NSLog(@"[OFFSET] grabbed struct offsets");
  36. off.zone_map = (kptr_t)fi.find_zone_map();
  37. off.kernel_map = (kptr_t)fi.find_kernel_map();
  38. off.kernel_task = (kptr_t)fi.find_kernel_task();
  39. off.realhost = (kptr_t)fi.find_realhost();
  40. NSLog(@"[OFFSET] grabbed map offsets");
  41. off.copyin = (kptr_t)fi.find_copyin();
  42. off.copyout = (kptr_t)fi.find_copyout();
  43. off.chgproccnt = (kptr_t)fi.find_chgproccnt();
  44. off.kauth_cred_ref = (kptr_t)fi.find_kauth_cred_ref();
  45. off.ipc_port_alloc_special = (kptr_t)fi.find_ipc_port_alloc_special();
  46. off.ipc_kobject_set = (kptr_t)fi.find_ipc_kobject_set();
  47. off.ipc_port_make_send = (kptr_t)fi.find_ipc_port_make_send();
  48. off.osserializer_serialize = (kptr_t)fi.find_osserializer_serialize();
  49. off.rop_ldr_x0_x0_0x10 = (kptr_t)fi.find_rop_ldr_x0_x0_0x10();
  50. NSLog(@"[OFFSET] grabbed code offsets");
  51. off.root_vnode = (kptr_t)fi.find_rootvnode();
  52. off.vfs_context_current = (kptr_t)fi.find_sym("_vfs_context_current");
  53. off.vnode_getfromfd = (kptr_t)fi.find_sym("_vnode_getfromfd");
  54. off.vnode_getattr = (kptr_t)fi.find_sym("_vnode_getattr");
  55. off.csblob_ent_dict_set = (kptr_t)fi.find_sym("_csblob_entitlements_dictionary_set");
  56. off.sha1_init = (kptr_t)fi.find_sym("_SHA1Init");
  57. off.sha1_update = (kptr_t)fi.find_sym("_SHA1Update");
  58. off.sha1_final = (kptr_t)fi.find_sym("_SHA1Final");
  59. NSLog(@"[OFFSET] grabbed amfi offsets");
  60. NSLog(@"[OFFSET] sizeof_task = 0x%llx", off.sizeof_task);
  61. NSLog(@"[OFFSET] task_itk_self = 0x%llx", off.task_itk_self);
  62. NSLog(@"[OFFSET] task_itk_registered = 0x%llx", off.task_itk_registered);
  63. NSLog(@"[OFFSET] kernel_task = 0x%llx", off.kernel_task);
  64. NSLog(@"[OFFSET] rootvnode = 0x%llx", off.root_vnode);
  65. NSLog(@"[OFFSET] sha1_init = 0x%llx", off.sha1_init);
  66. } catch (tihmstar::exception &e) {
  67. NSLog(@"offsetfinder failure! %d (%s)", e.code(), e.what());
  68. return NULL;
  69. } catch (std::exception &e) {
  70. NSLog(@"fatal offsetfinder failure! %s", e.what());
  71. return NULL;
  72. }
  73. DidInit = true;
  74. return &off;
  75. }