免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 软件破解 > 破解Crackme的分析和注册机写法(7)

破解Crackme的分析和注册机写法(7)

时间:2011-12-15 22:58来源:未知 整理:寂涯网络 点击:


址对应值
004038DA  |.  8B57 FC       mov     edx, dword ptr [edi-4]       ; 该地
址对应值
004038DD  |.  29D0          sub     eax, edx

最终跟踪后得到,只要call1 内的序列号正确则完成注册。由此得出call1内的两个循
环体既是算法关键。具体分析见上面代码注释  
sum=0;
//循环开始
sum +=user[i];
sum = sum<<8;
sum = sum | str[i];
//循环结束
sum = sum^0x12345678
sum%0xa = X
[X+428884] 即为最终序列号

既然如此我们直接写出注册机,因为算法分析出来了,所以就比较容易写出注册机了,
贴下代码: 
 
#include<stdio.h>
#define MAX 100
int main()
{
  char *str="LANNYDIBANDINGINANAKEKHYANGNGENTOT";char pass[] = {0x4C,
0x41, 0x4E, 0x4E, 0x59,  0x35, 0x36, 0x34, 0x36, 0x35, 0x32, 0x31};char
xor[MAX]="";
 char user[MAX];char *password;
 int i=0;int sum=0;int last; int m; int j;
 password = (char*)malloc(sizeof(char*));
 printf("User:");
 scanf("%s", user);
 //步骤 1
 for(i=0; i<strlen(user) && i<strlen(str); i++)
 {
  sum +=user[i];
   sum = sum<<8;
   sum = sum | str[i];
   if(sum<0) sum=-1*sum;
}
  sum = sum^0x12345678;
 last = sum;

//步骤 2  

 i=0;
 while( sum != 0)
 { 
  m = sum%0xa;
   sum = sum/0xa;
     m += 0x30;
  if( m >= 0x3A)
  {
   m += 0x7;
  } 
  xor[i]=m; 
  i++;
 }
 //步骤 3
 j=0;
 for(;i>0;i--)
 {
  m=last%0xa;

   password[j] = pass[m];
  j++;
  last=last/0xa;
 }
 printf("Serial:%s\n", password);
 return 0;

注册机写出来了进行一下测试看看是不是可以。

至此我们的本次Crackme逆向之旅就算是完成了,这个crackme的难度应该还算可以吧,
程序里面调用了很多函数,需要一层层去分析,是需要花费很多时间去彻底理清思路的,学
习破解逆向最好的办法就是不断地尝试。希望读者能自己去亲自调试一下,技术都是在不知
不觉的尝试中进步的。

本页地址 http://www.jybase.net/ruanjianpojie/20111215719.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com