逆向与分析-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消息分析的更多相关文章

  1. Memcached源代码分析 - Memcached源代码分析之消息回应(3)

    文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...

  2. 抓包分析SIP消息

    I. 实验环境 SIP服务器: Yate服务器, IP:port=10.15.3.34:5060 SIP客户端: 移植Sipdroid的Android网络电话软件, IP: 10.15.3.73, A ...

  3. ActiveMQ(2)---ActiveMQ原理分析之消息发送

    持久化消息和非持久化消息的发送策略 消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

  4. rocketmq源码分析3-consumer消息获取

    使用rocketmq的大体消息发送过程如下: 在前面已经分析过MQ的broker接收生产者客户端发过来的消息的过程,此文主要讲述订阅者获取消息的过程,或者说broker是怎样将消息传递给消费者客户端的 ...

  5. ⑥NuPlayer播放源码分析之DecoderBase分析

    NuPlayer播放源码分析之DecoderBase分析 [时间:2017-02] [状态:Open] [关键词:android,nuplayer,开源播放器,播放框架,DecoderBase,Med ...

  6. linux内核中socket的创建过程源码分析(详细分析)

    1三个相关数据结构. 关于socket的创建,首先需要分析socket这个结构体,这是整个的核心. 104 struct socket { 105         socket_state       ...

  7. 安卓脱壳&&协议分析&&burp辅助分析插件编写

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前言 本文以一个 app 为例,演示对 app脱壳,然后分析其 协 ...

  8. 编译原理(六)自底向上分析之LR分析法

    自底向上分析之LR分析法 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 基本概念 1. LR分析:从左到右扫描(L)自底向上进行规约(R),是规范规约,也即最右推导(规范推导) ...

  9. 常用 Java 静态代码分析工具的分析与比较

    常用 Java 静态代码分析工具的分析与比较 简介: 本文首先介绍了静态代码分析的基 本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBu ...

随机推荐

  1. gRPC在 ASP.NET Core 中应用学习

    一.gRPC简介: gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2 ...

  2. ArrayList 、Vector 和 LinkedList 有什么区别?

    ArrayList.Vector .LinkedList 类均在java.util 包中,均为可伸缩数组,即可以动态改变长度的数组. ArrayList 和 Vector 都是基于存储元素的 Obje ...

  3. wget 爬取网站网页

    相应的安装命名 yum -y install wget yum -y install setup yum -y install perl wget -r   -p -np -k -E  http:// ...

  4. HDU(1420)Prepared for New Acmer(JAVA语言)【快速幂模板】

    思路:快速幂裸题. //注意用long,否则会超范围 Problem Description 集训进行了将近2个礼拜,这段时间以恢复性训练为主,我一直在密切关注大家的训练情况,目前为止,对大家的表现相 ...

  5. 一个软件工程师的硬件修养:ESP8266 入门(普通动感单车-变智能)

    前言 一直在开发软件.今日突然心血来潮想尝试一下硬件. 于是就买了这样一个板子: 买的淘宝上大佬帮忙找的一个套装. 除了板子之外还有一些线和其他配件:温湿度传感器,气压传感器,光线传感器,小屏幕. 板 ...

  6. python中gzip模块的使用

    gzip模块能够直接压缩和解压缩bytes-like类型的数据,同时也能实现对应格式文件的压缩与解压缩 一.数据压缩与解压缩 压缩 函数-gzip.compress(data, compresslev ...

  7. 封装一个postMessage库,进行iframe跨域交互

    这是近期个人在开发chrome插件时的其中一个小总结.还有很多没有总结出来.因为目前插件还在迭代中,(herry菌插件,用于B站C站),属于个人业余的一个小项目.还有很多功能没有实现,以及还需要再看能 ...

  8. 第17 章 : 深入理解 etcd:etcd 性能优化实践

    深入理解 etcd:etcd 性能优化实践 本文将主要分享以下五方面的内容: etcd 前节课程回顾复习: 理解 etcd 性能: etcd 性能优化 -server 端: etcd 性能优化 -cl ...

  9. jd的艺术

    我看最近的狗东的ldz很火哈.所以我也来凑个热闹发个教程. 准备工作 1.一台openwrt系统设备 2.一个脑子 3.一双手 话不多说,开始吧! 步骤 一.链接N1(你的设备) 这里需要一款ssh工 ...

  10. JProfiler使用说明及常用案例分析

    1 配置远程连接 (1)启动JProfiler,选择Attach to a running JVM (2)选择Quick Attach,然后选择On another computer,然后选择Edit ...