- UID
- 3169
注册时间2005-9-17
阅读权限20
最后登录1970-1-1
以武会友
该用户从未签到
|
【破文作者】qxtianlong
【所属组织】无
【作者主页】http://qxtianlong.77169.com
【 E-mail 】[email protected]
【 作者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:[ebp+14]
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:[ebp-70]
我们向上翻动代码,然后在004044D0 55 push ebp//下断,F9运行断下,F8过到
0040457E 8B55 D8 mov edx,dword ptr ss:[ebp-28]//看到提示
堆栈 ss:[0012F4E0]=001527CC, (UNICODE "qxtianlong")
edx=00DF0608
00404581 8D4D E4 lea ecx,dword ptr ss:[ebp-1C]//ECX=0012F4EC
00404584 897D D8 mov dword ptr ss:[ebp-28],edi//0012f4e0=0
00404587 FF15 A4104000 call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove//函数调用EAX=001527CC
0040458D 8D4D D0 lea ecx,dword ptr ss:[ebp-30]//ECX=0012F4D8
00404590 FF15 B4104000 call dword ptr ds:[<&MSVBVM60.__vbaF>; MSVBVM60.__vbaFreeObj//EAX清零
00404596 8B16 mov edx,dword ptr ds:[esi] ; crackme1.00405A68
00404598 56 push esi//入栈0014ac58
省略N行
004045D1 8B55 D8 mov edx,dword ptr ss:[ebp-28]//提示看到假码
004045D4 8D4D DC lea ecx,dword ptr ss:[ebp-24]//ECX=0012F4E4
004045D7 897D D8 mov dword ptr ss:[ebp-28],edi//0012f4e0=0
004045DA FF15 A4104000 call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove//EAX=0015275C
004045E0 8D4D D0 lea ecx,dword ptr ss:[ebp-30]//ECX=0012f4d8
004045E3 FF15 B4104000 call dword ptr ds:[<&MSVBVM60.__vbaF>; MSVBVM60.__vbaFreeObj//EAX清零
004045E9 8B45 E4 mov eax,dword ptr ss:[ebp-1C]//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:[ebp-1C]//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:[ebp-28]
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:[ebp-50]
00404710 8D45 C0 lea eax,dword ptr ss:[ebp-40]
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:[ebp-2C]
0040477B FF15 A4104000 call dword ptr ds:[<&MSVBVM60.__vbaS>; MSVBVM60.__vbaStrMove
00404781 8B55 D8 mov edx,dword ptr ss:[ebp-28]//假码
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[50];
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 夜 |
|