热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

逆向实战(27)

用IDA分析MachO文件IDA-File-NewinstanceNew-新打开一个窗口因为用的是

用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”]

      逆向实战 (27)
      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 (self,"m_delegate");
    NSLog(@"delegateClass:%@",[delegate class]);
    %orig;
}
%end
  1. 点看红包, 查看控制台打印的数据

    逆向实战 (27)
    image.png
  2. 从上面的截图, 可以看出来
    1. 代理类 -> WCRedEnvelopesReceiveControlLogic
    2. 然后继续分析IDA解析的汇编

      逆向实战 (27)
      image.png
    3. 发现代理调用的方法是 -> WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes

静态分析代理方法

  1. 在IDA中搜索WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes
  2. 发现有:结尾的, 这种是带有参数的意思, 而这里我们分析不带参数的

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

动态调试代理方法

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

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

      逆向实战 (27)
      image.png
  3. 然后运行代码, 注意USB要先映射
  4. 点击打开, 查看控制台打印如下

    逆向实战 (27)
    image.png
  5. IDA里面还有个非常好用的功能 -> F5查看当前汇编的伪代码.

    逆向实战 (27)
    image.png
  6. 通过伪代码的分析, 更加应征了我们上面静态分析的结果
  7. 接下来我们要通过IDA的伪代码来继续分析.
    1. com + A
    2. 右键 -> HTML
    3. 打开刚才生成的HTML文件

推荐阅读
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
author-avatar
俊廷淑易89
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有