首页
社区
课程
招聘
[原创]新东方背单词3密码浅析
发表于: 2005-6-9 13:16 5142

[原创]新东方背单词3密码浅析

2005-6-9 13:16
5142
新东方背单词3密码浅析
【破解作者】 mhsong
【作者QQ】 278200743
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 新东方背单词3
【编写语言】 VC
新东方背单词3是一款非常好的背单词软件,可以供多人使用。每个人用自己的用户名进入。有一天发现密码忘记了,于是就尝试着看看它的密码是怎么生成的。用户名和密码放在安装目录下一个.cfg文件里的。在修改密码的窗口下,设bpx GetWindowText,几次跳转之后来到这里。

004A4C80   /$  55          push ebp
004A4C81   |.  8BEC        mov ebp,esp
004A4C83   |.  56          push esi
004A4C84   |.  8B75 0C     mov esi,dword ptr ss:[ebp+C]
004A4C87   |.  33C9        xor ecx,ecx
004A4C89   |.  85F6        test esi,esi
004A4C8B   |.  7E 1E       jle short Recite3.004A4CAB
004A4C8D   |.  8B55 08     mov edx,dword ptr ss:[ebp+8]
004A4C90   |>  8A0411      /mov al,byte ptr ds:[ecx+edx]
004A4C93   |.  8845 0F     |mov byte ptr ss:[ebp+F],al
004A4C96   |.  8A45 0F     |mov al,byte ptr ss:[ebp+F]
004A4C99   |.  D0C8        |ror al,1
004A4C9B   |.  34 09       |xor al,9
004A4C9D   |.  8845 0F     |mov byte ptr ss:[ebp+F],al
004A4CA0   |.  8A45 0F     |mov al,byte ptr ss:[ebp+F]
004A4CA3   |.  880411      |mov byte ptr ds:[ecx+edx],al
004A4CA6   |.  41          |inc ecx
004A4CA7   |.  3BCE        |cmp ecx,esi
004A4CA9   |.^ 7C E5       \jl short Recite3.004A4C90
004A4CAB   |>  5E          pop esi                            ;  0012C264
004A4CAC   |.  5D          pop ebp
004A4CAD   \.  C3          retn
这个就是保存后的密码到明文的转换过程,上面的汇编代码的大体意思见下面的c代码。
deCode(char* str,int len,char out)
{
        if(!len) return;
        for(int i=0;i<len;i++){
           out = str[i];
           out >>= 1;
           out ^= 0x09;
           str[i] = out;
        }
}

004081BE   |.  8B4C24 00   mov ecx,dword ptr ss:[esp]
004081C2   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
004081C6   |.  51          push ecx                           ; /Arg2
004081C7   |.  52          push edx                           ; |Arg1
004081C8   |.  E8 C6D60B00 call Recite3.004C5893              ; \Recite3.004C5893
比较输入的密码与原来的是否相同,EAX=-1表示不同

这个是用户名的加密保存算法,是用ultraedit猜解的,比较简单,没有跟踪过。
char *str="123";
for(int i=0;i<3;i++)
{
        unsigned char a = str[i] ^ 0x09;
        a <<=1;
        printf("%x",a);
}

第一次尝试写,思路不很清楚。很菜,希望认识多一些朋友,大家多帮我~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
单词库跟2一样
以前有个人写过怎么取词库
2005-6-9 13:18
0
游客
登录 | 注册 方可回帖
返回
//