能力值:
( LV2,RANK:10 )
|
-
-
2 楼
前四行就是比较结果..如果你连16进制和10进制转换都不会那就没办法了.
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
CMP DWORD PTR SS:[ESP+8],111 ;比较 esp+8 地址下的内容 要等于111(十六进制) 否则就失败
JNZ SHORT 1.004019C ;根据上面的比较结果 不相等就跳转
下面也是一样的
00401063 地址处的 CALL 1.00401200 是关键算法 返回值 EAX需要等于1 如果不等于1 就会弹出注册失败对话框
同是菜鸟 高手见笑 如果有错误还请指正
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
楼上这么说明白多了,呵呵,不过CMP EAX , 1
后面那两个PUSH是干啥的呢....
另外楼主如何找到关键代码的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
发个IDA下的伪代码,如果有点编程知识的就比较清楚啦。
int __stdcall DialogFunc(int a1, int a2, __int16 a3, int a4)
{
if ( a2 == 273 && a3 == 1002 ) //273==0x111, 1002==0x3EA 数制转换
{
if ( sub_401200() == 1 ) //调用函数sub_401200,返回值为判断的结果
{
MessageBoxA(hWnd, "Registration Successful!\nGood Job!\nPlease contact:xufeng0325@gmail.com", "crackme", 0);
return 0;
}
MessageBoxA(hWnd, "Registration Fail!", "crackme", 0);
}
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
PUSH是从右向左函数的参数依次入栈
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
断点下到第三个jne的前两行 代码。然后直接运行程序,就会卡到那里,然后你点F8一步步跟,就会看到第三个才是关键跳,想怎么跳,你都可以直接改汇编代码,然后保存。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
首先,这个crackme打开 后不是出现了 对话框吗? 你随便打几个,再按按钮,就出现了:“Registration fail" 就是失败的意思。 那么为什么会出现这个呢?于是就判断,程序首先检测你输入的 东西 是不是真的密码(乱说的,可能是注册码) 然后 ,如果失败,就出现:“Registration fail" 那么 我就在ollybdg中 载入, 点右键有一个“超级字符串参考” 再 查找ASCII 字符。 你就会找到关键代码 。 其实 应该大多都是这么分析的吧!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢!可我不想暴力。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
00401050 . cmp dword ptr ss:[esp+0x8],0x111
00401058 . jnz short 1.0040109C
0040105A . cmp word ptr ss:[esp+0xC],0x3EA
00401061 . jnz short 1.0040109C
00401063 . call 1.00401200 ; 关键CaLL
00401068 . cmp eax,0x1
0040106B . push 0x0 ; /Style = MB_OK|MB_APPLMODAL
0040106D . push 1.0040508C ; |Title = "crackme"
00401072 . jnz short 1.0040108A ; |关键跳 实现就跳过注册成功的提示 所有不让它实现
00401074 . mov eax,dword ptr ds:[0x4056B8] ; |
00401079 . push 1.00405044 ; |Text = "Registration Successful!
Good Job!
Please contact:xufeng0325@gmail.com"
0040107E . push eax ; |hOwner => 003A0FF8 ('CrackMe0.1 By Ferris',class='myWindowClass')
0040107F . call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA
00401085 . xor eax,eax
00401087 . retn 0x10
0040108A > mov ecx,dword ptr ds:[0x4056B8] ; |
00401090 . push 1.00405030 ; |Text = "Registration Fail!"
00401095 . push ecx ; |hOwner => 003A0FF8 ('CrackMe0.1 By Ferris',class='myWindowClass')
00401096 . call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA
0040109C > xor eax,eax
|
|
|