为什么安装qq2014qq打字会出现表情C:\progfam files\tencent\qq\bin

后使用快捷导航没有帐号?
见习护卫, 积分 6, 距离下一级还需 94 积分
0 盾15 币帖子
仅工作人员可见
版本号(可选):
操作系统(可选):
电脑 没法查找并且修复补丁 导致安装QQ出现提示窗口:“Tencent\QQ\Bin\Tencentdl.exe 文件没有写入权限,无法正常安装。”已经尝试很多次安装都是失败的。请收到后尽快回复关于系统问题的解决。谢谢。
安币&&14685
130 盾14685 币帖子
您好,请问您指的是卫士漏洞修复出现异常了么,对于软件无法安装的问题,请您直接软件方协助您解决,工作人员已经添加您的QQ,烦请关注,感谢您的反馈。
安币&&12659
180 盾12659 币帖子
您好,我们的工作人员已经通过回复/添加QQ等方式尝试联络您,但您目前仍未回应,如果您关注到此回复,请您尝试通过(请将#替换为@)和我们取得联系,感谢您的反馈!
见习护卫, 积分 2, 距离下一级还需 98 积分
0 盾12 币帖子
怎么办,我也安装不上QQ
&请您直接通过软件方论坛进行反馈&
安币&&14685
130 盾14685 币帖子
yjkkd 发表于
怎么办,我也安装不上QQ
请您直接通过软件方论坛进行反馈
我也安装不了怎么办
&请留下您的qq,我们帮您看下&
安币&&31724
0 盾31724 币帖子
游客 42.101.18.x 发表于
我也安装不了怎么办
请留下您的qq,我们帮您看下
&我也安装不了
见习护卫, 积分 6, 距离下一级还需 94 积分
0 盾16 币帖子
怎么办,我也安装不上QQ
见习护卫, 积分 6, 距离下一级还需 94 积分
0 盾16 币帖子
怎么办,我也安装不上QQ& &
见习护卫, 积分 6, 距离下一级还需 94 积分
0 盾16 币帖子
c:/pr0gramFiles\Tencent\QQ\Bin\Tencentdl.exe文件没有写入权限,无法正常安装。什么东西
&请您直接通过软件方论坛进行反馈&
参加【那些年我们看过的电视】活动,获得的奖励
有了熊孩子勋章,就表示你是百度粉丝团的一员哦!
捍卫权益,全民行动,揭露360恶意行为活动勋章
&2016 Baidu |& QQScLauncher逆向分析
QQScLauncher逆向分析
QQScLauncher逆向分析
逆向版本:QQ2011正式版(2425)
逆向目的:只是感兴趣,没有任何其他意图
版权声明:本文档由代码疯子整理,在保留本文档版权声明和原始出处的前提下欢迎转载!
需要工具:IDA Pro、Ollydbg
正文内容:
什么是QQScLauncher?在QQ最新版(QQ2011正式版)中加入了不少新功能,如手写、视频群聊、语音输入等,另外还有一个功能是可以把好友拖放到桌面上,点击就可以直接与之进行聊天,处于好奇,本人对他进行了一下逆向,于是便有本文。
先去准备两个QQ小号(、,不是必须的,这里显示,所以用小号)
先随便把一个好友拖放到桌面上,会产生一个快捷方式,查看这个快捷方式的属性,得到目标内容,会发现一个叫做QQScLauncher的程序:
&C:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe& /uin:<span style="color: #202 /quicklunch:
1D0BEC54CBEE33C09ED6FEA3FB0E8EF176A599C09696DF
可以看到,这里是通过一个叫做QQScLauncher.exe的程序来启动的,uin参数指定自己的QQ号码,quicklaunch肯定就是用于鉴别好友用的了。
用PEiD对QQScLauncher.exe进行查壳,结果什么也没查到,估计是我的PEiD数据库太久了,用File Format Identifier查出来是Visual C++ 2005 Release -> Microsoft。其实是什么不要紧,拿起IDA逆一逆就没什么了。
下面使用IDA对其进行简单的分析,可以看到一个获取命令行参数/uin和/quicklunch的过程:
.text: sub
.text: mov
eax, dword_403000
.text:0040100B xor
.text:0040100D mov
&#91;esp+270h+var_4&#93;, eax
.text: mov
eax, ds:__argc
; 命令行参数个数argc的地址
.text: push
.text:0040101A push
.text:0040101B push
.text:0040101C push
.text:0040101D xor
.text:0040101F xor
.text: cmp
&#91;eax&#93;, edi
; 看看是不是正常启动(三个参数)
.text: mov
&#91;esp+280h+var_270&#93;, edi ; 存放QQ号的位置
.text: mov
&#91;esp+280h+var_26C&#93;, edi ; 0/1暗示QQ号是否找到
.text:0040102B mov
&#91;esp+280h+var_268&#93;, edi ; 0/1暗示quicklunch是否找到
.text:0040102F jle
loc_40112A
; 不是正常启动则跳转
.text: mov
ebx, ds:wcsncmp
; 存储wcsncmp函数的地址,后面会经常用到
.text:0040103B jmp
short loc_401040
.text:0040103B ; ---------------------------------------------------------------------------
.text:0040103D align 10h
.text: loc_401040:
; CODE XREF: wWinMain&#40;x,x,x,x&#41;+3Bj
; wWinMain&#40;x,x,x,x&#41;+93j
.text: mov
ecx, ds:__wargv
; 命令行参数的地址
.text: mov
edx, &#91;ecx&#93;
; 取得第一个字符串的地址
.text: mov
esi, &#91;edx+edi*4&#93;
; 取得第一个字符串的字符
; 第一次将取到C:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe
.text:0040104B push
; MaxCount
.text:0040104D push
offset Str2
.text: push
.text: call
ebx ; wcsncmp
; 调用wcsncmp比较字符串,看前五个字符是否是/uin:
.text: add
; 平衡wcsncmp堆栈
.text: test
; 找到时返回0,否则返回非0值
.text:0040105A jnz
short loc_40106D
; 没有找到&/uin:&时跳转
.text:0040105C add
; 0xA=10,跳过前十个字节,长度正好是/uin:的Unicode长度
.text:0040105F mov
&#91;esp+280h+var_270&#93;, esi ; 把QQ号码存下来
.text: mov
&#91;esp+280h+var_26C&#93;, 1 ; 表示QQ号码已经找到
.text:0040106B jmp
short loc_401089
.text:0040106D ; ---------------------------------------------------------------------------
.text:0040106D
.text:0040106D loc_40106D:
; CODE XREF: wWinMain&#40;x,x,x,x&#41;+5Aj
.text:0040106D push
; MaxCount
.text:0040106F push
offset aQuicklunch
; &/quicklunch:&
.text: push
.text: call
ebx ; wcsncmp
; 调用wcsncmp比较字符串,看前12个字符是否是/quicklunch:
; 看到这我石化了,quicklunch?快餐么?
.text: add
.text:0040107A test
; 看是否找到quicklunch
.text:0040107C jnz
short loc_401089
; 没有找到则跳转
.text:0040107E lea
ebp, &#91;esi+18h&#93;
; quicklunch值的地址由ebp保存
.text: mov
&#91;esp+280h+var_268&#93;, 1 ; 表示quicklunch已经找到
.text: loc_401089:
; CODE XREF: wWinMain&#40;x,x,x,x&#41;+6Bj
; wWinMain&#40;x,x,x,x&#41;+7Cj
.text: mov
eax, ds:__argc
; 命令行参数个数argc的地址
.text:0040108E add
; 准备取得下一个命令行参数
.text: cmp
edi, &#91;eax&#93;
; 看看命令行参数是否已经取完
short loc_401040
; 没有取完则调回去继续取
.text: xor
对于上面的代码中蓝色的行,我们是如何知道他的意义的呢?看下面的几行代码就知道了:(这里贴代码工具看不到蓝色,读者可以下载文章末尾的word文档)
.text: xor
; ebx寄存器清零
.text: cmp
&#91;esp+280h+var_268&#93;, ebx ; 从这里的比较可以知道这几个字段的意义
.text:0040109B jz
loc_40112A
.text: cmp
&#91;esp+280h+var_26C&#93;, ebx
loc_40112A
可以看到,这里判断quicklunch和QQ号是否找到,没找到就跳转;跳转到的地址和上面命令行参数个数不是3是一样的(绿色的代码行)。
接下来,程序生成一个特定的字符串,格式为&#8221;qqexchangewnd_shortcut_prefix_&#8243;,后面那几位就是QQ号码了。然后通过FindWindow来查找窗口,调用代码如下:
; /Title = &qqexchangewnd_shortcut_prefix_&
;|5b3838f5-0c81-46d9-a4c0-6ea28ca3e942
004010EA CALL DWORD PTR DS:&#91;&&USER32.FindWindowW&&#93;
; \FindWindowW
如果FindWindow返回非零值,则接下来的代码逻辑是计算出quicklunch的长度,代码如下:
.text: mov
; 让ecx指向quicklunch
.text: mov
&#91;esp+280h+ProcessInformation&#93;, ebx
.text:004010FA lea
esi, &#91;ecx+2&#93;
; esi略过quicklunch第一个字符
.text:004010FD lea
ecx, &#91;ecx+0&#93;
.text: loc_401100:
; CODE XREF: wWinMain&#40;x,x,x,x&#41;+109j
.text: mov
dx, &#91;ecx&#93;
; 找到ECX中第一个'\0'
; 这里其实就是求字符串长度吧
.text: add
.text: cmp
.text: jnz
short loc_401100
.text:0040110B sub
; 计算出字符串的字节数
.text:0040110D sar
; 因为是Unicode,所以字节数除以2
然后,程序会调用SendMessage发送WM_COPYDATA消息:
.text: push
; lParam(指向COPYDATASTRUCT结构的指针)
.text: push
; wParam(这里是0)
.text: push
; Msg(就是WM_COPYDATA)
.text:0040111B push
; hWnd(接收方窗口句柄,上面FindWindow的返回值)
.text:0040111C mov
&#91;esp+290h+hObject&#93;, edx ; 填充COPYDATASTRUCT.cbData
.text: mov
&#91;esp+290h+var_25C&#93;, ebp ; 填充COPYDATASTRUCT.lpData
.text: call
ds:SendMessageW
; 调用SendMessage
可以看到上面SendMessage时wParam用了0,这里本来应该是发送方的窗口句柄值(我猜wParam的字段是为了通知接收方消息是从哪里传来的,这里接收方不会反过来和发送方通信,所以填0也不影响。有兴趣自己测试吧,这里懒得验证了)。
之后,QQ就可以弹出聊天窗口了(这里的逻辑就由QQ负责了)。
如果QQ没有开启,那么上面的FindWindow调用就返回NULL,那么将进入另一个分支。来到如下代码:
.text:0040114A loc_40114A:
; CODE XREF: wWinMain&#40;x,x,x,x&#41;+F2j
.text:0040114A call
GetQQInstallPath
; 如果QQ没有开启,则跳转到这里
这里的函数名字是我自己改的,看代码逻辑可以知道他是用来获取QQ安装目录的:
.text: GetQQInstallPath proc near
; CODE XREF: wWinMain&#40;x,x,x,x&#41;:loc_40114Ap
.text: push
; quicklunch
.text: push
; unsigned int
.text: call
??2@YAPAXI@Z
; operator new&#40;0x020A&#41;分配空间
.text:004012EB add
.text:004012EE mov
.text: push
.text: push
; lpFilename
.text: push
.text: mov
word ptr &#91;esi&#93;, 0
.text:004012FD call
ds:GetModuleFileNameW ; 得到当前进程的路径
.text: push
; 字符'\\'
.text: push
.text: call
ds:wcsrchr
; wcsrchr返回字符在字符串中最后一次出现的位置
.text:0040130C add
.text:0040130F test
short loc_401338
; 没有找到'\\'时跳转
.text: add
; eax指向下一个字符
.text: mov
.text: sub
; 前面一段字符的字节数
.text:0040131A push
offset aQq_exe
; &QQ.exe&
.text:0040131F sar
; 算术右移一位,得到长度
.text: mov
.text: push
.text:0040132B sub
.text:0040132D push
; SizeInWords
.text:0040132E push
; Dst(替换QQScLauncher.exe)
.text:0040132F call
ds:swprintf_s
; 调用swprintf_s
.text: add
.text: loc_401338:
; CODE XREF: GetQQInstallPath+31j
.text: mov
.text:0040133A pop
.text:0040133B retn
.text:0040133B GetQQInstallPath endp
上面先通过new来分配一段空间,然后调用GetModuleFileName来获取当前进程的路径,也就是:
C:\Program Files\Tencent\QQ\Bin\QQScLauncher.exe
然后通过wcsrchr来查找’\’字符,从而eax指向\ QQScLauncher.exe,eax加上2(一个Unicode字符长度),于是eax指向QQScLauncher.exe,后面调用swprintf_s时第一个参数直接填入eax即可。
随后程序会调用一个函数来生成一些CreateProcess需要的一些参数,这个过程和前面分析的过程差不多,所以不再赘述。之后就是通过CreateProcess来创建一个QQ.exe进程了。
|ModuleFileName = &C:\Program Files\Tencent\QQ\Bin\QQ.exe&
|CommandLine = &/uin:
/quicklunch:1D0BEC54CBEE33C09ED6FEA3FB0E8EF176A599C09696DF&
|pProcessSecurity = NULL
|pThreadSecurity = NULL
|InheritHandles = FALSE
|CreationFlags = 0
|pEnvironment = NULL
|CurrentDir = NULL
|pStartupInfo = 0012FCA4
\pProcessInfo = 0012FC94
可以看到这里把QQ号和好友的识别符作为命令行参数传给了QQ.exe。如果启动QQ.exe失败则会继续尝试使用CreateProcess来启动QQ,直到启动成功,之后程序的逻辑也就结束了。
分析到这里,可以看出QQScLauncher.exe的内部逻辑已经很清晰了,这个程序没有经过特殊处理,很适合像我这样的新手分析,有兴趣的话还可以自己写一个QQScLauncher.exe。
有意思的是命令行参数竟然写成了quicklunch……至于QQ是如何通过那一串16进制来找到QQ好友的,暂时没有找到地方,有兴趣的朋友可以试着看一下。
(本文由代码疯子原创,原文发表于看雪论坛,)
本文PDF文档和IDB文件下载:(解压密码:www.programlife.net)
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!
您可能对下面的文章也感兴趣:
(推荐使用
(关于作者 Wins0n/代码疯子)
免责声明:本站所有内容仅代表个人观点,无法保证100%准确,如有错误请联系指正,谢谢!
2017年四月 &(1)
2016年十月 &(1)
2016年三月 &(1)
2016年二月 &(1)
2016年一月 &(1)
2015年十月 &(1)
2015年六月 &(2)
2015年四月 &(1)
2015年一月 &(1)
2014年十一月 &(5)
2014年十月 &(1)
2014年九月 &(1)
2014年八月 &(2)
2014年七月 &(3)
2014年六月 &(4)
2014年四月 &(1)
2014年三月 &(2)
2014年二月 &(1)
2014年一月 &(1)
2013年十二月 &(1)
2013年十一月 &(2)
2013年十月 &(2)
2013年九月 &(3)
2013年八月 &(2)
2013年七月 &(3)
2013年六月 &(2)
2013年五月 &(1)
2013年四月 &(4)
2013年三月 &(2)
2013年二月 &(1)
2013年一月 &(2)
2012年十二月 &(5)
2012年十一月 &(3)
2012年十月 &(3)
2012年九月 &(4)
2012年八月 &(4)
2012年七月 &(3)
2012年六月 &(3)
2012年五月 &(6)
2012年四月 &(4)
2012年三月 &(6)
2012年二月 &(4)
2012年一月 &(7)
2011年十二月 &(9)
2011年十一月 &(9)
2011年十月 &(13)
2011年九月 &(18)
2011年八月 &(8)
2011年七月 &(7)
2011年六月 &(16)
2011年五月 &(13)
2011年四月 &(21)
2011年三月 &(22)
2011年二月 &(15)
2011年一月 &(7)
2010年十二月 &(23)
2010年十一月 &(33)
2010年十月 &(35)
2010年九月 &(42)}

我要回帖

更多关于 macbook proqq音乐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信