当前位置:网站首页>Hook初探索
Hook初探索
2022-08-03 05:23:00 【全局变量】
分析MachO获取函数地址
⾸先我们要⽤到⼀款软件。MachOView
利⽤它来分析我们Demo的主程序。接下来如何定位到我们的sum函数地址呢?
通过LLDB调试获取Sum函数的⽂件偏移地址。
1.⾸先在sum函数上下⼀个断点
2.然后通过汇编显示确定函数地址,在Xcode⾃带的Debug设置中设置⼀下搞定
Debug --> Debug Workflow --> Always Show Disassembly(⼀直显示汇编)
3.接下来通过LLDB指令找出主程序的⾸地址。得到 sum函数偏移地址 = sum函数地址 - 主程序⾸地址
LLDB:image list 获取镜像列表
4.我们可以⽤Mac⾃带的计算器算出偏移值,很⽅便(CMD+3 使⽤编程器)
在MachOView中查看到当前函数
我们打开MachOView,可以看到这⾥就是我们sum函数的开始位置。所以我们可以验证了sum函数的⽂件
偏移地址就是0x5E9C。那么我们就⽤这个地址进⾏接下来的HOOK了。
HOOK前的准备
准备一个指针
注意:由于要⽅便我们计算,这⾥定义函数指针不要定义成为函数的结构。⽽是uintptr_t类型
1 //定义指针,表示sum函数的偏移地址!
2 static uintptr_t sumP = 0x100005E04;
动态获取ASLR
⾸先导⼊头#import <mach-o/dyld.h>
然后使⽤函数_dyld_get_image_vmaddr_slide获取ASLR,我们在Load中就可以这样写。
+ (void)load {
//获取ASLR,让sumP变成准确的地址
//参数0代表imagelist中的主程序(⾃⼰)
uintptr_t aslr = _dyld_get_image_vmaddr_slide(0);
sumP += aslr;
//Hook sum
DobbyHook((void *)sumP, mySum, (void *)&sum_p);
}
那么这个时候,我们能否运⾏成功?
为什么会出错?
原因很简单。我们刚才算出来的sum函数的⽂件偏移地址,在我们修改了这⾥的代码之后。变了没?!
当然变了!所以怎么办?只能再次去获取sum函数的偏移。(注意:HOOK别⼈应⽤时因为我们是动态库
注⼊,所以不会修改⽬标应⽤的MachO,那么偏移值是固定的。没有这么麻烦)
注意:
这⾥有⼀个⼩技巧!因为修改代码之后,我们的sum函数有可能会没法断点调试(因为程序交换就崩
溃),那么没关系,我们不做交换
1、将交换的代码注释起来
2、获取到最⼩改动的sum函数偏移地址。
3、再讲该执⾏的代码打开。⽣成最新的MachO。
4、在MachOView中找到那附近(往⾼地址⾛)最像函数起始位置的作为sum函数的偏移(⼀般都是)
这个时候,我们只需要将sum函数的偏移地址修改⼀下就可以了!
运⾏!通过纯地址也能轻松搞定InlineHook了!
边栏推荐
猜你喜欢
随机推荐
亲身分享一次 字节跳动 真实面试经历和面试题
用C语言来实现扫雷小游戏
Go (二) 函数部分1 -- 函数定义,传参,返回值,作用域,函数类型,defer语句,匿名函数和闭包,panic
下拉框数据字典应用案例
中国柔性制造系统(FMS)市场发展动态及未来趋势预测报告2022~2028年
【圣诞节给爱的人打印一颗圣诞树吧】超详细代码实现——圣诞树打印
vivado遇到的问题
中国水环境治理行业投融资分析及“十四五”规划建议报告2022~2028年
7.24[C语言零基础 知识点总结]
【HQL】(一)json字符串处理json_tuple和get_json_object
Django从入门到放弃三 -- cookie,session,cbv加装饰器,ajax,django中间件,redis缓存等
取某一区间中素数的个数--洛谷P1865 A % B Problem
HANA 常用数据类型详解
【DC-5靶场渗透】
【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
Playing with Markdown(2) - Extraction and Manipulation of Abstract Syntax Trees
嵌入式实验二
`monorepo` 中 `hoist` 机制导致加载配置文件路径的变化
Haproxy服务监控
【XSS,文件上传,文件包含】