您的位置:首页 > Web前端

qq密码输入框保护组件TSSafeEdit中的花指令研究

2012-07-12 03:50 267 查看
看到了天易love的影响,也想写一点东西,和大家分享一些研究的心得体会,也算是做一个小小的笔记。

白菜贴,大牛飘过。

时间比较紧,先粗略地写一下,等晚上再详细补充。

TSSafeEdit是QQ的密码输入框保护组件,在Tencent\QQ\Bin目录下可以找到。

这个文件我已从2009年一直跟踪到现在


期间它的版本有过好几次更新,目前的最新版本应该是2011.4.7.1。

TSSafeEdit的代码中大量地使用了花指令,基本上,每一句正常代码之后都放有一个花指令。

像这样,

函数()

{

正常程序代码

花指令

正常程序代码

花指令

正常程序代码

花指令

正常程序代码

花指令

正常程序代码

}

这些花指令,给分析TSSafeEdit造成两方面的麻烦。

(1)在OD里调试时,大批的花指令扰乱了od的反汇编,当你滚动反汇编窗口时,里面的汇编指令经常会随之变化,影响了反汇编分析。

(2)含有这些花指令的函数,在IDA中反汇编会失败,因此不能被F5。

于是,我下决心把它们清理掉。经过仔细观察,发现TSSafeEdit里一共含有两种形式的花指令,分别是

/*

51 push ecx......①

E804000000 call xxx

??

??

EB10 jmp yyy......⑤

59 pop ecx......②

EB02 jmp a

??

??

83C102 add ecx, 2......③

EB02 jmp b

76

90

51 push ecx......④

C3 ret

??

??

59 pop ecx......⑥

*/

/*

51 push ecx......①

E806000000 call xxx

??

??

??

??

EB10 jmp yyy......⑤

59 pop ecx......②

EB02 jmp a

??

??

83C104 add ecx, 4......③

EB02 jmp b

76

90

51 push ecx......④

C3 ret

??

??

59 pop ecx......⑥

*/

执行到花指令时,执行流依次经过圆圈里标识的序号,从1到2,从2到3,...,直到6,之后执行6下面的正常程序代码。

其中,??是执行流不会经过的地方,所以可以是任意一个字节,可以把这里当作通配符。

根据这些特征,就可以用一个脚本把所有花指令都nop掉了。

这样,分析TSSafeEdit时,就没有以上两个障碍了。

另外,我们还可以学习腾讯的方法,把这些模型的花指令运用到自己的代码里,来保护自己的程序。

具体的我就不做了,大家可以自己去试试。

为了让大家更好地研究密码安全组件的设计原理,我提供一个TSSafeEdit v2011.4.7.1脱壳去花后的版本。

用它替换掉Tencent\QQ\Bin目录下的原始文件,再开始调试,你会发现模块里的所有代码都变得很清晰了,

有兴趣的朋友一起来玩玩吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: