首页
社区
课程
招聘
[原创] 支付宝COM组件浅析
发表于: 2014-1-8 17:59 27014

[原创] 支付宝COM组件浅析

2014-1-8 17:59
27014
Private Sub Command1_Click()
    SendMessage &H10B90, WM_SETTEXT, 0, "bjbl"
End Sub
77D18A80 user32.> $  8BFF          mov edi,edi
77D18A82          .  55            push ebp
77D18A83          .  8BEC          mov ebp,esp
77D18A85          .  56            push esi
77D18A86          .  FF75 08       push dword ptr ss:[ebp+8]
77D18A89          .  E8 38000000   call user32.77D18AC6
77D18A8E          .  8BF0          mov esi,eax
77D18A90          .  85F6          test esi,esi
77D18A92          .  74 28         je short user32.77D18ABC
77D18A94          .  E8 BCFBFFFF   call user32.77D18655
77D18A99          .  3BF0          cmp esi,eax
77D18A9B          .^ 0F85 49FCFFFF jnz user32.77D186EA
77D18AA1          .  8B4D 0C       mov ecx,dword ptr ss:[ebp+C]
77D18AA4          .  85C9          test ecx,ecx
77D18AA6          .  74 0B         je short user32.77D18AB3
77D18AA8          .  64:A1 1800000>mov eax,dword ptr fs:[18]
77D18AAE          .  8B40 20       mov eax,dword ptr ds:[eax+20]
77D18AB1          .  8901          mov dword ptr ds:[ecx],eax
77D18AB3          >  64:A1 1800000>mov eax,dword ptr fs:[18]
77D18AB9          .  8B40 24       mov eax,dword ptr ds:[eax+24]
77D18ABC          >  5E            pop esi
77D18ABD          .  5D            pop ebp
77D18ABE          .  C2 0800       retn 8
77D18A9B          .^\0F85 49FCFFFF jnz user32.77D186EA
77D186EA          > /8B75 0C       mov esi,dword ptr ss:[ebp+C]
77D186ED          . |85F6          test esi,esi
77D186EF          . |74 0C         je short user32.77D186FD
77D186F1          . |6A 00         push 0
77D186F3          . |FF75 08       push dword ptr ss:[ebp+8]
77D186F6          . |E8 E0FFFFFF   call user32.77D186DB
77D186FB          . |8906          mov dword ptr ds:[esi],eax
77D186FD          > |6A 01         push 1
77D186FF          . |FF75 08       push dword ptr ss:[ebp+8]
77D18702          . |E8 D4FFFFFF   call user32.77D186DB
77D18707          . |E9 B0030000   jmp user32.77D18ABC
77D1870C          $ |55            push ebp
77D1870D          . |8BEC          mov ebp,esp
77D1870F          . |56            push esi
77D18710          . |57            push edi
77D18711          . |53            push ebx
77D18712          . |68 CDABBADC   push DCBAABCD
77D18717          . |56            push esi
77D18718          . |FF75 18       push dword ptr ss:[ebp+18]
77D1871B          . |FF75 14       push dword ptr ss:[ebp+14]
77D1871E          . |FF75 10       push dword ptr ss:[ebp+10]
77D18721          . |FF75 0C       push dword ptr ss:[ebp+C]
77D18724          . |64:A1 1800000>mov eax,dword ptr fs:[18]
77D1872A          . |8088 B40F0000>or byte ptr ds:[eax+FB4],1
77D18731          . |FF55 08       call near dword ptr ss:[ebp+8]
77D18734          . |64:8B0D 18000>mov ecx,dword ptr fs:[18]
77D1873B          . |80A1 B40F0000>and byte ptr ds:[ecx+FB4],0
77D18742          . |817C24 04 CDA>cmp dword ptr ss:[esp+4],DCBAABCD
77D1874A          . |0F85 607C0200 jnz user32.77D403B0
77D18750          > |83C4 08       add esp,8
77D18753          . |5B            pop ebx
77D18754          . |5F            pop edi
77D18755          . |5E            pop esi
77D18756          . |5D            pop ebp
77D18757          . |C2 1400       retn 14
77D18731          . |FF55 08       call near dword ptr ss:[ebp+8]
References in user32:.text to constant DCBAABCD
Address    Disassembly  
77D186F3   push dword ptr ss:[ebp+8]
77D18712   push DCBAABCD
77D18742   cmp dword ptr ss:[esp+4],DCBAABCD
77D403B0   cmp dword ptr ss:[esp],DCBAABCD
Stack ss:[0013EA90]=06740FB0
Stack ss:[0013E464]=75F4348B (BROWSEUI.75F4348B)
Executable modules
Base       Size        Entry       Name
07BF0000   00098000   07C852D0   Alidcp.dll
07A30000   000BC000   07AE90E0   aliedit.dll
07070000   0001D000   0707820C   itrusenroll.dll
10000000   000C5000   100C2640   npAliSecCtrl.dll
070A0000   00021000   070B19AB   pta.dll
00400000   00019000   00402451   IEXPLORE.EXE
[ebp+8]>=7a30000&[ebp+8]<=7AEC000
[ebp+8]>=7bf0000&[ebp+8]<=7C88000

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 5
支持
分享
最新回复 (46)
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
厉害…………
2014-1-8 18:19
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
3
...SetWindowText直接设置密码不可能有效,想通过这种方法来实现自动登陆也是不可能的。
UI的表现跟真实的数据走的是两条完全不同的通道,别不要折腾UI了。
2014-1-8 18:30
0
雪    币: 967
活跃值: (1138)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
Mark 一下
2014-1-8 18:37
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
5
可以实现的啊,
并不是单纯的发消息吖,
还是有patch 的.  
2014-1-8 18:41
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
6
你通过发消息到最终Edit控件显示出来这个过程,真正的密码数据并没有进入到支付宝中。

换个思路来说,正常使用支付宝的时候,支付宝的控件并不是在你点击登陆的时候去获取Edit中的密码的。
2014-1-8 18:51
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
7
你的意思是说无论怎样,都无法实现修改密码框?
2014-1-8 18:55
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
8
密码框可以修改啊,但是你修改密码框的目的是什么,单纯的为了改他的UI?
2014-1-8 18:59
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
9
比如我patch 他的组件.
或者 createremotethread 调用他的密码存储函数.
在直接 send wm settext "*****"
或者直接自己写个com组件,去替换他的.
等等,方法应该很多的.
你怎么会说不能修改呢.  
2014-1-8 18:59
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
10
最终结果当然是让他能正常登录~!
2014-1-8 19:00
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
11


不行~
2014-1-8 19:04
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
马云要找你喝茶了.............
2014-1-8 19:08
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
哦。围观八爷
2014-1-8 19:18
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
14
2014-1-8 19:25
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
15
换个思路吧  尝试模拟键盘输入  要低级一点
2014-1-8 19:27
0
雪    币: 1933
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
通常我不会时 都是帮顶下
2014-1-8 20:06
0
雪    币: 838
活跃值: (2822)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
17
为啥不可能呢,这控件不是在浏览器网页密码框上画了一个等大的窗口,然后处理消息的吗?找到窗体句柄不一样SetWindowText的啊。遍历浏览器的子窗体也能找到窗口句柄把
2014-1-8 22:05
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
18
他的意思是 setwindowtext 之后,无法正常登录.
其实是可以登录的~
2014-1-8 22:37
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
这个可以有的
2014-1-8 22:51
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
20
1.如果你在patch了支付宝的模块之后可以登陆,请楼主放一个成功登陆的GIF出来
2.如果让我来设计密码控件,我能想到的一个基本架构如图。



数据要分层处理
UI表现作为一个比较独立且层次较高的模块,存在的意义仅仅是提供一个输入点以及给用户一个反馈,用户一旦找到这个点就可以发起键盘输入事件,而键盘输入事件作为整个系统的原始驱动数据开始进入,密码控件体系应该尽早的(越早越好)处理最最原始的用户输入键盘事件,并且解码,然后再加密存储。在这之后并没有结束,应为还有更高层次的模块需要接收这些键盘输入事件,从数据获取的角度看,UI模块是安全体系的一个累赘,为了让他能处理键盘输入事件给用户一个反馈,就不得不冒着数据被截获的风险继续向上传递数据,所以如何做?因为密码控件体系已经获取到想要的信息了,那他就可以替换掉用户输入的真实的键盘输入事件了,这样既保护了用户输入的安全,又可以驱动UI模块给用户一个反馈。

当用户登陆的时候,登陆模块绝不会从UI模块中取用户输入的密码,而是直接使用内存中已经存储好的加密的密码。

所以折腾UI根本就无法改变登陆模块所使用的真正的密码数据,这样如何能登陆成功?

虽然你突破了支付宝密码控件对进程外消息的阻拦,能够修改密码框的文字,但是如果你能成功登陆,那我就要转而去嘲笑支付宝密码控件的架构以及数据保护方式了。
上传的附件:
2014-1-8 23:48
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
唉……我想到一个古老的方法……
在密码框上画个透明的窗口……
然后再模拟按键……把焦点交给网页……

顺便说句……对于支付宝直接记录就行了……反正他保护也不强
2014-1-9 00:13
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
肯定是可行的……在250之类的没推出网银保护前……页面篡改可以风行一时啊
2014-1-9 00:15
0
雪    币: 838
活跃值: (2822)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
23
额。。 插件注入代码调用js来登录呢?!
2014-1-9 00:46
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我弄过,监控浏览器,拼命去掉那个安全控件登陆的勾,然后挂载事件就能得到密码了
2014-1-9 04:39
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
浏览器没有什么子窗口,那些是DOM对象。通过javascript遍历的。
如果是支付宝控件的话,就是通过ActivitX产生的控件。也就是OLE2的COM模型中的一种。。具体处理消息的方式我不知。
2014-1-9 08:53
0
游客
登录 | 注册 方可回帖
返回
//