注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

调试一下TDS登录密码加密  

2014-04-28 15:28:36|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

用wireshark抓了下mssql登录,可以直接看到登录的帐号密码,但是密码是wireshark解过密的。

就想了解一下这个密码是如何加密的。

可以下断点ws2_32!send第二次断下即可看到加过密的内容,可以从后往前回溯,或者从user32!GetDlgItemTextW开始

往后跟踪都可以达到。

我用了后者,这样不用试多次,只要一步一步跟踪内存的读写即可,如果有赋值操作,再下那个地址的

内存读写断点,重复这样即可达到。

USER32!GetDlgItemTextW+0x32:
77d2432a c21000          ret     10h
0:000> du 000bcc0e
000bcc0e  "11112222"

0:000> ba r2 000bcc0e

msvcrt!wcscpy+0xe:
77c17ea2 668901          mov     word ptr [ecx],ax        ds:0023:000b326e=0000
0:000> kn 4
 # ChildEBP RetAddr 
00 0007ca9c 4b47311e msvcrt!wcscpy+0xe
01 0007cad4 4b4732c8 sqlsrv32!ConnectIt+0x79
02 0007cafc 4b4c3020 sqlsrv32!DoDlgConnection+0x157
03 0007cfdc 77d18734 sqlsrv32!WizIntSecurityDlgProc+0x813
0:000> ba r2 000b326e

msvcrt!wcscpy+0xe:
77c17ea2 668901          mov     word ptr [ecx],ax        ds:0023:0007c3d0=0000
0:000> kn 4
 # ChildEBP RetAddr 
00 0007c2f8 4b47bf59 msvcrt!wcscpy+0xe
01 0007c51c 4b472e49 sqlsrv32!Is70LoginRequired+0x51a
02 0007cab8 4b47318e sqlsrv32!OpenServerConnection+0x4e6
03 0007cad4 4b4732c8 sqlsrv32!ConnectIt+0x148
0:000> ba r2 0007c3d0
sqlsrv32!EncryptPWD+0x12:
4b47ae71 8ad0            mov     dl,al
0:000> kn 4
 # ChildEBP RetAddr 
00 0007c2f8 4b47bf78 sqlsrv32!EncryptPWD+0x12
01 0007c51c 4b472e49 sqlsrv32!Is70LoginRequired+0x539
02 0007cab8 4b47318e sqlsrv32!OpenServerConnection+0x4e6
03 0007cad4 4b4732c8 sqlsrv32!ConnectIt+0x148

从上面看到一个很可能的函数,调试后确认就是这个加密函数!

==================================

sqlsrv32!EncryptPWD:
4b47ae5f 8bff            mov     edi,edi
0:000> dd esp l4
0007c2fc  4b47bf78 0007c3d0 00000008 00000000
0:000> db 0007c3d0 l8
0007c3d0  [32 00 32 00 33 00 33 00]                          2.2.3.3.
0:000> pt
eax=0007c300 ebx=00b481a4 ecx=0007c3d8 edx=000b32a5 esi=000b3018 edi=0007c570
eip=4b47ae86 esp=0007c2fc ebp=0007c51c iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
sqlsrv32!EncryptPWD+0x27:
4b47ae86 c20800          ret     8
0:000> db 0007c3d0 l8
0007c3d0  [86 a5 86 a5 96 a5 96 a5] 

==================================

0:000> uf sqlsrv32!EncryptPWD
sqlsrv32!EncryptPWD:
4b47ae5f 8bff            mov     edi,edi
4b47ae61 55              push    ebp
4b47ae62 8bec            mov     ebp,esp
4b47ae64 56              push    esi
4b47ae65 8b750c          mov     esi,dword ptr [ebp+0Ch]
4b47ae68 85f6            test    esi,esi
4b47ae6a 7418            je      sqlsrv32!EncryptPWD+0x25 (4b47ae84)

sqlsrv32!EncryptPWD+0xd:
4b47ae6c 8b4d08          mov     ecx,dword ptr [ebp+8]

sqlsrv32!EncryptPWD+0x10:
4b47ae6f 8a01            mov     al,byte ptr [ecx]
4b47ae71 8ad0            mov     dl,al
4b47ae73 c0ea04          shr     dl,4
4b47ae76 c0e004          shl     al,4
4b47ae79 0ad0            or      dl,al
4b47ae7b 80f2a5          xor     dl,0A5h
4b47ae7e 8811            mov     byte ptr [ecx],dl
4b47ae80 41              inc     ecx
4b47ae81 4e              dec     esi
4b47ae82 75eb            jne     sqlsrv32!EncryptPWD+0x10 (4b47ae6f)

sqlsrv32!EncryptPWD+0x25:
4b47ae84 5e              pop     esi
4b47ae85 5d              pop     ebp
4b47ae86 c20800          ret     8

这个函数非常简单就是把每个字节交换一下高低位,再异或A5,就可以得到密文。

解密的话跟上面相反即可。

  评论这张
 
阅读(115)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017