上次发错了,这个才是不明码比较的。高手飘过。
上次发错了,这个才是不明码比较的。高手飘过。 怎么好像在破解区有这个呢?~ 有人能破吗?没人能破我就贴出答案来 这个IDA 真是太棒了... 和看vc一模一样//signed int __stdcall DialogFunc(HWND a1, UINT a2, WPARAM a3, LPARAM a4)
{
UINT ST14_4_0; // ST14_4@0
signed int result; // eax@2
int v6; // eax@9
LRESULT v7; // eax@11
int v8; // esi@11
signed int v9; // ecx@13
signed int v10; // eax@14
signed int v11; // esi@15
if ( a2 == 273 )
{
if ( a3 == 1 )
{
v6 = SendDlgItemMessageA(a1, 3, 0xEu, 0, 0);
dword_4021AF = v6;
if ( !v6 || v6 > 8 || (v8 = v6, v7 = SendDlgItemMessageA(a1, 4, 0xEu, 0, 0), !v7) || v8 != v7 )
goto LABEL_26;
SendDlgItemMessageA(a1, 3, 0xDu, 8u, (LPARAM)byte_402160);
SendDlgItemMessageA(a1, 4, 0xDu, 0x10u, (LPARAM)&unk_402179);
v9 = -1;
while ( 1 )
{
++v9;
v10 = byte_402160;
if ( !v10 )
break;
v11 = -1;
if ( v10 < 65 || (unsigned int)v10 > 0x7A )
goto LABEL_26;
if ( v10 >= 90 )
v10 -= 32;
do
++v11;
while ( v10 != byte_402017 );
*(int *)((char *)&dword_402194 + v9) = byte_40203C;
}
if ( sub_401244(&unk_402179, &dword_402194, dword_4021AF) == 1 )
{
MessageBoxA(
0,
"Congratulations! Please send your keygen (working one) to [email protected]!",
"Duelist's Crackme #4",
0x2000u);
result = 1;
}
else
{
LABEL_26:
MessageBoxA(
0,
"Your registration info is invalid... Note that most of the special chars may raise registration problems!",
"Duelist's Crackme #4",
0x2000u);
result = 0;
}
}
else
{
if ( a3 == 2 )
goto LABEL_25;
result = 0;
}
}
else
{
if ( a2 != 272 )
{
if ( a2 != 16 )
return 0;
LABEL_25:
ExitProcess(ST14_4_0);
}
result = 1;
}
return result;
} 分析有奖励... 大家加油哦. 这样算明码了吧!/:014
[ 本帖最后由 xingyue 于 2009-3-4 11:13 编辑 ] 算法分析:
1.用户名只能是字母或数字
2.如果是小写字母,先转换成大写字母
3.先在00402017处开始查找第一个字母并计数,查到的话到0040203C开始处取得相应位置上的密码。
然后循环处理用户名就可以。
加密字典(原): A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN7CBV9
加密字典(密): SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF
算法应该是最简单的凯撒算法(好像叫这个)
破解过程:
1.出错对话框,暂停,找到相应的抛messagebox的地方。
2.试了几次发现下面好像消息分发处理,下条件断点,分别为dword ptr==111和dword ptr==110,也没去细查啥意思,:(
004010F2 . /EB 25 jmp short chap203.00401119
004010F4 > > |817D 0C 11010>cmp dword ptr , 111
004010FB . |0F84 FA000000 je chap203.004011FB
00401101 . |817D 0C 10010>cmp dword ptr , 110
00401108 > . |74 16 je short chap203.00401120
0040110A . |837D 0C 10 cmp dword ptr , 10
0040110E . |0F84 F7000000 je chap203.0040120B
00401114 . |B8 00000000 mov eax, 0
00401119 > \5F pop edi
3.点击按纽,断下,单步,中间会利用SendDlgItemMessageA方法, WM_GETTEXTLENGTH消息获取用户名和密码的长度,不=的话则报错。
相=的时候,再利用WM_GETTEXT获取用户名和密码,然后对用户名作上面的加密处理得到真密码,然后和用户输入的密码进行比较,然后显示
成功或失败对话框。
[ 本帖最后由 tavor 于 2009-3-4 14:00 编辑 ] 原帖由 Luckly 于 2009-3-3 22:21 发表 https://www.chinapyg.com/images/common/back.gif
这个IDA 真是太棒了... 和看vc一模一样//
signed int __stdcall DialogFunc(HWND a1, UINT a2, WPARAM a3, LPARAM a4)
{
UINT ST14_4_0; // ST14_4@0
signed int result; // eax@2
int v6; // eax@9
...
版主教一下咋设的IDA呀,这效果真棒呀,可我刚装了一下,没有你的这种效果呀。 上几楼主的好厉害呀,学习中 /:012 /:012 /:012
既然标签已经修改回来,只能说给楼主提个醒,慎用原创标签!/:014
[ 本帖最后由 hflywolf 于 2009-3-4 19:25 编辑 ]
页:
[1]
2