能力值:
(RANK:410 )
|
-
-
2 楼
好累,休息几天。
|
能力值:
(RANK:260 )
|
-
-
3 楼
你这个虚拟机引擎是工作代码还是唬人的。。。
我把解密后的数据从内存中抓出来,有256K那么大,解析出来一千多条“伪”指令。
当然,是按照我发明的格式书写的。
不过今天可真没心情看它了。
另外,那个any pass的解密代码是哪来的,我谷歌了半天也没找到。。。
|
能力值:
(RANK:410 )
|
-
-
4 楼
工作代码。
any pass是什么?里面有aplib的解压代码,是说这个?
|
能力值:
(RANK:260 )
|
-
-
5 楼
原来这个压缩算法是叫aplib啊,我看到有固定的文件头的结构,就把它拿到TrID上检测,它告诉我结果是:
Identification results: File size: 121KB
Match Ext File type Related URL Def's author 100.0% APW Any Password data http://www.romanlab.com/apw/ Marco Pontello
而且是100%匹配,我就以为是用了any pass的加密。结果后来发现解压时也没要求密码,所以就拿不准了,来问问。
原来是个压缩的库。。。 好,我试着理解那些“伪”指令去了,希望自己运气好一点。。。
|
能力值:
(RANK:410 )
|
-
-
6 楼
没有mm和偶像们的crackme支持率下载率高。 自己顶下。
|
能力值:
(RANK:260 )
|
-
-
7 楼
虚拟机的结构已经完全搞清楚了,虚拟机指令解析也完成了。
现在你那个key.dat已经可以在我自己实现的引擎上跑了,也能弹出一个什么都没有的MessageBox.
但是逆向解析的语义分析和逻辑运算化简遇到了麻烦。
本人不是科班出身,对于这方面没能力。
只用 and_or_not 和 移位 可以实现任意的算术逻辑运算,让我从算术表达式化成and_or_not与移位运算组合的正向的变换我还有点想法,但要从and_or_not 和 移位运算的组合中还原出原来的表达式,我有点吃力。
我可不想人式阅读两万多行由and_or_not 和 循环移位 组成的“汇编代码”。
再过几天吧,看能不能有点突破。
说实话这是我第一次碰VM的东西,以前一看VM,就直接PASS了。不过这次我一定要做到底,不管能不能成功。
|
能力值:
( LV2,RANK:140 )
|
-
-
8 楼
破解成功的标准是啥? 替换掉MessageBox算不算?
|
能力值:
(RANK:570 )
|
-
-
9 楼
搞VM原来要做这么多工作的
|
能力值:
( LV2,RANK:140 )
|
-
-
10 楼
正在看你推荐的系列文章,只看完了第一篇。觉得你不去做教师真的是浪费材料了~~~~~
睡觉去了,老了,开始注意养生了~~~~
|
能力值:
(RANK:410 )
|
-
-
11 楼
很可怕。vm只是个折磨cracker耐心的东东,就怕不放弃的。
原则上不算。不过如果已经知道成功的messagebox的提示内容,也可以吧。
|
能力值:
(RANK:260 )
|
-
-
12 楼
成功的MessageBox的内容,难道不是"OK"??
对程序的分析,猜测出的。
不过我还是认为只有算法才算是成功。
|
能力值:
( LV2,RANK:140 )
|
-
-
13 楼
不会只是"OK"吧?key.day里难道没有“恭喜发财”之类的提示?
|
能力值:
(RANK:410 )
|
-
-
14 楼
以后的crackme会。或加上“钱钱”。
|
能力值:
( LV9,RANK:180 )
|
-
-
15 楼
这东西不错
不知狼兄是否方便事后将 0 ' 2 变换成[I]各种运算[/I]的方式分享出来吗 ?
Ex: ((a&b) | (c&d))' , if a or b=0 , c=d ,then Y= c'
再经过一连串的类似过程变成其实是 a+b 或 a xor b 之类的
这有点类似变形HASH
|
能力值:
( LV9,RANK:180 )
|
-
-
16 楼
|
能力值:
(RANK:410 )
|
-
-
17 楼
膜拜。又没能逃脱sessiondiy的魔爪。
非常感谢所有下载并帮忙测试的朋友,多谢书呆彭、nkspark、sessiondiy的反馈。
下面给出算法简单说明,想自己跟的可先跳过。
算法是抄袭ccfer的,几乎没有改动,只是将它的一个常数0xBADC0DE改为0x900DC0DE。
一组有效注册码为:shellwolf cfc9fa64482c946f
我的c比较差,下面一个实现很丑陋,
void main()
{
char name[12]="shellwolf";
DWORD name_v=0;
DWORD reg_v[2];
int tmpi;
for(tmpi=0;tmpi<strlen(&name[0]);tmpi++)
{
name_v=(name_v>>1)|(name_v<<31);
name_v=name_v+name[tmpi];
name_v=(name_v>>3)|(name_v<<29);
name_v=name_v^name[tmpi];
}
reg_v[0]=name_v^0x900dc0de;
reg_v[1]=(name_v-0x53589793)^0x31415926;
getch();
}
|
能力值:
( LV9,RANK:180 )
|
-
-
18 楼
这东西我有看到
但不是很清楚在做什么
vm扭曲就是有差
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
.................
比较牛
搞不定
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
..是版主删除了吗?不是给出算法了?怎么我没看到..别删除啊..学习下嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
不好意思 小菜我没搞定。。。。。。。。。
|
能力值:
( LV2,RANK:140 )
|
-
-
22 楼
高人说说爆的过程啊~~~~~
我完全看不懂这个程序,不过在JMP MessageBox下断点,然后改改堆栈,也能弹一个类似的框出来的哦~~~~
|
能力值:
( LV2,RANK:140 )
|
-
-
23 楼
主流的VM到底保护的是啥? 数据还是流程? 还是不同的VM有不同的侧重?
VM能自己完成API的功能吗? 在VM中调用API是不是VM不可克服的软肋?
|
能力值:
( LV9,RANK:180 )
|
-
-
24 楼
没记错的话, 比对错误是至 2a350
爆的方法可为:
1. 你可以将 2a350 改成下一条的差距, 将会变成类似如下的流程: (类似 nop)
401000: jnz 401002
401002:
2. 将上一条指令的变量赋于值由 0 改为 -1, 将会变成类似如下的流程:(流程相反了)
401000: jz 401234
401002:
要再往更前的地方改其他的变量也行. 不过这不在讨论范围.
不管那一种, 反正这东西有二处就对了.
第1处是比对后8, 第2处是比对前8
以上纯属回忆, 所有数值纯属虚构
所改数据可用aPLib压回, 不过应该没人会真的这么做.
|
能力值:
( LV9,RANK:180 )
|
-
-
25 楼
这叫乱改
123
|
|
|