腾龙细雨 发表于 2015-8-6 21:31

160个CrackMe 之002 by:TamronDrizzle 破解&算法

本帖最后由 腾龙细雨 于 2015-8-7 19:16 编辑

【文章作者】: 腾龙细雨 - TamronDrizzle
【软件名称】: Afkayas.1
【操作平台】: Windows XP
【下载地址】: 自行搜索
【加壳方式】: 无有
【保护方式】: 无有
【编写语言】: Microsoft Visual Basic 5.0 / 6.0
【使用工具】: OD & ExeinfoPe
【软件介绍】: 比较好破没有暗桩
【作者申明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

http://www.52pojie.cn/static/image/hrline/1.gifhttp://www.52pojie.cn/static/image/hrline/1.gif


【详细过程】
当注册失败时有一个弹窗 我们下一个信息框断点
BPMessageBoxA
由于是vb
BP rtcMsgBox
再次单击 后断下F2取消断点
ctrl+F9 一次 F8一次 返回到程序的领空

在代码的上面有注册成功和注册失败的注记 ,这条代码应该就是关键跳

00402582   .8945 A4       mov dword ptr ss:,eax
00402585   .894D BC       mov dword ptr ss:,ecx          ;ntdll.7C93005D
00402588   .8945 B4       mov dword ptr ss:,eax
0040258B   .74 58         je short Afkayas_.004025E5            <------
0040258D   .68 801B4000   push Afkayas_.00401B80                   ;You Get It
00402592   .68 9C1B4000   push Afkayas_.00401B9C                   ;\r\n
00402597   .FFD7          call edi                                 ;msvbvm50.__vbaStrCat

给它nop掉,运行测试,注册成功

保存程序



接下来是算法部分
http://www.52pojie.cn/static/image/hrline/5.gifhttp://www.52pojie.cn/static/image/hrline/5.gifhttp://www.52pojie.cn/static/image/hrline/5.gif


我们在这个函数的头部 下断 然后一直f8,直到用户名出现


我们截获了这一段代码
0040240F   .8B45 E4       mov eax,dword ptr ss:          ;EAX 注册名
00402412   .50            push eax                                 ; /String = NULL
00402413   .8B1A          mov ebx,dword ptr ds:               ; |
00402415   .FF15 E4404000 call dword ptr ds:[<&MSVBVM50.__vbaLenBs>; \获取注册名长度
0040241B   .8BF8          mov edi,eax                              ;EDI=文本长度
0040241D   .8B4D E8       mov ecx,dword ptr ss:          ;ECX 注册名
00402420   .69FF FB7C0100 imul edi,edi,0x17CFB                     ;EDI=EDI*0x17cf8
00402426   .51            push ecx                                 ; /String = "?"
00402427   .0F80 91020000 jo Afkayas_.004026BE                     ; |
0040242D   .FF15 F8404000 call dword ptr ds:[<&MSVBVM50.#rtcAnsiVa>; \删除首位数据
00402433   .0FBFD0      movsx edx,ax                           ;edx=ASCII(first)
00402436   .03FA          add edi,edx                              ;edi=edi+edx



asm上有注释,我就不再解释


其实注册码的运算还没有完成,继续向下


00402516   .8B3D 00414000 mov edi,dword ptr ds:[<&MSVBVM50.__vbaSt>;msvbvm50.__vbaStrCat
0040251C   .50            push eax
0040251D   .68 701B4000   push Afkayas_.00401B70                   ;AKA-
00402522   .51            push ecx                                 ; /String = "?"
00402523   .FFD7          call edi                                 ; \__vbaStrCat
00402525   .8B1D 70414000 mov ebx,dword ptr ds:[<&MSVBVM50.__vbaSt>;msvbvm50.__vbaStrMove
0040252B   .8BD0          mov edx,eax
0040252D   .8D4D E0       lea ecx,dword ptr ss:


这段代码的意思是

注册码=“AKA-”+注册码


注册码的生成

“AKA-” + 用户名长度 * 0x17cf8 + 第一位注册名的ascii码

算法分析完毕
http://www.52pojie.cn/static/image/hrline/5.gifhttp://www.52pojie.cn/static/image/hrline/5.gifhttp://www.52pojie.cn/static/image/hrline/5.gif



PS:本人菜鸟一枚 ,大神勿喷

http://www.52pojie.cn/static/image/hrline/2.gif


【经验总结】

找准函数后关键跳的上方不远处就可以找到算码代码

http://www.52pojie.cn/static/image/hrline/4.gif


文章出处 吾爱破解论坛   by 腾龙细雨
转载请注明作者并保持文章的完整, 谢谢!
                                     2015年8月6日20时59分14秒




附件下载

Very_good 发表于 2015-8-6 21:39

额顶一下吧

彼岸花、绽放 发表于 2015-8-7 07:43

感谢分享,但是本人菜鸟,看不懂

小人国历险记 发表于 2015-8-7 13:35

拿去了,真的太感谢楼主了{:300_963:}

pk8900 发表于 2017-5-30 20:24

本帖最后由 pk8900 于 2017-5-30 20:27 编辑

已OK,分析结果和楼主相同,正好在学习C++,于是编了个C++的注册机
代码如下:
#include<iostream>
#include<sstream>
using namespace std;
string name;
char head;
int main(){
      cout<<"Name:";
      cin>>name;
      istringstream sin(name);
      sin>>head;;
      cout<<"Serial:AKA-"<<name.size()*97531+head<<endl;
}
应该可以算出一般情况,对于特殊情况不能处理,C++刚开始学,继续下一个。
页: [1]
查看完整版本: 160个CrackMe 之002 by:TamronDrizzle 破解&算法