吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3642|回复: 2
收起左侧

[会员申请] 申请会员ID:xsd220062

[复制链接]
吾爱游客  发表于 2015-11-14 12:32

1、申请ID:xsd220062
2、个人邮箱:750378980@qq.com
3、一篇原创技术文章:

这篇拙文是我对happytown编写的CrackMe_0008的一些分析,废话不多直接进入正题。
  Peid载入后显示的是Nothing found 区段显示的是upx0,upx1,upx2,有可能被加壳了。
  Od载入后发现入口点一点不像upx的开头,估计被作者修改了开头。
  用peid的深度扫描发现是delphi写的,心里窃喜,请出dede神器。找到btnCheckClick事件,od Ctrl+G来到00455338处,下断。F9运行程序,随意输入帐号,密码也随意。然后就是单步分析。

首先密码有个判断是否是12位
004553D3  |.  BA 0C000000   mov edx,0xC
004553D8  |.  8B45 F4       mov eax,[local.3]
004553DB  |.  E8 54FBFFFF   call CrackMe_.00454F34  ; 进入,应该是判断密码是否12位
004553E0  |.  803B 00       cmp byte ptr ds:[ebx],0x0
004553E3      0F84 73050000 je CrackMe_.0045595C

这里是真正密码的计算并且与输入的密码判断
004553EC  |.  50            push eax
004553ED  |.  B9 06000000   mov ecx,0x6
004553F2  |.  BA 01000000   mov edx,0x1
004553F7  |.  8B06          mov eax,dword ptr ds:[esi]   读出作者事先定义的const类型字符串的首地址
004553F9  |.  E8 76EFFAFF   call CrackMe_.00404374  取出字符串中的第n个,n为需要判断的密码字符第n个
004553FE  |.  8B45 F8       mov eax,[local.2]    把字符的首地址给EAX
00455401  |.  E8 AEF8FFFF   call CrackMe_.00454CB4  计算字符的ASCII码累加结果放入EAX中,设为key1
00455406  |.  50            push eax
00455407  |.  8B45 FC       mov eax,[local.1]
0045540A  |.  E8 A5F8FFFF   call CrackMe_.00454CB4  计算帐号字符的ASCII码累加,设为key2
0045540F  |.  5A            pop edx
00455410  |.  E8 47FAFFFF   call CrackMe_.00454E5C  之前计算的key1和key2做xor运算,结果为key3
00455415  |.  BA 0A000000   mov edx,0xA
0045541A  |.  E8 45FAFFFF   call CrackMe_.00454E64  key3除以0xA,余数为k
0045541F  |.  8D55 F0       lea edx,[local.4]
00455422  |.  E8 F928FBFF   call CrackMe_.00407D20  k=k+0x30                   ;  
00455427  |.  8D45 EC       lea eax,[local.5]
0045542A  |.  50            push eax
0045542B  |.  B9 01000000   mov ecx,0x1
00455430  |.  BA 01000000   mov edx,0x1
00455435  |.  8B45 F4       mov eax,[local.3]
00455438  |.  E8 37EFFAFF   call CrackMe_.00404374  取出密码的第n位字符的ascii码值
0045543D  |.  8B55 F0       mov edx,[local.4]
00455440  |.  8B45 EC       mov eax,[local.5]
00455443  |.  E8 4CFBFFFF   call CrackMe_.00454F94  判断k与密码第n位字符的ascii码值是否相同,否则悲剧。
00455448  |.  803B 00       cmp byte ptr ds:[ebx],0x0
0045544B      0F84 0B050000 je CrackMe_.0045595C   

后面的11次判断与上述类似,只是每次取的字符串都不相同,字符串如下
解释下,字符串就是第一次取ORACLE,第二次取BenQ。
"ORACLE-BenQ-HP-IBM-SIEMENS-CISCO SYSTEMS-intel-Sun-DELL-SYBASE-Maxtor-lenovo"

如果上面分析没看懂,可以看下面我对这个算法的总结(我知道我写得比较乱)
设const为所取字符,num为帐号,consult为结果
计算const的每个字符ascii码累加=x
计算num的每个字符ascii码累加=y
Xor x,y
x=x%0xA
x=x+0x30
x就是密码的第n位的ascii码

当然,判断还未结束
当判断完12位密码后,来到第13个判断
004558C9  |.  E8 DAF3FFFF   call CrackMe_.00454CA8  F7进入
004558CE  |.  3D FE010000   cmp eax,0x1FE
004558D3      0F85 83000000 jnz CrackMe_.0045595C

发现F7进入的函数只是取了一个值(0x1BA),于是在这个地址上下硬件写入断点,Ctrl+F2,F9多次运行,找到
00439BB8  |.  6A 14         push    14              /Flags= SWP_NOZORDER|SWP_NOACTIVATE
00439BBA  |.  8B45 08       mov     eax, dword ptr [ebp+8]        |
00439BBD  |.  50            push    eax                           Height
00439BBE  |.  8B45 0C       mov     eax, dword ptr [ebp+C]           ; |
00439BC1  |.  50            push    eax                        Width
00439BC2  |.  57            push    edi                        Y
00439BC3  |.  56            push    esi                     X = 1A3 (419.)
00439BC4  |.  6A 00         push    0                         InsertAfter = HWND_TOP
00439BC6  |.  8B83 80010000 mov     eax, dword ptr [ebx+180]         ; |
00439BCC  |.  50            push    eax                         hWnd
00439BCD  |.  E8 4ECBFCFF   call    <jmp.&user32.SetWindowPos>       ; \SetWindowPos

Push  edi 也就是窗口的y坐标是0x1BA,所以,以此可以发现窗口坐标是否为0x1FE既是最后一个判断




发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2015-11-17 12:15
未达到申请要求,可以关注论坛微信等待开放注册通知。http://bbs.pediy.com/showthread.php?t=184003 是你本人?
头像被屏蔽
吾是天天 发表于 2015-11-29 08:01
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 22:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表