首页
社区
课程
招聘
[菜鸟要转正]:一简单的CM分析
发表于: 2011-2-13 10:08 3575

[菜鸟要转正]:一简单的CM分析

2011-2-13 10:08
3575
程序:  keygenme1.7z

这个程序是用汇编写的,界面实在太炫了.
背景音乐听起来确实不错,它创建了一个线程负责wav的.
但是调试的时候程序断在那,那声音一卡一卡的,我实在受不了.所以把那创建线程的代码个NOP掉了.

未做加壳等任何保护,找到WM_COMMAND消息处理,下面开始分析.
先输入用户名为lazycat,注册码为123456.
然后它获取了用户名和注册码:
GetDlgItemText(hWnd, 1006, 0x0040DCF8 ,40); // 获取用户名
GetDlgItemText(hWnd, 1007, 0x0040DEF8 ,40); // 获取注册码

接着调用了一个子程序loc_401208:
int n_40DC86 = lstrlen(0x0040DCF8);
if(n_40DC86 < 4 || n_40DC86 > 32) {
   // JMP 失败
}
int a = 0, b = 0, c = 0, d = 0;
for(int i = 0; i < n_40DC86; i++) 
   b -= 0x0040DCF8[i] - 0x19;  
wsprintf(0x0040E0F8, "%lX", b); // 保存第一个KEY

b = b * b * b;
wsprintf(0x0040E1F8, "%lX", b); // 保存第二个KEY

c = 0x0040E0F8 * 0x0040E0F8 - 0x0040E0F8; // Shit.
wsprintf(0x0040E2F8, "%lX", c);

wsprintf(0x0040DDF8, "Bon-");
lstrcatA(0x0040DDF8, 0x0040E0F8); // 连接第一个KEY
lstrcatA(0x0040DDF8, "-");
lstrcatA(0x0040DDF8, 0x0040E1F8); // 连接第二个KEY
lstrcatA(0x0040DDF8, "-");
lstrcatA(0x0040DDF8, 0x0040E2F8);

可用的注册码为:
lazycat
Bon-FFFFFDB7-F4112A67-41720F48

算法很简单,y = F(x)式比较,分析完毕.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
注册鸡鸡源码:
#include <Windows.h>
#include <stdio.h>

char szUserName[40] = { 0 }; // 用户名  0x0040DCF8

void KeyGen()
{
  int nLen = lstrlenA(szUserName);
  if(nLen < 4 || nLen > 32) {
    printf("你的用户名长度非法...");
    return;
  }
  int nKey1 = 0;
  for(int i = 0; i < nLen; i++)
    nKey1 -= szUserName[i] - 0x19;  
  char szKey1[5], szKey2[5], szKey3[5], szKey[50];
  wsprintfA(szKey1, "%lX", nKey1);
  wsprintfA(szKey2, "%lX", nKey1 * nKey1 * nKey1);
  wsprintfA(szKey3, "%lX", 0x0040E0F8 * 0x0040E0F8 - 0x0040E0F8);
  
  lstrcpyA(szKey, "Bon-");
  lstrcatA(szKey, szKey1); // 连接第一个KEY
  lstrcatA(szKey, "-");
  lstrcatA(szKey, szKey2); // 连接第二个KEY
  lstrcatA(szKey, "-");
  lstrcatA(szKey, szKey3);
  printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
  printf("该用户名的注册码为:%s\n", szKey);
  printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
}

int main()
{
  printf("请输入用户名,长度为[4, 32]:");
  scanf("%s", szUserName);
  KeyGen();
  return 0;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 3127
活跃值: (3689)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接反汇编出代码?
2011-2-13 10:58
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主还是比较牛
2011-2-13 13:03
0
雪    币: 92
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是IDA吧。。。IDA固然强大,不过静态编译分析比较大材小用了
2011-2-13 13:22
0
游客
登录 | 注册 方可回帖
返回
//