逆向实战 (27)

用IDA分析MachO文件

  1. IDA -> File -> New instance
  2. New -> 新打开一个窗口
  3. 因为用的是虚拟机, 所以用File -> Open
    1. 选择All Files
    2. 开始分析 -> 黄色的小球代表正在分析 -> 绿色 -> 分析完毕
    3. 选择要分析的文件 (分析微信的项目, 花了三个小时...)
  4. 分析完毕后, 按空格进入

MonkeyDev做符号的恢复

  1. 创建一个MonkeyApp
  2. Build Setting -> Monkey -> MONKEYDEV_RESTRORE_SYMBOL -> YES
  3. 用MonkeyDev进行符号的恢复 -> 再用IDA分析

静态分析

  1. 要分析的方法OnOpenRedEnvelopes (上篇文章有定位到该方法)
  2. 同时要分享WCRedEnvelopesReceiveHomeView的头文件
    1. 打开微信头文件合集 (砸壳并class dump 拿到的)
    2. com + f -> @interface WCRedEnvelopesReceiveHomeView (好像指令是com + a) -> 跳转对应头文件
  3. 伪代码分析
    1. self.m_dicBaseInfo[@"isSender"]
      image.png
    2. 分析到代理, 调用了对应的方法

动态调试

  1. hook代码如下, 来查看点击红包时的, 控制台的打印, 需要查下MSHookIvar
%hook WCRedEnvelopesReceiveHomeView
- (void)OnOpenRedEnvelopes{
    //MSHookIvar
    NSDictionary * dict = MSHookIvar(self,"m_dicBaseInfo");
    NSArray * arr = [dict allKeys];
    //打印字典
    for(int i = 0;i < arr.count ;i++){
        NSLog(@"%@ : %@",arr[i],[dict objectForKey:arr[i]]);
    }
    //代理
    id delegate = MSHookIvar(self,"m_delegate");
    NSLog(@"delegateClass:%@",[delegate class]);
    %orig;
}
%end
  1. 点看红包, 查看控制台打印的数据
    image.png
  2. 从上面的截图, 可以看出来
    1. 代理类 -> WCRedEnvelopesReceiveControlLogic
    2. 然后继续分析IDA解析的汇编
      image.png
    3. 发现代理调用的方法是 -> WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes

静态分析代理方法

  1. 在IDA中搜索WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes
  2. 发现有:结尾的, 这种是带有参数的意思, 而这里我们分析不带参数的
    image.png
  3. 找到方法后, 右边可以双击, 发现最终调用的还是带参数的
    1. 上面可以看出来参数为0, 也就是#0
    2. 伪代码{[self WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes:0];}
  4. 继续往下进行静态分析
    1. image.png
    2. image.png
    3. 这里是初步静态方法分析, 那么实际开发过程中, 要静态分析和动态调试相结合, 上面分析完之后, 要动态调试Hook打印验证并查看一下上面的对象是什么东西.

动态调试代理方法

  1. 经过上面分析, 我们要进行相应的方法hook, 并打印验证
    image.png
  2. 这里注意:
    1. 要进行相应属性的声明 (要去头文件里面查找验证是否有相应的方法)
    2. 注意声明的顺序, 顺序错误也会报错
      image.png
  3. 然后运行代码, 注意USB要先映射
  4. 点击打开, 查看控制台打印如下
    image.png
  5. IDA里面还有个非常好用的功能 -> F5查看当前汇编的伪代码.
    image.png
  6. 通过伪代码的分析, 更加应征了我们上面静态分析的结果
  7. 接下来我们要通过IDA的伪代码来继续分析.
    1. com + A
    2. 右键 -> HTML
    3. 打开刚才生成的HTML文件

你可能感兴趣的:(逆向实战 (27))