block反汇编
- 全局静态block
int main(int argc, char * argv[]) {
void (^block)(void) = ^(){
NSLog(@"block");
};
block();
}
当看到
0x1049768d4 <+12>: adrp x8, 2
0x1049768d8 <+16>: add x8, x8, #0x48 ; =0x48
说明附近有个isa的block指针
- 访问外部变量的block
int main(int argc, char * argv[]) {
int a = 10;
void (^block)(void) = ^(){
NSLog(@"block---%d", a);
};
block();
}
OC方法反汇编
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
int main(int argc, char * argv[]) {
Person *p = [[Person alloc] init];
}
️
/*
所有OC中使用Strong 修饰的对象,实际上是调用了这个函数 objc_storeStrong
void objc_storeStrong(id *location,id obj)
{
id perv = *lopcation;
if(obj == prev){
return;
}
objc_retain(obj);
*location = obj;
objc_release(prev);
}
*/
OC对象如何释放的呢?
很明显最后的x1寄存器给了0x0000000000000000,也就是内存释放了即p=nil。
ASLR
aslr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。
ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率,如今Linux、FreeBSD、Windows等主流操作系统都已采用了该技术。
Mac OS X
Apple在Mac OS X Leopard10.5(2007年十月发行)中某些库导入了随机地址偏移,但其实现并没有提供ASLR所定义的完整保护能力。而Mac OS X Lion10.7则对所有的应用程序均提供了ASLR支持。Apple宣称为应用程序改善了这项技术的支持,能让32及64位的应用程序避开更多此类攻击。从OS X Mountain Lion10.8开始,核心及核心扩充(kext)与zones在系统启动时也会随机配置。
iOS(iPhone, iPod touch, iPad)
Apple在iOS4.3内导入了ASLR。
密码学
base64
- base64编码
$base64 abc.txt -o def.txt
- base64解码
$base64 def.txt -o abc.txt
- base64表
维基百科 Base64 资料
RSA
- 生成RSA私钥
$openssl genrsa -out private.pem 512
- 查看RSA私钥内容
$ ~/Desktop cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIIBPQIBAAJBAL7HDLkdw8gtNkvzStPZccQqcOmsolqrtkMAATD8fcAVRqsWmGXd
kRscNhheLFpe+JX8q0IHXg2YqrAZ5VAkb1kCAwEAAQJBAJXvtLUsinmh5wGMJawY
Qoxs2q8cacEfITDJKSaJ2n8CHML55s7L2thyIlgRCyYGEOieTFzUE0p4/JWCcxAJ
QF0CIQDzFw4fIk2tqv1ITTW9ZmLeqfVpAuwBnlfXfgYKCfBRtwIhAMjoxtLLKSLm
o+hXHKDMgWMsoUU5GIHxI1Yl3t8S8wdvAiEA2ivwBatg8iRLrE93kuRIijUZx8TS
kmVNy18VBn+DC6MCIQCt3iUSj5cOCSOYEqtHzTO8LAd07LB048Z861ExJCkGKQIh
AMEKuQMGC0KUJnp+zrFsshYHNBpb7X4kArXf8TXYsqDO
- 通过RSA私钥算出公钥
$openssl rsa -in private.pem -out public.pem -pubout
- 查看RSA公钥内容
~/Desktop cat public.pem
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL7HDLkdw8gtNkvzStPZccQqcOmsolqr
tkMAATD8fcAVRqsWmGXdkRscNhheLFpe+JX8q0IHXg2YqrAZ5VAkb1kCAwEAAQ==
-----END PUBLIC KEY-----
MD5
~/Desktop md5 abc.txt
MD5 (abc.txt) = c6de1992fcf1dcacbaceb22eb33ebfb1