逆向与分析-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 ...
随机推荐
- Shiro 反序列化漏洞利用
环境搭建 docker pull medicean/vulapps:s_shiro_1 docker run -d -p 80:8080 medicean/vulapps:s_shiro_1 # 80 ...
- 【java框架】MyBatis(7)--MyBatis注解开发
1.MyBatis注解开发 1.1.Lombok的基本使用 Lombok是SpringBoot2.1.X版本与IDEA官方支持的一个插件,它是为简化POJO类中繁杂重复代码:geter/setter/ ...
- Blind Super-Resolution Kernel Estimation using an Internal-GAN 论文解读
背景与思路来源 目前 SR 模型中合成 LR 使用的模糊核问题 目前大多数 SR 的 model 都是用的合成下采样图片来进行训练的,而这些合成的图片常常使用的是 MATLAB 里面的 imresiz ...
- js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】
[生成规定数量不重复随机数] function creatRandom( num ){ var randomLen = num, ranArr = [], thisRan = null, whileO ...
- InlineHook
前言 IATHOOK局限性较大,当我们想HOOK一个普通函数,并不是API,或者IAT表里并没有这个API函数(有可能他自己LoadLibrary,自己加载的),那我们根本就从导入表中找不到这个函数, ...
- 基于Hive进行数仓建设的资源元数据信息统计:Hive篇
在数据仓库建设中,元数据管理是非常重要的环节之一.根据Kimball的数据仓库理论,可以将元数据分为这三类: 技术元数据,如表的存储结构结构.文件的路径 业务元数据,如血缘关系.业务的归属 过程元数据 ...
- Redis持久化——内存快照(RDB)
最新:Redis持久化--如何选择合适的持久化方式 最新:Redis持久化--AOF日志 最新:Redis持久化--内存快照(RDB) 一文回顾Redis五大对象(数据类型) Redis对象--有序集 ...
- WordPress的SEO优化技巧
世界上大约有30%的网站都是由Wordpress搭建的,因为Wordpress自身构架清晰,代码规范,且网页评论直接书写在整个页面里,能够被搜索引擎检索到,因此对搜索引擎很友好.但有时候还是会出现只被 ...
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.1 引言
2.1 引言 在上一章中,介绍了降压变换器作为降低直流电压的一种方法,其仅使用非耗散开关,电感器和电容器.开关状态变换产生一个矩形波形\(v_{s}(t)\),如图2.1所示.当开关位于位置1时,该电 ...
- 【ProLog - 3.0 进阶:递归】
[ProLog中的递归] 如果递归中的一个或多个规则引用谓词本身,则对该谓词使用"递归"定义 在使用时,这往往像一条食物链或者族谱的构成(A的爸爸的爸爸,即A的爷爷,是A的长辈) ...