逆向实战 (27)

简介: 用IDA分析MachO文件

用IDA分析MachO文件


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

MonkeyDev做符号的恢复


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

静态分析


  1. 要分析的方法OnOpenRedEnvelopes (上篇文章有定位到该方法)
  2. 同时要分享WCRedEnvelopesReceiveHomeView的头文件


  1. 打开微信头文件合集 (砸壳并class dump 拿到的)
  2. com + f -> @interface WCRedEnvelopesReceiveHomeView  (好像指令是com + a) -> 跳转对应头文件


  1. 伪代码分析


  1. self.m_dicBaseInfo[@"isSender"]


微信图片_20220510035201.jpg
image.png


       b.分析到代理, 调用了对应的方法


动态调试


  1. hook代码如下, 来查看点击红包时的, 控制台的打印, 需要查下MSHookIvar


%hook WCRedEnvelopesReceiveHomeView
- (void)OnOpenRedEnvelopes{
    //MSHookIvar
    NSDictionary * dict = MSHookIvar<NSDictionary *>(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<id>(self,"m_delegate");
    NSLog(@"delegateClass:%@",[delegate class]);
    %orig;
}
%end


  1. 点看红包, 查看控制台打印的数据


微信图片_20220510035206.jpg
image.png


  1. 从上面的截图, 可以看出来


  1. 代理类 -> WCRedEnvelopesReceiveControlLogic
  2. 然后继续分析IDA解析的汇编


微信图片_20220510035211.jpg
image.png


       c.发现代理调用的方法是 -> WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes


静态分析代理方法


  1. 在IDA中搜索WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes


  1. 发现有:结尾的, 这种是带有参数的意思, 而这里我们分析不带参数的


微信图片_20220510035215.jpg
image.png


  1. 找到方法后, 右边可以双击, 发现最终调用的还是带参数的


  1. 上面可以看出来参数为0, 也就是#0
  2. 伪代码
{[self WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes:0];}
  1. 继续往下进行静态分析



微信图片_20220510035219.jpg

image.png


       b.

微信图片_20220510035222.jpg

image.png


        c.这里是初步静态方法分析, 那么实际开发过程中, 要静态分析和动态调试相结合, 上面分析完之后, 要动态调试Hook打印验证并查看一下上面的对象是什么东西.


动态调试代理方法


  1. 经过上面分析, 我们要进行相应的方法hook, 并打印验证


微信图片_20220510035226.jpg

mage.png


  1. 这里注意:


  1. 要进行相应属性的声明 (要去头文件里面查找验证是否有相应的方法)
  2. 注意声明的顺序, 顺序错误也会报错


微信图片_20220510035230.jpg
image.png


  1. 然后运行代码, 注意USB要先映射
  2. 点击打开, 查看控制台打印如下


微信图片_20220510035234.jpg
image.png


  1. IDA里面还有个非常好用的功能 -> F5查看当前汇编的伪代码.


微信图片_20220510035239.jpg
image.png


  1. 通过伪代码的分析, 更加应征了我们上面静态分析的结果
  2. 接下来我们要通过IDA的伪代码来继续分析.


  1. com + A
  2. 右键 -> HTML
  3. 打开刚才生成的HTML文件



目录
相关文章
|
1月前
|
数据采集 JavaScript 前端开发
【逆向基础】JS逆向入门:小白也可以看懂
【逆向基础】JS逆向入门:小白也可以看懂
|
6月前
|
数据采集 JavaScript 前端开发
爬虫逆向操作
安装PyExecJS和Node.js环境,使用Python通过PyExecJS调用JavaScript代码。微信公众号平台案例中,通过抓包分析找到密码加密函数,使用js改写工具修改后保存为weixin.js。利用PyExecJS的execjs.get()、compile()和eval()方法执行加密函数,获取加密后的密码数据。示例代码展示了如何调用weixin.js中的getPwd函数。
38 1
|
6月前
|
算法 安全 数据安全/隐私保护
AES算法逆向实战--某思路
本文是关于AES加密算法的逆向分析实战。通过跟栈方式找出加密位置,发现在`jslencode`函数中完成账号和密码加密。使用CryptoJS库,示例代码展示了如何用AES进行加密,其中`397151C04723421F`作为key,加密手机号和密码,并打印结果。
114 1
|
数据安全/隐私保护 iOS开发 开发者
iOS 逆向编程(三)实操 Jailbreak 详细流程
iOS 逆向编程(三)实操 Jailbreak 详细流程
246 1
|
算法 Java API
逆向的流程和思路
逆向的流程和思路
|
C++
逆向实战(插件完) (29)
对未实现的参数进行猜测
157 0
逆向实战(插件完) (29)
【软件】【逆向】StarUML regist
【软件】【逆向】StarUML regist
94 0
|
Java iOS开发 Spring
逆向实战 (26)
逆向实战(26)
277 0
逆向实战 (26)
|
iOS开发
逆向实战 (28)
上次分析说明
105 0
逆向实战 (28)
|
机器学习/深度学习 算法 UED
《算法笔记知识点记录》第四章——算法初步3——递归
《算法笔记知识点记录》第四章——算法初步3——递归
《算法笔记知识点记录》第四章——算法初步3——递归