吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2069|回复: 3

[转载KeyGenMe] 转载一枚自写km+分析过程

[复制链接]
yypE 发表于 2015-6-17 12:43 | 显示全部楼层 |阅读模式

本帖最后由 yypE 于 2015-6-17 13:01 编辑

好一阵子没上论坛了,发个KM保护ID~
KM在某首发,这里直接转过来:
要求:
提供2组可用Name与AccessCode即可,同样欢迎爆破练习
KM特征:
UPX
关键代码处虚拟,不影响追码爆破~
奖励酌情...
KM下载地址:
KeygenMe.rar (76.87 KB, 下载次数: 669)

==============================
//请没有玩过的朋友跳过以下分析内容,玩过之后再来==
==============================


分析过程:
源码如下:
  1. #include "iostream.h"
  2. #include "stdio.h"
  3. #include "math.h"
  4. #include "VirtualizerSDK.h"

  5. int code[]=
  6. {
  7.         149314,149314,138208,85146,39488,134506,119698,123400,124634,39488,
  8.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  9.                 135740,95018,124634,54296,129570,125868,39488,149314,136974,144378,
  10.                 46892,141910,124634,124634,39488,143144,128336,129570,141910,39488,
  11.                 38254,39488,75274,75274,75274,75274,75274,75274,75274,75274,
  12.                 143144,124634,148080,143144,39488,129570,135740,39488,149314,136974,
  13.                 38254,75274,75274,75274,75274,75274,75274,75274,75274,75274,
  14.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  15.                 38254,75274,0,39488,39488,92550,124634,149314,127102,124634,
  16.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  17.                 38254,135740,95018,124634,39488,120932,149314,39488,149314,149314,
  18.                 135740,149314,39488,138208,140676,136974,127102,140676,119698,134506,
  19.                 38254,138208,85146,0,39488,39488,39488,39488,39488,61700,
  20.                 135740,149314,39488,138208,140676,136974,127102,140676,119698,134506,
  21.                 38254,59232,60466,65402,55530,66636,55530,60466,60466,0,
  22.                 141910,54296,129570,143144,39488,138208,140676,136974,145612,124634,
  23.                 38254,39488,75274,75274,75274,75274,75274,75274,75274,75274,
  24.                 141910,39488,143144,128336,119698,143144,39488,149314,136974,144378,
  25.                 38254,75274,75274,75274,75274,75274,75274,75274,75274,75274,
  26.                 48126,119698,140676,124634,39488,140676,124634,119698,133272,133272,
  27.                 38254,75274,1522756,1522756,1522756,1522756,1522756,1522756,1522756,0,
  28.                 149314,39488,127102,140676,124634,119698,143144,40722,81444,59232,
  29.                 38254,39488,98720,133272,124634,119698,141910,124634,39488,85146,
  30.                 141910,54296,129570,143144,39488,138208,140676,136974,145612,124634,
  31.                 38254,135740,143144,124634,140676,39488,109826,136974,144378,140676,
  32.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  33.                 38254,39488,96252,119698,134506,124634,49360,69104,50594,71572,
  34.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  35.                 39488,13574,13574,13574,13574,13574,13574,13574,13574,309734,
  36.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  37.                 75274,136974,273948,410922,547896,684870,821844,958818,1095792,309734,
  38.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  39.                 76508,81444,83912,78976,115996,78976,2468,3702,7404,309734,
  40.                 141910,54296,129570,143144,39488,138208,140676,136974,145612,124634,
  41.                 77742,141910,54296,129570,143144,39488,138208,140676,136974,309734,
  42.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  43.                 38254,39488,98720,133272,124634,119698,141910,124634,39488,85146,
  44.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  45.                 38254,135740,143144,124634,140676,39488,80210,122166,122166,124634,
  46.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  47.                 38254,141910,141910,39488,82678,136974,123400,124634,49360,1522756,
  48.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  49.                 38254,69104,50594,71572,1522756,1522756,1522756,1522756,1522756,1522756,
  50.                 144378,140676,39488,97486,83912,39488,136974,140676,39488,119698,
  51.                 39488,14808,25914,14808,25914,13574,38254,64168,54296,544194,
  52.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  53.                 78976,233226,161654,166590,170292,186334,135740,12340,24680,568874,
  54.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  55.                 80210,0,0,0,0,0,0,0,12340,24680,
  56.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  57.                 81444,0,0,0,0,0,0,0,12340,24680,
  58.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  59.                 82678,0,0,0,0,0,0,0,12340,24680,
  60.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  61.                 83912,0,0,0,0,0,0,0,12340,24680,
  62.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  63.                 85146,0,0,0,0,0,0,0,12340,24680,
  64.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  65.                 86380,0,0,0,0,0,0,0,12340,24680,
  66.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  67.                 87614,0,0,0,0,0,0,0,12340,24680,
  68.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  69.                 88848,0,0,0,0,0,0,0,12340,24680,
  70.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  71.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  72.                 38254,0,39488,107358,140676,136974,135740,127102,56764,1522756,
  73.                 38254,0,39488,80210,122166,122166,124634,141910,141910,1522756,
  74.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  75.                 38254,39488,102422,144378,122166,122166,124634,141910,141910,125868,
  76.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634,
  77.                 38254,144378,133272,133272,149314,56764,1522756,1522756,1522756,1522756,
  78.                 143144,128336,129570,141910,39488,92550,124634,149314,127102,124634
  79. };
  80. char a;
  81. char b[256];
  82. int e;
  83. int ck(int num)
  84. {
  85.         if(num!=0)return 1;else return 0;
  86. }
  87. int vmRun(int array[10])
  88. {
  89. VIRTUALIZER_START;//CodeVirtualizer加壳标志
  90.         for (int i = 0;i <10;i++)
  91.         {
  92.                 if (i!=0)
  93.                 {
  94.                         switch (array[0])
  95.                         {
  96.                         case 31:
  97.                                 {
  98.                                         if (array[i]==00) {cout<<endl;break;}
  99.                                         if (array[i]==1234) break;
  100.                                         a=array[i];
  101.                                         cout<<a;
  102.                                         break;
  103.                                 }
  104.                         }
  105.                 }
  106.                 else
  107.                 {
  108.                         if (array[0]==32)
  109.                         {
  110.                                 e=array[9];
  111.                                 cin>>b;
  112.                                 for (int nn =0;nn < 8;nn++)
  113.                                 {
  114.                                         code[array[9]+nn]=b[0+nn];
  115.                                 }
  116.                         }
  117.                         if (array[0]==61)
  118.                         {
  119.                                 for (int nn =0;nn < 8;nn++)
  120.                                 {
  121.                                         code[array[9]+nn]&=array[nn+1];
  122.                                 }
  123.                         }
  124.                         if (array[0]==62)
  125.                         {
  126.                                 for (int nn =0;nn < 8;nn++)
  127.                                 {
  128.                                         if (nn<7)
  129.                                                 code[array[9]+nn]+=(int)sin(code[array[9]+nn+1]);
  130.                                         else
  131.                                                 code[array[9]+nn]+=(int)sin(code[array[9]]);
  132.                                 }
  133.                         }
  134.                         if (array[0]==63)
  135.                         {
  136.                                 for (int nn =0;nn < 8;nn++)
  137.                                 {
  138.                                         code[array[9]+nn]=(int)(53+4*sin(code[array[9]+nn]));
  139.                                 }
  140.                         }
  141.                         if (array[0]==64)
  142.                         {
  143.                                 for (int nn =0;nn < 8;nn++)
  144.                                 {
  145.                                         code[array[9]+nn]=code[e+nn]-code[251+nn];
  146.                                 }
  147.                         }
  148.                         for (int f=65;f<73;f++)
  149.                         {
  150.                                 if (array[0]==f)
  151.                                 {
  152.                                         return array[9-ck(code[461+f-65])];
  153.                                 }
  154.                         }
  155.                 }
  156.         }
  157.          
  158.         return 20;
  159. VIRTUALIZER_END;
  160. }

  161. void main()
  162. {
  163.         int n=0,c=0;
  164.         int array[10]={0,0,0,0,0,0,0,0,0,0};
  165.         for (int i = 0;i < sizeof(code)/sizeof(code[1]);i+=0)
  166.         {
  167.                 n=0;
  168.                 while(n<10)
  169.                 {
  170.                         array[n]=code[i+n]/1234;
  171.                         n++;
  172.                 }
  173.                 c=vmRun(array);
  174.                 i+=c;
  175.         }
  176.         cout<<endl<<endl<<endl<<endl;
  177.         getchar();
  178. }
复制代码




这不仔细看是看不出什么来的,用了个幼儿园级别的虚拟函数vmRun来解释code
真实算法翻译成伪代码:
Put Name inArray[2 to 9];
//Array {2 3 4 56 7 8 9}
[2]= [2]and111
[3]=[3]and222
[9]=[9]and888 …算法(SF)1

[2]=[2]+sin([3] )//sin取整
[3]=[3]+sin([4] )
[9]=[9]+sin([2] )…SF2

[2]=53+4*sin( [2])//+后结果取整sin结果保留小数
[3]=53+4*sin( [3])
[9]=53+4*sin( [9])…SF3
//至此[2to9]中保留8位1-9字符的ASCII码(49-57)即accesscode
//明码...



简单说说这个解释器吧,main中循环抽取code中的指令(均乘以1234了,还原),一次抽取10个放在array里,丢给vmRun解释:
Array[10] info:
  
1
  
2
3
4
5
6
7
8
9
10
Type
data
data
data
data
data
data
data
data
data
其中:

Type   Func        data  Func
  31     cout            0      endl
  32     cin           1234 useless
  61     SF1
  62     SF2
  63     SF3
65-72  chk



vmRun函数里头的cin /out由1位的31/32带过,接着便是61/62/63的三个算法,代码里头都能看的看清楚

最后便是check结果了,当1位是65-72时,通过检查输入的值与算出的值的异同,来设定vmRun的返回值,如果相同(即正确),则返回第10位(20),否则返回第9位(10),vmRun的返回值作为main()中for()的跳转。


据算法可以找到爆破处(将code中的65-72中的第九位换成20就OK啦),
110455pixem899mmpixmmo.jpg

65*1234=80210=01 39 52
111603fzkaik4h7k9w9kfk.jpg

从此处开始搜索12340(10*1234),8处替换为24680(20*1234  十六68 60)即可完成爆破
保存文件如下(把upx脱了或者直接内存补丁)
120141alq8gfgtggqqgogv.jpg

爆破结果:
112838s1g14fxxpfp8zj7j.jpg

样也可以追码(明码硬伤),

code hex转int:
113238hvkyvje8mp5kpjdp.jpg

锁定32(cin *1234后为39488)输入name "xuepojie."之后发现:
114756esqsmkhqsd4pnpzm.jpg

ascii码翻译过来为21851887,输入AccessCode即可
115000s6ot2o2trt6zoywr.jpg

当然这是我知道源码的情况下OD中逆向,不知道源码也可以稍稍分析下,IDA可以逆出main中的算法,不过由于vmRun虚拟处理了下,爆破的话就只能从CODE里头下手咯。。。追码什么的,简单了,已经在上文说明了。
END

ps.
@Shark恒  
恒大,discuz论坛转帖子感觉都挺麻烦的,尤其是图片,嘿嘿,52的水印留着,不碍事儿哈
对了,上次来论坛还没开放CM区呢

点评

本兮”点评说:
很简单  发表于 2015-7-10 14:51

评分

参与人数 2HB +10 THX +2 收起 理由
Desire + 5 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
Shark恒 + 5 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2015-6-17 13:27 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Desire 发表于 2015-6-17 13:33 | 显示全部楼层

Shark恒 发表于 2015-6-17 13:27
是啊,你好久没来了。

哎哟,难得有个帖子admin还跟我抢绩效
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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