又是一年寒岁至,更深月落满河星。
1. 信息收集
还是老规矩,先照我们的习惯来走一套
PEID查壳,VB程序,无壳
打开crackme,看下程序流程。依旧是经典的Name/Serial类型
嗯~~~ 这次倒是对Key没有什么要求了,我们可以愉快的输入英文了。
2.程序分析
2.1 程序爆破
载入OD,查找字符串。刚好昨天看到了一篇帖子,说是VB语言是用的Unicode字符,因此查找字符串的时候需要搜素Unicode字符,而不是ASCII字符。
搜索Unicode字符后,我们可以在中文搜索引擎中看到我们测试的时候,所看到的错误提示。
让我们来随意选中一个,双击进入函数
根据OD的跳转提示,以及我们下面的字符提示,可以很明显的看出来这里就是我们的关键跳转。想要爆破的话,只要将这里nop掉,就可以成功爆破了
2.2 算法分析
我一直都在强调,爆破并不是我们的最终目标,搞懂程序的算法流程才是最重要的。下面我们来继续看我们的算法部分
重新载入程序,拉到我们函数的开头部分下断,并运行,使程序断下来
这个crackme分析的时候遇到了些问题,因为用到了太多的VB函数,但是我对VB不熟,导致分析时很难理解它的赋值等操作到底是怎么操作的。。。。
不过还好,通过它的函数,还是可以看个七七八八的。
1 | 00402126 . FF15 20414000 call dword ptr ds:[<&MSVBVM50.__vbaVarForI>; \__vbaVarForInit //初始化 |
反复分析后,发现这块内容就是将我们用户名每个字符的16进制的ASCII值相加。
唉,VB函数的传参实在是太奇怪了,只知道经过函数后莫名其妙的就出来了个值,但是怎么传参和输出的搞不明白。。不会。。。。
不过也拿到了我们想要的结果了,继续往下看
1 | 004021E5 . C785 5CFFFFFF>mov dword ptr ss:[ebp-0xA4],0x499602D2 ; | |
这里是利用了__vbaVarMul
函数,将我们计算出来的值'a'+'a'+'a' = 0x123
值和0x499602D2
相乘,注意这里其实是10进制数据相乘
1 | 0x123 * 0x499602D2 = 0x53A58534B6 = 359259255990 |
计算出我们的值后,继续对code值进行处理替换
1 | 0040220F . 51 push ecx |
这里是我多次下断追踪后得到的具体对字符替换的地方,程序已经在MSVBVM50模块内了
最后分析结束,这个crackme就是将用户名每个字符的16进制ASCII值相加后的结果,再转换为10进制然后和1234567890相乘。得到结果后,将结果的第4位与第9位分别用’-‘替换,即为最后的结果。
2.3 注册机
1 |
|
3. 参考链接
VB函数介绍
https://www.cnblogs.com/bbdxf/p/3780187.html
发布时间: 2022-01-23
最后更新: 2023-07-21
本文标题: Andrnalin.2
本文链接: https://foxcookie.github.io/2022/01/23/Andrnalin-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!