qxtianlong 发表于 2005-10-19 13:04:08

中国破解组织飘云阁Crackme1.0破解分析

【破文作者】qxtianlong

【所属组织】无

【作者主页】http://qxtianlong.77169.com

【 E-mail 】kk5910@sina.com

【 作者QQ 】249935058

【文章题目】Crackme的详解

【软件名称】中国破解组织飘云阁Crackme1.0

【下载地址】Crackme

【加密方式】用户名/序列号

【加壳方式】无

【破解工具】OD

【软件限制】无

【破解平台】wxp
=======================================================================================================
【软件简介】
Crackme生存的唯一目的就是让我们练手之用!

=======================================================================================================
【文章简介】
我的破解很菜,写这篇东西是给对这个 crackme 有兴趣的兄弟们,分享一下破解心得
=======================================================================================================
【解密过程】
PEID查壳,无壳,顺便看程序是VB的,试运行输入试练码qxtianlong,78787878,确认后,有错误提示
OD载入,下断点bp rtcMsgBox,F9运行,马上断下,此时在系统领空,Ctrl+F9返回程序领空
660E1FF2 M>55               push ebp   //断在这里
660E1FF3   8BEC               mov ebp,esp
660E1FF5   83EC 4C            sub esp,4C
660E1FF8   8B4D 14            mov ecx,dword ptr ss:
660E1FFB   53               push ebx
660E1FFC   56               push esi
660E1FFD   57               push edi
返回到这里,00404877   51               push ecx
00404878   FF15 30104000      call dword ptr ds:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox//这个CALL就是出错CALL
0040487E   8D55 90            lea edx,dword ptr ss:
我们向上翻动代码,然后在004044D0   55               push ebp//下断,F9运行断下,F8过到
0040457E   8B55 D8            mov edx,dword ptr ss://看到提示
堆栈 ss:=001527CC, (UNICODE "qxtianlong")
edx=00DF0608
00404581   8D4D E4            lea ecx,dword ptr ss://ECX=0012F4EC
00404584   897D D8            mov dword ptr ss:,edi//0012f4e0=0
00404587   FF15 A4104000      call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove//函数调用EAX=001527CC
0040458D   8D4D D0            lea ecx,dword ptr ss://ECX=0012F4D8
00404590   FF15 B4104000      call dword ptr ds:[<&MSVBVM60.__vbaF>; MSVBVM60.__vbaFreeObj//EAX清零
00404596   8B16               mov edx,dword ptr ds:         ; crackme1.00405A68
00404598   56               push esi//入栈0014ac58
省略N行
004045D1   8B55 D8            mov edx,dword ptr ss://提示看到假码
004045D4   8D4D DC            lea ecx,dword ptr ss://ECX=0012F4E4
004045D7   897D D8            mov dword ptr ss:,edi//0012f4e0=0
004045DA   FF15 A4104000      call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove//EAX=0015275C
004045E0   8D4D D0            lea ecx,dword ptr ss://ECX=0012f4d8
004045E3   FF15 B4104000      call dword ptr ds:[<&MSVBVM60.__vbaF>; MSVBVM60.__vbaFreeObj//EAX清零
004045E9   8B45 E4            mov eax,dword ptr ss://EAX=001527CC'qxtianlong'
004045EC   8B35 10104000      mov esi,dword ptr ds:[<&MSVBVM60.__v>; MSVBVM60.__vbaLenBstr
004045F2   50               push eax
004045F3   FFD6               call esi                           ; MSVBVM60.__vbaLenBstr//取字符串长度入EAX=A
004045F5   83F8 05            cmp eax,5//和5比较
004045F8   0F8D 85000000      jge crackme1.00404683//大于则跳
来到
00404683   8B45 E4            mov eax,dword ptr ss://EAX=001527CC
00404686   50               push eax
00404687   FFD6               call esi                           ; MSVBVM60.__vbaLenBstr//取字符串长度入EAX=A
00404689   8BC8               mov ecx,eax//ecx=A
0040468B   FF15 50104000      call dword ptr ds:[<&MSVBVM60.__vbaI>; MSVBVM60.__vbaI2I4
省略N行
004046EF   FF15 0C104000      call dword ptr ds:[<&MSVBVM60.#693>] ; MSVBVM60.rtcByteValueBstr//取ASC码
004046F5   25 FF000000      and eax,0FF
004046FA   8D4D D8            lea ecx,dword ptr ss:
004046FD   03C7               add eax,edi
004046FF    /0F80 04020000      jo crackme1.00404909//无溢出
00404705   8BF8               mov edi,eax//EDI=71
00404707   FF15 B8104000      call dword ptr ds:[<&MSVBVM60.__vbaF>; MSVBVM60.__vbaFreeStr
0040470D   8D55 B0            lea edx,dword ptr ss:
00404710   8D45 C0            lea eax,dword ptr ss:
00404713   52               push edx
00404714   50               push eax
00404715   6A 02            push 2
00404717   FFD3               call ebx
00404719   B8 01000000      mov eax,1
0040471E   83C4 0C            add esp,0C
00404721   66:03C6            add ax,si
00404724   0F80 DF010000      jo crackme1.00404909
0040472A   8BF0               mov esi,eax
0040472C   ^ E9 71FFFFFF      jmp crackme1.004046A2//循环逐位ASC码相加放入EDI=445
省略N行
00404770   FF15 08104000      call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrI4//转化为10进制EAX=1093
00404776   8BD0               mov edx,eax//EDX=1093
00404778   8D4D D4            lea ecx,dword ptr ss:
0040477B   FF15 A4104000      call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove
00404781   8B55 D8            mov edx,dword ptr ss://假码
00404784   50               push eax
00404785   52               push edx
00404786   FF15 4C104000      call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrCmp//比较
好了,OVER
【解密心得】
=======================================================================================================
最近几天一直研究游戏引擎,还有分析quake3的代码,确实是厉害也没有时间写东西,今天抽空写点简单的东西,
VB程序,根据我以前写的相信你也应该知道此类比较简单,明码方式,算法也很简单,用户名必须大于等于5位,用户名逐位ASC码相加转化为10进制
name:qxtianlong
serial:1093
算法注册机
没有做任何优化和检查,大家讲究着看吧
#include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
int main()
{
char name;
int i;
int temp;
unsigned long reg;
reg=0;
cout<<"************************"<<endl;
cout<<"* keygen by qxtianlong *"<<endl;
cout<<"*    2005-10-18 夜   *"<<endl;
cout<<"************************"<<endl;
AA: cout<<"请输入用户名:";
cin>>name;
temp=strlen(name);
if(temp<5)
{
   cout<<"用户名至少5位"<<endl;
   cout<<"请重新输入"<<endl;
   goto AA;
}
for(i=0;i<temp;i++)
{
   reg+=name;
}
cout<<"您的注册码是:"<<reg<<endl;
getch();
}
【破解声明】我是一个小小菜虫子,文章如有错误,请高手指正!
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
=======================================================================================================
                                                                                 2005-10-18 夜

zhangyino2 发表于 2005-10-31 18:34:13

学习了,支持一下

lxh6828 发表于 2005-11-8 20:48:13

heng9ml 发表于 2005-11-25 11:31:12

kianny 发表于 2005-11-25 19:04:08

感谢,学习了
页: [1]
查看完整版本: 中国破解组织飘云阁Crackme1.0破解分析