逆向与分析-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 ...
随机推荐
- ES系列(一):编译准备与server启动过程解析
ES作为强大的和流行的搜索引擎服务组件,为我们提供了方便的和高性能的搜索服务.在实际应用中也是用得比较爽,但如果能够更深入一点.虽然网上有许多的文章已经完整说明,ES是如何如何做到高性能,如何做到高可 ...
- pandas函数的使用
一.Pandas的数据结构 1.Series Series是一种类似与一维数组的对象,由下面两个部分组成: values:一组数据(ndarray类型) index:相关的数据索引标签 1)Serie ...
- 如何强制删除一个apk
有些apk安装完后无法卸载,现在收集了一些方法,以及个人的一些手段. 1. 假设该app名为ketech,安装包名为ketech.apk. 2. 查看/data/app里面是否有名称包含ketech的 ...
- 在go中通过cmd调用python命令行参数量级过大问题解决
问题描述如下: 在go中使用cmd调用python命令行 cmd := exec.Command("python", "dimine/Kriging/matrix.py& ...
- java例题_12 奖金问题(暴力破解)
1 /*12 [程序 12 计算奖金] 2 题目:企业发放的奖金根据利润提成. 3 利润I低于或等于 10 万元时,奖金可提 10%: 4 利润高于 10 万元,低于 20 万元时,低于 10 万元的 ...
- Android Stuio让我濒临崩溃的bug之cause: unable to find valid certification path to requested target
•问题描述 像往常一样,打开 $android studio$ 开启愉快的开发之旅: 写着写着,右下角弹出一个对话,说 $android studio$ 有新版本可更新: 有新版本为何不用,果断点击 ...
- 对于api接口的爬虫,通常的解决方法
对于api接口的爬虫,通常的解决方法: 依靠爬虫功能的IP库 SDK 源站用不同的状态码进行打标,用户登录账号,登录成功返回200,登录失败返回其他状态码.
- ON DUPLICATE KEY UPDATE作用
ON DUPLICATE KEY UPDATE作用 先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑 语句的作用,当insert已经存在的记录时,执行Updat ...
- java中switch的用法
switch关键字对于多数java学习者来说并不陌生,由于笔试和面试经常会问到它的用法,这里做了一个简单的总结: 能用于switch判断的类型有:byte.short.int.char(JDK1.6) ...
- Jsoup-基于Java实现网络爬虫-爬取笔趣阁小说
注意!仅供学习交流使用,请勿用在歪门邪道的地方!技术只是工具!关键在于用途! 今天接触了一款有意思的框架,作用是网络爬虫,他可以像操作JS一样对网页内容进行提取 初体验Jsoup <!-- Ma ...