frida项目

  • frida文档
  • Golang Bindings
  • pc微信hook范例
  • Pin/DynamoRIO/Frida 二进制动态插桩

macos

  • Clutch 拆壳?
  • Cycript 运行时分析
  • 发现头文件 classdump
  • 官网的class-dump不支持dump swift files导致。 https://github.com/AloneMonkey/MonkeyDev/blob/master/bin/class-dump
  • SendLocationMsgFromUser
  • 运行调试方法: frida-trace -m “-[FFProcessReqsvrZZ FFProcessTReqZZ*]” 微信
  • objective-c hook方法

-Apple M1,逆向环境设置与我自己遇到了很多坑逐一解决,给后来的同学一个参考吧
-MacOS微信逆向分析-Frida

  • FFProcessTReqZZ 发文字信息

问题

Failed to attach: unable to access process with pid 87944 from the current user account

87944 已经被追踪(守护进程?)所以无法被frida hook
cat /proc/18486/status | grep TracerPid
系统完整性保护

windows

  • 看雪ollydbg资源
  • PC微信frida
  • 使用frida微信Hook_Coder的博客-程序员秘密_frida 微信
  • Frida知识小记
  • ddl注入原理
  • PC微信逆向:分析通用设置数组 cheatEngine
  • 重点参考:PC微信逆向:发送与接收消息的分析与代码实现
  • 付费课程 2021微信逆向分析
  • 【原创】PC微信逆向分析の强制输出微信调式信息
  • cheat engine
  • ollydbg ? Ollydbg使用教程学习总结(一)
  • OllyDbg截取PC WeChat的数据库key - BH4LM
  • PC 微信逆向:破解聊天記錄文件!
  • 使用OllyDbg从零开始Cracking 第十章-断点
  • 关键!!pc微信hook实战记录1
  • 重要 植物大战僵尸逆向过程
  • bilibili指针偏移教学
  • 对dll的hook ?
  • WeChatWin.dll 是微信的关键dll ModAdress:0x65990000
  • dll 是动态加载的, 基址会变,但是 函数的偏移量是不会变的
  • 如何获取dll的基址?
  • dll注入方式
  • 每次只能读取到一个字符的原因,应为找的地方不对,是最初始的,此处每个字符后面都跟上了字符串终止符号00,由于readUtf8String读到00就停了所以读不到后面,还要往后找
  • iOS逆向 微信消息界面分析 部分吻合
OD基本快捷键及功能:
F2 下断点,也就是指定断点的地址
F3 加载一个可执行程序,进行调试分析
F4 程序执行到光标处
F5 缩小、还原当前窗口
F7 单步步入
F8 单步步过单步步过就是碰到call不进入call,单步步入就是进入call中执行。。。
单步步过相当于单步步入后执行到ret指令的下一条。。。F9 直接运行程序,遇到断点处,程序暂停
Ctrl+F2 重新运行程序到起始处,一般用于重新调试程序
Ctrl+F9 执行到函数返回处,用于跳出函数实现
Alt+F9 执行到用户代码处,用于快速跳出系统函数
Ctrl+G 输入十六进制地址,快速定位到该地址处
idaPro
  • 设置dll基址 使用IDA打开DLL时,一开始会弹出以下对话框,勾选“Manual load” / 手动加载
  • ida代码视图 蓝色箭头只有一个后续、 红色no、绿色yes
  • 获取伪代码 F5 需要用ida 而不是ida64
  • xref 交叉引用 ctrl+x 获取鼠标选定函数的调用者
  • function calls 获取该函数调用的函数
  • idapro的调试和ollydbg差不多,有方便的便利方法:搜索->查询文本 (art+t)可以找到关键字。
  • IDAPython基础教程一
  • ida python文档
  • idapython笔记
pc 发送消息的地址

Executable modules, item 112
Base=65990000
Size=02680000 (40370176.)
Entry=672D7B60 WeChatWi.
Name=WeChatWi
File version=3.6.0.18
Path=C:\Program Files (x86)\Tencent\WeChat[3.6.0.18]\WeChatWin.dll

  • step1 找到地址流程:ce 通过字符串查找地址
  • step2 ollydbg attach wechat -> Execute modules -> wechatWin -> view code in cpu -> Ctrl+g 查询地址
需要学习的知识点

1、如何定位函数

  • ce找到的地址ctrl+g 搜索出位置,再右击 写入断点, 接着再发送消息,此时可以断到(断点到后取消写入断点),再点击ctrl+k查看调用栈,调用来自显示的就是函数地点,从函数地址下断,触发断点后 看寄存器 esp堆栈窗口中跟随(右下侧看) 或 ebp堆栈窗口中跟随
    2、如何稳定debug
  • od无法正常debug 的快捷处理方式 OllyDbg调试总是进入RtlRaiseException 异常处理函数

整体思路

  • 主动发送方法hook 手机客户端发送的同步方法,也要hook, 另外客户端登出->要预警
  • 客户端掉线重连
1、CE 找关键词,定位存储信息的地址。在通过谁修改了这个地址获取一些关键信息
2、再ollydbg中 存储地址处 写入内存断点, 命中断点后查找调用栈,再一步一步debug 从esp堆栈窗口检索关键字,直到定位函数定位的函数信息
Wechat Version: 3.7.0.30
WechatWin  基址:  67D50000
函数地址: 6912C730  偏移为: base + 0x13DC730  唯一触发函数地址 base + 0x737818  /  0x7372A0
可能是最终调用 base + 0x13EBE60$+368    >|770148F8  返回到 KERNELBA.770148F8 来自 ntdll.RtlUnicodeToUTF8N
$+36C    >|00000020
$+370    >|00910860
$+374    >|00000064
$+378    >|11041380  UNICODE "wxid_sfjlk5mowetkxx"
$+37C    >|00000020
$+380    >|00000000
$+384    >|04CB52D8
$+388    >|113A9158  返回到 113A9158
$+38C    >|00000000
$+390    >|00000000
$+394    >|772B7904  返回到 ntdll.772B7904 来自 ntdll.77273C30
$+398    >|113A94A0  UNICODE "hangzhou" //收到的内容

// onEnter:function(args) {
// console.log(id:${new ObjC.Object(args[2])} toUsrName:${new ObjC.Object(args[3])} thumbImgData:${new ObjC.Object(args[4])} imgData:${new ObjC.Object(args[5])} imgInfo:${new ObjC.Object(args[6])})
//
// }

汇编

  • 搞懂函数调用前后堆栈恢复的过程
  • 逆向工程核心原理 第七章 栈帧 p49开始很重要 概要: 汇编中如何分辨静态变量、函数入参,以及入参顺序,函数调用栈帧逻辑!
  • 寄存器的作用?
  • 通用寄存器如下:
  1. EAX (针对操作数和结果数据的) 累加器
  2. EBX (DS断中的数据指针) 基址寄存器
  3. ECX (字符串和循环操作符的) 计数器
  4. EDX (I/O 指针) 数据寄存器
  5. EBP (SS段中栈内数据指针) 扩展基址指针寄存器
  6. ESI (字符串操作源指针) 源变址寄存器
  7. EDI (字符串操作目标指针) 目的变址寄存器
  8. ESP (SS段中栈指针) 栈指针寄存器
  • 段寄存器
  • 调用前
PUSH EBP  先把ebp保存到栈中
MOV  EBP, ESP 保存ESP到EBP中
//函数体
//无论ESp如何变化,EBP都保持不变,可以安全访问函数的局部变量、参数MOV ESP, EBP //将函数其实地址返回给esp
POP EBP   //函数返回前弹出保存在栈中的EBP值
RETN      //函数终止
环境变量的范例
范例源代码  long a=1 , b=2
汇编如下
SUB ESP-8 // 两个long 8个字节 ESP由高到低减去8个字节
MOV  DWORD PTR SS:[EBP-4],1 //  环境变量申明
MOV  DWORD PTR SS:[EBP-8],2 //  环境变量申明
调用函数前的参数组装范例
范例源代码: add(xxx, a,b)
MOV  EAX, DWORD PTR SS:[EBP-8]  入参是逆向的
PUSH EAX
MOV  ECX, DWORD PTR SS:[EBP-4]
PUSH ECX
PUSH 401133a  //最后push入栈的是第一个参数
CALL 0x231aa3
范例源代码: add(long a, long b)
PUSH EBP  先把ebp保存到栈中
MOV  EBP, ESP 保存ESP到EBP中
MOV  EAX, DWORD PTR SS:[EBP+8]  // 前8字节保存的是 EBP 寄存器 32位 8字节 所以从8开始取入参
MOV  EAC, DWORD PTR SS:[EBP+C]  // 4字节
疑问,
  1. 为什么参数进入 EAX,ECX 更多的参数遵循什么逻辑?
  2. MOV EAX, DWORD PTR SS:[EBP+8] // 为什么从 +8 开始而不是 +4 猜测的解释:前8字节保存的是 ESP 寄存器 32位 8字节 所以从8开始取入参

逆向、反编译、微信相关记录相关推荐

  1. 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像

    2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...

  2. NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具

    NP管理器 NPManager v3.0.49 安卓APK逆向反编译工具 NP管理器 NPManager 安卓反编译工具,NP管理器是一款强大的安卓反编译或反汇编工具,虽然这个NPManager反编译 ...

  3. 反编译微信小程序(图文详细傻瓜式)

    反编译微信小程序2020-2-2 –根据各大平台整合而成 一.前期准备 1.下载反编译脚本 https://duolc.lanzous.com/i8zgo1e 如果这个脚本效果不好可以用这里面其他的h ...

  4. 两个小工具反编译微信(PC)小程序源码

    现在微信小程序有很多,但是想自己开发时候遇到技术瓶颈想参考(借鉴)别人小程序怎么办,网上资料又很少,很多坑爹的需要付费.作为搞技术的人直接把小程序反编译是不是更直接,接下来敲小黑板. 我们用到的工具很 ...

  5. 最新微信小程序反编译破解过程记录

    一.前言 既然你进来看这篇文章,我认为"微信小程序反编译"这个技术你多少应该会了解点.在学习微信小程序前端开发的过程中,我跟大部分人一样,试着仿写过一些线上的小程序案例,但在实际练 ...

  6. 逆向反编译APK失败总结

    最近接到项目新需求,需要逆向APK,由于第一次逆向先做个笔记记录一下踩过的坑 百度了一下逆向所需工具于是下载了Androidkiller apktool等工具...本次测试采用微信apk Androi ...

  7. vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析

    一.名称解释 逆向 - 是一种产品设计技术再现过程,从可运行的程序系统出发,运用解 密.反汇编.系统分析等多种计算机技术,对软件的结构.流程.算法. 代码等进行逆向拆解和分析,推导出软件产品的源代码. ...

  8. android将彩图转为黑白_Android逆向反编译代码注入APK过程思路分析

    一.名称解释 逆向 - 是一种产品设计技术再现过程,从可运行的程序系统出发,运用解 密.反汇编.系统分析等多种计算机技术,对软件的结构.流程.算法. 代码等进行逆向拆解和分析,推导出软件产品的源代码. ...

  9. C++程序正向编译逆向反编译(一)

    1.需求 逆向工程师必须先是一个正向开发工程师,如果没有C++/MFC的开发经验,就不会懂得如何逆向分析C++/MFC的程序,本文完成一个helloworld的C++正逆向过程. 2.C++程序源码 ...

  10. wxapkg反编译后的数据_反编译微信小程序

    首先声明:本文章仅供学习之用,不可它用. 一.前言 看到人家上线的小程序的效果,纯靠推测,部分效果在绞尽脑汁后能做出大致的实现,但是有些细节,费劲全力都没能做出来.很想一窥源码?查看究竟?看看大厂的前 ...

最新文章

  1. java reference_java中的4种reference的差别和使用场景(含理论、代码和执行结果)...
  2. 接口测试,接口协议以及常用接口测试工具介绍
  3. Java常用四大线程池用法以及ThreadPoolExecutor详解
  4. 独家 | 人工智能和大数据是如何联系在一起的?
  5. Linux的内存分页管理
  6. 血栓清道夫机器人_血栓“清道夫”找到了!洋葱排最后,排在第一很多人并不知道...
  7. boost::phoenix::bind相关的测试程序
  8. deeplab运行指南
  9. zemax光学设计超级学习手册_穿越十年的一个ZEMAX光学设计案例
  10. android button 行间距,android – 如何减少TextView行间距
  11. python网站框架下载_最受欢迎的7款Python开源框架总结,忍不住收藏了~
  12. spingMVC 请求参数绑定
  13. 使用MVC2模式创建新闻网站
  14. java pdf 中文_java pdf中文乱码怎么办
  15. Kubesphere之ks-installer介绍
  16. tao的开源代码_获取并编译TAO
  17. 解决slideup或slidedown图片抖动
  18. 安卓开发自己写的刻度尺测量,精确到mm.
  19. 成就系统实现(一)-概述
  20. 3分钟带你轻松了解贝塞尔曲线(cubic-bezier)

热门文章

  1. 计算机网络与通信第二版复习,自学考试计算机网络与通信笔记第二章
  2. 解决:卸载anaconda后 cmd闪退或打不开
  3. 数电中一些常用的逻辑门符号
  4. NFC读卡MS522|CV520
  5. 手机APP项目测试点(内容)总结
  6. 如何使用USBASP烧写器和Atmel Studio 7.0对AVR微控制器进行编程
  7. 【ENVI入门系列】02.自定义坐标系(北京54、西安80、2000坐标系)
  8. linux bzip2 命令,Linux bzip2 命令的使用
  9. 在centos里面安装配置caddy
  10. 太极周易罗盘计算机器人图片,周易八卦--罗盘的使用