首页
社区
课程
招聘
[旧帖] [求助]一个crackme,大家来看看。 0.00雪花
发表于: 2012-2-3 19:15 1623

[旧帖] [求助]一个crackme,大家来看看。 0.00雪花

2012-2-3 19:15
1623
话不多说,
下面贴上关键代码:

  我看到第三行,有一个比较, 那么我猜想,是和3倍eax 的值进行比较, 因为是3ea。。

  于是就在第三行下了断点, F9运行,断掉之后看到寄存器eax的值 变为 7FFDF000(像个16进制数)-,  所以我又觉得注册码是:3*7FFDF000的十进制值,  输入,无果,再输入十六进制的,无果。我又输入没乘三的,还是无果。 我没辙了, 所以拿到这里让大家见笑。
     我就是个菜, 大家如果发现我的这个过程或者想法 有不对的地方,还希望大家能给提出来,    我想通过这样的实践和失败来提高自己。谢谢!
ps:    这是crackme  1.rar

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 108
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
哥.那是与十六进制 3EA 作比较,不是3倍的eax.完全不是一个概念.  3EA转成十进制就是 1002 .
也就是说[esp+c]是与十进制的 1002 作比较.
真不知道你怎么混到用OD的!
2012-2-3 20:17
0
雪    币: 108
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
3EA 为一个十六进制的常数值.  EAX是CPU内部的寄存器.
2012-2-3 20:17
0
雪    币: 108
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
基础很重要!
2012-2-3 20:18
0
雪    币: 180
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
那么我猜想,是和3倍eax 的值进行比较, 因为是3ea。。

3EA是十六进制数……等于十进制1002……
2012-2-3 20:19
0
雪    币: 13247
活跃值: (3642)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
打酱油路过,看看  
2012-2-3 20:22
0
雪    币: 697
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
何不进去看下:call 00401200
2012-2-3 20:28
0
雪    币: 174
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
你把汇编当数学了,3ea是十六进制数0x3ea=1002,
我觉得你应该先学下计算机基础,或学一门编程语言.
有空看下汇编语言的教材.
2012-2-3 20:49
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
9
111是消息号。。。也就是WM_COMMAND消息。。
这里的3EA不是3*EAX。。而是一个数字。。。这里是那个按钮的控件ID

楼主的想象力之丰富。。。值得鼓励。。。
2012-2-3 21:00
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
10
验证过程如下:

.text:00401200 sub_401200      proc near               ; CODE XREF: DialogFunc+13p
.text:00401200
.text:00401200 Tail            = dword ptr -28h
.text:00401200 i               = dword ptr -24h
.text:00401200 Length          = dword ptr -20h
.text:00401200 result          = dword ptr -18h
.text:00401200 String          = byte ptr -14h
.text:00401200
.text:00401200                 sub     esp, 28h
.text:00401203                 mov     ecx, dword_4056BC
.text:00401209                 push    ebx
.text:0040120A                 push    ebp
.text:0040120B                 push    esi
.text:0040120C                 push    edi
.text:0040120D                 lea     eax, [esp+38h+String]
.text:00401211                 push    14h             ; cchMax
.text:00401213                 push    eax             ; lpString
.text:00401214                 xor     ebx, ebx
.text:00401216                 push    3E8h            ; nIDDlgItem
.text:0040121B                 push    ecx             ; hDlg
.text:0040121C                 xor     ebp, ebp        ; ebp清零
.text:0040121E                 mov     [esp+48h+result], ebx
.text:00401222                 mov     esi, 1
.text:00401227                 xor     edi, edi
.text:00401229                 call    ds:GetDlgItemTextA
.text:0040122F                 test    al, al          ; 长度是零?
.text:00401231                 jz      loc_4012FA      ; 长度为零就跳走
.text:00401237                 movsx   eax, al
.text:0040123A                 test    eax, eax
.text:0040123C                 mov     [esp+38h+Length], eax ; 储存长度
.text:00401240                 jle     short loc_4012A5 ; 长度小于等于零就跳走
.text:00401242                 lea     edx, [esp+eax+23h] ; 指针移动到字符串最后一位
.text:00401246                 mov     [esp+38h+Tail], edx ; 储存最后一位的指针
.text:0040124A
.text:0040124A loc_40124A:                             ; CODE XREF: sub_401200+A3j
.text:0040124A                 test    ebx, ebx
.text:0040124C                 jle     short loc_40126C
.text:0040124E                 mov     [esp+38h+i], ebx
.text:00401252
.text:00401252 loc_401252:                             ; CODE XREF: sub_401200+6Aj
.text:00401252                 push    0
.text:00401254                 push    0Ah
.text:00401256                 push    edi
.text:00401257                 push    esi
.text:00401258                 call    __allmul        ; 做64位整数乘法的
.text:00401258                                         ; 乘数是0x0000000A,即十进制的10
.text:0040125D                 mov     esi, eax        ; 结果累加到esi
.text:0040125F                 mov     eax, [esp+38h+i]
.text:00401263                 dec     eax
.text:00401264                 mov     edi, edx
.text:00401266                 mov     [esp+38h+i], eax
.text:0040126A                 jnz     short loc_401252
.text:0040126C
.text:0040126C loc_40126C:                             ; CODE XREF: sub_401200+4Cj
.text:0040126C                 mov     eax, [esp+38h+Tail]
.text:00401270                 push    edi
.text:00401271                 push    esi
.text:00401272                 movsx   eax, byte ptr [eax] ; 取一个字节
.text:00401275                 sub     eax, 30h        ; 该位减0x30。这里应该是数字??
.text:00401275                                         ; (不过我觉得不是数字也可以)
.text:00401278                 cdq
.text:00401279                 push    edx
.text:0040127A                 push    eax
.text:0040127B                 call    __allmul        ; 相乘
.text:00401280                 mov     esi, [esp+38h+result]
.text:00401284                 mov     ecx, [esp+38h+Tail] ; 取指针
.text:00401288                 add     ebp, eax        ; 结果累加到ebp上
.text:0040128A                 mov     eax, [esp+38h+Length] ; 取长度
.text:0040128E                 adc     esi, edx
.text:00401290                 xor     edi, edi
.text:00401292                 inc     ebx
.text:00401293                 dec     ecx             ; 指针向前移动一位
.text:00401294                 mov     [esp+38h+result], esi
.text:00401298                 cmp     ebx, eax        ; 是否结束循环?
.text:0040129A                 mov     esi, 1
.text:0040129F                 mov     [esp+38h+Tail], ecx ; 储存移动后的指针
.text:004012A3                 jl      short loc_40124A
.text:004012A5
.text:004012A5 loc_4012A5:                             ; CODE XREF: sub_401200+40j
.text:004012A5                 mov     edi, [esp+38h+result]
.text:004012A9                 mov     ecx, ebp
.text:004012AB                 mov     edx, edi
.text:004012AD                 push    edi
.text:004012AE                 not     edx
.text:004012B0                 not     ecx
.text:004012B2                 push    ebp
.text:004012B3                 push    edx
.text:004012B4                 push    ecx
.text:004012B5                 call    __allmul
.text:004012BA                 push    0
.text:004012BC                 push    0BA2E8BA3h
.text:004012C1                 push    edi
.text:004012C2                 push    ebp
.text:004012C3                 mov     esi, eax        ; 低四们累加到esi
.text:004012C5                 call    __allmul        ; 结果乘以0xBA2E8BA3
.text:004012CA                 push    8
.text:004012CC                 push    0
.text:004012CE                 push    edx
.text:004012CF                 push    eax
.text:004012D0                 call    __alldiv        ; 结果除以0x00000000800000000
.text:004012D5                 add     esi, eax        ; 低四字节累到到esi中
.text:004012D7                 and     ebp, 0FF23301h  ; ebp和0x0FF23301按位与
.text:004012DD                 add     esi, ebp        ; 结果与低四字节相加
.text:004012DF                 xor     eax, eax
.text:004012E1                 cmp     esi, 86FFB5B8h  ; 和0x86FFB5B8比较
.text:004012E7                 jnz     short loc_4012FA
.text:004012E9                 test    eax, eax
.text:004012EB                 jnz     short loc_4012FA
.text:004012ED                 pop     edi
.text:004012EE                 pop     esi
.text:004012EF                 pop     ebp
.text:004012F0                 mov     eax, 1
.text:004012F5                 pop     ebx
.text:004012F6                 add     esp, 28h
.text:004012F9                 retn
.text:004012FA ; ---------------------------------------------------------------------------
.text:004012FA
.text:004012FA loc_4012FA:                             ; CODE XREF: sub_401200+31j
.text:004012FA                                         ; sub_401200+E7j ...
.text:004012FA                 pop     edi
.text:004012FB                 pop     esi
.text:004012FC                 pop     ebp
.text:004012FD                 xor     eax, eax
.text:004012FF                 pop     ebx
.text:00401300                 add     esp, 28h
.text:00401303                 retn
.text:00401303 sub_401200      endp

简单的逆一下
BOOL Check()
{
	char lpString[0x14];
	int Length;
	char *p;
	long long n;
	long long r;
	long long m;
	long long x;
	n = 1;
	r = 0;
	Length = GetDlgItemText(HWND, 0x3E8, lpString, 0x14);
	if (Length != 0)
	{
		p = lpString + Length - 1;
		for (int i = 0;i < Length;i++)
		{
			for (int j = 0;j < i;j++)
			{
				n = n * 10;
			}
			r = r + n * (long long)(*p - 0x30);
			x = r;
			n = 1;
			p--;
		}
		r = r * (0 - r - 1);
		n = r;
		r = r * 0xBA2E8BA3;
		r = r / 0x800000000;
		n = n + r;
		r = x & 0xFF23301;
		r = r + n;
		if (r == 0x86FFB5B8)
		{
			return TRUE;
		}
	}
	return FALSE;
}

C代码看着容易懂些。。。我数学不好。。。算了一个多小时算不出来。。。数学好的同学算一算
2012-2-3 23:17
0
雪    币: 124
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
下载来试试,也是学习学习,有体会再与分享。
2012-2-4 00:36
0
游客
登录 | 注册 方可回帖
返回
//