iOS逆向之OC反汇编&密码学(八)

block反汇编

  • 全局静态block
int main(int argc, char * argv[]) {
    void (^block)(void) = ^(){
        NSLog(@"block");
    };

    block();
}
iOS逆向之OC反汇编&密码学(八)_第1张图片
屏幕快照 2018-05-06 下午10.59.23.png

当看到
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();
}
iOS逆向之OC反汇编&密码学(八)_第2张图片
屏幕快照 2018-05-06 下午11.11.10.png

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];

}
iOS逆向之OC反汇编&密码学(八)_第3张图片
屏幕快照 2018-05-06 下午11.30.59.png

/*
 所有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对象如何释放的呢?

屏幕快照 2018-05-06 下午11.51.35.png

很明显最后的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。

iOS逆向之OC反汇编&密码学(八)_第4张图片
屏幕快照 2018-05-08 下午9.01.46.png
iOS逆向之OC反汇编&密码学(八)_第5张图片
ASLR.png

密码学

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
数字签名
iOS逆向之OC反汇编&密码学(八)_第6张图片
数字签名流程.png

你可能感兴趣的:(iOS逆向之OC反汇编&密码学(八))