吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4393|回复: 11
收起左侧

[原创] 练手!!! 160个CrakeMe程序之034

  [复制链接]
hjm666 发表于 2018-5-29 11:55
选了一个从来没有做过的  keyfile 保护模式的来做做,毕竟做了好些 Name/Serial 模式的除了个别分析后,表示臣妾做不到的情况。。。其它的都还好,有些经验了


一、基础信息
1.png           3.png


  总结: 汇编写的软件,无壳,应该是正常的keyfile模式软件


二、暴力一试
OD通过查找字符串找到了关键跳转
[Asm] 纯文本查看 复制代码
0040116A  |.  A3 04204000   mov dword ptr ds:[0x402004],eax          ;  Cruehead.0040210E
0040116F  |.  6A 01         push 0x1                                 ; /ShowState = SW_SHOWNORMAL
00401171  |.  FF35 04204000 push dword ptr ds:[0x402004]             ; |hWnd = 00300642 ('CrackMe v3.0  - Uncracked',class='No need to disasm the code!')
00401177  |.  E8 90020000   call <jmp.&USER32.ShowWindow>            ; \ShowWindow
0040117C  |.  FF35 04204000 push dword ptr ds:[0x402004]             ; /hWnd = 00300642 ('CrackMe v3.0  - Uncracked',class='No need to disasm the code!')
00401182  |.  E8 9D020000   call <jmp.&USER32.UpdateWindow>          ; \UpdateWindow
00401187  |.  58            pop eax                                  ;  kernel32.7C817077
00401188  |.  3C 01         cmp al,0x1
0040118A  |.  75 17         jnz short Cruehead.004011A3              ;  关键跳转
0040118C  |.  68 86214000   push Cruehead.00402186                   ;  Now try the next crackme!
00401191  |.  68 6A214000   push Cruehead.0040216A                   ;  Cracked by:                 Now try the next crackme!
00401196  |.  68 08204000   push Cruehead.00402008
0040119B  |.  E8 C2010000   call Cruehead.00401362
004011A0  |.  83C4 0C       add esp,0xC
004011A3  |>  6A 00         /push 0x0                                ; /MsgFilterMax = 0x0
004011A5  |.  6A 00         |push 0x0                                ; |MsgFilterMin = 0x0
004011A7  |.  6A 00         |push 0x0                                ; |hWnd = NULL
004011A9  |.  68 5A204000   |push Cruehead.0040205A                  ; |pMsg = Cruehead.0040205A
004011AE  |.  E8 B9020000   |call <jmp.&USER32.GetMessageA>          ; \GetMessageA




修改标志位后完成暴力破解


三、注册机分析
  像我们这样的新手接触,自然是一步一步来,度娘各种搜索keyfile 怎么入手,需要注意的是什么云云云·。。。。其间学习不足和外人道也··
一个成功果然不是表面上看起来的那么容易啊··


上关键代码:
[Asm] 纯文本查看 复制代码
00401000 >/$  6A 00         push 0x0                                 ; /pModule = NULL
00401002  |.  E8 7D040000   call <jmp.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
00401007  |.  A3 E9204000   mov dword ptr ds:[0x4020E9],eax          ;  Cruehead.0040210E
0040100C  |.  C705 F9204000>mov dword ptr ds:[0x4020F9],0x0
00401016  |.  6A 00         push 0x0                                 ; /hTemplateFile = NULL
00401018  |.  68 80000000   push 0x80                                ; |Attributes = NORMAL
0040101D  |.  6A 03         push 0x3                                 ; |Mode = OPEN_EXISTING
0040101F  |.  6A 00         push 0x0                                 ; |pSecurity = NULL
00401021  |.  6A 03         push 0x3                                 ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
00401023  |.  68 000000C0   push 0xC0000000                          ; |Access = GENERIC_READ|GENERIC_WRITE
00401028  |.  68 D7204000   push Cruehead.004020D7                   ; |CRACKME3.KEY
0040102D  |.  E8 76040000   call <jmp.&KERNEL32.CreateFileA>         ; \CreateFileA
00401032  |.  83F8 FF       cmp eax,-0x1                             ;  CreateFilA用来打开或者创建一个文件,返回文件句柄
00401035  |.  75 0C         jnz short Cruehead.00401043
00401037  |>  68 0E214000   push Cruehead.0040210E                   ;  CrackMe v3.0  - Cracked!!
0040103C  |.  E8 B4020000   call Cruehead.004012F5
00401041  |.  EB 6B         jmp short Cruehead.004010AE
00401043  |>  A3 F5204000   mov dword ptr ds:[0x4020F5],eax          ;  D
00401048  |.  B8 12000000   mov eax,0x12                             ;  读取字节数
0040104D  |.  BB 08204000   mov ebx,Cruehead.00402008
00401052  |.  6A 00         push 0x0                                 ; /pOverlapped = NULL
00401054  |.  68 A0214000   push Cruehead.004021A0                   ; |pBytesRead = Cruehead.004021A0
00401059  |.  50            push eax                                 ; |BytesToRead = 40210E (4202766.)
0040105A  |.  53            push ebx                                 ; |Buffer = 7FFDF000
0040105B  |.  FF35 F5204000 push dword ptr ds:[0x4020F5]             ; |D
00401061  |.  E8 30040000   call <jmp.&KERNEL32.ReadFile>            ; \ReadFile 从文件指针指向的位置开始将数据读出到一个文件中
00401066  |.  833D A0214000>cmp dword ptr ds:[0x4021A0],0x12
0040106D  |.^ 75 C8         jnz short Cruehead.00401037              ;  不是18个字节就跳走
0040106F  |.  68 08204000   push Cruehead.00402008
00401074  |.  E8 98020000   call Cruehead.00401311                   ;  重要call
00401079  |.  8135 F9204000>xor dword ptr ds:[0x4020F9],0x12345678   ;  4020f9 14次异或之和
00401083  |.  83C4 04       add esp,0x4
00401086  |.  68 08204000   push Cruehead.00402008
0040108B  |.  E8 AC020000   call Cruehead.0040133C
00401090  |.  83C4 04       add esp,0x4
00401093  |.  3B05 F9204000 cmp eax,dword ptr ds:[0x4020F9]          ;  关键
00401099  |.  0f94c0        sete al                                  ;  关键




重要call:
[Asm] 纯文本查看 复制代码
00401311  /$  33C9          xor ecx,ecx
00401313  |.  33C0          xor eax,eax                              ;  Cruehead.0040210E
00401315  |.  8B7424 04     mov esi,dword ptr ss:[esp+0x4]
00401319  |.  B3 41         mov bl,0x41
0040131B  |>  8A06          /mov al,byte ptr ds:[esi]
0040131D  |.  32C3          |xor al,bl                               ;  xor "  " ,41
0040131F  |.  8806          |mov byte ptr ds:[esi],al
00401321  |.  46            |inc esi                                 ;  esi ++    ???
00401322  |.  FEC3          |inc bl                                  ;  bl ++
00401324  |.  0105 F9204000 |add dword ptr ds:[0x4020F9],eax         ;  Cruehead.0040210E
0040132A  |.  3C 00         |cmp al,0x0
0040132C  |.  74 07         |je short Cruehead.00401335
0040132E  |.  FEC1          |inc cl                                  ;  cl=14停
00401330  |.  80FB 4F       |cmp bl,0x4F
00401333  |.^ 75 E6         \jnz short Cruehead.0040131B
00401335  |>  890D 49214000 mov dword ptr ds:[0x402149],ecx[/size]
[size=5]0040133B  \.  C3            retn




总结:
   程序运行前打开了位于CrakeMe文件夹中的CRACKME3.KEY 注册文件,判断了下是不是18个字节,然后截取了14个字节进行操作,遍历这14个字节,从第一个字节开始和41 异或 ,并每遍历一次 41就自加一次:
遍历完成后的结果再与12345678 异或  。上面的异或结束后的值再和最后4个字节的16进制进行比较(上面的操作的数字都是16进制,emmmm ,最后4个字节的16进制怎么在栈里存储你们也应该懂··)


[C] 纯文本查看 复制代码
#include<stdio.h>
#include<string.h>
#include<iostream>
int main()
{
	int bl=65;
	long int Integer,b=0;
	char ch[20]={0};
	char name[20]={0};
	printf("Warm reminder: your registration name must be 14 bytes. \n");
	printf("Input yous name : \n");
	scanf("%s",name);
	int len = strlen(name);
	for(int i=0;i<len;i++)
	{
		int x =name[i]^bl;
		b=x+b;
		bl++;
	}
	b=b^305419896;   //12345678  -> 305419896
	printf("%d \n",b);
	sprintf(ch, "%X", b);
	printf("This your key:%s\n",ch); 
	system("pause");
	return 0;
 } 



  我不管···· 我注册机就写成这样了。。  本来是强迫症就是要代码短,玩骚操作···  结果卡在了16进制转字符上了··我16进制存储的还是char型····  烦死,索性破罐子破摔就这样了··
学了那么多语言,结果学一门忘一门,我就呵呵了···


注册机用法: 输入14个字节的东西,注册机会生成4个字节的尾巴例:生成   12345517  请自行转换成 17553412  扔到在线16进制转字符网站解··   最后在CrakeMe文件夹中创建CRACKME3.KEY 粘如你的14字节+4字节保存即可


例我的:www.52pojie.cn  -》U4


2.png


    心疼的安慰自己,打神都是从菜鸟开始的·····  加油!
  
如有错误,请大佬指出,小生不胜感激!!

免费评分

参与人数 3威望 +1 吾爱币 +12 热心值 +3 收起 理由
sunnylds7 + 1 + 1 热心回复!
SnowRen + 1 + 1 热心回复!
Hmily + 1 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| hjm666 发表于 2018-5-29 15:59
w5645060 发表于 2018-5-29 12:13
楼主 那160个软件在哪  论坛有么

https://pan.baidu.com/share/init?surl=50wDRlmXTQjwm2-ey-3I6Q

qr21
头像被屏蔽
w5645060 发表于 2018-5-29 16:24
菜鸟多多关照 发表于 2018-5-29 12:12
头像被屏蔽
w5645060 发表于 2018-5-29 12:13
提示: 作者被禁止或删除 内容自动屏蔽
a905029799 发表于 2018-5-29 18:07
可以的 很不错i
井中观 发表于 2018-5-29 23:15
谢谢分享。
头像被屏蔽
sstm 发表于 2018-5-30 07:35
提示: 作者被禁止或删除 内容自动屏蔽
vbdkgj 发表于 2018-5-31 10:07
其实真的看不懂...
拾梦 发表于 2018-5-31 11:00
我也正在学
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 00:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表