吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 1243|回复: 9

[KeyGenMe] KeyGenMe 两种难度

[复制链接]
AmIzero 发表于 2019-5-14 22:43
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 AmIzero 于 2019-5-21 11:15 编辑

正确密钥

PITYTOZLOTKOZIGYHYSLUICTB
FPGAPQCTXCFHHNCAWYUCTMYPY
UPX嗯。。现在应该可以做出key maker了
easy 和 hard 算法 完全相同,只是hard加了混淆 easy除了加了upx减小体积外无任何混淆
捕获.PNG Release.7z (398.71 KB, 下载次数: 5)

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

冰露㊣神 发表于 2019-5-15 12:54
Sound 发表于 2019-5-14 23:46
回答: 因为UP的 hard的 Rm 太  牛A 牛C 不能形容,只能取AC中间的 牛B了。

版主也水贴?
Sound 发表于 2019-5-14 23:46
回答: 因为UP的 hard的 Rm 太  牛A 牛C 不能形容,只能取AC中间的 牛B了。

免费评分

参与人数 2吾爱币 0 热心值 +1 收起 理由
穿透骨頭撫摸妳 + 1 + 1 小孩子才做選擇題,我全都要
huzpsb -1 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

evill 发表于 2019-5-15 08:15
crack5 发表于 2019-5-15 18:16
也不是不可能  简单看了下 楼主上了VEH 然后调用线程抛异常
liphily 发表于 2019-5-15 20:08
crack5 发表于 2019-5-15 18:16
也不是不可能  简单看了下 楼主上了VEH 然后调用线程抛异常

说起异常,我就想起当初有个大佬分析tp的时候说,
tp会故意制造异常,如果有别的调试器去处理这个异常了,就认为是开挂了
梦游枪手 发表于 2019-5-20 12:49
两个km的算法貌似一样,不过真的只能用牛X来形容了。hard加了大量的混淆代码,看了两眼放弃了。easy的简单很多,但也不容易啊。
附keygen代码,代码有点烂
[Asm] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void keygen(unsigned char* key);
void tablegen(unsigned char* key,unsigned int * out,int len);
void decrytion(unsigned char* src,unsigned int * table,int len);
int main(int argc, char const *argv[])
{
	unsigned char result[0x1a];
  memset(result,0,0x1a);
	srand((unsigned)time(NULL));
  keygen(result);
  printf("%s\n",result);
	return 0;
}
void keygen(unsigned char* key){
	unsigned char code[0x1a];
	unsigned int foureight;
	unsigned char out [5];
	unsigned int* table;
	unsigned char result [0x0012] =
		{
		0xf7, 0x42, 0x91, 0xf8, 0x0e, 0xac, 0xd6, 0x7a, 0x3c, 0xdd, 0x46, 0x10, 0xc3, 0xdf, 0xd1, 0x12,
		0xbb, 0x00
		};
  for (int i = 0; i < 4; ++i)
  {
    code[i]=rand() % 26 + 0x41;
  }
  code[4]=0;
	foureight = *(unsigned int *)code * (*(unsigned int *)code + 16 * *(unsigned int *)code + 3) + 0x3F3;
	for (int i = 0; i < 4; ++i)
	{
		code[i+4]=*((unsigned char *)&foureight +i)%0x1a+0x41;
	}
	code[8]=0;
  table=(unsigned int *)malloc(1024);
  memset(table,0,1024);
  tablegen(code,table,8);
  decrytion(result,table,sizeof(result)-1);
  free(table);
  for(int i=0;i<sizeof(result)-1;i++){
    code[8+i]=result[i]%0x1a+0x41;
  }
  code[0x19]=0;
  for (int i = 0; i < 0x1a; ++i)
  {
    key[i]=code[i];
  }
}
void tablegen(unsigned char* key,unsigned int* out,int len){
	int n;
	int p;
	int on;
	int c;
	out[0] = 255;
	n=0;
  	do
  	{
    	out[n+1] = (0x2AB * out[n] + 0x151) % 256;
    	++n;
  	}
  	while ( n < 255 );
  
  	on = 0;
  	p = 0;
  	n = 0;
    c = 0;
  	do
  	{
    	on = out[n];
    	p = (unsigned char)(p+on + *(c + key));
    	out[n] = out[p];
    	out[p] = on;
    	++n;
    	if ( ++c >= len ){
    		c=0;
    	}
      	
  	}
  	while ( n < 256);
    
}
void decrytion(unsigned char* src,unsigned int * table,int len){
	int p;
	int n;
	int tc;
	int tp;
	int tmp;
	int c;
	n=0;
	c=0;
	p=0;
	if(len>0){
		do
    	{
      	p++;
      	tp = table[p];
      	tc = (unsigned char)(n + tp + 1);
      	tmp = table[tc];
      	table[p] = tmp;
      	table[tc] = tp;
      	*(unsigned char*)(c++ + src) ^= (unsigned char)(table[tp ^ (unsigned char)(tmp + tp)]);
      	n=tc;
    	}
    	while ( c < len );
	}
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
AmIzero + 1 + 1 我很赞同!

查看全部评分

 楼主| AmIzero 发表于 2019-5-21 10:59
梦游枪手 发表于 2019-5-20 12:49
两个km的算法貌似一样,不过真的只能用牛X来形容了。hard加了大量的混淆代码,看了两眼放弃了。easy的简单 ...

rc4的变形+强制类型转换
[C] 纯文本查看 复制代码
int trueCheckSum = 17 * b * b + 3 * b + 1011;
byte *pTC = (byte *)&trueCheckSum;
byte *pUNK = (byte *)(buffer + 4);
for (int i = 0; i < 4; i++) {
		byte s_a = (*pTC % 26 + 'A');
#ifdef testmode
		printf("%c", s_a);
#else
		if (s_a != *pUNK) {
			goto error;
		}
#endif
		pTC++;
		pUNK++;
	}

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
梦游枪手 + 2 + 1 用心讨论,共获提升!

查看全部评分

梦游枪手 发表于 2019-5-21 11:46
AmIzero 发表于 2019-5-21 10:59
rc4的变形+强制类型转换
[mw_shl_code=c,true]int trueCheckSum = 17 * b * b + 3 * b + 1011;
byte *p ...

原来是RC4,当时感觉伪代码有点眼熟的
 楼主| AmIzero 发表于 2019-5-21 11:51
梦游枪手 发表于 2019-5-21 11:46
原来是RC4,当时感觉伪代码有点眼熟的

[C] 纯文本查看 复制代码
void rc4_setup(struct rc4_state *s, unsigned char *key, int length)
{
	int i, j, k, *m, a;

	s->x = 0;
	s->y = 0;
	m = s->m;
	
	m[0] = 0xFF;
	for (i = 1; i < 256; i++)
	{
		m[i] = (m[i-1] * 683 + 337) % 256;
	}

	j = k = 0;

	for (i = 0; i < 256; i++)
	{
		a = m[i];
		j = (unsigned char)(j + a + key[k]);
		m[i] = m[j]; m[j] = a;
		if (++k >= length) k = 0;
	}
}

void rc4_crypt(struct rc4_state *s, unsigned char *data, int length)
{
	int i, x, y, *m, a, b;

	x = s->x;
	y = s->y;
	m = s->m;

	for (i = 0; i < length; i++)
	{
		x = (unsigned char)(x + 1); 
		a = m[x];
		y = (unsigned char)(y + a + 1);
		m[x] = b = m[y];
		m[y] = a;
		data[i] ^= m[(unsigned char)(a + b ^ a)];
	}

	s->x = x;
	s->y = y;
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
梦游枪手 + 1 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:禁止回复非技术或与主题无关水贴,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2019-9-18 17:35

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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