|
[分享]CrackMe 2007专辑学习笔记
这是这几天做的练习中的一个,直接从练习笔记中考过来的。。 这几天也想找个免费软件试试,结果脱壳不会,看来要一步一步的来,还是继续我的crackme。 CrackMe2007->序列号->逍遥风->Bad Sector CrackMe 00401139 $ 6A 32 PUSH 32 ; /Count = 32 (50.) 0040113B . 68 F3204000 PUSH Crackme1.004020F3 ; |Buffer = Crackme1.004020F3 00401140 . 68 C8000000 PUSH 0C8 ; |ControlID = C8 (200.) 00401145 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd 00401148 . E8 DE000000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA 0040114D . 83F8 00 CMP EAX,0 ; 判断用户名是否为空,空则跳走 00401150 . 0F84 99000000 JE Crackme1.004011EF 00401156 . 83F8 04 CMP EAX,4 ; 判断用户名是否小于4,小则跳走 00401159 . 0F82 90000000 JB Crackme1.004011EF 0040115F . 33C9 XOR ECX,ECX 00401161 . 33DB XOR EBX,EBX 00401163 . 33F6 XOR ESI,ESI 00401165 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX ; 【EBP-4】中存放用户名的长度 00401168 > 0FBE81 F32040>MOVSX EAX,BYTE PTR DS:[ECX+4020F3] ; 取得用户名的一位字符 0040116F . 83F8 20 CMP EAX,20 ; 判断取出的字符是否是空格 00401172 . 74 07 JE SHORT Crackme1.0040117B 00401174 . 6BC0 04 IMUL EAX,EAX,4 ; 取出的字符ASCII吗乘以4送入EAX 00401177 . 03D8 ADD EBX,EAX ; 在EBX中累加刚才的乘积 00401179 . 8BF3 MOV ESI,EBX ; 乘机保存到ESI 0040117B > 41 INC ECX ; 计数器累加 0040117C . 3B4D FC CMP ECX,DWORD PTR SS:[EBP-4] ; 判断是否用户名取完了, 0040117F .^ 75 E7 JNZ SHORT Crackme1.00401168 ; 没有到用户名末尾则继续,否则往下执行 00401181 . 83FE 00 CMP ESI,0 ; 如果根据用户名计算出的结果是0则跳走 00401184 . 74 69 JE SHORT Crackme1.004011EF 00401186 . BB 89476500 MOV EBX,654789 ; 将0x654789送给EBX 0040118B > 0FBE81 F22040>MOVSX EAX,BYTE PTR DS:[ECX+4020F2] ; 从用户名的最后一位开始取字符 00401192 . 4B DEC EBX ; 刚才送的那个值减一 00401193 . 6BC3 02 IMUL EAX,EBX,2 ; 减一后的值乘以2送入EAX 00401196 . 03D8 ADD EBX,EAX ; EAX和EBX相加;也就是(654789-1)*2+(654789-1) 00401198 . 4B DEC EBX ; 上面计算的结果减一 00401199 . 49 DEC ECX ; 计数器减一 0040119A .^ 75 EF JNZ SHORT Crackme1.0040118B 0040119C . 56 PUSH ESI ; /<%lu> 0040119D . 53 PUSH EBX ; |<%lX> 0040119E . 68 C7204000 PUSH Crackme1.004020C7 ; |BS-%lX-%lu 004011A3 . 68 BB214000 PUSH Crackme1.004021BB ; |s = Crackme1.004021BB 004011A8 . E8 6C000000 CALL <JMP.&USER32.wsprintfA> ; \wsprintfA 算法:用户名至少4位,分别根据用户名顺序和倒叙计算出一个值,在计算下就是注册码,具体看上面的注释和下面的注册机源码。。 顺序计算是将每位的ascii码累加;倒叙是现在ebx附一个初值,之后减一,在和顺序时计算的值*2等计算,然后按格式输出即可。 一组正确的注册码:pediy BS-6022E527-2156 #include <stdio.h> int main(void) { //这个crackme的注册码格式:BS-6022E527-2156,用户名不能低于4位。 char name[20]={"abcdef"}; int sn1; //从第一个字符开始依次取用户名中的每个字符乘以4的累加值放于此。 int sn2; //从最后一个字符倒叙取用户名,循环计算结果存放处。 int i; int ebx,esi,eax; ebx=0; esi=0; eax=0; sn1=0; sn2=0; for (i=0;i<20;i++) { sn2=sn2+name[i]*4; } esi=sn1; ebx=0x654789; for (i=19;i>=0;i--) { if (name[i]>0x0) //若是字符为空则不进入循环累计。 { ebx=ebx-1; eax=ebx*2; ebx=ebx+eax; ebx--; } } sn1=ebx; printf("用户名:%s\n",name); printf("注册码:BS-%lX-%lu\n",sn1,sn2); getchar(); return 0; } |
|
[原创]某网络电视去除网络验证
那个帖子是九天御风的,难道是同一个人??? |
|
[分享]再过几个小时,就够时间了
要刷的话很简单,用MFC向导创建个工程,加个定时器,6分钟刷次,可以每次随即产生个数,来确定刷新哪个网页, |
|
[求助]我愿交1000RMB学费学OllyDBG和汇编知识
OD的教程论坛上很多,多数都是用实例来说明的。你要是看过还是不懂,说明你看的次数少,一遍不懂就再看一遍。。 |
|
[求助]如何才能得到KK
看来你不经常来这个版块,这经常讨论这方面的。 |
|
[求助]不知道什么样的CALL才要跟进去
没有什么固定的方法,有时跟一个call就够了,有时每个都要跟进。 |
|
国际程序设计大赛作品欣赏---汇编的艺术
以前就看到过,楼主有么有每个都试验过?? |
|
[转帖]“狗日的”腾讯,搅局者还是终结者?
TX还是很不错的,比那些靠流氓软件发展的好多了 |
|
[原创]借个邀请码
勤借勤还,再借不难。 |
|
[求助]谁给个最新.NET Reflector Pro v6破解
去百度搜吧,看雪很难看到破解的发布。 |
|
[建议]受限用户久了就忘了进论坛了
看楼主的注册时间,这么久了还没有转正呀 |
|
[求助]找技术做棋牌游戏程序防挂
难道是QQ的?? |
|
[推荐]DOS下DEBUG教程
可惜现在用的地方不多了,, |
|
[原创]说来惭愧,注册一段时间了却没有转正,看来要继续努力了
慢慢挂吧,,也就半个多月。 |
|
|
|
[讨论]易语言将来有一天能成为主流语言之一吗?
我是去年才知道有易语言的,, |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值