QQ是大家喜欢的品牌,是众多腾讯高手的智慧结晶,它的安全性值得大家关注。昨天借助QQ联系上了一位十年前的好友,在此对腾讯深表感谢。利用了2天时间搞出了这个小程序,现奉上和大家共同学习。由于编写仓促,问题在所难免,请大家批评指正,谢谢!原理异常简单,稍后公布!

 附件为:演示程序,不断更新中。

鉴于大家对程序的原理比较感兴趣,特贴出如下:

   概括的讲qq的密码输入纯粹是一个加密解密的过程,其他都是一些辅助的反调试策略。我们
只有深入探究事物的本质,才能体会到无穷的乐趣,那就是逆向的魅力。

OD调试方法:
1、用OD打开qq2011Beta3;并运行出现登录窗口,如图1


2、在内存搜索FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 如图2,找到地址如图3




3、在内存搜索8B 5B 04 03 5D 10 定位到如图5,并且下个断点,该处代码如下,:
022F63C0    8BCB            MOV ECX,EBX
022F63C2    FF15 AC802F02   CALL DWORD PTR DS:[22F80AC]          
022F63C8    8B5B 04         MOV EBX,DWORD PTR DS:[EBX+4]  
022F63CB    035D 10         ADD EBX,DWORD PTR SS:[EBP+10]  //下个断点
022F63CE    EB 06           JMP SHORT TSSafeEd.022F63D6
022F63D0    8B1D A0802F02   MOV EBX,DWORD PTR DS:[22F80A0]         
022F63D6    8A03            MOV AL,BYTE PTR DS:[EBX]





4、输入密码'123456',并点击登录,断下后在命令栏输入命令:d [esi+48]+4,显示内存信息如图6



00498B7C  01 E8 2D 02 04 01 00 00 1F 01 00 00 00 00 00 00  
00498B8C  81 2B 30 02 04 01 00 00 1F 01 00 00 00 00 00 00   
00498B9C  B4 2C 30 02 04 01 00 00 1F 01 00 00 00 00 00 00   
00498BAC  44 31 30 02 04 01 00 00 1F 01 00 00 06 00 00 00  
00498BBC  06 00 00 00 0A 00 00 00 03 00 00 00 12 00 0B 00  
00498BCC  4C 01 0C 00 52 03 01 00 7B 1D 80 7C C2 F3 D2 77  

解释如下:
0x022de801为输入密码时临时生成的加密字符串00首地址,0x104为长度;
0x02302b81为对照表的首地址,长度与上表一样。作用是该表中00字节对应位置的上表中的字符为按shift方式输入的,不需要再转换了,而01表明得到的字符还要查表转换一下。
06为你输入的密码长度;
0A为解密该串的算法所需的关键参数设为stepLength;

输入密码时临时生成的加密字符串找到如下:
022DE801  62 69 65 6C 68 79 74 71 68 30 68 72 6E 65 61 6C  bielhytqh0hrneal
022DE811  6C 79 7A 32 6F 79 7A 76 68 64 6F 7A 67 36 78 75  lyz2oyzvhdozg6xu
022DE821  78 61 79 71 75 63 61 38 67 65 66 66 76 6C 72 77  xayquca8geffvlrw
022DE831  6E 31 79 79 65 74 6F 6F 72 6E 78 37 68 74 78 71  n1yyetoornx7htxq
022DE841  66 7A 6F 6D 62 43 63 6A 68 61 69 71 79 67 74 55  fzombCcjhaiqygtU
022DE851  73 62 64 6B 77 6A 71 68 64 4C 72 6C 62 63 64 6F  sbdkwjqhdLrlbcdo
022DE861  75 61 6B 41 64 6F 6E 74 73 77 6C 70 75 34 6D 6D  uakAdontswlpu4mm
022DE871  75 79 6D 66 73 76 65 38 6B 79 76 6D 6F 6C 68 6F  uymfsve8kyvmolho
022DE881  77 56 73 77 78 69 6A 7A 71 77 72 4E 63 69 73 62  wVswxijzqwrNcisb
022DE891  6C 61 70 6A 74 57 79 6C 65 63 6C 6A 73 67 6A 48  lapjtWylecljsgjH
022DE8A1  6B 6C 74 61 68 65 73 7A 67 32 6D 63 79 65 75 66  kltaheszg2mcyeuf
022DE8B1  77 72 6A 32 73 6B 76 6B 6B 75 6A 74 65 4C 64 68  wrj2skvkkujteLdh
022DE8C1  77 65 78 71 6F 72 6A 41 6C 68 6B 78 61 71 73 70  wexqorjAlhkxaqsp
022DE8D1  67 4F 65 64 70 62 6A 6D 64 7A 76 4B 6F 72 6F 73  gOedpbjmdzvKoros
022DE8E1  65 6C 6D 71 62 54 67 6A 61 6C 78 73 78 6D 78 52  elmqbTgjalxsxmxR
022DE8F1  72 76 71 6C 68 6D 68 77 61 49 72 6B 69 73 67 79  rvqlhmhwaIrkisgy
022DE901  77 66 73 47 00 00 00 00 00 00 00 00 00 00 00 00  wfsG............

解密算法大家自己看吧,对照前面找到的一张映射表如下,举例如下:
0049F07A  00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  .....
0049F08A  10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  
0049F09A  20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
0049F0AA  39 30 32 36 38 31 37 35 34 33 3A 3B 3C 3D 3E 3F  9026817543:;<=>?
0049F0BA  40 4C 4D 42 4E 5A 52 49 57 47 59 4F 50 44 56 55  @LMBNZRIWGYOPDVU
0049F0CA  48 41 54 58 53 43 45 4B 4A 51 46 5B 5C 5D 5E 5F  HATXSCEKJQF[\]^_
0049F0DA  69 60 62 66 68 61 67 65 64 63 6A 6B 6C 6D 6E 6F  i`bfhagedcjklmno
0049F0EA  70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~

根据stepLength为解密该串的算法所需的关键参数,那么首字符相对于地址022DE801的偏移量为:
stepLength-1=0x0a-1=9,对应的字符是'0',在映射表中的偏移值为0x31,该值转换为字符就是'1';所以第一个密码字符就是'1';
那么第二个字符的位置只要向后移动一个stepLength即可定位得到,显然是字符'2',在映射表中
的偏移值为0x32,转换为字符就是'2';
依此类推根据密码长度6就可以找到伪密码串'026817',映射转换一下就是'123456',很奇怪吧?
这就是我们的密码。

原理就是这样,大家可以调试看看演示程序不能正常运行的原因,我定位如下数据,
使用了最后8个字节7B 1D 80 7C C2 F3 D2 77,如果在你的机子上无效可能是没有定位到
该处数据,或者是给其他保护程序拦截了吧!如果你能找到原因,请回帖告知。我只打算在
qq的问题上花2天时间。
00498B7C  01 E8 2D 02 04 01 00 00 1F 01 00 00 00 00 00 00  
00498B8C  81 2B 30 02 04 01 00 00 1F 01 00 00 00 00 00 00   
00498B9C  B4 2C 30 02 04 01 00 00 1F 01 00 00 00 00 00 00   
00498BAC  44 31 30 02 04 01 00 00 1F 01 00 00 06 00 00 00  
00498BBC  06 00 00 00 0A 00 00 00 03 00 00 00 12 00 0B 00  
00498BCC  4C 01 0C 00 52 03 01 00 7B 1D 80 7C C2 F3 D2 77

上传的附件 qq2011&2010演示程序.rar