CrackMe160之第一个,分析算法并写出注册机!
本帖最后由 zcl0317 于 2018-4-11 20:59 编辑CrackMe160之第一个,分析算法并写出注册机!还请高手指点。不废话,下面开始!新手,只能找点小CM欺负一下。{:5_191:}
载入OD,输入用户名,假码。下的断点是MessageBoxA!回溯到关键CALL处。
此处下断点,遂一分析!
0042FA52|.E8 D96EFDFF call Acid_bur.00406930
0042FA57|.83F8 04 cmp eax,0x4 ;用户名至少4位
0042FA5A|.7D 1D jge short Acid_bur.0042FA79 ;JGE为不小于则跳。
0042FA5C|.6A 00 push 0x0
0042FA5E|.B9 74FB4200 mov ecx,Acid_bur.0042FB74 ;ASCII 54,"ry Again!"
0042FA63|.BA 80FB4200 mov edx,Acid_bur.0042FB80 ;ASCII 53,"orry , The serial is incorect !"
0042FA68|.A1 480A4300 mov eax,dword ptr ds:
0042FA6D|.8B00 mov eax,dword ptr ds:
0042FA6F|.E8 FCA6FFFF call Acid_bur.0042A170
0042FA74|.E9 BE000000 jmp Acid_bur.0042FB37
0042FA79|>8D55 F0 lea edx,
0042FA7C|.8B83 DC010000 mov eax,dword ptr ds:
0042FA82|.E8 D1AFFEFF call Acid_bur.0041AA58 ;计算出用户位数
0042FA87|.8B45 F0 mov eax,
0042FA8A|.0FB600 movzx eax,byte ptr ds: ;用户名第一位的ASSIC码给EAX
0042FA8D|.F72D 50174300 imul dword ptr ds: ;用户名第一位78H*29H=1338H
0042FA93|.A3 50174300 mov dword ptr ds:,eax ;把相乘的结果给0x431750
0042FA98|.A1 50174300 mov eax,dword ptr ds:
0042FA9D|.0105 50174300 add dword ptr ds:,eax ;1338H+1338H=2670H
0042FAA3|.8D45 FC lea eax, ;ebp-0x4的地址传送到EAX中
0042FAA6|.BA ACFB4200 mov edx,Acid_bur.0042FBAC
0042FAAB|.E8 583CFDFF call Acid_bur.00403708
0042FAB0|.8D45 F8 lea eax, ;ebp-0x8的地址传送到EAX中
0042FAB3|.BA B8FB4200 mov edx,Acid_bur.0042FBB8
0042FAB8|.E8 4B3CFDFF call Acid_bur.00403708
0042FABD|.FF75 FC push ;
0042FAC0|.68 C8FB4200 push Acid_bur.0042FBC8 ;
0042FAC5|.8D55 E8 lea edx,
0042FAC8|.A1 50174300 mov eax,dword ptr ds:
0042FACD|.E8 466CFDFF call Acid_bur.00406718 ;把运算出来的十六进制序列号换算成10进制的9840
0042FAD2|.FF75 E8 push
0042FAD5|.68 C8FB4200 push Acid_bur.0042FBC8 ;
0042FADA|.FF75 F8 push ;
0042FADD|.8D45 F4 lea eax,
0042FAE0|.BA 05000000 mov edx,0x5
0042FAE5|.E8 C23EFDFF call Acid_bur.004039AC ;此CALL里面会把序列号连接成这样"CW-9840-CRACKED"
0042FAEA|.8D55 F0 lea edx,
0042FAED|.8B83 E0010000 mov eax,dword ptr ds:
0042FAF3|.E8 60AFFEFF call Acid_bur.0041AA58 ;提取假码进行校对
0042FAF8|.8B55 F0 mov edx, ;到此算法分析完成。
0042FAFB|.8B45 F4 mov eax,
0042FAFE|.E8 F93EFDFF call Acid_bur.004039FC
0042FB03|.75 1A jnz short Acid_bur.0042FB1F
0042FB05|.6A 00 push 0x0
0042FB07|.B9 CCFB4200 mov ecx,Acid_bur.0042FBCC
0042FB0C|.BA D8FB4200 mov edx,Acid_bur.0042FBD8
0042FB11|.A1 480A4300 mov eax,dword ptr ds:
0042FB16|.8B00 mov eax,dword ptr ds:
0042FB18|.E8 53A6FFFF call Acid_bur.0042A170
0042FB1D|.EB 18 jmp short Acid_bur.0042FB37
0042FB1F|>6A 00 push 0x0
0042FB21|.B9 74FB4200 mov ecx,Acid_bur.0042FB74 ;ASCII 54,"ry Again!"
0042FB26|.BA 80FB4200 mov edx,Acid_bur.0042FB80 ;ASCII 53,"orry , The serial is incorect !"
0042FB2B|.A1 480A4300 mov eax,dword ptr ds:
0042FB30|.8B00 mov eax,dword ptr ds:
0042FB32|.E8 39A6FFFF call Acid_bur.0042A170 ;
下面总结算法,写注册机!
分析算法为:用户名至少4位,提取用户名第一位的16进制ASCII码乘以29H,再把结果相加一次后。转成10进制。连接字符串"CW-****-CRACKED"
以用户名xuepojie为例:(78H*29H)+(78H*29H)=2670H 转成10进制为9840.则xuepojie对应的序列号为"CW-9840-CRACKED"
来学习经验
{:5_116:}{:5_116:}{:5_116:} 好的教程都要看一看。 单逆向教程 算是比较基础的吧,我是学习中的小菜鸟。大牛见笑了{:5_118:} 这是无壳CrackMe呀 分析算法并写出注册机 好好学习,天天、逆向 分析算法厉害 非常好的单逆向教程