逆向与分析-WebBrowserPassView消息分析
逆向与分析-WebBrowserPassView消息分析
这个的源头是之前我写的一个博客:
http://blog.csdn.net/u013761036/article/details/73042749
里面整理了对WebBrowserPassView进行二次开发的思路和注意事项,当时里面有一个环节是当WebBrowserPassView在虚拟桌面上运行起来的时候,怎么样把程序里面的执行结果给拿出来,当时说了很多思路,比如直接模拟按键,通过窗口一层一层注入找到里面的窗体,然后把里面的内容拿出来,在或者直接查找内存偏移量,今天要整理是:WebBrowserPassView这个程序本身有几个按钮,有全选结果按钮,有复制结果按钮,如果能分析出来这两个按钮对应的消息内容,就可以在程序运行起来的时候,直接给相应窗体发送这两个消息内容,这样内容就直接在剪切板里了,然后通过剪切板相关函数把各个账号密码拿出来就行了。
下面是分析思路 [至于其他的姿势,窗体注入什么的之后会陆续实现整理代码]
先看下软件本身用户操作的地方:
所以说,如果找到那两个对应的消息ID就可以了,比较简单。接下来说怎么找这个ID(此处感谢ZDS提供的思路,对于逆向,我是刚开始搞)。
切入点:
可以先找Copy Selected Items的消息处理相关。这个函数执行的时候无疑会操作剪贴板,所以想办法在剪切板函数位置下断点:
我都不知道剪切板有啥函数,直接搜一把。
显然找一个他肯定会用的,就OpenClipboard了。
附加进程->右键查找->所有模块,找上面的按个函数。
回车进去看,发现两处调用,OK直接下两个断点,然后触发那个动作,就是点击复制所有选择项的那个按钮。
看到上面的那个调用剪贴板函数位置,然后上下屡了下,并没有发现什么相关代码,所以极有可能这个是个处理函数,想看判断部分就继续往外走,因为消息id应该是一堆判断,会是很多的判断,所以直接一步一步往下走,知道走到return,继续再走一次,跳出到了这个函数被调用的地方。
就是那个cmp...所以上面那个call 后面的函数就是刚刚的函数,然后在网上看,很容易找到那个cmp di,0x9c48,讲道理这个应该是粘贴的消息ID了,当然也可能不是,分析就是这样,感觉是就测试下就行了,不是的话继续屡汇编。这个我测试过了,这个参数就是消息发送的信息,直接给主窗体发送这个消息就能实现复制功能。
接下来就是找全选的那个了,为啥不是先找全选,其实是有原因的,入口点选择了剪切板函数,这样我们就可以有确定的函数去下断点了,找到粘贴的id那么全选的id就很容易在附近呗(当然其他id也是)。讲道理就是
Switch(id){
Id1:
do1...
Id2:
do2...
Id3:
do3...
}
所以就直接把附近所有的do 1 2 3..都下上断点,然后触发条件,看看是那个call,然后再找这个call是那个逻辑下来的就ok了。
OK这样就找到0x9c47这个消息id了,这个就是全选,其实只要切入点正确,很容易找到,接下来就可以尝试这样:
启动WebBrowserPassView,然后给窗体发送两个消息,一个是0x9c47 全选结果,一个是0x9c48复制结果,然后在调用相关API把剪贴板里面的东西拿出来,我写了测试代码,代码和结果如下:
结果:
代码:
#include "stdafx.h"
#include <string>
#include <windows.h>
#pragma warning(disable:4996)
using namespace std;
VOID Send_AC_2_Window(__in const HWND & hdWindow) {
PostMessage(hdWindow, WM_COMMAND, 0x9c47, 0);
PostMessage(hdWindow, WM_COMMAND, 0x9c48, 0);
}
string GetTextFromShearPlate() {
string strCache = "";
if (OpenClipboard(NULL)){
if (IsClipboardFormatAvailable(CF_TEXT)){
HANDLE hClip;
hClip = GetClipboardData(CF_TEXT);
char* pCache = (char*)GlobalLock(hClip);
strCache = string(pCache);
GlobalUnlock(hClip);
CloseClipboard();
}
}
return strCache;
}
int main(){
Send_AC_2_Window(FindWindow(NULL, L"WebBrowserPassView"));
MessageBoxA(NULL ,GetTextFromShearPlate().c_str() ,"Hi" ,MB_OK);
return 0;
}
OK,上面那样就可以直接通过消息发送让那个工具干活,然后把结果存到剪切板里,我们在从剪切板里面拿就行了,下面说下另一种得到这个消息id的方式,其实可以直接通过PE文件的资源里面把这个消息拿出来,这个后来才知道。
但是并不是所有的都能通过从这里面拿出来,之前同事逆过Pchunter,我今天铜鼓了下Pchunter发现并没有把相关操作驱动的消息按钮id放在里面,应该是现用现写的。所以说通常靠谱的方式还是要去简单逆下,之前有一段时间再逆PowerToo,当时的目的是想逆向分析他驱动消息传递内容,然后直接加载或者他加载我调用,用它驱动当跳板做事。当时忘记因为啥原因没有逆完,我直接选择自己写一套驱动程序来做这个事。近期会重新逆向PowerToo的驱动,练手玩。还有就是说下,很多大厂商的驱动相关写的并不怎么严谨,比如X度杀软的某个驱动部分,就是直接没有校验,谁给他直接通过驱动接口发消息他就干活,所以后来出现了XXX那个事。其实就算校验也很难根治,校验了可以逆他上一层调用程序,或者是如果你可以手写驱动的话,直接把他的驱动程序拿出来,当成自己的驱动,然后安装到目标机器上(主要是64位过签名问题),然后直接类似PE内存加载的方式把自己的无签名驱动程序弄上去跑起来就OK,TDL64位无签名加载驱动就是这个思路,只不过是用的过期签名,改本地时间实现的临时正确安装......上一次逆PowerToo的驱动,我是直接用IDA在看他驱动的消息处理函数,贼多。这次打算直接先挂钩他相关驱动通讯函数,抓抓看看再说。感觉应该很容易抓到,是在不行再OD调试相关函数,或者IDA接着看那个尝尝的switch,总之肯定可以搞定。后续找时间昨完整理出来。
逆向与分析-WebBrowserPassView消息分析的更多相关文章
- Memcached源代码分析 - Memcached源代码分析之消息回应(3)
文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...
- 抓包分析SIP消息
I. 实验环境 SIP服务器: Yate服务器, IP:port=10.15.3.34:5060 SIP客户端: 移植Sipdroid的Android网络电话软件, IP: 10.15.3.73, A ...
- ActiveMQ(2)---ActiveMQ原理分析之消息发送
持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...
- rocketmq源码分析3-consumer消息获取
使用rocketmq的大体消息发送过程如下: 在前面已经分析过MQ的broker接收生产者客户端发过来的消息的过程,此文主要讲述订阅者获取消息的过程,或者说broker是怎样将消息传递给消费者客户端的 ...
- ⑥NuPlayer播放源码分析之DecoderBase分析
NuPlayer播放源码分析之DecoderBase分析 [时间:2017-02] [状态:Open] [关键词:android,nuplayer,开源播放器,播放框架,DecoderBase,Med ...
- linux内核中socket的创建过程源码分析(详细分析)
1三个相关数据结构. 关于socket的创建,首先需要分析socket这个结构体,这是整个的核心. 104 struct socket { 105 socket_state ...
- 安卓脱壳&&协议分析&&burp辅助分析插件编写
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前言 本文以一个 app 为例,演示对 app脱壳,然后分析其 协 ...
- 编译原理(六)自底向上分析之LR分析法
自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...
- 常用 Java 静态代码分析工具的分析与比较
常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...
随机推荐
- 【老孟Flutter】Flutter 2的新功能
老孟导读:昨天期待已久的 Flutter 2.0 终于发布了, Flutter Web和Null安全性趋于稳定,Flutter桌面安全性逐渐转向Beta版! 原文链接:https://medium.c ...
- 致被职场PUA的打工人
作为打工人,除了每天面对着各种繁琐的工作,还要被动接受上级或多或少的PUA,实在是难上加难,甚至有人想不开而自杀.网络上最近流行了一个词:职场PUA,赋予了这种现象一个正式的名字. 职场PUA指的是职 ...
- Python爬虫学习二------爬虫基本原理
爬虫是什么?爬虫其实就是获取网页的内容经过解析来获得有用数据并将数据存储到数据库中的程序. 基本步骤: 1.获取网页的内容,通过构造请求给服务器端,让服务器端认为是真正的浏览器在请求,于是返回响应.p ...
- 内省详解(Introspector/BeanInfo/MethodDescriptor/PropertyDescriptor)
内省(Introspector)概念 内省Introspector 是Java提供的操作 JavaBean 的 API,用来访问某个属性的 getter/setter 方法.对于一个标准的 Jav ...
- (Java基础--Spring阶段)常见面试题题目及解析整理(2021.03.12)
题目整理 Java基础进阶阶段 基础概念类 1.JDK1.8新特性? 2.面向对象和面向过程的区别? 3.什么是值传递和引用传递? 4.什么是不可变对象? 5.讲讲类的实例化顺序? 6.java 创建 ...
- python-@函数装饰器
例如@classmethod,@staticmethod的本质就是函数装饰器,其中,classmethod和staticmethod都是python的内置函数 使用@引用已有的函数后,可用于修饰其他函 ...
- 官方正式发布 Java 16
前言 就在2021/03/16,官方正式发布了Java 16.我们可以下载使用Java 16了. 特性 向量API(孵化) 在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢 ...
- c++ 反汇编 继承
单继承,父类中没有虚函数 单继承,父类存在虚函数,子类重写虚函数 单继承,父类存在虚函数,子类不新定义虚函数 单继承,父类存在虚函数,子类新定义虚函数 单继承,父类不存在虚函数,子类定义虚函数 多继承 ...
- PTA 数组元素的区间删除
6-6 数组元素的区间删除 (20 分) 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: ...
- [题解] T'ill It's Over
前言 线段树+网络最大流的建模题. 博客园食用更佳 题目大意 最初时有 \(n\) 个 \(1\) .给定 \(op\) . \(l\) ,其中, \(l\) 为操作次数上限.你有四个操作: 若 \( ...