逆向与分析-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 ...
随机推荐
- redis一句话木马控电脑
(1)在redis管理工具内写入木马并保存: 输入命令行: config set dbfilename shell.php set shell "<?php @assert($_P ...
- ZooKeeper 基本概念并介绍RPC中Netty和Zookeeper的使用
前言 ZooKeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper提供一个类似Linux文件系统的属性结构,每个节点可存储少量的内存文件,并提供每 ...
- FreeBSD 将降低对 i386 架构的支持力度
FreeBSD 开发团队宣布,从 FreeBSD 13.0 开始,对 i386 架构的支持级别将降级为 Tier 2,未来的 14.0 可能还将会在此基础上进一步降低对 i386 架构的支持.而对于 ...
- 24端口以太网FPGA的开发板
板卡架构 板载FPGA(K7-325T)处理24端口10/100/1000M以太网数据: FPGA外挂4Gbit的DDR3颗粒,最大支持800MHz: 板载CPU进行系统配置.管理,并与客户端软件通信 ...
- UI透明欺诈
判断是否存在的代码: private static boolean c(Activity paramActivity) { List localList = ((ActivityMan ...
- 阿里一面CyclicBarrier和CountDownLatch的区别是啥
引言 前面一篇文章我们<Java高并发编程基础三大利器之CountDownLatch>它有一个缺点,就是它的计数器只能够使用一次,也就是说当计数器(state)减到为 0的时候,如果 再有 ...
- 在ASP.NET Core中用HttpClient(五)——通过CancellationToken取消HTTP请求
用户向服务器发送HTTP请求应用程序页面是一种非常可能的情况.当我们的应用程序处理请求时,用户可以从该页面离开.在这种情况下,我们希望取消HTTP请求,因为响应对该用户不再重要.当然,这只是实际应用 ...
- 尝试做一个.NET简单、高效、避免OOM的Excel工具
Github : https://github.com/shps951023/MiniExcel 简介 我尝试做一个.NET简单.高效.避免OOM的Excel工具 目前主流框架大多将资料全载入到记忆体 ...
- OO_Unit1总结
OO的第一单元作业告一段落,这周是总结而不是码代码,甚至心中有点落空感.OO课给我的一周构建了一个完整的循环,从周二的作业发布到接下来几天的思考和构建程序,再到面向中测进行一部分的bug修复,最后到互 ...
- [源码分析] 分布式任务队列 Celery 多线程模型 之 子进程
[源码分析] 分布式任务队列 Celery 多线程模型 之 子进程 目录 [源码分析] 分布式任务队列 Celery 多线程模型 之 子进程 0x00 摘要 0x01 前文回顾 1.1 基类作用 1. ...