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秒
附件下载
额顶一下吧 感谢分享,但是本人菜鸟,看不懂 拿去了,真的太感谢楼主了{:300_963:} 本帖最后由 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]