Cocoa
(CocoaHuke)
1
原文转载
见好像没人写MachO程序函数符号混淆的内容,但蛮实用的,那由我来介绍下<
函数符号,无论是内部函数,还是外部引用的函数都定义在LC_SYMTAB
symoff是函数符号表的文件偏移位置,这个符号表由nlist/nlist_64结构体组成,定义在mach-o/nlist.h,nsyms是数量
stroff是字符串表的文件偏移位置,strsize是大小
n_un.n_strx 是这条符号的字符串,值是文件偏移相对于字符串表
n_type 决定了这个符号的用处,对于反编译工具来说,比如修改n_type,可以使一个私有函数变成可以用dlsym引用的函数(小t>大T)
n_sect 表示这条符号关联的section
n_desc 在定义的文件中#include <mach-o/stab.h>,注释看起来和符号类型有关.但符号类型实际是和type有关,暂时不太清楚,函数的符号这个值通常为0,名字叫describe(描述),所以应该是一种可有可无的东西吧
n_value 对函数符号来说,这个就是和这个符号关联的值的函数的VM位置
n_type为0xf的时候是一般的函数符号,通常就是T,作为动态库,就是外部是可以引用的符号,但也可能是变量,区分这个看n_sect,函数符号的n_sect一般为0x1,_text,为0xe或者0x1e是内部符号,通常都是小写的,比如t,这个其他的就靠大家自己去摸索了
这些都可以随便改,不会影响程序运行
代码在此:
https://github.com/CocoaHuke/Check_and_Modify_machO_symbol
2 个赞
Zhang
5
Nah我没说没营养,我的意思是你可以继续深挖 : )
Zhang
7
除了实际的个别段内容完全不能更改外整个MachO一大堆地方可以捣鼓
慢慢玩吧w
cris
(chris)
8
nn->n_value = 0x0;
nn->n_type = 0xF;
memset(nn,0xFF,sizeof(struct nlist_64));
这个改了之后,为什么macho文件无法用machoview打开了。
cris
(chris)
10
张总,我去你github上去找了下,结果没找到你的关于修改macho的库啊
cris
(chris)
14
那最后的效果应该是一样的把。这个如果去改string table的话,一样可以达到效果感觉。
cris
(chris)
15
我看到某宝的结果是这样子的
虽然我看不出来这是从哪个层面修改的,但是value都改为0??????
strx 改为一个字符串??????
这样都能运行?????????????????????
cris
(chris)
20
我终于知道自己欠缺的是什么了,所以问的问题才这么白痴。什么都不懂,在这瞎问。感觉打开了一个新世界。
Zhang
23
哇谢谢大神指点我们都不知道Release会strip掉符号表呢
/s