cracked me.1. Acid burn

来源:互联网 发布:优化网站的文件和资源 编辑:程序博客网 时间:2024/04/25 20:38

作为一个小菜。最近在52pojie上看了一些逆向破解的知识。 发现论坛有160个crack me。觉得不错。拿来做做。

这可把一个没基础没经验的我 弄得是稀里糊涂昏天黑地。看着前辈的经验贴,才有点懂。不多说。

//前辈大牛的帖子:http://www.52pojie.cn/thread-264393-1-1.html

打开软件,




很明显 第一关是check correct。

正常习惯 我们先尝试一个错误的 xiaozhu|123123   单击check

出现

很好 出现了 Sorry,The serial is incorrect!

我们用OD载入程序,搜索ASCII字符串。 发现有两处

1.中文搜索引擎, item 236
 地址=0042FA63
 反汇编=mov edx,0042FB80
 文本字符串=Sorry , The serial is incorect !
2.
中文搜索引擎, item 244
 地址=0042FB26
 反汇编=mov edx,0042FB80
 文本字符串=Sorry , The serial is incorect !

也不好确定是哪个。

按下F12暂停,打开调用堆栈。

看到了两个MessageBox。看堆栈的位置。  第一个位置为0x77d50550 很明显这不是程序领空。程序地址开始为 0x00400000  而第二个正好为0x00421AE.据此判断出这个位我们的MessageBox。Show Call 我们来看看代码


0042A170  /$  55            push ebp0042A171  |.  8BEC          mov ebp,esp0042A173  |.  83C4 F4       add esp,-0xC0042A176  |.  53            push ebx0042A177  |.  56            push esi0042A178  |.  57            push edi0042A179  |.  8BF9          mov edi,ecx0042A17B  |.  8BF2          mov esi,edx0042A17D  |.  8BD8          mov ebx,eax0042A17F  |.  E8 7CB4FDFF   call <jmp.&user32.GetActiveWindow>       ; [GetActiveWindow0042A184  |.  8945 F8       mov [local.2],eax0042A187  |.  33C0          xor eax,eax0042A189  |.  E8 12A0FFFF   call 004241A00042A18E  |.  8945 F4       mov [local.3],eax0042A191  |.  33C0          xor eax,eax0042A193  |.  55            push ebp0042A194  |.  68 D0A14200   push 0042A1D00042A199  |.  64:FF30       push dword ptr fs:[eax]0042A19C  |.  64:8920       mov dword ptr fs:[eax],esp0042A19F  |.  8B45 08       mov eax,[arg.1]0042A1A2  |.  50            push eax                                 ; /Style0042A1A3  |.  57            push edi                                 ; |Title0042A1A4  |.  56            push esi                                 ; |Text0042A1A5  |.  8B43 24       mov eax,dword ptr ds:[ebx+0x24]          ; |0042A1A8  |.  50            push eax                                 ; |hOwner0042A1A9  |.  E8 FAB5FDFF   call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
显而易见,这个是调用MessageBoxA函数,附上MessageBox函数原型:

int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

这个函数的地址是 0x0042A170~~0X0042A1CF

那么我们来找一个这个函数是从哪调用的呢



我们继续看刚才的堆栈调用图 找到最后一行

发现 0042A170 的call from 0042FB32   ,找到了 show call

0042FA7C  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042FA82  |.  E8 D1AFFEFF   call 0041AA580042FA87  |.  8B45 F0       mov eax,[local.4]                        ;  eax =  00DD2668 xiaozhu的地址0042FA8A  |.  0FB600        movzx eax,byte ptr ds:[eax]              ;  把第一个字符放进eax eax = 'x'0042FA8D  |.  F72D 50174300 imul dword ptr ds:[0x431750]             ;  *290042FA93  |.  A3 50174300   mov dword ptr ds:[0x431750],eax          ;  eax=0x78*0x29=0x13380042FA98  |.  A1 50174300   mov eax,dword ptr ds:[0x431750]0042FA9D  |.  0105 50174300 add dword ptr ds:[0x431750],eax          ;  eax=eax+eax  DS:[0X431750]=0X26700042FAA3  |.  8D45 FC       lea eax,[local.1]                        ;  ds:[local.1]=0012F9A40042FAA6  |.  BA ACFB4200   mov edx,0042FBAC                         ;  CW0042FAAB  |.  E8 583CFDFF   call 004037080042FAB0  |.  8D45 F8       lea eax,[local.2]0042FAB3  |.  BA B8FB4200   mov edx,0042FBB8                         ;  CRACKED0042FAB8  |.  E8 4B3CFDFF   call 004037080042FABD  |.  FF75 FC       push [local.1]                           ;  push CW0042FAC0  |.  68 C8FB4200   push 0042FBC8                            ;  -0042FAC5  |.  8D55 E8       lea edx,[local.6]                        ;  edx=12f9900042FAC8  |.  A1 50174300   mov eax,dword ptr ds:[0x431750]          ;  eax26700042FACD  |.  E8 466CFDFF   call 00406718                            ;  Stack ss:[0012F990]=00DD609C, (ASCII "9840")0042FAD2  |.  FF75 E8       push [local.6]0042FAD5  |.  68 C8FB4200   push 0042FBC8                            ;  -0042FADA  |.  FF75 F8       push [local.2]                           ;  push CRACKED0042FADD  |.  8D45 F4       lea eax,[local.3]0042FAE0  |.  BA 05000000   mov edx,0x50042FAE5  |.  E8 C23EFDFF   call 004039AC                            ;  附近的call 2 eax=0042FAEA0042FAEA  |.  8D55 F0       lea edx,[local.4]                        ;  edx 0012F9980042FAED  |.  8B83 E0010000 mov eax,dword ptr ds:[ebx+0x1E0]         ;  eax 00DD5E540042FAF3  |.  E8 60AFFEFF   call 0041AA58                            ;  附近的call 1 注册码 call0042FAF8  |.  8B55 F0       mov edx,[local.4]                        ;  edx 出现 用户密码  0042FAFB  |.  8B45 F4       mov eax,[local.3]                        ;  eax  出现正确密码0042FAFE  |.  E8 F93EFDFF   call 004039FC                            ;  strcmp0042FB03      75 1A         jnz short 0042FB1F                       ;  这个貌似是关键判断0042FB05  |.  6A 00         push 0x00042FB07  |.  B9 CCFB4200   mov ecx,0042FBCC                         ;  Congratz !!0042FB0C  |.  BA D8FB4200   mov edx,0042FBD8                         ;  Good job dude =)0042FB11  |.  A1 480A4300   mov eax,dword ptr ds:[0x430A48]0042FB16  |.  8B00          mov eax,dword ptr ds:[eax]0042FB18  |.  E8 53A6FFFF   call 0042A1700042FB1D  |.  EB 18         jmp short 0042FB370042FB1F  |>  6A 00         push 0x00042FB21  |.  B9 74FB4200   mov ecx,0042FB74                         ;  Try Again!0042FB26  |.  BA 80FB4200   mov edx,0042FB80                         ;  Sorry , The serial is incorect !0042FB2B  |.  A1 480A4300   mov eax,dword ptr ds:[0x430A48]0042FB30  |.  8B00          mov eax,dword ptr ds:[eax]0042FB32  |.  E8 39A6FFFF   call 0042A170

最后一行就是调用代码。

我们浏览了一下  发现了 两个字符串 分别对应正确和错误的情况。我们向前找 发现了一个可以JNZ 我们在此处下断点。通过改变ZF的值 可以发现产生了不同的结果,没错。这个就是关键jnz。  为了让程序表现出验证通过 我们可以采用最近单的爆破。右击这一句。binary->fill with NOP's  后,发现 之前的用户和密码 可以通过验证 爆破成功。

爆破的目的达到了。接下来我们来尝试写一个注册机。

我们单步调试。发现在jnz的前两行

042FAF8  |.  8B55 F0       mov edx,[local.4]                        ;  edx 出现 用户密码 1231230042FAFB  |.  8B45 F4       mov eax,[local.3]                        ;  eax  出现正确密码 CW-9840-CHRCKED0042FAFE  |.  E8 F93EFDFF   call 004039FC                            ;  strcmp0042FB03      75 1A         jnz short 0042FB1F                       ;  这个貌似是关键判断

依次出现了edx=CW-9840-CHRCKED 和eax =123123 

我们将CW--9840-CRACKED 作为注册码写入到软件中,发现验证通过了 没错 它就是注册码,

后面jnz是根据eax来判断返回的。 所以很明晰那中间的call就是strcmp函数 返回值存在eax中。

现在我们的问题是 注册码是如何产生的。

我们继续向上找。第一种情况。找最近的call ,很有可能是调用了一个函数得出注册码。但是我们不断的F7单步跟入,发现里面一个函数调用一个函数,显而易见。我们的猜想错了。  那么判断看来就应该是在前面一段中产生的。

我们把上面一段程序拿来 F8 调试。一行行看


0042F998  /.  55            push ebp0042F999  |.  8BEC          mov ebp,esp0042F99B  |.  33C9          xor ecx,ecx0042F99D  |.  51            push ecx0042F99E  |.  51            push ecx0042F99F  |.  51            push ecx0042F9A0  |.  51            push ecx0042F9A1  |.  51            push ecx0042F9A2  |.  51            push ecx0042F9A3  |.  53            push ebx0042F9A4  |.  56            push esi0042F9A5  |.  8BD8          mov ebx,eax0042F9A7  |.  33C0          xor eax,eax0042F9A9  |.  55            push ebp0042F9AA  |.  68 67FB4200   push 0042FB670042F9AF  |.  64:FF30       push dword ptr fs:[eax]0042F9B2  |.  64:8920       mov dword ptr fs:[eax],esp0042F9B5  |.  C705 50174300>mov dword ptr ds:[0x431750],0x290042F9BF  |.  8D55 F0       lea edx,[local.4]0042F9C2  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042F9C8  |.  E8 8BB0FEFF   call 0041AA580042F9CD  |.  8B45 F0       mov eax,[local.4]0042F9D0  |.  E8 DB40FDFF   call 00403AB00042F9D5  |.  A3 6C174300   mov dword ptr ds:[0x43176C],eax0042F9DA  |.  8D55 F0       lea edx,[local.4]0042F9DD  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042F9E3  |.  E8 70B0FEFF   call 0041AA580042F9E8  |.  8B45 F0       mov eax,[local.4]0042F9EB  |.  0FB600        movzx eax,byte ptr ds:[eax]0042F9EE  |.  8BF0          mov esi,eax0042F9F0  |.  C1E6 03       shl esi,0x30042F9F3  |.  2BF0          sub esi,eax0042F9F5  |.  8D55 EC       lea edx,[local.5]0042F9F8  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042F9FE  |.  E8 55B0FEFF   call 0041AA580042FA03  |.  8B45 EC       mov eax,[local.5]0042FA06  |.  0FB640 01     movzx eax,byte ptr ds:[eax+0x1]0042FA0A  |.  C1E0 04       shl eax,0x40042FA0D  |.  03F0          add esi,eax0042FA0F  |.  8935 54174300 mov dword ptr ds:[0x431754],esi0042FA15  |.  8D55 F0       lea edx,[local.4]0042FA18  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042FA1E  |.  E8 35B0FEFF   call 0041AA580042FA23  |.  8B45 F0       mov eax,[local.4]0042FA26  |.  0FB640 03     movzx eax,byte ptr ds:[eax+0x3]0042FA2A  |.  6BF0 0B       imul esi,eax,0xB0042FA2D  |.  8D55 EC       lea edx,[local.5]0042FA30  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042FA36  |.  E8 1DB0FEFF   call 0041AA580042FA3B  |.  8B45 EC       mov eax,[local.5]0042FA3E  |.  0FB640 02     movzx eax,byte ptr ds:[eax+0x2]0042FA42  |.  6BC0 0E       imul eax,eax,0xE0042FA45  |.  03F0          add esi,eax0042FA47  |.  8935 58174300 mov dword ptr ds:[0x431758],esi0042FA4D  |.  A1 6C174300   mov eax,dword ptr ds:[0x43176C]          ;  //NAME TAH0042FA52  |.  E8 D96EFDFF   call 00406930                            ;  关键call0042FA57  |.  83F8 04       cmp eax,0x4                              ;  判断name或者tag是否合格0042FA5A  |.  7D 1D         jge short 0042FA79                       ;  很明显 我们的长度合格0042FA5C  |.  6A 00         push 0x00042FA5E  |.  B9 74FB4200   mov ecx,0042FB74                         ;  Try Again!0042FA63  |.  BA 80FB4200   mov edx,0042FB80                         ;  Sorry , The serial is incorect !0042FA68  |.  A1 480A4300   mov eax,dword ptr ds:[0x430A48]0042FA6D  |.  8B00          mov eax,dword ptr ds:[eax]0042FA6F  |.  E8 FCA6FFFF   call 0042A1700042FA74  |.  E9 BE000000   jmp 0042FB370042FA79  |>  8D55 F0       lea edx,[local.4]0042FA7C  |.  8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]0042FA82  |.  E8 D1AFFEFF   call 0041AA580042FA87  |.  8B45 F0       mov eax,[local.4]                        ;  eax =  00DD2668 xiaozhu的地址0042FA8A  |.  0FB600        movzx eax,byte ptr ds:[eax]              ;  把第一个字符放进eax eax = 'x'0042FA8D  |.  F72D 50174300 imul dword ptr ds:[0x431750]             ;  *290042FA93  |.  A3 50174300   mov dword ptr ds:[0x431750],eax          ;  eax=0x78*0x29=0x13380042FA98  |.  A1 50174300   mov eax,dword ptr ds:[0x431750]0042FA9D  |.  0105 50174300 add dword ptr ds:[0x431750],eax          ;  eax=eax+eax  DS:[0X431750]=0X26700042FAA3  |.  8D45 FC       lea eax,[local.1]                        ;  ds:[local.1]=0012F9A40042FAA6  |.  BA ACFB4200   mov edx,0042FBAC                         ;  CW0042FAAB  |.  E8 583CFDFF   call 004037080042FAB0  |.  8D45 F8       lea eax,[local.2]0042FAB3  |.  BA B8FB4200   mov edx,0042FBB8                         ;  CRACKED0042FAB8  |.  E8 4B3CFDFF   call 004037080042FABD  |.  FF75 FC       push [local.1]                           ;  push CW0042FAC0  |.  68 C8FB4200   push 0042FBC8                            ;  -0042FAC5  |.  8D55 E8       lea edx,[local.6]                        ;  edx=12f9900042FAC8  |.  A1 50174300   mov eax,dword ptr ds:[0x431750]          ;  eax26700042FACD  |.  E8 466CFDFF   call 00406718                            ;  Stack ss:[0012F990]=00DD609C, (ASCII "9840")0042FAD2  |.  FF75 E8       push [local.6]0042FAD5  |.  68 C8FB4200   push 0042FBC8                            ;  -0042FADA  |.  FF75 F8       push [local.2]                           ;  push CRACKED0042FADD  |.  8D45 F4       lea eax,[local.3]0042FAE0  |.  BA 05000000   mov edx,0x50042FAE5  |.  E8 C23EFDFF   call 004039AC                            ;  附近的call 2 eax=0042FAEA0042FAEA  |.  8D55 F0       lea edx,[local.4]                        ;  edx 0012F9980042FAED  |.  8B83 E0010000 mov eax,dword ptr ds:[ebx+0x1E0]         ;  eax 00DD5E540042FAF3  |.  E8 60AFFEFF   call 0041AA58                            ;  附近的call 1 注册码 call0042FAF8  |.  8B55 F0       mov edx,[local.4]                        ;  edx 出现 用户密码 1231230042FAFB  |.  8B45 F4       mov eax,[local.3]                        ;  eax  出现正确密码0042FAFE  |.  E8 F93EFDFF   call 004039FC                            ;  strcmp0042FB03      75 1A         jnz short 0042FB1F                       ;  这个貌似是关键判断0042FB05  |.  6A 00         push 0x00042FB07  |.  B9 CCFB4200   mov ecx,0042FBCC                         ;  Congratz !!0042FB0C  |.  BA D8FB4200   mov edx,0042FBD8                         ;  Good job dude =)0042FB11  |.  A1 480A4300   mov eax,dword ptr ds:[0x430A48]0042FB16  |.  8B00          mov eax,dword ptr ds:[eax]0042FB18  |.  E8 53A6FFFF   call 0042A1700042FB1D  |.  EB 18         jmp short 0042FB370042FB1F  |>  6A 00         push 0x00042FB21  |.  B9 74FB4200   mov ecx,0042FB74                         ;  Try Again!0042FB26  |.  BA 80FB4200   mov edx,0042FB80                         ;  Sorry , The serial is incorect !0042FB2B  |.  A1 480A4300   mov eax,dword ptr ds:[0x430A48]0042FB30  |.  8B00          mov eax,dword ptr ds:[eax]0042FB32  |.  E8 39A6FFFF   call 0042A1700042FB37  |>  33C0          xor eax,eax

这里就是一点点求注册码的部分。  我看了很久,刚开始接触不是很懂。 看了大牛的总结 感觉是对的。

总结:取第一个字母的ASNI的数字,如xiaozhu中第一个字符1对应数字0x78,然后用它乘以0x29,结果再自增一倍(即x2),将得到的数字转为10进制的字符串,在前加上”CW-”,后加上”-CRACKED”,就组成了用户名对应的注册码。

当然这中间还有很多call需要跟进,这种逆向能力 我暂时还达不到。。。

既然算法知道了 注册机的编写问题应该不大了。。







0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美容院转让给别人客人要退钱怎么办 卖家毁约中介费担保费怎么办 天猫买东西店家不开增值税票怎么办 天猫专卖店品牌不授权了怎么办 临时京东账号被冻结买的东西怎么办 天猫强行退款给买家商家怎么办 淘宝店铺没交保证金被释放了怎么办 沭阳县地段生过了报名时间怎么办 淘宝买东西地址和收件人填错怎么办 才装修的房子马上要住怎么办 淘宝发货显示无效的发货人怎么办 微信位置和所在地位置不一样怎么办 qq号被冻结了短信发不出去怎么办 商户刷自己信息卡被冻结怎么办 天猫超市买的东西坏了怎么办 天猫超市买东西地址填错了怎么办 天猫超市地址填错了怎么办 天猫超市退货达不到包邮条件怎么办 保千里达令手机锁屏密码忘记怎么办 淘宝买的东西给的发票不见了怎么办 在天猫超市买到发霉怎么办 支付宝红包券金额消费不完怎么办 支付宝向对方发起收款不付怎么办 支付宝收款别人少付了怎么办 红牛领到50元加油优惠券怎么办用 苹果淘宝看评价图片看不清楚怎么办 淘宝账号账户体验中心有违规怎么办 淘宝买的东西需要寄回去维修怎么办 淘宝闪电退款了卖家不肯退了怎么办 云视听会员账号账号密码忘了怎么办 移动卡异地补卡忘记服务密码怎么办 欠我钱的人不接电话怎么办 苹果手机换屏升级系统了黑屏怎么办 苹果手机黑屏时接不到电话怎么办 手机上打电话的图标没了怎么办啊 阿巴町手表上的二维码不生成怎么办 速卖通几个月来搜索曝光很差怎么办 你我贷逾期3个月怎么办 手机放声音的地方进水了怎么办 手机放卡的地方坏了怎么办 京东购物申请退款卖家不同意怎么办