吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3403|回复: 9
收起左侧

[原创] 160 CrackMe 003

[复制链接]
Teak 发表于 2019-3-4 20:36
本帖最后由 Teak 于 2019-3-30 20:40 编辑

160Crackme之003
1.        F9 运行,然后输入账户和密码11111  12345 ,如下图所示
   1.png

2. F12暂停,点击k,寻找这个弹窗的函数,如下图所示:
   2.png

在rtcMsgBox的地址右键显示调用,在反汇编窗口中跟随,鼠标往上滚,如下图所示
3.png

3.鼠标继续往上走,找到push ebp的位置,然后从上到下F8大法,如下图所示:
4.png

4. 然后继续运行程序,此时在push ebp处停下,F8步过走一遍,寻找输入字符11111和12345,如下图所示:
5.png

F8的同时,注意观察堆栈窗口,看是否产生类似密钥的字符串,下图是我单步到弹窗函数的过程中发现的字符串有“11111” “444489” “444491” “1333473” “1333471” “1333486”,最终我将1333486输入到密码一栏得到正确的结果,在11111,444489,444491,1333473, 1333471,1333486生成的地址下了断点,猜测这些就是生成密码的关键位置,如下图所示,是堆栈窗口生成的密码:
6.png

5.算法分析过程 : 重点是注意堆栈窗口产生的数字及其变化,需要反复调试几次的
__vbaLenBstr:计算字符串长度
#rtcAnsiValueBstr_516:取字符串的第一个字符的ascii码
__vbaStrI4:16进制转10进制
1) 从“11111”到“444489”关键汇编代码如下:
[Asm] 纯文本查看 复制代码
004081E3   .  FF15 18B14000 call dword ptr ds:[<&MSVBVM50.__vbaHresu>;  msvbvm50.__vbaHresultCheckObj
004081E9   >  8B95 50FFFFFF mov edx,dword ptr ss:[ebp-0xB0]
004081EF   .  8B45 E4       mov eax,dword ptr ss:[ebp-0x1C]          ;  eax=1622cc [eax]="11111"
004081F2   .  50            push eax                                 ; /String = "11111"
004081F3   .  8B1A          mov ebx,dword ptr ds:[edx]               ; |
004081F5   .  FF15 F8B04000 call dword ptr ds:[<&MSVBVM50.__vbaLenBs>; \__vbaLenBstr
004081FB   .  8BF8          mov edi,eax                              ;  edi=5,\call的作用是计算字符串长度
004081FD   .  8B4D E8       mov ecx,dword ptr ss:[ebp-0x18]          ;  ecx=163224 [ecx]="11111"
00408200   .  69FF 385B0100 imul edi,edi,0x15B38                     ;  edi=5*0x15b38=6c818
00408206   .  51            push ecx                                 ; /String = "?"
00408207   .  0F80 B7050000 jo AfKayAs_.004087C4                     ; |
0040820D   .  FF15 0CB14000 call dword ptr ds:[<&MSVBVM50.#rtcAnsiVa>; \rtcAnsiValueBstr
00408213   .  0FBFD0        movsx edx,ax                             ;  edx=31 \call的作用是提取第一个字符串的ascii码
00408216   .  03FA          add edi,edx                              ;  edi=6c818+31=6c849
00408218   .  0F80 A6050000 jo AfKayAs_.004087C4
0040821E   .  57            push edi
0040821F   .  FF15 F4B04000 call dword ptr ds:[<&MSVBVM50.__vbaStrI4>;  msvbvm50.__vbaStrI4
00408225   .  8BD0          mov edx,eax                              ;  eax=1622F4 [eax]="444489" \call的作用,16进制转10进制
00408227   .  8D4D E0       lea ecx,dword ptr ss:[ebp-0x20]
0040822A   .  FF15 94B14000 call dword ptr ds:[<&MSVBVM50.__vbaStrMo>;  msvbvm50.__vbaStrMove
  

核心:s1=len(str)*0x15b38+ord(str[0])
        
2)从“444489”到“444491”汇编代码如下:
浮点数这一块我有点薄弱,边查指令边学
[Asm] 纯文本查看 复制代码
004082E6   .  52            push edx                                 ;  edx=1622f4 [edx]=“444489”
004082E7   .  8B19          mov ebx,dword ptr ds:[ecx]
004082E9   .  FF15 74B14000 call dword ptr ds:[<&MSVBVM50.__vbaR8Str>;  msvbvm50.__vbaR8Str
004082EF   .  D905 08104000 fld dword ptr ds:[0x401008]              ;  [0x401008]=41200000 \call的作用是将444489变为浮点数444489.00000000000000
004082F5   .  833D 00904000>cmp dword ptr ds:[0x409000],0x0          ;  fld指令的意思是入ST0寄存器,4200000转化为浮点数10.0
004082FC   .  75 08         jnz short AfKayAs_.00408306
004082FE   .  D835 0C104000 fdiv dword ptr ds:[0x40100C]             ;  浮点数操作10.0/浮点数5.0=2.0
00408304   .  EB 0B         jmp short AfKayAs_.00408311
00408306   >  FF35 0C104000 push dword ptr ds:[0x40100C]
0040830C   .  E8 578DFFFF   call <jmp.&MSVBVM50._adj_fdiv_m32>
00408311   >  83EC 08       sub esp,0x8                              ;  esp=12f3e8
00408314   .  DFE0          fstsw ax                                 ;  eax=3100 注意观察FPU寄存器
00408316   .  A8 0D         test al,0xD
00408318   .  0F85 A1040000 jnz AfKayAs_.004087BF
0040831E   .  DEC1          faddp st(1),st                           ;  ST0=ST1+ST0=444489.0+2.0=444491.0
00408320   .  DFE0          fstsw ax
00408322   .  A8 0D         test al,0xD                              ;  测第13位是否为1
   
     
        核心:s2=s1+10.0/5.0

3)从“444491” 到“1333473”到“1333471”汇编代码如下:
[Asm] 纯文本查看 复制代码
004083F2   .  52            push edx                                 ;  [edx]="444491"
004083F3   .  8B19          mov ebx,dword ptr ds:[ecx]
004083F5   .  FF15 74B14000 call dword ptr ds:[<&MSVBVM50.__vbaR8Str>;  msvbvm50.__vbaR8Str
004083FB   .  DC0D 10104000 fmul qword ptr ds:[0x401010]             ;  444491.0*3.0=1333473.0
00408401   .  83EC 08       sub esp,0x8
00408404   .  DC25 18104000 fsub qword ptr ds:[0x401018]             ;  1333473.0-2.0=1333471.0
0040840A   .  DFE0          fstsw ax                                 ;  ax=3900
0040840C   .  A8 0D         test al,0xD
0040840E   .  0F85 AB030000 jnz AfKayAs_.004087BF
00408414   .  DD1C24        fstp qword ptr ss:[esp]                  ;  将1333471(st0)放入esp指向的地址
00408417   .  FF15 48B14000 call dword ptr ds:[<&MSVBVM50.__vbaStrR8>;  msvbvm50.__vbaStrR8
0040841D   .  8BD0          mov edx,eax                              ;  [edx]="1333471"

        核心:s3=s2*3.0-2.0


4)最后一步,从“1333471” 到“1333486”的汇编代码如下:
[Asm] 纯文本查看 复制代码
004084DC   .  52            push edx                                 ;  [edx]="1333471"
004084DD   .  8B19          mov ebx,dword ptr ds:[ecx]
004084DF   .  FF15 74B14000 call dword ptr ds:[<&MSVBVM50.__vbaR8Str>;  msvbvm50.__vbaR8Str
004084E5   .  DC25 20104000 fsub qword ptr ds:[0x401020]             ;  ST0=1333471-(-15)=1333486.0
004084EB   .  83EC 08       sub esp,0x8
004084EE   .  DFE0          fstsw ax                                 ;  ax=3900
004084F0   .  A8 0D         test al,0xD
   

   核心:s4=s3-(-15)

Py3:
        代码的运行流程如下:
str=input("请随便输入一个账户,如11111:")
s1=len(str)*0x15b38+ord(str[0])
s2=s1+10.0/5.0
s3=s2*3.0-2.0
s4=s3-(-15)
print("密码是%d"%s4)

上述若有不到之处,望指正

免费评分

参与人数 2威望 +1 吾爱币 +8 热心值 +2 收起 理由
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zj1977lsz + 1 + 1 用心讨论,共获提升!

查看全部评分

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

灿若星辰 发表于 2019-3-4 21:04
本帖最后由 灿若星辰 于 2019-3-4 21:07 编辑

看不懂,好像很厉害的样子
 楼主| Teak 发表于 2019-3-4 21:22
灿若星辰 发表于 2019-3-4 21:04
看不懂,好像很厉害的样子

一点都不难,你仔细去调试一下,这里面其实就是涉及到浮点计算的汇编命令,但是我不熟,花的时间有点长
wangzhenuen 发表于 2019-3-5 09:52
xwllzz77 发表于 2019-3-5 14:52
感谢分享
zj1977lsz 发表于 2019-3-5 15:46
我也在学,没有你那么厉害,谢谢指导!
 楼主| Teak 发表于 2019-3-5 18:09
zj1977lsz 发表于 2019-3-5 15:46
我也在学,没有你那么厉害,谢谢指导!

没你说的这么夸张,互相学习而已
埖落 发表于 2019-3-6 09:17
看看 学习下。
Hmily 发表于 2019-3-22 18:23
@Teak 代码可以用代码框处理一下会好看很多。
 楼主| Teak 发表于 2019-3-24 11:52 来自手机
Hmily 发表于 2019-3-22 18:23
@Teak 代码可以用代码框处理一下会好看很多。

回头我试试看,这段时间护网有点忙
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 04:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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