首页
社区
课程
招聘
[原创]修改下午的crackme
发表于: 2011-6-16 23:50 5350

[原创]修改下午的crackme

2011-6-16 23:50
5350
下午刚发的crackme.被exile牛轻松秒杀。。。 在下十分佩服吖。。。
我稍微修改了一下下午的crackme... 整体没有变动,PolyXorKey与crc32还是没有保护。 仍然使用。 还是只做了_tmain的保护。 不过在dwKey0 - dwKey3之间 做了一些加减乘除的运算。 看看这回谁能搞定。

我传了两个crackme.  附件中"我的第二个crackme"中是对PolyXorKey保护了的。这个要是没事可以看看。 在跑起来后断0x00402380 就可以对PolyXorKey分析了。

“稍微修改的”是这次供大家消遣的。

这里贴出来PolyXorKey的代码
__dword __API__ PolyXorKey(__dword dwKey) {
 __integer i = 0, j = 0, n = 0;
 __memory pKey = (__memory)&dwKey;
 __byte bVal = 0, bTmp = 0, bTmp2 = 0;
 dwKey ^= 0x5DEECE66DL + 2531011;
 for (i = 0; i < sizeof(__dword); i++, pKey++) {
  bVal = *pKey;
  /*
  * 第一位与第二位异或放到第一位,依次类推
  * 到达第八位,与第一位异或放到第八位
  * 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01
  */
  for (j = 0x80, n = 7; j > 0x01; j /= 2, n--) {
   bTmp = (bVal & j) >> n;
   bTmp2 = (bVal & j / 2) >> (n - 1);
   bTmp ^= bTmp2;
   bTmp <<= n;
   bVal |= bTmp;
  }
  bTmp = bVal & 0x01;
  bTmp2 = bVal & 0x80 >> 7;
  bTmp ^= bTmp2;
 
  *pKey = bVal;
 }/* end for */
 return dwKey;
}


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
深深佩服玩命大大的热情啊,向你学习!
2011-6-17 01:51
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
打了个包
Name:exileisabigsb
Key=60BCE967-76CB9366-FFD0C842-166C4F93

重新打个包
上传的附件:
2011-6-17 12:05
0
雪    币: 293
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
exile神牛真是太神了。。。
2011-6-17 12:34
0
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
5
膜拜exilei兄。。。
2011-6-17 12:47
0
雪    币: 7115
活跃值: (639)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
6
这是这次的代码。。。 我把_tmain做了保护。 PolyXorKey没做保护。  exile兄犀利的调试功底。。。
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR szBuffer[0x100] = {0};
UINT iBufferLen = 0;
__dword dwCrc32 = 0, dwKey0 = 0, dwKey1 = 0, dwKey2 = 0, dwKey3 = 0;
TCHAR szKey[0x100] = {0};
cout << "要求:写出注册机" << endl;
cout << "用户名:";__GetLine__();

// 需要虚拟化的地方
dwCrc32 = crc32((__memory)szBuffer, iBufferLen);
dwKey0 = PolyXorKey(dwCrc32);
dwKey0 = dwKey0 ^ 0xFBC3DEAB;
dwKey1 = PolyXorKey(dwKey0);
dwKey1 = dwKey1 ^ 0xAB456FDE + 0xDDEEFFBB;
dwKey2 = PolyXorKey(dwKey1);
dwKey2 = dwKey2 ^ 0xFFECD567 - 0xFBC3DEAB;
dwKey3 = PolyXorKey(dwKey2);
dwKey3 = dwKey3 ^ 0xDDEEFFBB ^ 0xAB456FDE;

_stprintf(szKey, _T("%4X-%4X-%4X-%4X"), dwKey0, dwKey1, dwKey2, dwKey3);

cout << "注册码:";__GetLine__();

if (_tcsicmp(szBuffer, szKey) == 0)
  cout << "^_^ success" << endl;
else
  cout << "-_- failed" << endl;

return 0;
}
2011-6-17 12:52
0
游客
登录 | 注册 方可回帖
返回
//