No.1 入门级CrackMe分析
来源:互联网 发布:淘宝怎么开手机维修店 编辑:程序博客网 时间:2024/05/16 09:21
入门级CrackMe分析
1、CTRL + N 查看程序引入那些函数
2、下函数断点
Bpx GetDlgItemTextA 然后F9运行,中断下来。
3、找到算法入口,分析算法如下
CrackMe满足条件:
1、注册名长度在 3-9之间
2、注册码第一个字符被0x11CF整除余数为0x17
算法如下
1、 生成中间码(很啰嗦)
2、 中间码还原成真码
3、 真码与输入码 4个字符一组比较
4、注册机
int main(int argc, char* argv[])
{
char name[20];
char table[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char mid[20];
int temp;
char lastnum[6];
mid[0]='T';
int i,j;
int sum=0;
printf("长度在3-9之间 name:");
scanf("%s",name);
//生成中间注册码
int len=strlen(name);
for(i=0;i<len;i++)
{
sum=sum+name[i];
}
for(i=0;i<len;i++)
{
j=(i*3+26)%27;
mid[i+1]=(((((((name[i]^table[j])+((sum*(i-1))^0xFFFFFFFF)+0x14D+(len*(i+3)*name[i]))%0x0A+0x30)&0x000000FF)
^0xADAC)*(i+2))%0x0A+0x30)&0x000000FF;
}
mid[len+1]='/0';
strcat(mid,"-");
temp=(len*sum)%0x64+0x30;
ultoa(temp,lastnum,10);
strcat(mid,lastnum);
//还原成真码
int m_len=strlen(mid);
for(i=1;i<m_len;i++)
{
mid[i]=((mid[i]^0x20)%0x0A)+0x30;
}
printf("注册码 serial:%s/n",mid);
return 0;
}
5、学习汇编知识
lea edi, dword ptr [ebp-11F]
lea esi, dword ptr [402443]
mov ecx, 1B
rep movs byte ptr es:[edi], byte ptr [esi]
Rep 指令a:执行指令a ,ECX次数 一共开辟ECX*4个字节空间
Movsx OPD,OPS OPS内容----àOPD ,左边空缺用OPS符号填充
Movzx OPD,OPS OPS内容----àOPD ,左边空缺以0填充
mov eax, 11CF
movzx ecx, byte ptr [ebp-31F]
cdq
idiv ecx
Cdq:EAX符号扩展到EDX ---------àEDX:EAX 双字扩展4字
Idiv OPS :带符号除法 被除数EDX:EAX 除数OPS
EDX:EAX /OPS 商--------àEAX
EDX:EAX/OPS 余数-----àEDX
MOV ECX,0A
CDQ
IDIV ECX
ADD EDX,30
数字 0 0x30 EDX%0A+0x30 转换为数字的ASCII码
大写字母 A 0x41 EDX%0A+0x41 转换为大写字母的ASCII码
小写字母 a 0x61 EDX%0A+0x61 转换为小写字母的ASCII码
MOV DI ,OFFSET BUFDAT
MOV CX ,LENGTH BUFDAT
MOV AL ,00
CLD :高地址取 SLD:低地址取
REP STOSB STOSB一次复制一个字节 AL--àDI
mov ecx, 30h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi] stos是串存储指令,它的功能是将eax中的数据放入edi所指的地址中,同时,edi会增加4(字节数)。rep时指令重复执行ecx中填写的次数。
6、函数调用规则:调用者和被调用者函数间传递参数及返回参数的方法
Windows下函数调用方式由
Pascal方式
Pascal调用规则:
(1)参数从左到右入栈;
(2)被调用参数在返回前自行清理堆栈;
(3)不支持可变参数的函数调用。
C方式(_cdecl)
_cdecl调用规则:
(1)参数从右到左进入堆栈;
(2)在函数返回后,调用者要负责清除堆栈,所以这个调用常会生成较大的可执行文件。
WINAPI方式(_stdcall)
_stdcall又称为WINAPI,其调用规则:
(1)参数从右到左入栈;
(2)被调用的函数在返回前自行清理堆栈,所以生成的代码比cdecl小。
内核快速调用方式(_fastcall)
C++中this call方式(_thiscall)
注意:在Windows中,不管哪种调用方式都是返回值放在eax中,然后返回。外部从eax中得到返回值。
【No1.rar】CrackMe下载地址:http://e.ys168.com/?awayfrompast
- No.1 入门级CrackMe分析
- CrackMe技术等级自测3级一个CrackMe分析
- Crackme 1
- CrackMe的算法分析
- Android Crackme分析
- crackMe的逆向分析
- 一个CrackMe的分析
- CrackMe破解【4】- 入门级别
- CrackMe破解【5】- 入门级别
- 无提示CrackMe算法分析
- 一个简单的CrackMe分析
- 一个简单的CrackMe分析
- abex‘ crackme#1
- 170524 逆向-CrackMe(1)
- Scala入门No.1
- CrackMe破解【6】—— 入门级别
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- POJ 2318 TOYS
- 转载 《Windows内核编程》之基本汇编指令
- 给腾讯和马化腾的3个建议
- 又道PHP5中的魔术方法
- 单文件上传【下载、删除】
- No.1 入门级CrackMe分析
- 修改代码要注意的地方
- 给一个字符串将其中的'*'字符提到该字符串的前面,而且其他字符的相对顺序不会改变。
- Struts2访问web元素(包括:request,session,application和HttpServletRequest,HttpServletSession, HttpServletContext)的4种方法
- Delphi 匿名函数的几个实际应用(三)
- Havok 授权地址
- 实现PHP伪静态的方式之URL重写
- 难以承受之痛的背后——致QQ用户的第二封信
- A web search analysis considering the intention behind queries